From 1e4fc7ae4eae50f1a83278f6bea033d84da1a610 Mon Sep 17 00:00:00 2001 From: kerwincui <164770707@qq.com> Date: Fri, 9 Jul 2021 21:35:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Arduino=E6=8E=A5=E5=85=A5demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- document/flow.png | Bin 0 -> 21711 bytes firmware/arduino/get-started/get-started.ino | 334 +++++++++++++++++++ firmware/arduino/get-started/制作中......txt | 0 3 files changed, 334 insertions(+) create mode 100644 document/flow.png create mode 100644 firmware/arduino/get-started/get-started.ino delete mode 100644 firmware/arduino/get-started/制作中......txt diff --git a/document/flow.png b/document/flow.png new file mode 100644 index 0000000000000000000000000000000000000000..5df0155024cbeb2baca891828b9c76f3ecbce8ff GIT binary patch literal 21711 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 literal 0 HcmV?d00001 diff --git a/firmware/arduino/get-started/get-started.ino b/firmware/arduino/get-started/get-started.ino new file mode 100644 index 00000000..f8fbe916 --- /dev/null +++ b/firmware/arduino/get-started/get-started.ino @@ -0,0 +1,334 @@ +/****************************************************************************** + * author: kerwincui + * create: 2021-07-09 + * email:164770707@qq.com + * source:https://github.com/kerwincui/wumei-smart + ******************************************************************************/ +#include "EspMQTTClient.h" +#include + +char *deviceNum = "8CCGA1049ADA"; // 设备编号,唯一标识 +char *ownerId="1"; // 用户ID,后端查看,默认为amdin,ID为1 +long categoryId=1; // 设备分类,后端查看,默认为wifi通断器,ID为1 + +EspMQTTClient client( + "wifi-ssid", // WIFI的SSID + "wifi-password", // WIFI的密码 + "192.168.0.100", // MQTT消息服务器地址 + "admin", // Mqtt消息服务器账号 + "admin123", // Mqtt消息服务器密码 + deviceNum, // Mqtt客户端名称 + 1883 // Mqtt消息服务器端口 +); + +/** + * 启动 + * + */ +void setup() +{ + Serial.begin(115200); + client.enableDebuggingMessages(); // 打印调试信息 + client.setMaxPacketSize(1024); // 设置Mqtt数据包最大值 + client.setKeepAlive(5); // 保活时间间隔 + //遗嘱消息 + publishLastWill(); +} + +/** + * 循环执行 + * + */ +void loop() +{ + client.loop(); +} + +/** +* WIFI和MQTT连接成功后执行的回调函数 +*/ +void onConnectionEstablished() +{ + // 订阅消息 + subscribeUpdateStatus(); + subscribeGetStatus(); + subscribeUpdateSetting(); + subscribeGetSetting(); + // 发布消息 + publishDeviceInfo(); +} + +/** + * 1.更新设备状态 + * + */ +void subscribeUpdateStatus(){ + client.subscribe("status/set/"+(String)deviceNum, [](const String & payload) { + StaticJsonDocument<1024> doc; //1024字节内存池容量 + //解析JSON + DeserializationError error = deserializeJson(doc, payload); + if (error) { + Serial.print(F("deserializeJson() failed: ")); + Serial.println(error.f_str()); + return; + } + + // 获取状态 + const char* deviceNum = doc["deviceNum"]; + Serial.println("deviceNum:"+(String)deviceNum); + + int relayStatus = doc["relayStatus"]; + Serial.print("relayStatus:"); + Serial.println(relayStatus); + + int lightStatus = doc["lightStatus"]; + Serial.print("lightStatus:"); + Serial.println(lightStatus); + + int brightness = doc["brightness"]; + Serial.print("brightness:"); + Serial.println(brightness); + + int lightInterval = doc["lightInterval"]; + Serial.print("lightInterval:"); + Serial.println(lightInterval); + + int lightMode = doc["lightMode"]; + Serial.print("lightMode:"); + Serial.println(lightMode); + + int fadeTime = doc["fadeTime"]; + Serial.print("fadeTime:"); + Serial.println(fadeTime); + + int red = doc["red"]; + Serial.print("red:"); + Serial.println(red); + + int green = doc["green"]; + Serial.print("green:"); + Serial.println(green); + + int blue = doc["blue"]; + Serial.print("blue:"); + Serial.println(blue); + + // 最后发布设备状态 + publishStatus(); + }); +} + + +/** + * 2.获取设备状态 + * + */ +void subscribeGetStatus(){ + client.subscribe("status/get/"+(String)deviceNum, [](const String & payload) { + // 发布设备状态 + publishStatus(); + }); +} + +/** + * 3.更新设备配置 + * + */ +void subscribeUpdateSetting(){ + client.subscribe("setting/set/"+(String)deviceNum, [](const String & payload) { + StaticJsonDocument<1024> doc; //1024字节内存池容量 + //解析JSON + DeserializationError error = deserializeJson(doc, payload); + if (error) { + Serial.print(F("deserializeJson() failed: ")); + Serial.println(error.f_str()); + return; + } + + // 获取配置 + const char* deviceNum = doc["deviceNum"]; + Serial.println("deviceNum:"+(String)deviceNum); + + int isAlarm = doc["isAlarm"]; + Serial.print("isAlarm:"); + Serial.println(isAlarm); + + int isRadar = doc["isRadar"]; + Serial.print("isRadar:"); + Serial.println(isRadar); + + int isHost = doc["isHost"]; + Serial.print("isHost:"); + Serial.println(isHost); + + int isRfControl = doc["isRfControl"]; + Serial.print("isRfControl:"); + Serial.println(isRfControl); + + int rfOneFunc = doc["rfOneFunc"]; + Serial.print("rfOneFunc:"); + Serial.println(rfOneFunc); + + int rfTwoFunc = doc["rfTwoFunc"]; + Serial.print("rfTwoFunc:"); + Serial.println(rfTwoFunc); + + int rfThreeFunc = doc["rfThreeFunc"]; + Serial.print("rfThreeFunc:"); + Serial.println(rfThreeFunc); + + int rfFourFunc = doc["rfFourFunc"]; + Serial.print("rfFourFunc:"); + Serial.println(rfFourFunc); + + int isReset = doc["isReset"]; + Serial.print("isReset:"); + Serial.println(isReset); + + int isAp = doc["isAp"]; + Serial.print("isAp:"); + Serial.println(isAp); + + int isRfLearn = doc["isRfLearn"]; + Serial.print("isRfLearn:"); + Serial.println(isRfLearn); + + int isRfClear = doc["isRfClear"]; + Serial.print("isRfClear:"); + Serial.println(isRfClear); + + int isSmartConfig = doc["isSmartConfig"]; + Serial.print("isSmartConfig:"); + Serial.println(isSmartConfig); + + int radarInterval = doc["radarInterval"]; + Serial.print("radarInterval:"); + Serial.println(radarInterval); + + int isWifiOffline = doc["isWifiOffline"]; + Serial.print("isWifiOffline:"); + Serial.println(isWifiOffline); + + int isOpenCertifi = doc["isOpenCertifi"]; + Serial.print("isOpenCertifi:"); + Serial.println(isOpenCertifi); + + // 最后发布设备配置 + publishSetting(); + }); + +} + +/* + * 4.获取设备配置 + * + */ +void subscribeGetSetting(){ + client.subscribe("setting/get/"+(String)deviceNum, [](const String & payload) { + // 发布设备配置 + publishSetting(); + }); +} + + +/** + * 1.发布设备信息 + * + */ +void publishDeviceInfo(){ + StaticJsonDocument<300> doc; + doc["deviceNum"] = (String)deviceNum; + doc["categoryId"] = categoryId; + doc["firmwareVersion"] = "1.0"; + doc["ownerId"]= (String)ownerId; + Serial.print("publish device info:"); + serializeJson(doc, Serial); + //发布 + String output; + serializeJson(doc, output); + const char *msg=output.c_str(); + client.publish("device_info",msg); +} + +/** + * 2.发布设备状态 + * + */ +void publishStatus(){ + StaticJsonDocument<1024> doc; + doc["deviceNum"] = (String)deviceNum; + doc["relayStatus"] = 1; + doc["lightStatus"] = 1; + doc["isOnline"] = 1; + doc["rssi"] = -73; + doc["deviceTemperature"] = 28.68; + doc["airTemperature"] = 24.66; + doc["airHumidity"] = 46.8; + doc["triggerSource"] = 0; + doc["brightness"] = 100; + doc["lightInterval"] = 500; + doc["lightMode"] = 0; + doc["fadeTime"] = 259; + doc["red"] = 255; + doc["green"] = 255; + doc["blue"] = 255; + Serial.print("publish status:"); + serializeJson(doc, Serial); + // 发布 + String output; + serializeJson(doc, output); + const char *msg=output.c_str(); + client.publish("status",msg); +} + +/** + * 3.发布设备配置 + * + */ +void publishSetting(){ + StaticJsonDocument<1024> doc; + doc["deviceNum"] = (String)deviceNum; + doc["isAlarm"] = 0; + doc["isRadar"] = 0; + doc["isHost"] = 0; + doc["isRfControl"]= 1, + doc["rfOneFunc"] = 1; + doc["rfTwoFunc"] = 2; + doc["rfThreeFunc"] = 3; + doc["rfFourFunc"] = 4; + doc["ownerId"] = (String)ownerId; + doc["isReset"] = 0; + doc["isAp"] = 0; + doc["isRfLearn"] = 0; + doc["isRfClear"] = 0; + doc["isSmartConfig"] = 0; + doc["radarInterval"] = 5; + doc["isWifiOffline"] = 0; + doc["isOpenCertifi"] = 0; + Serial.print("publish setting:"); + serializeJson(doc, Serial); + //发布 + String output; + serializeJson(doc, output); + const char *msg=output.c_str(); + client.publish("setting",msg); +} + +/** + * 4.遗嘱消息 + * + */ +void publishLastWill(){ + StaticJsonDocument<100> doc; + doc["deviceNum"] = (String)deviceNum; + doc["isOnline"] = 0; + Serial.print("\npublish last will:"); + serializeJson(doc, Serial); + // 发布 + String output; + serializeJson(doc, output); + int len = output.length(); + char *msg =new char[len+1]; + strcpy(msg,output.c_str()); + client.enableLastWillMessage("offline",msg); +} diff --git a/firmware/arduino/get-started/制作中......txt b/firmware/arduino/get-started/制作中......txt deleted file mode 100644 index e69de29b..00000000