C SDK
Arduino

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

Step 1: Install the SDK

Arduino Library Manager (recommended)

Open Arduino IDE → SketchInclude LibraryManage Libraries. Search for "Plexus SDK" and click Install.

PlatformIO

Add to your platformio.ini:

lib_deps = plexus-sdk

Manual 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:

  1. 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 CA

You will need to modify plexus_hal_arduino.cpp to replace client.setInsecure() with client.setCACert().

Next Steps