/*
* Generated using BlocklyDuino:
*
* https://github.com/MediaTek-Labs/BlocklyDuino-for-LinkIt
*
* Date: Wed, 19 Oct 2022 16:17:16 GMT
*/
#include <WiFi.h>
#include <PubSubClient.h>
#define MQTT_USER "31747322639"
#define MQTT_PASSWORD "DK5GYS4ZCPG2XMR39R"
#include <DHT.h>
char _lwifi_ssid[] = "Wokwi-GUEST";
char _lwifi_pass[] = "";
const char* mqtt_server = "iot.cht.com.tw";
const unsigned int mqtt_port = 1883;
WiFiClient espClient;
PubSubClient mqtt_client(espClient);
String mqtt_data = "";
void mqtt_sendText(String topic, String text) {
String clientId = "26396";
if (mqtt_client.connect(clientId.c_str(), MQTT_USER, MQTT_PASSWORD)) {
mqtt_client.publish(topic.c_str(), text.c_str());
}
}
void reconnect() {
while (!mqtt_client.connected()) {
String mqtt_clientId = "26396";
if (mqtt_client.connect(mqtt_clientId.c_str(), MQTT_USER, MQTT_PASSWORD)) {
Serial.println("MQTT OK");
} else {
delay(5000);
}
}
}
int Humi = 0;
int TempC = 0;
long timer = 0;
int led = 0;
DHT dht22_p13(13, DHT22);
void callback(char* topic, byte* payload, unsigned int length) {
mqtt_data = "";
for (int ci = 0; ci < length; ci++) {
char c = payload[ci];
mqtt_data+=c;
}
Serial.println((mqtt_data));
}
String set_msg(String id, String msg) {
return (String("[{")+String(String('"')+String("id")+String('"')+String(":")+String('"')+String(id)+String('"')+String(","))+String(String('"')+String("value")+String('"')+String(":[")+String('"')+String(msg)+String('"')+String("]"))+String("}]"));
}
void setup()
{
Serial.begin(9600);
randomSeed(micros());
mqtt_client.setServer(mqtt_server,mqtt_port);
mqtt_client.setCallback(callback);
//mqtt_client.setBufferSize(1024);
Serial.println("WIFI Connecting....");
WiFi.disconnect();
WiFi.softAPdisconnect(true);
WiFi.mode(WIFI_STA);
WiFi.begin(_lwifi_ssid, _lwifi_pass);
while (WiFi.status() != WL_CONNECTED) { delay(500); }
delay(300);
Serial.println("MQTT Connecting....");
dht22_p13.begin();
pinMode(4, OUTPUT);
pinMode(2, OUTPUT);
pinMode(15, OUTPUT);
}
void loop()
{
TempC = dht22_p13.readTemperature();
Humi = dht22_p13.readHumidity();
if (!mqtt_client.connected()) {
reconnect();
}
mqtt_client.loop();
if (Humi < 60) {
digitalWrite(4, HIGH);
digitalWrite(2, LOW);
digitalWrite(15, LOW);
led = 0;
} else if (Humi < 75) {
digitalWrite(4, LOW);
digitalWrite(2, HIGH);
digitalWrite(15, LOW);
led = 1;
} else {
digitalWrite(4, LOW);
digitalWrite(2, LOW);
digitalWrite(15, HIGH);
led = 2;
}
Serial.println((String("溫度: ")+String(TempC)+String("*C")));
Serial.println((String("濕度: ")+String(Humi)+String("%")));
if (timer < millis()) {
timer = millis() + 4000;
mqtt_sendText("/v1/device/31747322639/rawdata", (set_msg("DHT_Temp", String(TempC))));
mqtt_sendText("/v1/device/31747322639/rawdata", (set_msg("DHT_Humi", String(Humi))));
if (led == 0) {
mqtt_sendText("/v1/device/31747322639/rawdata", (set_msg("led_humi", "Green")));
} else if (led == 1) {
mqtt_sendText("/v1/device/31747322639/rawdata", (set_msg("led_humi", "Yellow")));
} else {
mqtt_sendText("/v1/device/31747322639/rawdata", (set_msg("led_humi", "Red")));
}
}
delay(2000);
}