Box IO

Self-hosted IoT for Arduino and ESP32.

Circle meter

A gauge arc from a start degree to an end degree. 0 is straight up and degrees go clockwise. The default runs from the lower left to the lower right.

Sample pin: V2

Set it up on the server

  1. Sign in to the Box IO dashboard and open the project that uses this device key.
  2. Turn on Edit.
  3. In Edit, add Circle meter.
  4. Set Virtual pin to 2.
  5. Set Min and Max to the same range the sketch will send. The sample below is 0 to 200.
  6. Set Start and End in degrees, from 0 to 360. 0 is straight up. 90 is the right, 180 is the bottom, and 270 is the left. The colored arc travels clockwise from Start to End.
  7. Leave Start at 225 and End at 135 for a normal gauge: it begins at the lower left and ends at the lower right. Set both to the same number, or use 0 and 360, for a full circle.
  8. Choose Color by. Percentage of max uses 0–100. Raw data values uses the number itself.
  9. Use Add division and Remove under Color by. One division is a single color for the whole gauge. Fifteen is the most. With two or more, the number beside each color is the point where that color starts.
  10. Save the layout, then open Live.
  11. Flash the sketch below with the same device key, host, and port 5923. Keep BoxIO.run() in loop().

Properties

Sketch values are always strings, including numbers: BoxIO.setProperty(V2, "max", "200").

PropertyWhere to set itFormatExampleEffect
startDegDashboard or sketchDegrees, 0 to 360225Where the minimum sits. 0 is straight up and degrees go clockwise. 225 is the lower left.
endDegDashboard or sketchDegrees, 0 to 360135Where the maximum sits. 135 is the lower right. The fill travels clockwise from startDeg to endDeg.
minDashboard or sketchNumber0Low end of the gauge.
maxDashboard or sketchNumber200High end of the gauge. The arc or bar is the span from min to max.
colorDashboard or sketch#RRGGBB#2ee0c5Color used when no color stop matches.
colorModeDashboard or sketchpercentage or valuespercentagepercentage compares stops to 0–100 percent of the min/max span. values compares stops to the raw number.
colorStopsDashboard or sketchat:#hex joined by semicolons0:#2ee0c5;60:#f5b942;85:#ff5d73The highest stop that is still at or below the reading wins. In percentage mode, 60 means 60 percent. In values mode, 60 means the number 60.
labelDashboard or sketchPlain textPumpCaption above the widget. On a round or oval button this is the caption, not the word on the button face.
hideLabelDashboardOn or offcheckedHides the caption. Button face text, meter numbers, and label text stay visible.
fontSizeDashboardWhole number 8 to 160, or blank for automatic size28Text size in pixels inside the widget.
opacityDashboard10% to 100%70%Lets an overlapping widget show through. 100% is solid.

Formatting

Sketch

Paste the device key over bx_paste_your_device_key_here. Wi-Fi boards include BoxIOEsp32.h. Ethernet boards use the same calls with an EthernetClient.

#define BOXIO_AUTH "bx_paste_your_device_key_here"
#define WIFI_SSID  "your-ssid"
#define WIFI_PASS  "your-password"
#define BOXIO_HOST "localhost"
#define BOXIO_PORT 5923

#include <BoxIOEsp32.h>

void setup() {
  BoxIO.begin(BOXIO_AUTH, WIFI_SSID, WIFI_PASS, BOXIO_HOST, BOXIO_PORT);
BoxIO.setProperty(V2, "label", "Circle Lab");
  BoxIO.setProperty(V2, "min", "0");
  BoxIO.setProperty(V2, "max", "200");
  BoxIO.setProperty(V2, "startDeg", "225");
  BoxIO.setProperty(V2, "endDeg", "135");
  BoxIO.setProperty(V2, "color", "#2ee0c5");
  BoxIO.setProperty(V2, "colorMode", "values");
  BoxIO.setProperty(V2, "colorStops", "0:#2ee0c5;50:#f5b942;100:#ff5d73");
  BoxIO.virtualWrite(V2, 72);
}

void loop() {
  BoxIO.run();
static uint32_t last = 0;
  if (millis() - last < 1000) return;
  last = millis();
  static int n = 0;
  n = (n + 3) % 180;
  BoxIO.virtualWrite(V2, n);
}

What you should see

The arc starts at the lower left and fills clockwise toward the lower right as the number climbs. The color changes when the reading passes a stop. A sketch setProperty for startDeg, endDeg, min, max, or colorStops replaces the dashboard value until you edit that field again.