//Generated Date: Tue, 25 Apr 2023 06:52:43 GMT
#include <WiFi.h>
#include <PubSubClient.h>
#define MQTT_USER "34011896154"
#define MQTT_PASSWORD "DKU1X4HSW3YRHYH5H2"
int light = 0;
boolean leds = false;
int value = 1024;
boolean led_switch = false;
boolean btn = false;
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 = "27200";
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 = "27200";
if (mqtt_client.connect(mqtt_clientId.c_str(), MQTT_USER, MQTT_PASSWORD)) {
mqtt_client.subscribe("/v1/device/34011896154/sensor/led_thres/rawdata");
mqtt_client.subscribe("/v1/device/34011896154/sensor/btn/rawdata");
} else {
delay(5000);
}
}
}
int read_msg(int i, String r_msg) {
int threshold = 0;
String thd_str = "";
while ((mqtt_data).charAt((i - 1)) != '"') {
thd_str = String(thd_str)+String((mqtt_data).charAt((i - 1)));
i = i + 1;
}
threshold = thd_str.toInt();
return (threshold);
}
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");
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");
Serial.println("MQTT OK");
pinMode(4, INPUT);
pinMode(2, OUTPUT);
}
void loop()
{
if (!mqtt_client.connected()) {
reconnect();
}
mqtt_client.loop();
light = analogRead(35);
Serial.println((String("light:")+String(light)));
mqtt_sendText("/v1/device/34011896154/rawdata", (set_msg("light", String(light))));
Serial.println((String("value:")+String(value)));
if (digitalRead(4) && !btn) {
btn = !btn;
led_switch = !led_switch;
if (led_switch)
mqtt_sendText("/v1/device/34011896154/rawdata", (set_msg("btn", "1")));
else
mqtt_sendText("/v1/device/34011896154/rawdata", (set_msg("btn", "0")));
}
if (!digitalRead(4) && btn) {
btn = !btn;
}
Serial.println((String("btn:")+String(btn)+String(" ,led_switch:")+String(led_switch)));
if (led_switch) {
if (light > value) {
digitalWrite(2, LOW);
Serial.println("OFF");
leds = false;
} else {
digitalWrite(2, HIGH);
Serial.println("ON");
leds = true;
}
} else {
digitalWrite(2, LOW);
Serial.println("OFF");
leds = false;
}
if (leds) {
mqtt_sendText("/v1/device/34011896154/rawdata", (set_msg("led", "on")));
} else {
mqtt_sendText("/v1/device/34011896154/rawdata", (set_msg("led", "off")));
}
delay(1000);
}
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));
if (String(topic)=="/v1/device/34011896154/sensor/led_thres/rawdata"&&mqtt_data!="[]") {
value = read_msg(108, mqtt_data);
}
if (String(topic)=="/v1/device/34011896154/sensor/btn/rawdata"&&mqtt_data!="[]") {
Serial.println(String("btn_cht:"));
Serial.println(((mqtt_data).charAt(101)));
if ((mqtt_data).charAt(101) == '0')
led_switch = false;
else if ((mqtt_data).charAt(101) == '1')
led_switch = true;
}
}