Files
FastBee/sdk/Arduino/FastBeeArduino/FastBeeArduino.ino
kerwincui 5539c1b6af 更新
2024-03-17 14:59:23 +08:00

128 lines
2.9 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*********************************************************************
* function 程序入口
* board: esp8266 core for arduino v3.0.2
* library PubSubClient2.8.0 & ArduinoJson6.19.1 & OneButton2.0.4
* source: https://gitee.com/kerwincui/wumei-smart
* copyright: FastBee and kerwincui all rights reserved.
********************************************************************/
#include "Config.h"
#include "Auth.h"
#include "Apconfig.h"
#include "User.h"
long lastWifiConn; // 上次wifi连接时间
long lastMqttConn; // 上次mqtt连接时间
long lastPublishMonitor; // 上次发布监测数据时间
long lastPublishSimulateData; // 上次发布测试数据时间
/**
* 启动
*/
void setup() {
//打开串行端口:
Serial.begin(115200);
printMsg("FastBee device starting...");
// 加载配置
loadConfig();
// 初始化用户配置
initUser();
if (strcmp(wifiSsid, "") == 0) {
// 启动配网
startApConfig();
} else {
// 连接Wifi
connectWifi();
}
}
/**
* 循环执行
*/
void loop() {
// 监测按钮
button.tick();
if (isApMode) {
// 配网时的Web服务
server.handleClient();
} else {
// Wifi重连
wifiReconnectionClient();
// Mqtt连接
mqttReconnectionClient();
// 发布实时监测数据
publicMonitorClient();
// 发布模拟数据,测试用
publishSimulateDataClient();
}
ESP.wdtFeed(); // 喂软件看门狗,防止程序跑偏
}
/*
* Wifi掉线重连(非阻塞间隔5s)
*/
void wifiReconnectionClient() {
long now = millis();
if (WiFi.status() != WL_CONNECTED) {
if (now - lastWifiConn > 5000) {
lastWifiConn = now;
WiFi.reconnect();
}
}
}
/*
* mqtt连接(非阻塞、间隔5s)
*/
void mqttReconnectionClient() {
if (WiFi.status() == WL_CONNECTED) {
long now = millis();
if (!mqttClient.connected()) {
if (now - lastMqttConn > 5000) {
lastMqttConn = now;
connectMqtt();
}
} else {
mqttClient.loop();
}
}
}
/*
* 发布实时监测数据非阻塞、间隔默认1秒
*/
void publicMonitorClient() {
if (WiFi.status() == WL_CONNECTED && monitorCount > 0) {
long now = millis();
if (now - lastPublishMonitor > monitorInterval) {
lastPublishMonitor = now;
monitorCount--;
String msg = randomPropertyData();
publishMonitor(msg);
}
}
}
/*
* 发布模拟数据非阻塞、仅用于测试间隔3600秒
*/
void publishSimulateDataClient() {
if (WiFi.status() == WL_CONNECTED) {
long now = millis();
if (now - lastPublishSimulateData > 3600000) {
lastPublishSimulateData = now;
printMsg("执行定时上报");
// 发布事件
processEvent();
// 发布时钟同步
publishNtp();
// 发布属性(监测值)
String msg = randomPropertyData();
publishProperty(msg);
}
}
}