新版固件改进

This commit is contained in:
kerwincui
2022-08-01 23:28:20 +08:00
parent 5171094988
commit fc753c2898
9 changed files with 413 additions and 271 deletions

View File

@@ -1,32 +1,58 @@
/***********************************************************
* function 设备交互
/*********************************************************************
* function 程序入口
* board: esp8266 core for arduino v3.0.2
* library PubSubClient2.8.0 & ArduinoJson6.19.1
* source: https://github.com/kerwincui/wumei-smart
***********************************************************/
* library PubSubClient2.8.0 & ArduinoJson6.19.1 & OneButton2.0.4
* source: https://gitee.com/kerwincui/wumei-smart
* copyright: wumei-smart and kerwincui all rights reserved.
********************************************************************/
#include "Common.h"
WiFiClient wifiClient;
PubSubClient mqttClient;
// 存储的配置类型
struct config_type
{
char stassid[32]; // SSID配置项
char stapsw[64]; // Password配置项
char deviceNum[64]; // 设备编号配置项
char userId[32]; // 用户ID配置项
char authCode[32]; // 授权码配置项
};
config_type config;
OneButton button;
// 按钮单击事件
static void buttonClick();
// 按钮双击事件
static void buttonDoubleClick() ;
// 按钮长按事件
static void buttonLongPress() ;
float rssi = 0;
char wumei_iv[17] = "wumei-smart-open";
int monitorCount = 0;
long monitorInterval = 1000;
bool isApMode = false;
//==================================== begin 可配置的项 ===============================
//==================================== 这是需要配置的项 ===============================
// Wifi配置
char *wifiSsid = "wumei";
char *wifiPwd = "wumei-smart";
char *wifiSsid = "";
char *wifiPwd = "";
String userId = "1";
// 产品启用授权码,则授权码不能为空
String authCode = "";
// 设备信息配置
String deviceNum = "D6329VL548866";
String userId = "1";
String deviceNum = "D6329VL5668888";
String productId = "41";
float firmwareVersion = 1.0;
// 经度和纬度可选,如果产品使用设备定位,则必须传
float latitude=0;
float longitude=0;
float latitude = 0;
float longitude = 0;
// Mqtt配置
char *mqttHost = "wumei.live";
@@ -34,12 +60,61 @@ int mqttPort = 1883;
char *mqttUserName = "wumei-smart";
char *mqttPwd = "PHYFED93WSFF1DAS";
char mqttSecret[17] = "K2V5DE28XNUU3497";
// 产品启用授权码,则授权码不能为空
String authCode="";
// NTP地址用于获取时间,修改为自己部署项目的接口地址)
String ntpServer = "http://wumei.live:8080/iot/tool/ntp?deviceSendTime=";
//==================================== end 可配置的项 ===============================
// 订阅的主题
String prefix = "/" + productId + "/" + deviceNum;
String sInfoTopic = prefix + "/info/get";
String sOtaTopic = prefix + "/ota/get";
String sNtpTopic = prefix + "/ntp/get";
String sPropertyTopic = prefix + "/property/get";
String sFunctionTopic = prefix + "/function/get";
String sPropertyOnline = prefix + "/property-online/get";
String sFunctionOnline = prefix + "/function-online/get";
String sMonitorTopic = prefix + "/monitor/get";
// 发布的主题
String pInfoTopic = prefix + "/info/post";
String pNtpTopic = prefix + "/ntp/post";
String pPropertyTopic = prefix + "/property/post";
String pFunctionTopic = prefix + "/function/post";
String pMonitorTopic = prefix + "/monitor/post";
String pEventTopic = prefix + "/event/post";
// 初始化项目
void initWumeiSmart()
{
//打开串行端口:
Serial.begin(115200);
printMsg("wumei smart device starting...");
// 初始化按键为GND并添加单击、双击、长按事件
button = OneButton(14, true, true);
button.attachClick(buttonClick);
button.attachDoubleClick(buttonDoubleClick);
button.attachLongPressStart(buttonLongPress);
saveConfig();
loadConfig();
}
// 按钮单击事件
static void buttonClick() {
Serial.println("Clicked!");
}
// 按钮双击事件
static void buttonDoubleClick() {
Serial.println("double Clicked!");
}
// 按钮长按事件
static void buttonLongPress() {
Serial.println("long Clicked!");
}
// 连接wifi
void connectWifi()
@@ -58,22 +133,72 @@ void connectWifi()
Serial.print(WiFi.localIP());
}
// 存储配置
void saveConfig()
{
EEPROM.begin(240);
strcpy(config.stassid, "tp-six"); //名称复制
strcpy(config.stapsw, "clh15108665817"); //密码复制
strcpy(config.userId, "1000"); //密码复制
strcpy(config.authCode, "8kjfsfjjkjfjljdfldjfsdlfjsdlfjl8"); //密码复制
strcpy(config.deviceNum, "6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq6"); //密码复制
printMsg("存储配置...");
uint8_t *p = (uint8_t *)(&config);
for (int i = 0; i < sizeof(config); i++)
{
EEPROM.write(i, *(p + i));
}
EEPROM.end();
}
// 加载配置
void loadConfig()
{
EEPROM.begin(240);
printMsg("加载配置...");
uint8_t *p = (uint8_t *)(&config);
for (int i = 0; i < sizeof(config); i++)
{
*(p + i) = EEPROM.read(i);
}
EEPROM.commit();
wifiSsid = config.stassid;
wifiPwd = config.stapsw;
printMsg("SSID: " + (String)config.stassid);
printMsg("SSID: " + (String)config.authCode);
printMsg("SSID: " + (String)config.deviceNum);
printMsg("SSID: " + (String)config.userId);
printMsg("Password: " + (String)wifiPwd);
}
// 清空配置
void clearConfig()
{
EEPROM.begin(240);
for (int i = 0; i < 240; i++)
{
EEPROM.write(i, 0);
}
EEPROM.end();
}
// 随机生成监测值
String randomPropertyData(){
String randomPropertyData()
{
// 匹配云端定义的监测数据,随机数代替监测结果
float randFloat = 0;
int randInt=0;
int randInt = 0;
StaticJsonDocument<1024> doc;
JsonObject objTmeperature = doc.createNestedObject();
objTmeperature["id"] = "temperature";
randFloat = random(1000, 3000) ;
objTmeperature["value"] = (String)(randFloat/100);
randFloat = random(1000, 3000);
objTmeperature["value"] = (String)(randFloat / 100);
objTmeperature["remark"] = (String)millis();
JsonObject objHumidity = doc.createNestedObject();
JsonObject objHumidity = doc.createNestedObject();
objHumidity["id"] = "humidity";
randFloat = random(3000, 6000);
objHumidity["value"] = (String)(randFloat/100);
objHumidity["value"] = (String)(randFloat / 100);
objHumidity["remark"] = (String)millis();
JsonObject objCo2 = doc.createNestedObject();
@@ -108,7 +233,7 @@ void printMsg(String msg)
void blink()
{
printMsg("指示灯闪烁...");
int led=15;
int led = 15;
pinMode(led, OUTPUT);
for (int i = 0; i < 2; i++)
{