I am trying to blink simple LED in ESP32 from JSON via MQTT but the code I run is compiled and flashed properly but It couldnt run properly.
Could you please provide a simple firmware for blinking an LED from JSON via MQTT :
In Below code I have published a JSON String {"Switch_Status":"FOR"}/ {"Switch_Status":"REV"}/ {"Switch_Status":"STOP"} but LED doesn't blink on this or it doesnt put the status in previous_state array:
#include <Arduino.h>
#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
long last_time = 0;
char apName[] = "SmartDEVICE.";
char data[100];
// MQTT client
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
char *mqttServer = "broker.hivemq.com";
int mqttPort = 1883;
const char *SSID = "Wifi_ID";
const char *PWD = "Password";
char previous_state[5];
int LED1=19;
int LED2=21;
void connectToWiFi() {
Serial.print("Connectiog to ");
WiFi.begin(SSID, PWD);
Serial.println(SSID);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.print("Connected.");
}
void setupMQTT() {
mqttClient.setServer(mqttServer, mqttPort);
// set the callback function
mqttClient.setCallback(callback);
}
void setup() {
Serial.begin(115200);
##pinMode(LED1,OUTPUT);
pinMode(LED2,OUTPUT);
connectToWiFi();
setupMQTT();
}
void reconnect() {
Serial.println("Connecting to MQTT Broker...");
while (!mqttClient.connected()) {
Serial.println("Reconnecting to MQTT Broker..");
String clientId = "ESP32Client-";
clientId += String(random(0xffff), HEX);
if (mqttClient.connect(clientId.c_str())) {
Serial.println("Connected.");
// subscribe to topic
mqttClient.subscribe("swa/commands");
}
}
}
void loop() {
if (!mqttClient.connected())
reconnect();
mqttClient.loop();
StaticJsonBuffer<200> JSONbuffer;
JsonObject& JSONencoder = JSONbuffer.createObject();
JSONencoder["Device_Name"] = apName;
JSONencoder["Wifi_Status"]= "Wifi_OK";
JSONencoder["LED_Status"]= previous_state;
char JSONmessageBuffer[200];
JSONencoder.printTo(JSONmessageBuffer, sizeof(JSONmessageBuffer));
Serial.println("Sending message to MQTT topic..");
Serial.println(JSONmessageBuffer);
mqttClient.publish("esp/test", JSONmessageBuffer) ;
if (mqttClient.publish("esp/test", JSONmessageBuffer) == true) {
Serial.println("Success sending message");
} else {
Serial.println("Error sending message");
}
Serial.println("-------------");
delay(5000);
}
void callback(char* topic, byte* payload, unsigned int length) {
StaticJsonBuffer<200> JSONBuffer;
char JSONinData[150];
Serial.print("Callback From- ");
Serial.println(topic);
Serial.print("data:");
Serial.print("payload: ");
for(int i =0; i<length; i++){
Serial.print((char)payload[i]);
JSONinData[i] = (char)payload[i];
}
Serial.println();
JsonObject& parsed = JSONBuffer.parseObject(JSONinData);
if (!parsed.success()) { //Check for errors in parsing
Serial.println("Parsing failed");
delay(2000);
return;
}
const char * val= parsed["Switch_Status"];
// DO SOMETHING WITH THE DATA THAT CAME IN!
Serial.println("Parsed Data:");
Serial.println(val);
if( val=="FOR"){
digitalWrite(LED1,HIGH);
Serial.println("LED1 is ON");
strcpy(previous_state , (const char*)parsed["LED_Status"]);
}
else if(val=="REV"){
digitalWrite(LED2,HIGH);
Serial.println("LED2 is ON");
strcpy(previous_state , (const char*)parsed["LED_Status"]);
}
// change the return type of the function
else if(val =="STOP")
{
digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
strcpy(previous_state , (const char*)parsed["LED_Status"]);
}
}
I am trying to blink simple LED in ESP32 from JSON via MQTT but the code I run is compiled and flashed properly but It couldnt run properly. Could you please provide a simple firmware for blinking an LED from JSON via MQTT : In Below code I have published a JSON String {"Switch_Status":"FOR"}/ {"Switch_Status":"REV"}/ {"Switch_Status":"STOP"} but LED doesn't blink on this or it doesnt put the status in previous_state array: