ESP

Codigo simples para demostrar a leitura das portas analógicas e publicação em formato Json via MQTT

MqqtJson.ino

#include "common.h"

void setup() {
  Serial.begin(9600);
  setup_wifi();
  client.setServer(mqtt_server, 1883);
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  
  client.loop();
  
  sensor_t sensor = readSensor();
  String jsonData = getJson(sensor);

  Serial.println(jsonData);
  client.publish(topic, jsonData.c_str());

  delay(10000);
}

common.h

#ifndef __COMMON_H__
#define __COMMON_H__

#include <WiFi.h>
#include <PubSubClient.h>

const char* ssid = "SEU_SSID";               // Substitua pelo seu SSID
const char* password = "SUA_SENHA";          // Substitua pela senha do Wi-Fi
const char* mqtt_server = "SEU_BROKER_MQTT"; // Substitua pelo endereço do broker MQTT
const char* mqtt_topic = "sensores/dados";   // Tópico MQTT para envio dos dados

WiFiClient espClient;
PubSubClient client(espClient);

typedef struct {
  unsigned int a0 : 10;
  unsigned int a1 : 10;
  unsigned int a2 : 10;
  unsigned int a3 : 10;
} sensor_t;

void setup_wifi();
void reconnect();
sensor_t readSensor();
String getJson(sensor_t sensor);

#endif // __COMMON_H__

common.ino

#include "common.h"

void setup_wifi() {
  Serial.print("Conectando ao WiFi...");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("WiFi conectado!");
}

void reconnect() {
  while (!client.connected()) {
    Serial.print("Conectando ao MQTT...");
    if (client.connect("ESP32Client")) {
      Serial.println("Conectado!");
    } else {
      Serial.print("Falha. Código: ");
      Serial.print(client.state());
      Serial.println(" Tentando novamente em 5 segundos...");
      delay(5000);
    }
  }
}

sensor_t readSensor() {
  sensor_t sensor;
  
  sensor.a0 = analogRead(A0); delay(50);
  sensor.a1 = analogRead(A1); delay(50);
  sensor.a2 = analogRead(A2); delay(50);
  sensor.a3 = analogRead(A3); delay(50);

  return sensor;
}

String getJson(sensor_t sensor) {
  return String("{\"a0\":") + sensor.a0 + 
         ",\"a1\":" + sensor.a1 + 
         ",\"a2\":" + sensor.a2 + 
         ",\"a3\":" + sensor.a3 + "}";
}