#include <WiFi.h>
#include <PubSubClient.h>
#include <ESP32Servo.h>
#include <DHTesp.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server="test.mosquitto.org";
WiFiClient espclient;
const int servoPin = 18;
const int DHT_PIN = 15;
Servo servo;
DHTesp dhtSensor;
String temp_RES;
char temp1[50];
String temp_SEU;
char temp2[50];
//Preparing for mqtt receive
void callback(char* topic,byte* payload,unsigned int length1)
{
Serial.print("message arrived[");
Serial.print(topic);
Serial.println("]");
for(int i=0;i<length1;i++){
Serial.print(payload[i]);
if(payload[0]==49)
{digitalWrite(LED_BUILTIN,HIGH); //Panneau ON CHAUD OFF
Serial.print("ON");}//ASCII VALUE OF '1' IS 49
else if(payload[0]==50)
{
digitalWrite(LED_BUILTIN,LOW); // Panneau OFF CHAUD ON
Serial.print("OFF");} //ASCII VALUE OF '2' IS 50
Serial.println();
}
}
PubSubClient client(mqtt_server,1883,callback,espclient);
void setup() {
servo.attach(servoPin, 500, 2400);
pinMode(LED_BUILTIN,OUTPUT);
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
// Connect to WIFI
Serial.print("connecting to ");
Serial.print(ssid);
WiFi.begin(ssid,password);
while(WiFi.status()!=WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println();
}
void reconnect(){
while(WiFi.status()!=WL_CONNECTED){
delay(500);
Serial.print(".");
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
delay(2000);
//reservoir
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
delay(1000);
temp_RES = String(data.temperature); //converting temperature (the float variable above) to a string
temp_RES.toCharArray(temp1, temp_RES.length() + 1); //packaging up the data to publish to mqtt whoa...
//panneau
float temperaturee = 55; //(analogRead(A3) * 3.3/2048 * 100);
Serial.print("Temperature sol Value is :");
Serial.print(temperaturee);
Serial.println("°C");
delay(1000);
temp_SEU = String(temperaturee);
temp_SEU.toCharArray(temp2, temp_SEU.length() + 1);
// Connect to Node-RED
if(client.connect("ESP32test1")){
Serial.println("Connected to Node-RED");
client.subscribe("Control");
client.publish("Data",temp1);
client.publish("Dataa",temp2);
}
else{
Serial.print("failed,rc=");
Serial.println(client.state());
delay(500);
}
if(data.temperature<70){
if(temperaturee>40)
{ Serial.println("clockwise");
servo.write(60); // Chaud on
delay(1000);}
else
{Serial.println("counterclockwise");
servo.write(120); // Panneau on
delay(1000);
}
}
}