Arduino Guide
The Plexus C SDK works with Arduino-compatible boards that have WiFi and HTTP support. This guide uses an ESP32 with the Arduino framework.
Prerequisites
- Arduino IDE or PlatformIO
- ESP32 board with WiFi (e.g., ESP32 DevKit, ESP32-S3)
- A Plexus API key from app.plexus.company (opens in a new tab)
Step 1: Install the SDK
Arduino Library Manager (recommended)
Open Arduino IDE → Sketch → Include Library → Manage Libraries. Search for "Plexus SDK" and click Install.
PlatformIO
Add to your platformio.ini:
lib_deps = plexus-sdkManual Installation
Copy the src/ directory into your Arduino project as a library:
your-sketch/
├── your-sketch.ino
└── libraries/
└── Plexus/
├── plexus.h
├── plexus.c
├── plexus_config.h
├── plexus_json.c
└── plexus_hal_arduino.cpp # from hal/arduino/Step 2: Arduino Sketch
#include <WiFi.h>
#include "plexus.h"
const char* WIFI_SSID = "YourWiFiSSID";
const char* WIFI_PASSWORD = "YourWiFiPassword";
const char* API_KEY = "plx_xxxxx";
const char* SOURCE_ID = "arduino-001";
plexus_client_t* px = NULL;
void setup() {
Serial.begin(115200);
// Connect to WiFi
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" connected!");
// Initialize Plexus
px = plexus_init(API_KEY, SOURCE_ID);
if (!px) {
Serial.println("ERROR: Failed to init Plexus");
return;
}
// Optional: adjust flush timing
plexus_set_flush_interval(px, 5000); // flush every 5 seconds
Serial.printf("Plexus SDK v%s ready (client: %u bytes)\n",
plexus_version(), (unsigned)plexus_client_size());
}
void loop() {
if (!px) return;
// Read your sensors
float temperature = analogRead(A0) * 0.1; // example
float humidity = analogRead(A1) * 0.1;
// Queue metrics
plexus_send(px, "temperature", temperature);
plexus_send(px, "humidity", humidity);
// Auto-flush based on interval and count
plexus_err_t err = plexus_tick(px);
if (err != PLEXUS_OK) {
Serial.printf("Error: %s\n", plexus_strerror(err));
}
delay(1000);
}How plexus_tick() Works
Call plexus_tick() once per loop iteration. It checks one condition:
- Time interval -- If the configured interval (default 5 seconds) has elapsed since the last flush, it flushes.
Count-based auto-flush (default: 16 metrics) happens automatically inside plexus_send_*() calls. You never need to call plexus_flush() manually when using plexus_tick(), though you can if you want to force an immediate send.
Sending Different Value Types
// Numbers
plexus_send(px, "temperature", 23.5);
// Strings
plexus_send_string(px, "status", "OK");
// Booleans
plexus_send_bool(px, "heater.on", true);
// Numbers with tags
const char* keys[] = {"sensor", "floor"};
const char* values[] = {"bme280", "2"};
plexus_send_number_tagged(px, "temperature", 23.5, keys, values, 2);HTTPS
The Arduino HAL uses WiFiClientSecure with .setInsecure() (skips certificate verification). This works for development but is not secure for production.
For production, pin the server certificate:
WiFiClientSecure client;
client.setCACert(root_ca); // PEM-encoded root CAYou will need to modify plexus_hal_arduino.cpp to replace client.setInsecure() with client.setCACert().
Next Steps
- ESP32 Guide -- Full ESP-IDF walkthrough with NTP and WiFi reconnect
- STM32 Guide -- Use the C SDK with STM32 and FreeRTOS
- API Reference -- Full function reference
- Memory Configuration -- Reduce RAM usage for constrained boards