Quick Start · ~10 minutes

Your first live dashboard

Connect your board, send a sensor value to Virtuino Cloud, and watch it update live — then build a dashboard and add an automation rule. Just install the library, paste the sketch and flash.

Create free account Jump to the code

Create your account & sign in

Register for a free account and log in to the console.

Get your API key

In the console go to Keys & Sub Users and copy your HTTP API key — you'll paste it into the sketch.

Create a device & fields

Add a device (e.g. MyDevice) and its fields (e.g. temperature) from the console. The device name and field names in your sketch must match exactly.

Install the VirtuinoCloud library

The VirtuinoCloud library handles HTTPS, JSON and multi-board support automatically. Install it from the Arduino Library Manager in three steps:

1
Open Sketch → Include Library → Manage Libraries, search for VirtuinoCloud and click Install.
2
In the same Library Manager search for ArduinoJson by Benoit Blanchon and install it.
3
WiFiNINA boards only (Uno WiFi Rev2, MKR WiFi 1010, Nano 33 IoT, Nano RP2040): also install ArduinoHttpClient by Arduino.
ESP8266 only: make sure the board core is version 3.x (Tools → Boards Manager → esp8266 by ESP8266 Community → update).
Open source on GitHub Full source code, all examples and documentation at iliaslamprou/VirtuinoCloud
View on GitHub

Flash your board

Open the Arduino IDE, select your board, paste the sketch below, fill in your WiFi credentials, API key and device name, then upload. It sends a temperature value every 10 seconds.

#include <WiFi.h>              // ESP32
#include <VirtuinoCloud.h>

const char* SSID     = "YOUR_WIFI_NAME";
const char* PASSWORD = "YOUR_WIFI_PASSWORD";
const char* API_KEY  = "YOUR_API_KEY";    // Console -> API & Connections
const char* DEVICE   = "MyDevice";        // must match device name in Console exactly

VirtuinoCloud cloud(API_KEY);

void setup() {
    Serial.begin(115200);
    WiFi.begin(SSID, PASSWORD);
    while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
    Serial.println("\nWiFi connected");
}

void loop() {
    float temperature = 20.0 + (millis() % 100) / 10.0;   // replace with a real sensor read

    // publish=true also pushes to MQTT so live dashboard widgets update instantly
    bool ok = cloud.write(DEVICE, "temperature", temperature, true);
    Serial.println(ok ? "Uploaded OK" : "Upload failed — check WiFi and API key");

    delay(10000);   // send every 10 seconds
}
#include <ESP8266WiFi.h>    // ESP8266 — use this instead of <WiFi.h>
#include <VirtuinoCloud.h>   // also requires ESP8266 core >= 3.x

const char* SSID     = "YOUR_WIFI_NAME";
const char* PASSWORD = "YOUR_WIFI_PASSWORD";
const char* API_KEY  = "YOUR_API_KEY";    // Console -> API & Connections
const char* DEVICE   = "MyDevice";        // must match device name in Console exactly

VirtuinoCloud cloud(API_KEY);

void setup() {
    Serial.begin(115200);
    WiFi.begin(SSID, PASSWORD);
    while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
    Serial.println("\nWiFi connected");
}

void loop() {
    float temperature = 20.0 + (millis() % 100) / 10.0;   // replace with a real sensor read

    bool ok = cloud.write(DEVICE, "temperature", temperature, true);
    Serial.println(ok ? "Uploaded OK" : "Upload failed — check WiFi and API key");

    delay(10000);   // send every 10 seconds
}
#include <WiFiNINA.h>        // WiFiNINA boards: Uno WiFi Rev2, MKR WiFi 1010,
#include <VirtuinoCloud.h>   //                  Nano 33 IoT, Nano RP2040 Connect
                              // also requires ArduinoHttpClient from Library Manager

const char* SSID     = "YOUR_WIFI_NAME";
const char* PASSWORD = "YOUR_WIFI_PASSWORD";
const char* API_KEY  = "YOUR_API_KEY";    // Console -> API & Connections
const char* DEVICE   = "MyDevice";        // must match device name in Console exactly

VirtuinoCloud cloud(API_KEY);

void setup() {
    Serial.begin(115200);
    WiFi.begin(SSID, PASSWORD);
    while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
    Serial.println("\nWiFi connected");
}

void loop() {
    float temperature = 20.0 + (millis() % 100) / 10.0;   // replace with a real sensor read

    bool ok = cloud.write(DEVICE, "temperature", temperature, true);
    Serial.println(ok ? "Uploaded OK" : "Upload failed — check WiFi and API key");

    delay(10000);   // send every 10 seconds
}
Want to send multiple fields in one request, read values back, or control GPIOs from the dashboard? See the full example library (8 examples with block write, relay control, thermostat and more). Prefer raw HTTP without a library? See the HTTP API Guide. Using MQTT? See the MQTT guide.

Run it & check the console

Open the Serial Monitor (115200 baud) — you should see Uploaded OK. Then open the Data Monitor in the console to see your values arriving live.

Build your dashboard

Create a dashboard, add a widget (gauge, chart, value display…) and bind it to your temperature field. Your live data appears instantly.

Add a rule (automation)

Make it smart: add a rule such as "if temperature > 30 °C, send me an email" — or trigger another device, run a schedule, or execute a script.

Start now — it's free