ESP32 Setup
ESP32 Setup Guide
Section titled “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 with a registered device
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 <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 = 1883;const char* device_id = "YOUR_DEVICE_ID";const char* access_token = "YOUR_ACCESS_TOKEN";
WiFiClient 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(); 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 = "devices/" + String(device_id) + "/telemetry"; 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 = "devices/" + String(device_id) + "/telemetry"; 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 = "devices/" + String(device_id) + "/telemetry"; 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”- MQTT Topics & Payloads - Learn the message format
- Dashboard Widgets - Visualize your data
- Set Up Alerts - Get notified on conditions