ESP32 Setup Guide
Connect your ESP32 microcontroller to SiliconWit.io using MQTT.
Requirements
Section titled “Requirements”- ESP32 development board
- Arduino IDE or PlatformIO
- WiFi network
- SiliconWit.io account
Create Your Device on SiliconWit.io
Section titled “Create Your Device on SiliconWit.io”- Log in to siliconwit.io and go to Devices → Add Device
- Choose a template or click Start from scratch
- Fill in:
- Device Name: e.g., “ESP32 Sensor”
- Device Type: Sensor
- Data Interval: 10 seconds (for testing)
- In the Data Fields section, click Import and paste:
[ { "name": "temperature", "label": "Temperature", "unit": "°C" }, { "name": "humidity", "label": "Humidity", "unit": "%" }]- Click Validate, then Import
- Click Create Device
- Copy your Device ID (format:
SWD-XXXXXX) and Access Token from the device page
See the Field Schema guide for nested fields, roles, and more examples.
Arduino IDE Setup
Section titled “Arduino IDE Setup”Install ESP32 Board Support
Section titled “Install ESP32 Board Support”- Open Arduino IDE
- Go to File → Preferences
- Add to “Additional Board Manager URLs”:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
- Go to Tools → Board → Boards Manager
- Search for “esp32” and install
Install Required Libraries
Section titled “Install Required Libraries”Install these libraries via Sketch → Include Library → Manage Libraries:
- PubSubClient - MQTT client library
- ArduinoJson - JSON parsing (optional but recommended)
Basic Connection Example
Section titled “Basic Connection Example”#include <WiFi.h>#include <WiFiClientSecure.h>#include <PubSubClient.h>
// WiFi credentialsconst char* ssid = "YOUR_WIFI_SSID";const char* password = "YOUR_WIFI_PASSWORD";
// SiliconWit.io MQTT settingsconst char* mqtt_server = "mqtt.siliconwit.io";const int mqtt_port = 8883;const char* device_id = "SWD-XXXXXX"; // Replace with your Device IDconst char* access_token = "your-access-token"; // Replace with your Access Token
WiFiClientSecure espClient;PubSubClient client(espClient);
void setup_wifi() { delay(10); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP());}
void reconnect() { while (!client.connected()) { Serial.print("Connecting to MQTT...");
if (client.connect(device_id, device_id, access_token)) { Serial.println("connected"); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" retrying in 5 seconds"); delay(5000); } }}
void setup() { Serial.begin(115200); setup_wifi(); espClient.setInsecure(); // For testing - use setCACert() in production client.setServer(mqtt_server, mqtt_port);}
void loop() { if (!client.connected()) { reconnect(); } client.loop();
// Send data every 10 seconds static unsigned long lastMsg = 0; if (millis() - lastMsg > 10000) { lastMsg = millis();
// Create JSON payload String payload = "{\"temperature\":25.5,\"humidity\":60}";
// Publish to telemetry topic String topic = "d/" + String(device_id) + "/t"; client.publish(topic.c_str(), payload.c_str());
Serial.println("Data sent: " + payload); }}Secure Connection (TLS)
Section titled “Secure Connection (TLS)”For production, use TLS encryption:
#include <WiFiClientSecure.h>
WiFiClientSecure espClient;PubSubClient client(espClient);
void setup() { // ... WiFi setup ...
espClient.setInsecure(); // For testing only // For production, use: espClient.setCACert(root_ca);
client.setServer(mqtt_server, 8883); // TLS port}With DHT Temperature Sensor
Section titled “With DHT Temperature Sensor”#include <WiFi.h>#include <PubSubClient.h>#include <DHT.h>
#define DHTPIN 4#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// ... WiFi and MQTT setup ...
void loop() { if (!client.connected()) { reconnect(); } client.loop();
static unsigned long lastMsg = 0; if (millis() - lastMsg > 30000) { lastMsg = millis();
float temp = dht.readTemperature(); float hum = dht.readHumidity();
if (!isnan(temp) && !isnan(hum)) { String payload = "{\"temperature\":" + String(temp) + ",\"humidity\":" + String(hum) + "}";
String topic = "d/" + String(device_id) + "/t"; client.publish(topic.c_str(), payload.c_str()); } }}Deep Sleep for Battery Power
Section titled “Deep Sleep for Battery Power”#define uS_TO_S_FACTOR 1000000#define TIME_TO_SLEEP 300 // 5 minutes
void setup() { Serial.begin(115200);
setup_wifi(); client.setServer(mqtt_server, mqtt_port);
if (client.connect(device_id, device_id, access_token)) { // Read and send data String payload = "{\"temperature\":25.5}"; String topic = "d/" + String(device_id) + "/t"; client.publish(topic.c_str(), payload.c_str());
delay(100); // Allow message to send client.disconnect(); }
// Go to sleep esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR); esp_deep_sleep_start();}
void loop() { // Never reached}Troubleshooting
Section titled “Troubleshooting”Connection Issues
Section titled “Connection Issues”| Problem | Solution |
|---|---|
| WiFi won’t connect | Check SSID/password, ensure 2.4GHz network |
| MQTT connection fails | Verify device ID and access token |
| Messages not appearing | Check topic format matches dashboard |
Debug Output
Section titled “Debug Output”Enable verbose logging:
Serial.setDebugOutput(true);Next Steps
Section titled “Next Steps”- ESP32 Relay Control - Control a relay from the dashboard (actuator quick-start)
- MQTT Topics & Payloads - Learn the message format
- Set Up Alerts - Get notified on conditions