#include "Arduino.h"
#include "WiFi.h"
// #include <WiFiClientSecure.h>
#include "PubSubClient.h"
#include "DHT.h"
#define DHTPIN 14
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
#define led1 2
#define led2 4
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "white-dev.aithings.vn"; // this one changed from server broker
const uint16_t mqtt_server_port = 1883;
const char* mqttUser = " ";
const char* mqttPassword = " ";
const char* mqttTopicIn_1 = "Home/Seha/LED1DHT";
const char* mqttTopicIn_2 = "Home/Seha/LED2DHT";
const char* mqttTopicTemp = "Home/Seha/Temp";
const char* mqttTopicHum = "Home/Seha/Hum";
// #define MQTT_TLS
#define MQTT_TLS_VERIFY
// WiFiClientSecure wifiClient;
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
void connect(){
while(!mqttClient.connected()){
Serial.print("Attempting MQTT connection...");
String mqttClientId = "";
mqttClient.setKeepAlive(1000);
if (mqttClient.connect(mqttClientId.c_str(), mqttUser, mqttPassword)){
Serial.println("connected");
mqttClient.subscribe(mqttTopicIn_1);
mqttClient.subscribe(mqttTopicIn_2);
}else{
Serial.print("Fail, rc=");
Serial.print(mqttClient.state());
Serial.println(" will try again in 5 seconds");
delay(500);
}
}
}
void callback(char* topic, byte* payload, unsigned int length) {
String message;
Serial.print("Message arrived on topic: '");
Serial.print(topic);
Serial.print("' with payload: ");
for (unsigned int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
message += (char)payload[i];
}
if(String(topic) == String(mqttTopicIn_1)){
if(message == "1"){
digitalWrite(led1, HIGH);
}
else{
digitalWrite(led1, LOW);
}
}
if(String(topic) == String(mqttTopicIn_2)){
if(message == "1"){
digitalWrite(led2, HIGH);
}
else{
digitalWrite(led2, LOW);
}
}
Serial.println();
}
void setup_wifi(){
delay(100);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
// wifiClient.setInsecure();
Serial.println("WiFi connected");
Serial.println(WiFi.localIP());
Serial.println();
}
void setup() {
Serial.begin(115200);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
dht.begin();
setup_wifi();
mqttClient.setServer(mqtt_server, mqtt_server_port);
mqttClient.setCallback(callback);
}
void loop() {
if (!mqttClient.connected()) {
connect();
}
mqttClient.loop();
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
if (isnan(h) || isnan(t) ) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
char hum[8];
char temp[8];
dtostrf(t,1,2,temp);
dtostrf(h,1,2,hum);
mqttClient.publish(mqttTopicTemp,temp);
mqttClient.publish(mqttTopicHum,hum);
Serial.println("Data Sended");
delay(2000);
}