// Exemplo de codigo para esp32 realizando a leitura de botões e potenciometro
// mude os tópicos IFSP/led e esp32/ADC para personalizar seu IoT
// Instale em seu computador as bibliotecas PubSubClient e ArduinoJson
// https://www.arduino.cc/reference/en/libraries/pubsubclient/
// https://www.arduino.cc/reference/en/libraries/arduinojson/
#include <WiFi.h>
#include "PubSubClient.h"
#include <ArduinoJson.h>
// configurações da rede wifi
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
// define canal de conexao wifi mais rapido
#define WIFI_CHANNEL 6
// servidor broker mqtt
const char* mqttServer = "mqtt-dashboard.com";
const int mqttPort = 1883;
const char* mqttUser = "miguelfrancisco";
const char* mqttPassword = "Embar2022";
const char* mqttTopic1 = "IFSP/LED1";
const char* mqttTopic2 = "IFSP/LED2";
const char* clientId = "ESP32";
const int analogPin1 = 12;
const int analogPin2 = 13;
const int L1 = 4;
const int L2 = 2;
const int B3 = 32;
const int B2 = 33;
int lastSensorValue = 0;
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
pinMode(L1, OUTPUT);
pinMode(L2, OUTPUT);
pinMode(12, INPUT);
pinMode(13, INPUT);
pinMode(B3, INPUT_PULLUP);
pinMode(B2, INPUT_PULLUP);
Serial.begin(115200);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD, WIFI_CHANNEL);
Serial.print("Connecting to WiFi ");
Serial.print(WIFI_SSID);
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
Serial.println("Connected to WiFi");
client.setServer(mqttServer, mqttPort);
client.setCallback(callback);
while (!client.connected()) {
Serial.println("Connecting to MQTT...");
if (client.connect(clientId, mqttUser, mqttPassword)) {
Serial.println("Connected to MQTT");
client.subscribe(mqttTopic1);
client.subscribe(mqttTopic2);
} else {
Serial.print("MQTT connection failed, retrying in 5 seconds...");
delay(5000);
}
}
}
void loop() {
client.loop();
int sensorValue = analogRead(analogPin1);
// analisa se o valor analógico teve variação maior que 10
if (abs(sensorValue - lastSensorValue) >= 10) {
client.publish("esp32/ADCraw", String(sensorValue).c_str());
lastSensorValue = sensorValue;
float valor1=((float)sensorValue/4095)*3.3;
mqttSendJsonIO(valor1);
}
delay(500);
if(!digitalRead(B3))
{
digitalWrite(L1, HIGH);
digitalWrite(L2, LOW);
}
if(!digitalRead(B2))
{
digitalWrite(L2, HIGH);
digitalWrite(L1, LOW);
}
}
void mqttSendJsonIO(float valor1){
//Envia a mensagem ao broker
/// . produzindo mensagem Json com o objeto
DynamicJsonDocument doc(1024);
doc["device"] = "ESP32";
doc["analogico"] = valor1;
char JSONmessageBuffer[200];
serializeJson(doc, JSONmessageBuffer);
client.publish("esp32/out", JSONmessageBuffer);
Serial.print("msg json out enviado: ");
Serial.println(JSONmessageBuffer);
}
void callback(char* topic, byte* payload, unsigned int length) {
String topicStr = topic;
if (topicStr.equals("IFSP/LED1")) {
String payloadStr = "";
for (int i = 0; i < length; i++) {
payloadStr += (char)payload[i];
}
if (payloadStr.equals("on")) {
digitalWrite(L1, HIGH);
Serial.println("L1 on");
} else if (payloadStr.equals("off")) {
digitalWrite(L1, LOW);
Serial.println("L1 off");
} }
if (topicStr.equals("IFSP/LED2")) {
String payloadStr = "";
for(int i = 0; i < length; i++) {
payloadStr += (char)payload[i];
}
if (payloadStr.equals("on")) {
digitalWrite(L2, HIGH);
Serial.println("L2 on");
}
else if(payloadStr.equals("off")) {
digitalWrite(L2, LOW);
Serial.println("L2 off");
}
}
}