mirror of
https://gitee.com/beecue/fastbee.git
synced 2025-12-18 00:45:55 +08:00
添加Arduino接入demo
This commit is contained in:
334
firmware/arduino/get-started/get-started.ino
Normal file
334
firmware/arduino/get-started/get-started.ino
Normal file
@@ -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 <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);
|
||||
}
|
||||
Reference in New Issue
Block a user