#include <WiFi.h>
#include "PubSubClient.h"
#include "DHTesp.h"
#include <LiquidCrystal_I2C.h>
#define LDR_PIN 23
WiFiClient wiFiClient;
PubSubClient client(wiFiClient);
DHTesp dhtSensor;
int led_pin = 2;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
dhtSensor.setup(15, DHTesp::DHT22);
pinMode(LDR_PIN, INPUT);
lcd.init(); //初始化LCD
lcd.backlight(); //開啟LCD背光
Serial.print("正在連線到 WiFi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" 已連線!");
client.setServer("connmqttlab.jed.tw",1883);
client.setCallback(callback);
pinMode(led_pin, OUTPUT);
digitalWrite(led_pin, HIGH);
}
void loop() {
// put your main code here, to run repeatedly:
while(!client.connected()){
if(client.connect("123456yyy")){
client.subscribe("tkumqtt/123");
Serial.println("已連接MQTT");
}
}
client.loop();
delay(10); // this speeds up the simulation
lcd.setCursor(2,0);//設定游標
lcd.print("Room: ");
if (digitalRead(LDR_PIN) == LOW) {
lcd.print("Light!");
} else {
lcd.print("Dark ");
}
void callback(char* topic, byte* message, unsigned int length){
Serial.println(topic);
String strMessage;
for (int i = 0; i < length; i++){
//Serial.println((char)message[i]);
strMessage += (char)message[i];
}
Serial.println(strMessage);
if(strMessage=="on"){
digitalWrite(led_pin, HIGH);
}
else if(strMessage=="off"){
digitalWrite(led_pin, LOW);
}
else if ( strMessage == "get" ) {
// put your main code here, to run repeatedly:
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("Perception: " + String(dhtSensor.computePerception(data.temperature, data.humidity)));
Serial.println("---");
delay(2000); // this speeds up the simulation
String strTemp = "Temp: " + String(data.temperature, 2) + "°C" ; // Ans
String strHumidity = "\nHumidity: " + String(data.humidity, 1) + "%25" ; // Ans
String httpRequestData = "message=" + strTemp + strHumidity; // Ans
Serial.print("HTTP Request: " + httpRequestData);
client.publish("tkumqtt/123", (char*)httpRequestData.c_str());
}
}