【MESH组网】[高难度]一个额度带几百个设备:Blinker+painlessMESH组网+ESP8266+DHT11温湿度+继电器 简易开源教程1.0

合集地址:Arduino中文社区

打开方式

本系列教程建议在电脑端打开更快

手机端切换文章请点击左下角专题目录

文章内切换章节请点击左下角文章大纲

资料下载、教程持续更新:

点灯开源项目分享群2:QQ 913319679

MESH效果视频:

先买了10个做测试,保证10个之内不会有问题

https://www.bilibili.com/video/BV1dK421k7jQ/

本次示例使用了10个继电器¥2

基于ESP8285的ESP01S模组

8285外部特性与8266一样,可用8266固件烧录上去,区别仅仅是程序存储器flash闪存集成在单片机内部

本教程内容复杂,主要是给需要meshAPP翻页实现 额度复用 的群友看下做法

推荐做过入门教程再来做本教程(入门教程 https://arduino.me/s/35?aid=2757),

并且最好先试用painlessmesh官方例程测试

painlessMesh库自己下的是直接烧录basic例程、bridge例程实现从机主机

还有蓝牙mesh能耗低得多,有需要自己去学一下esp官方的BLE MESH

ESP官方WiFiMesh也不错

ESPNOW更加牛,无连接,支持电池:

【使用esp8266,ESP-NOW协议,做一个迷你遥控器】 https://www.bilibili.com/video/BV1Pq4y1N71t

配套硬件开源地址ESP8266遥控器 - 嘉立创EDA开源硬件平台

注意:我提供的文件夹里面的三个库都爆改过,只能用于我的代码,后文环境搭建写了

mesh属于点灯官方的收费项目,我做的这个可能影响他们营收,所以就不提供咨询了,看得懂的自己用。

虽然API以及本地通讯状态数组都弄好了,但是估计也没几个会的,影响不大。

翻页效果:可带几百台设备

预计下个版本更新设备种类,届时将支持不同种类自动调整数据数组大小

调试组件暗藏技巧

按钮靠边,选最大确定,把界面卡宽一截,然后拖调试框到最底下即可隐藏

目录

时间戳

全套资料下载

说明书预览

一、软件资料、硬件材料说明

二、软件开发环境搭建

三、设备端程序使用注意事项*3**(重点看这就行)**

四、开发笔记(嫑看没啥用)

时间戳

本文更新时间:2024年3月14日

代码资源更新时间:2024年2月18日

下一期代码 更新预计:2024年4月20日前

本人全部合集https://arduino.me/s/35?aid=2757

全套资料下载(下载后Word档说明书查看更清晰)

资料内容:

仅爆改库+源代码

MESH1.0.rar

环境搭建参考后文,软件库务必装这次提供的

下载链接:目前仅支持QQ 群的群文件

点灯开源项目分享群2:QQ 913319679

此群只提供各类开源分享,可向群主投稿,为避免打扰,不聊天

教程等任何问题都可找群主,看见就回

群文件说明:

资料注意:

调试出现任何问题先看【新手必看】[Blinker]2024最新-常见问题大全

如有群聊咨询需要,可在开源群找群主。也可前往点灯官网>开发文档>加点灯2000人官方群。

一、软件资料、硬件材料说明

1.资料使用流程:

此处顺带展示开发流程,具体用法见后文

Blinker-DHT11-继电器-纯小白入门超详细版全套教程资料.rar

为扩展阅读

2.可用于以下硬件(不是全买!有其中一个就行,我用的在视频里有)

本程序通过修改引脚定义 可支持 以下芯片、开发板及其配件(见后文)

(1)支持的主控板:

基于ESP8266EX裸芯片制作的电路板

基于ESP8266的ESP-01、ESP01s模组         

基于ESP8285的ESP-8285模组(外部特性与8266一样,可用8266固件烧录上去,区别仅仅是程序存储器flash闪存集成在单片机内部)

基于ESP8266的ESP12E模组的NodeMCU开发板

基于ESP8266的ESP12F模组的wemos/mini开发板

其它ESP系列开发板如ESP32等 请注意看电路图确定引脚定义,避免冲突!

硬件您可以在ESP8266系列模组专题 | 安信可科技查看选型表并下载规格书

也可以直接查看本文资料附带的

中的规格书或电路图

(2)支持的配件:

A:ESP-01、ESP-01s、ESP-8285模组适用配件:

DHT11底板、DHT20底板、DHT22底板     ESP01s单路继电器                ESP01s双路继电器

搜索关键词:

DHT11温湿度传感器WIFI节点模块底座适用于ESP8266ESP-01/01S板

继电器底板智能插座WIFI模块适用于ESP8266ESP-01/01S板

B:NodeMCU/WEMOS/ESPmini开发板适用配件:

5V继电器

DHT11模块

DHT20、DHT22模块

接线图见第六章:修改引脚定义

第二节注意事项:不按本教程配置环境出现任何问题概不负责。

二、软件开发环境搭建

(环境和入门教程的不一样,Mesh库和Blinker库都是改过的的记得替换)

群里下载Blinker-DHT11-继电器-纯小白入门超详细版全套教程资料.rar

解压,然后打开

可见

其中exe尽量管理员身份运行

1.安装Arduino

右键管理员身份运行

装过的忽略,Arduino2.0亦可,后面几步尽量一样

2.安装硬件库(重要)

Arduino开发板库添加有两种方式,推荐点灯官网资源下载栏的离线安装包(已经附带):

1.离线安装:右键管理员身份运行本教程附带的离线安装包

2.在线安装(很慢不推荐除非有VPN):Arduino>工具>开发板>开发板管理器,搜索ESP8266后点击安装

注:ESP8285直接用8266即可兼容,他俩区别仅在于硬件上8285自带flash,可用IO更多,不像8266多一个flash芯片,占用SPI了

注:ESP32不做人脸识别,做点灯运行2.0.7; 不做点灯,做人脸识别运行1.0.6

安装完硬件库后可以:

检查开发板库位置C:\Users\用户名\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266

手动点击文件夹谢谢。

自动前往在地址栏粘贴**%LOCALAPPDATA%/Arduino15/packages**

注:用户名换成你自己的用户名!

注:不管Arduino装在哪,这个硬件库都装到了C盘的用户文件夹!

注:AppData是隐藏文件夹,要点击查看

开启隐藏的项目

才能查看

警告:安装过的请检查版本不要低于2.7.4,不要高于3.0.2(3.1开始会与点灯库冲突)

如果安装过其他版本的esp32 package,请先删除或剪切走,再使用本安装包,

删除方法:文件管理器地址栏输入 %LOCALAPPDATA%/Arduino15/packages,回车进入,然后删除掉其中的esp32文件夹

3.安装软件库(重要!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!和入门教程不一样之处)

1.手动复制(推荐):

把 本次教程压缩包Blinker+MESH1.0.rar里的:

ArduinoJson

blinker-library-master-wifi-realtime

painlessMesh-develop

这三个文件夹复制或剪切到C:\Users\用户名\Documents\Arduino\libraries

可以点击此电脑>文档>Arduino>libraries进入此文件夹

注:不管Arduino装在哪,这个软件库都在C盘的用户文件夹!

2.自动添加(不推荐):Arduino>项目>加载库>添加.ZIP库

Blinker等第三方软件库文件位置C:\Users\用户名\Documents\Arduino\libraries

4.设置Arduino——管理网址、行号、折叠、编译信息

打开Arduino>文件>首选项>附加开发板管理器网址>

,粘贴:

https://arduino.esp8266.com/stable/package_esp8266com_index.json

http://x.iaoye.xin/package_esp8266com_index.json

http://wechat.doit.am/package_esp8266com_index.json

https://github.com/esp8266/Arduino/releases/download/2.5.0/package_esp8266com_index.json

https://raw.githubusercontent.com/DFRobot/FireBeetle-ESP8266/master/package_firebeetle8266_index.json

https://dl.espressif.com/dl/package_esp32_index.json

https://arduino.me/packages/esp32.json

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

用Ctrl+V粘贴!鼠标贴不了!

5. BlinkerAPP

安卓最新版本在官网下点灯科技-点灯物联网解决方案

iOS直接在APPStore搜Blinker(默认最新)

另外iOS最新版本号与安卓不同步

6. APP界面配置

先申请设备(设备数量已达上限,免费获取,见第五章第3节)

在Blinker APP右上角点击⊕>添加设备>独立设备>网络接入>复制授权码>QQ发电脑>贴至程序

界面配置Mesh版:

{¨version¨¨2.0.0¨¨config¨{¨headerColor¨¨transparent¨¨headerStyle¨¨light¨¨background¨{¨img¨´´}}¨dashboard¨|{¨type¨¨deb¨¨mode¨É¨bg¨É¨cols¨Ñ¨rows¨Ì¨key¨¨debug¨´x´É´y´¤H}{ßA¨tex¨¨t0¨´´¨t1¨´´¨size¨¤EßD˨ico¨¨fad fa-thermometer-three-quarters¨ßEÍßFÊßGßK´x´Ë´y´Ï¨lstyle¨Ê¨clr¨¨#076EEF¨}{ßAßIßJ´´ßK´´ßL¤EßDËßMßNßEÍßFÊßG¨t5¨´x´Ë´y´¤AßPßQßOÊ}{ßAßIßJ´´ßK´´ßL¤EßDËßMßNßEÍßFÊßG¨t6¨´x´Ë´y´¤BßPßQßOÊ}{ßAßIßJ´´ßK´´ßL¤EßDËßMßNßEÍßFÊßG¨t2¨´x´Ë´y´ÐßPßQßOÊ}{ßAßIßJ´´ßK´´ßL¤EßDËßMßNßEÍßFÊßG¨t9¨´x´Ë´y´¤EßPßQßOÊ}{ßAßIßJ´´ßK´´ßL¤EßDËßMßNßEÍßFÊßG¨t8¨´x´Ë´y´¤DßPßQßOÊ}{ßAßIßJ´´ßK´´ßL¤EßDËßMßNßEÍßFÊßG¨t4¨´x´Ë´y´ÒßPßQßOÊ}{ßAßIßJ´´ßK´´ßL¤EßDËßM´´ßEÑßFËßG¨calindar¨´x´É´y´ÉßOÏßPßQ}{ßAßIßJ´´ßK´´ßL¤EßDËßMßNßEÍßFÊßG¨t7¨´x´Ë´y´¤CßPßQßOÊ}{ßAßIßJ´´ßK´´ßL¤EßDËßMßNßEÍßFÊßG¨t10¨´x´Ë´y´¤FßPßQßOÊ}{ßAßIßJ´´ßK´´ßL¤EßDËßMßNßEÍßFÊßG¨t3¨´x´Ë´y´ÑßPßQßOÊ}{ßA¨btn¨ßM¨fal fa-power-off¨ßCÊßJ¨文本1¨ßK¨文本2¨ßDËßEËßFÊßG¨b3¨´x´Ï´y´ÑßOÌ}{ßAßbßMßcßCÊßJßdßKßeßDËßEËßFÊßG¨b4¨´x´Ï´y´ÒßOÌ}{ßAßbßMßcßCÊßJßdßKßeßDËßEËßFÊßG¨b5¨´x´Ï´y´¤AßOÌ}{ßAßbßMßcßCÊßJßdßKßeßDËßEËßFÊßG¨b9¨´x´Ï´y´¤EßOÌ}{ßAßbßMßcßCÊßJßdßKßeßDËßEËßFÊßG¨b7¨´x´Ï´y´¤CßOÌ}{ßAßbßMßcßCÊßJßdßKßeßDËßEËßFÊßG¨b10¨´x´Ï´y´¤FßOÌ}{ßAßbßMßcßCÊßJßdßKßeßDËßEËßFÊßG¨b8¨´x´Ï´y´¤DßOÌ}{ßAßbßM¨fad fa-arrow-alt-circle-left¨ßCÉßJ¨上一页¨ßKßeßDËßEÊßFÊßG¨last¨´x´Ë´y´¤GßOÍ}{ßAßIßJ´´ßK´´ßL¤EßDËßM´´ßEÑßFËßG¨weather¨´x´É´y´ÍßOÏßPßQ}{ßAßIßJ¨当前:第1页¨ßK´´ßL¤EßDËßM´´ßEËßFÊßG¨page¨´x´Ì´y´¤GßOÉßP¨#595959¨}{ßAßIßJ´´ßK´´ßL¤EßDËßM´´ßEÑßFËßG¨runtime¨´x´É´y´ËßOÏßPßQ}{ßAßbßMßcßCÊßJßdßKßeßDËßEËßFÊßG¨b1¨´x´Ï´y´ÏßOÌ}{ßAßbßMßcßCÊßJßdßKßeßDËßEËßFÊßG¨b6¨´x´Ï´y´¤BßOÌ}{ßAßbßMßcßCÊßJßdßKßeßDËßEËßFÊßG¨b2¨´x´Ï´y´ÐßOÌ}{ßAßbßMßcßCÊßJßdßKßeßDËßEËßFÊßG¨all¨´x´Ï´y´¤GßOÌ}{ßAßbßM¨fad fa-arrow-alt-circle-right¨ßCÉßJßdßKßeßDËßEÊßFÊßG¨next¨´x´Î´y´¤GßOÍ}{ßAßIßJ¨节点1¨ßKßeßL¤EßDËßM´´ßEËßFÊßG´m1´´x´É´y´ÏßPßQ}{ßAßIßJ¨节点2¨ßKßeßL¤EßDËßM´´ßEËßFÊßG´m2´´x´É´y´ÐßPßQ}{ßAßIßJ¨节点3¨ßKßeßL¤EßDËßM´´ßEËßFÊßG´m3´´x´É´y´ÑßPßQ}{ßAßIßJ¨节点4¨ßKßeßL¤EßDËßM´´ßEËßFÊßG´m4´´x´É´y´ÒßPßQ}{ßAßIßJ¨节点5¨ßKßeßL¤EßDËßM´´ßEËßFÊßG´m5´´x´É´y´¤AßPßQ}{ßAßIßJ¨节点6¨ßKßeßL¤EßDËßM´´ßEËßFÊßG´m6´´x´É´y´¤BßPßQ}{ßAßIßJ¨节点7¨ßKßeßL¤EßDËßM´´ßEËßFÊßG´m7´´x´É´y´¤CßPßQ}{ßAßIßJ¨节点8¨ßKßeßL¤EßDËßM´´ßEËßFÊßG´m8´´x´É´y´¤DßPßQ}{ßAßIßJ¨节点9¨ßKßeßL¤EßDËßM´´ßEËßFÊßG´m9´´x´É´y´¤EßPßQ}{ßAßIßJ¨节点10¨ßKßeßL¤EßDËßM´´ßEËßFÊßG¨m10¨´x´É´y´¤FßPßQ}÷¨actions¨|¦¨cmd¨¦¨switch¨‡¨text¨‡´on´¨打开?name¨¨off¨¨关闭?name¨—÷¨triggers¨|{¨source¨ß1D¨source_zh¨¨开关状态¨¨state¨|´on´ß1G÷¨state_zh¨|´打开´´关闭´÷}÷´rt´|÷}

文本完整复制粘贴至QQ发送到手机,贴到APP界面配置(清空原配置),并点击更新

退回主页面后再进去就出现界面

7.打开程序

1.从文件管理器:打开项目文件夹 >打开设备端程序>主机GateWay_WiFi.ino/从机Subdevice_WiFi.ino

2.从已经开启的Arduino(比从文件管理器更快,且省运行内存):

三、设备端程序使用注意事项*3

1.原理:主机STA通道上连路由器登录Blinker;AP通道下连各mesh从机。从机:AP+STA都用来mesh。

主机(网关)程序 GateWay_WiFi.ino

从机(子设备)程序 Subdevice_WiFi.ino

2.所有设备(主机从机)必须必须必须和“路由器或手机热点”在“同一个”WiFi信道,不然主机不能边连Blinker边连从机

(ESP硬件设计导致必须在同一物理天线上分时跑AP和STA时,频道不能变)

#ifndef MESH_CHANNEL   //若未定义信道则定义:
#define MESH_CHANNEL      1             //1-13任意,mesh库默认1,必须跟着路由器信道设定,必须跟着路由器信道设定,必须跟着路由器信道设定
#endif

所以使用前先注释主机程序 GateWay_WiFi.ino 的 meshCheck();函数,只留Blinker.run()函数,让主机连WiFi测一下路由器WiFi信道。

void loop()
{
    Blinker.run();//Blinker通信
    //meshCheck();   //用//这样注释!!!!!!!!!!!!!!!!!!!!

看串口监视器,我写了个打印wifi.channel().

      //WiFi状态
        BLINKER_LOG( (WiFi.status() == WL_CONNECTED)?"WiFi已连接:":"wifi已断开", 
                      ",名称:",WiFi.SSID(),
                      ",密码:", WiFi.psk(),
                      ",信号强度:",WiFi.RSSI(),"dBm",
                      ",信道:",WiFi.channel(),
                      ",mesh设备数:",_subCount
                    );

类似下图

串口监视器看到这:就知道了信道11

WiFi已连接,名称:IoT,密码:1234567890,信号强度:-67dBm,信道:1

然后把数值1改到主机、从机程序的这里即可

#ifndef MESH_CHANNEL   //若未定义信道则定义:
#define MESH_CHANNEL      1             //1-13任意,mesh库默认1,必须跟着路由器信道设定
#endif

3.从机烧录时记得改:

DEVICE_ID 编号,对应APP按钮号。目前对接了10路按钮支持翻页。

MESH_DATA_COUNT 所需数据点数,决定上传下载时数组有多少个元素(元素全部浮点数,实现bool、int、float都可传递,满足智能家居大部分需求)

DEVICE_TYPE 类型目前就弄了个MeshRelay,后期出专用板的时候会有各种各样设备名称

//以下参数按需修改
#ifndef MESH_DATA_COUNT                 //若未定义本设备数据数量则:
#define MESH_DATA_COUNT   5             //按表定义
#endif
#ifndef DEVICE_TYPE                     //若未定义本设备类型则:
#define DEVICE_TYPE       "MeshRelay"   //按表定义
#endif
#ifndef DEVICE_ID                       //若未定义本设备类型则:
#define DEVICE_ID         1             //按序
#endif

4.如果要改功能的话

主机给从机叫下载用download_array[]数组

从机给主机叫上传用upload_array[]数组

主机通过类库存储数据,实现不同设备的便捷存储

通过此API函数修改或读取不同子设备的数组元素更加安全,不容易空指针崩溃

_data_write("MeshRelay",1,0,button1_state);//数组写入:向继电器1的第0个下发数据,写入button_1state;把APP数据送入继电器模块
_data_read("MeshRelay",1,1);//数组读取:读取继电器1的数据1;读取继电器模块的DHT11温度值

从机不用类库所以直接读写数组

        upload_array[0]=humi_read;  //BLINKER_LOG("Humidity: "   , humi_read, "%");                      //串口打印湿度
        upload_array[1]=temp_read;  //BLINKER_LOG("Temperature: ", temp_read, "°C");                     //串口打印摄氏度
        upload_array[2]=temp_read_f;//BLINKER_LOG("Temperature: ", temp_read_f, "°F");                     //串口打印华氏度
        upload_array[3]=hic;        //BLINKER_LOG("Heat index: ", hic,"*C");                     //摄氏体感温度(炎热指数)
        upload_array[4]=hif;        //BLINKER_LOG("Heat index: ", hif,"*F");                     //华氏体感温度(炎热指数) 

    if(download_array[0]==0)digitalWrite(RELAY_PIN,HIGH);//继电器高开低关
    else digitalWrite(RELAY_PIN,LOW);

连不上WiFi请注意

无论路由器还是手机热点还是 电脑热点,都不可以使用5G Wi-Fi,路由器不可以开启5G优选,或者是双频合一,必须使用路由器2.4G信号,必须使用有密码的Wi-Fi,校园网那种要登陆的必须转接路由器或电脑热点。

原理分析

MESH协议

表格已上传群文件

示例语句

{"data":{"get":"state"},"sender":{"type":"MeshNodeRelay","id":"1"},"receiver":{"type":"CentralController","id":"1"},"time":"1","uuid":"1"}

然后程序里一层一层解析

这是主机广播后,从机上传握手信息,主机解析的串口信息:

这是从机上传数据主机解析的串口信息:

主机握手所有设备后,打印设备状态列表:

从机的解析也差不多

API函数

主机写入从机状态的API函数

主机读取从机数据的API函数(组成心跳包上传服务器)这里写成了循环+字符串构造,避免一大排Text.print

通过直接在用户层ino文件调用头文件的API函数实现更简洁的mesh数据传递

数据个数

可以自己改成别的设备,以及修改主从机的MESH_DATA_COUNT实现更多上下发数据

修改MESH_DATA_COUNT其实就是增加浮点数数组的元素个数,为了mesh网络同时能发开关量(bool)、PWM占空比(int)、温湿度(float)所以就直接用浮点数通信,自己转换成对应变量类型即可

开发笔记(嫑细看没啥用)

blinker库直到前年才删除painlessMESH模组(painless MESH从2016更新至今,测试例程感觉还挺好用的),gateway和subdevice的库文件保留了下来,观察过后认为比较易懂就拿来用了,不然自己写真的一点头绪没有,毕竟类库也就细看过blinker这一个。要一下子把几百个变量的通信全部基于简单WiFiUDP实现不太现实,而且UDP丢包很烦。还得是类库,按类别设置变量管理设备各个属性,实例之间还互不影响。确实是升级版的结构体了

Blinker库的MESH主要就BlinkerGateway.h和BlinkerSubdevice.h两个头文件,设备状态存储引用BlinkerUtility.h的SubDevice类实现,所以扣过来放自己头文件里了。本来点灯的MESH仅负责所有设备连接服务器授权以及消息转发的。考虑今年专属设备都下线了,就改成自己的MESH,然后对接独立设备的API就好了。所有服务器相关代码全部去掉,只保留MESH的数据解析。原本要#define BLINKER_GATEWAY或SUBDEVICE的现在只要BLINKER_WIFI

总体的原理就是meshCheck先执行painlessMESH库的mesh.init,就配置好WiFi了,这里为防止mesh占用STA,阻止点灯通信,特地把mesh库init修改了,无论输入WIFI_AP还是WIFI_AP_STA都会设置模式为WIFI_AP_STA,而mesh库在输入WIFI_AP 时只会占用AP通道,从而留出STA通道给Blinker通信。

然后mesh.update被meshCheck循环执行,由于init时设置回调函数,所以如有来信mesh.update会调用_received_callback,把消息传到用户层,验证ID等信息后即可将数据存缓冲区,meshBuf

之后meshCheck通过检测_received_callback里给出的标志位,将meshbuf的数据按ID送入对应SubDevice实例,就完成数据上传的收储;下发就是根据ID读数据并发子设备处理,还有应答也是这个原理。

理论上painlessMESH基于TCP不需要像UDP那样应答确认没有丢包,但是还是做了这个机制测试链路速度,延迟100-300ms感觉很不错了,智能家居快也没啥用。

Mesh乱七八糟调试记录

2024.1

wifi.hpp第68行可修改

meshId

wifi.hpp第104行

init函数的通道默认=1

所以BlinkerGateway.h第2704行 也要1

wifi.hpp里面取消152-167行

 使tcp连接取消(然后发现这里不能取消,因为除了连接Wi-Fi需要用这个之外连接mesh也需要

painnlessMeshSTA.cpp

25行恢复

TaskSchedularDeclarations.h第 62行Task second改10UL

使

painnlessMeshSTA.cpp第10行SCAN_INTERVA L变小

BlinkerGateway.h第2707行,直接不要manual设置TCP连接,然后可以扫描mesh,不然一直在扫Wi-Fi,需要解决

BlinkerSubDevice.h第1076行

_isHello=true;注释,一直广播

BlinkerGateway.h第2730行、2699行

注释先不连接Wi-Fi直接扫描mesh

init必须有那个root

mesh.hpp

回调触发

2024.2.3

阻止连接Wi-Fi

只需要manual注释掉

 不需要

wifi.hpp里面取消152-167行

 使tcp连接取消(然后发现这里不能取消,因为除了连接Wi-Fi需要用这个之外连接mesh也需要

然后观察发现消息接收由于json并没有成功解析,导致问题继续观察库代码on received回调函数

2024.2.5

解决了painlessMesh与点灯Wi-Fi模式的兼容性问题

原因:两个库都基于ESPAsync TCP库,尽管有#ifndf防止.h头文件被重复声明,但是.c文件不包含此机制,因此被声明了两遍(mesh库引用了8266开发板库的TCP库;点灯库引用了module文件夹自带的TCP。所以是有两组.h和.c)

解决方法:通过添加BLINKER_MESH关键字防止重复定义

2024.2.7

搞了半天总是出现manual就卡住的情况

然后发现换库解

浪费了整整一周

2024.2.12

务必同一信道并且Json格式

然后发现mesh库ap+sta后初始化station,禁用即可,manual也禁用,然后保持连接true,这样blinker的Wi-Fi.begin就可配置STA,而mesh库只管AP部分

2024.2.14

Wi-Fi.hpp中init函数:

Wi-Fi.mode(AP+STA);让mode默认AP+STA

而station scan根据init函数,主设备只有AP,不开启station .init从设备才AP+STA开启station.init

2024.2.15

程序编写完成后发现崩溃,是由于引用了不存在的实例,因为实例编号查询函数在新建实例后没有重新执行,导致之前查询的-1进入引用

然后没有连接mesh的时候发生卡顿,是因为刷新的时候引用了get parse来对设备进行状态发布,但是此时可能还没有新建设备,就会导致崩溃,所以注意查询后再进行发布

按钮回调函数中查询对应继电器之后get parse函数中没有将信息返回到正确的ID因为使用了最近来信id实际应该使用当前所在实例的id

2024.2.17-18规范化、视频以及教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值