添加Arduino接入demo

This commit is contained in:
kerwincui
2021-07-09 21:35:21 +08:00
parent ed16a0a987
commit 1e4fc7ae4e
3 changed files with 334 additions and 0 deletions

View File

@@ -0,0 +1,334 @@
/******************************************************************************
* author: kerwincui
* create: 2021-07-09
* email164770707@qq.com
* source:https://github.com/kerwincui/wumei-smart
******************************************************************************/
#include "EspMQTTClient.h"
#include <ArduinoJson.h>
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);
}