Documentacao
ESP32 e similares
Guia pratico para firmwares Arduino/PlatformIO conectarem ESP32, ESP32-C3, ESP8266 e gateways RF ao IoTsys.
Bibliotecas
lib_deps =
knolleary/PubSubClient@^2.8
bblanchon/ArduinoJson@^7.4.2
sui77/rc-switch@^2.6.4
Config basica
#define WIFI_SSID "sua-rede"
#define WIFI_PASS "sua-senha"
#define MQTT_HOST "mqtt.iotsys.com.br"
#define MQTT_PORT 1883
#define MQTT_USERNAME "usuario_mqtt"
#define MQTT_PASSWORD "senha_mqtt"
#define TOPIC_COMMAND "tenants/{tenant_id}/devices/{device_id}/command"
#define TOPIC_STATE "tenants/{tenant_id}/devices/{device_id}/state"
#define TOPIC_AVAILABILITY "tenants/{tenant_id}/devices/{device_id}/availability"
Loop MQTT minimo
#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
WiFiClient wifiClient;
PubSubClient mqtt(wifiClient);
void publishState(const char *powerState) {
StaticJsonDocument<128> doc;
doc["power_state"] = powerState;
char payload[128];
size_t size = serializeJson(doc, payload);
mqtt.publish(TOPIC_STATE, payload, size);
}
void onMessage(char *topic, byte *payload, unsigned int length) {
StaticJsonDocument<256> doc;
if (deserializeJson(doc, payload, length)) return;
const char *type = doc["type"] | "";
const char *value = doc["value"] | "";
if (strcmp(type, "power") != 0) return;
if (strcmp(value, "ON") == 0) {
// acione relay, dimmer, RF, IR ou GPIO aqui
publishState("ON");
}
if (strcmp(value, "OFF") == 0) {
// desligue o hardware aqui
publishState("OFF");
}
}
Reconexao
void connectMqtt() {
while (!mqtt.connected()) {
String clientId = "iotsys-esp32-" + String((uint32_t)ESP.getEfuseMac(), HEX);
if (mqtt.connect(clientId.c_str(), MQTT_USERNAME, MQTT_PASSWORD)) {
mqtt.subscribe(TOPIC_COMMAND, 1);
mqtt.publish(TOPIC_AVAILABILITY, "online", true);
return;
}
delay(3000);
}
}
void loop() {
if (!mqtt.connected()) connectMqtt();
mqtt.loop();
}
Checklist de producao
- Use client ID unico por placa.
- Configure watchdog para recuperar travamentos.
- Reporte estado apenas apos confirmar a acao fisica.
- Evite delay longo dentro do callback MQTT.
- Separe credenciais por tenant, por dispositivo ou por gateway.
- Para gateways RF/IR, publique estado conforme o comando enviado e registre limitacoes fisicas do equipamento.