莫张周刘王 发表于 2024-8-26 07:51:24

【小爱同学】[Blinker·点灯科技]2024最新-小爱联动4路继电器 浅易开源教程

合集地点:Arduino中文社区
CSDN为备份,最新看↑arduino.me

打开方式

本系列教程发起在电脑端打开更快
https://img-blog.csdnimg.cn/img_convert/2031bd54d99c5cfcd68d0b486624f76c.webp?x-oss-process=image/format,png
手机端切换文章请点击左下角专题目次
文章内切换章节请点击左下角文章大纲
资料下载、教程持续更新:
点灯开源项目分享群2:QQ 913319679
目次

时间戳
前言
资料下载
硬件购买
阐明书:
一、程序由来
二、环境安装
三、操作步骤
四、代码原文(带注释供参考)
时间戳

上一期更新:2024年2月1日
本文更新时间:2024年3月14日
代码资源更新时间:2024年1月26日
前言

开发环境必须按照此教程第二章《软件开发环境搭建》举行设置
不按该方法设置,库版本不对必出题目

纯新手先做一遍【新手入门】2024-最新开发环境+温湿度节点+继电器  详细开源教程比力好
地点:Arduino中文社区
上述新手教程找新手测试过,步骤截图全

本人全部合集https://arduino.me/s/35?aid=2757
免费调试QQ1836035711,任何题目都可以问
资料下载

1.下载方式

临时仅能从QQ 群的群文件下载
点灯开源项目分享群2:QQ 913319679
此群只提供各类开源分享,可向群主投稿,为避免打搅,不聊天
教程等任何题目都可找群主,免费调试,有空就回
群文件:

https://img-blog.csdnimg.cn/img_convert/60ff61a740a5d340a63f04a04b288ff5.webp?x-oss-process=image/format,png
2.资料内容

小爱联动4路继电器.rar
包含
MIOT_Blinker_MULTI_OUTLET.ino
未搭建环境还需下载
Blinker-DHT11-继电器-纯小白入门超详细版全套教程资料.rar
详见第二章环境搭建
3.资料注意

调试出现任何题目先看【新手必看】2024最新-常见题目大全
仍存在则咨询群主。
如有咨询需要,也可前去点灯官网>开发文档>加点灯2000人官方群。
硬件购买(仅推荐)

NodeMCU
(Node MCU基于ESP12F模组(金属屏蔽罩这块),而ESP12模组基于ESP8266芯片和flash芯片)

https://img-blog.csdnimg.cn/img_convert/d99a8926313c95b5b31b1d3699381021.webp?x-oss-process=image/format,png

高电平触发继电器

https://img-blog.csdnimg.cn/img_convert/1bb5f10a210a641997dbcb5d971c02a4.webp?x-oss-process=image/format,png
高/低电平触发继电器

https://img-blog.csdnimg.cn/img_convert/82f3b5021c637e2e252c185ec6e80676.webp?x-oss-process=image/format,png
无论用哪款继电器模组,记得:

高电平触发的模组寻常是低电平0V,单片机输出3.3V高电平才吸合,利用推挽输出:
pinMode(RELAYPIN_1, OUTPUT); 低电平触发的模组寻常是高电平5V,单片机输出0V高电平才吸合,避免5V灌入单片机3.3V回路,利用开漏输出:
pinMode(RELAYPIN_1, OUTPUT_OPEN_DRAIN); 参考资料:【NodeMcu-ESP8266】引脚利用参考指南http://t.csdnimg.cn/OtETF
利用阐明书

一、程序组成(发起打开看一下原版)

1.联动插座例程MIOT_MULTI_OUTLET


https://img-blog.csdnimg.cn/img_convert/8c52bcae3f0036ca21a4b733cdb95cdd.webp?x-oss-process=image/format,png
2.按键尺度处置惩罚函数(本案例将button1_state替换为oState,以便与小爱共同控制)

bool button1_state=false;     // 按钮1状态全局变量
//下面这句是类库实例化语句,类名BlinkerButton(按钮组件类),实例名Button1,数据键名“b1”,当blinker.run检测到APP发来数据包含键名“b1”就调用回调button1_callback。
BlinkerButton Button1("b1",button1_callback);//用此句不需要在setup里attach回调了
void button1_callback(const String & state)//按钮1回调函数,按下后设备开启继电器1
{
    if(state=="tap"){button1_state=!button1_state;}//普通按键:tap反转状态
    else if(state=="on"){button1_state=true;}      //开关按键:on 短按开启
    else if(state=="off"){button1_state=false;}    //开关按键:off短按关闭
    else if(state=="press"){button1_state=true;}   //普通按键或开关按键:press长按开启
    else if(state=="pressup"){button1_state=false;}//普通按键或开关按键:pressup松开关闭
    Button1.print(button1_state?"on":"off");//反馈状态到APP
    digitalWrite(RELAYPIN_1,!button1_state);//输出到继电器
} 3.心跳包例程


https://img-blog.csdnimg.cn/img_convert/92c4c8809c3cfbce28efcfeb38c119b5.webp?x-oss-process=image/format,png
void heartbeat ()                               //用户心跳包回调函数,Blinker.run检测到APP每30秒 get:state 请求心跳包时会顺带执行此函数
{

}
setup()
{

Blinker.attachHeartbeat(heartbeat);         //注册用户心跳包回调函数,Blinker.run检测到APP每30秒 get:state 请求心跳包时会顺带执行此函数
   
} 以上三个合并为本教程代码MIOT_Blinker_MULTI_OUTLET.ino,第四章可预览注释版代码

二、软件开发环境搭建

详见此文:
【新手必看】2023-最新开发环境+温湿度节点+继电器 详细开源教程
第二章

不按该方法设置,库版本不对会出题目:
Blinker库必须官网最新,不能从开发板管理器更新
ESP8266库必须3.0.1
ESP32库必须2.0.7

此项目内容少,推荐用8266做(ESP32也兼容)
(把第二章复制过来了)

群里下载Blinker-DHT11-继电器-纯小白入门超详细版全套教程资料.rar
解压,然后打开
https://img-blog.csdnimg.cn/img_convert/245e7f1672940ca554950d3b7174ffa7.webp?x-oss-process=image/format,png
可见

https://img-blog.csdnimg.cn/img_convert/f372a2b071307508fe94f9df76ec7ff4.webp?x-oss-process=image/format,png
此中exe尽量管理员身份运行
1.安装Arduino

右键管理员身份运行
https://img-blog.csdnimg.cn/img_convert/2a303ad709579caf23e4c67dc2ab43db.webp?x-oss-process=image/format,png
装过的忽略,Arduino2.0亦可,但是后面几步尽量一样
2.安装硬件库(又名开发板库、package)

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

1.离线安装:右键管理员身份运行本教程附带的离线安装包
https://img-blog.csdnimg.cn/img_convert/d9d46e81a98ee275c398bb46ffe451e5.webp?x-oss-process=image/format,png
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
注:用户名换成你自己的用户名!
注:不管Arduino装在哪,这个硬件库都装到了C盘的用户文件夹!
注:AppData是隐藏文件夹,要点击查察
https://img-blog.csdnimg.cn/img_convert/836f6aabe26f1403cb282a3d092673ed.webp?x-oss-process=image/format,png
开启隐藏的项目
https://img-blog.csdnimg.cn/img_convert/47c2846ce3a7a53fae7f75c3278ceb65.webp?x-oss-process=image/format,png
才能查察

也可主动前去:在地点栏粘贴%LOCALAPPDATA%/Arduino15/packages

效果如图:

https://img-blog.csdnimg.cn/img_convert/6a8b2e6501aeeb1a627ab2b56b68e80e.webp?x-oss-process=image/format,png

警告:安装过的请查抄:版本不要低于2.7.4,不要高于3.0.2(3.1开始会与点灯库辩说)
假如安装过其他版本的 package,请先删除或剪切走,再利用本安装包,
删除方法:文件管理器地点栏输入 %LOCALAPPDATA%/Arduino15/packages,回车进入,然后删除掉此中的esp32文件夹
3.安装软件库(又名Blinker库、Blinker Arduino SDK)

1.手动复制(推荐):

https://img-blog.csdnimg.cn/img_convert/52a00d8061a0ccfd68b0044e503006d8.webp?x-oss-process=image/format,png
复制或剪切到C:\Users\用户名\Documents\Arduino\libraries
https://img-blog.csdnimg.cn/img_convert/d8c4d4516eed0551a5e5ef0f95f436b7.webp?x-oss-process=image/format,png
注:不管Arduino装在哪,这个软件库都在C盘的用户文件夹!

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

https://img-blog.csdnimg.cn/img_convert/13f831d7266329c75f7641a13e897465.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/299c00c78395a6a4b0d29bfc7e49c871.webp?x-oss-process=image/format,png
Blinker等第三方软件库文件位置C:\Users\用户名\Documents\Arduino\libraries
4.设置Arduino——管理网址、行号、折叠、编译信息

打开Arduino>文件>首选项>附加开发板管理器网址>
https://img-blog.csdnimg.cn/img_convert/902dbf4ba0a6e407901dc04798ef0faa.webp?x-oss-process=image/format,png
,粘贴:
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

https://img-blog.csdnimg.cn/img_convert/ed28d671d4e2b7645a8c027411f666cf.webp?x-oss-process=image/format,png

https://img-blog.csdnimg.cn/img_convert/d1a840b730a65a9d052f288e4088ea3f.webp?x-oss-process=image/format,png

https://img-blog.csdnimg.cn/img_convert/b25255e0f23700cd72194f2a1ecfbb31.webp?x-oss-process=image/format,png
5. BlinkerAPP

安卓最新版本在官网下点灯科技-点灯物联网办理方案
iOS直接在APPStore搜Blinker(默认最新)
另外iOS最新版本号与安卓差异步
6. APP界面设置

先申请设备(设备数量已达上限,免费获取,见第五章第3节)
在Blinker APP右上角点击⊕>添加设备>独立设备>网络接入>复制授权码>QQ发电脑>贴至程序


https://img-blog.csdnimg.cn/img_convert/1ebdd2d585aae77fe6fcdf34081f43e2.webp?x-oss-process=image/format,png
界面设置在程序的注释
(冒号后的文本完整复制粘贴至QQ发送到手机,贴到APP界面设置(清空原设置),并点击更新)
退回主页面后再进去就出现界面

https://img-blog.csdnimg.cn/img_convert/26ea839ce9fc6ffb39d9b2c46dd13913.webp?x-oss-process=image/format,png
{¨version¨¨2.0.0¨¨config¨{¨headerColor¨¨transparent¨¨headerStyle¨¨dark¨¨background¨{¨img¨¨assets/img/headerbg.jpg¨¨isFull¨«}}¨dashboard¨|{¨type¨¨btn¨¨ico¨¨fal fa-power-off¨¨mode¨Ê¨t0¨¨继电器1¨¨t1¨¨文本2¨¨bg¨Ê¨cols¨Ë¨rows¨Ë¨key¨¨b1¨´x´É´y´Ï¨clr¨¨#00A90C¨¨lstyle¨Ê}{ßCßDßEßFßGÊßH¨继电器2¨ßJßKßLÊßMËßNËßO¨b2¨´x´Ë´y´ÏßQßRßSÊ}{ßCßDßEßFßGÊßH¨继电器3¨ßJßKßLÊßMËßNËßO¨b3¨´x´Í´y´ÏßQßRßSÊ}{ßCßDßEßFßGÊßH¨继电器4¨ßJßKßLÊßMËßNËßO¨b4¨´x´Ï´y´ÏßSÊßQßR}{ßC¨deb¨ßGÉßLÉßMÑßNÌßO¨debug¨´x´É´y´Ò}{ßCßDßEßFßGÊßH¨总开¨ßJßKßLÊßMËßNËßO¨b0¨´x´É´y´ÍßQßRßSÉ}÷¨actions¨|¦¨cmd¨¦¨switch¨‡¨text¨‡¨on¨¨打开?name¨¨off¨¨关闭?name¨—÷¨triggers¨|{¨source¨ßf¨source_zh¨¨开关状态¨¨state¨|ßhßj÷¨state_zh¨|¨打开¨¨关闭¨÷}÷¨rt¨|÷}

设备设置里面点击界面设置,全选粘贴进去,前面不要有回车啥的,然后更新设置,退回主界面,再进入设备界面就好了


https://img-blog.csdnimg.cn/img_convert/e6dee778fa7e3c5b764ba5a7af694395.webp?x-oss-process=image/format,png

https://img-blog.csdnimg.cn/img_convert/256643196c0f9fee1d2914f1d3994cd0.webp?x-oss-process=image/format,png

手动设置看这个:

https://img-blog.csdnimg.cn/img_convert/5c58336e9e24d4a268f245283bbecd51.webp?x-oss-process=image/format,png
7.打开程序

1.从文件管理器:打开项目文件夹 >打开设备端程序
2.从已经开启的Arduino(比从文件管理器更快,且省运行内存):

https://img-blog.csdnimg.cn/img_convert/ea17d3bbab8b5f83cc466c82e1f45fba.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/a47e22bf0f7d5f59dc0ceada97f0f3f0.webp?x-oss-process=image/format,png
三、操作步骤

1.确保您已经设置好上述开发环境

2.打开MIOT_Blinker_MULTI_OUTLET.ino(见前文资料下载)

选择Node MCU开发板
毗连USB线,选择好端口

https://img-blog.csdnimg.cn/img_convert/124cdd1b7ae740c024fb1814548fad72.webp?x-oss-process=image/format,png
4.自己的WiFi名、暗码、继电器引脚(程序附带了Node MCU引脚表和ESP01S引脚阐明)


https://img-blog.csdnimg.cn/img_convert/61049ae844b5c932a3c129a46895159a.webp?x-oss-process=image/format,png
5.上传

上传详细步骤见入门教程第八章《烧录》
【新手入门】2024-最新开发环境+温湿度节点+继电器  详细开源教程
Arduino中文社区

以下为简版步骤:
nodeMCU、别的CH340烧录器的开发板
直接上传

https://img-blog.csdnimg.cn/img_convert/add6372aaf6fdfbb66d6b3c8df2366c4.webp?x-oss-process=image/format,png
失败则:
上传前打开Arduino串口监督器确认通信
按住烧录底板RST和IO0按钮
插USB线
打开arduino串口监督器
先松开RST按钮,再松开IO0按钮

https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Farduino.me%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fimage%2F42b2962d5d62812b5ab5ca64223aa5c7.webp&pos_id=IuHOUN03

看到语句:waiting for download 等候下载
即可点击arduino右箭头上传代码
若没有则在工具里面切换端口,直到有,没端口阐明要重装串口驱动


https://img-blog.csdnimg.cn/img_convert/4c966c0c46a1d0c2cb18d8ccd466284f.webp?x-oss-process=image/format,png
6.调试

正常编译并上传后出现毗连WiFi(如图)
若串口监督器无信息,波特率115200,并按RST重置
得如下调试记载

https://img-blog.csdnimg.cn/img_convert/7d9eb1473e85bf554eb6da9a8253cb22.webp?x-oss-process=image/format,png



https://img-blog.csdnimg.cn/img_convert/1c13a8fff48df32e70e22838251e4a06.webp?x-oss-process=image/format,png
连不上WiFi请注意

无论路由器还是手机热门还是 电脑热门,都不可以利用5G Wi-Fi,路由器不可以开启5G优选,或者是双频合一,必须利用路由器2.4G信号,必须利用有暗码的Wi-Fi,校园网那种要登陆的必须转接路由器或电脑热门。
7.模块IP地点固定(可跳过)

默认IP地点路由器主动分配,如需固定,请在setup函数外添加
    //上联路由器的静态IP   WiFi.config
    IPAddress sip(192,168,1,200);      //手动设置静态IP 连接网络ip
    IPAddress sip1(192,168,1,1);       //本地网关
    IPAddress sip2(255,255,255,0);   //本地子网掩码 并在setup函数内的WiFi.begin前添加
    //上联路由器wifi
    WiFi.config(sip,sip1,sip2);//设置上联路由器网络参数 如图所示:
https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Farduino.me%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fimage%2F77d6bd1b5d6b88249609f24828350171.webp&pos_id=QduvJrwQ
完成后同样上传
https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Farduino.me%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fimage%2F8307d1c0bcae14aa0230f2f2f61745fc.webp&pos_id=4OvaztzI
8.先在BlinkerAPP测试

(先测试BlinkerAPP,通了才能去米家,不通查前面步骤,看串口监督器是不是WiFi没连上,或者库没更新)
https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Farduino.me%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fimage%2Fb5375fee6bfc2f1ad57a33d50aed623b.webp&pos_id=qtDLo1rw

https://img-blog.csdnimg.cn/img_convert/c8a54c6f4ccb4491e4a294c18af96c3c.webp?x-oss-process=image/format,png
9.再去米家APP添加设备

https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Farduino.me%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fimage%2F5b5e3484e6827e690c6a953040b5508c.webp&pos_id=3SqGjLWm
点击我的

https://img-blog.csdnimg.cn/img_convert/f5278730bb099cf7225eb5ea847be7cd.webp?x-oss-process=image/format,png
点击其他平台设备
https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Farduino.me%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fimage%2Fa889814b5f17c7a35c8641d720e348fc.webp&pos_id=IxPxeLwQ
找到点灯科技

https://img-blog.csdnimg.cn/img_convert/529bafa17d7df158d65be39d45d8cd36.webp?x-oss-process=image/format,png
点击绑定账号

https://img-blog.csdnimg.cn/img_convert/56c6905a756f829ba45bf5dce85e00ce.webp?x-oss-process=image/format,png
点击同步设备

https://img-blog.csdnimg.cn/img_convert/ae731a33379493363d73ee4d8b17cf3f.webp?x-oss-process=image/format,png
同步乐成

https://img-blog.csdnimg.cn/img_convert/0825d59e8ac621ff039dc0bc79263a6a.webp?x-oss-process=image/format,png
米家里面控制不了,要去小爱
10.小爱APP或智能音箱上利用设备


https://img-blog.csdnimg.cn/img_convert/48797b9df190efd33f6a59ad0c61441a.webp?x-oss-process=image/format,png
点击头像
https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Farduino.me%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fimage%2F918cd7bc6b28a83c387ab7b16b58569d.webp&pos_id=S1b2NOov
点击我的设备

https://img-blog.csdnimg.cn/img_convert/ceef04102a12de373dcbeaa266c0bbc0.webp?x-oss-process=image/format,png
点击智能家居

https://img-blog.csdnimg.cn/img_convert/cdd2b497dbcbaae0ee46dcebcb99a407.webp?x-oss-process=image/format,png
查察命令后返回

https://img-blog.csdnimg.cn/img_convert/b51687bf8df1df3778841adc00612647.webp?x-oss-process=image/format,png
对小爱说话或左下角键盘输入

https://img-blog.csdnimg.cn/img_convert/99d6cfd3d5abefa504342f22df0e9076.webp?x-oss-process=image/format,png
11.硬件接线

图见硬件购买
无论用哪款继电器模组,记得
高电平触发的模组寻常是低电平0V,单片机输出3.3V高电平就吸合,利用推挽输出:pinMode(RELAYPIN_1, OUTPUT);
低电平触发的模组寻常是高电平5V,单片机输出0V高电平就吸合,避免5V灌入单片机3.3V回路,利用开漏输出:pinMode(RELAYPIN_1, OUTPUT_OPENDRAIN);
参考资料:NodeMCU ESP8266 GPIO利用详解(图文并茂)(NodeMCU ESP8266 GPIO利用详解(图文并茂))

IO接线在程序前有#define RELAYPIN_1

https://img-blog.csdnimg.cn/img_convert/61049ae844b5c932a3c129a46895159a.webp?x-oss-process=image/format,png
继电器输入端电源5V可以接开发板,若出现开发板被反向尖峰电压冲击重启,则另接5V,
记得继电器GND必须和开发板GND共地
IO接继电器信号
输出端NO、NC、COM不要接开发板以便隔离外部电路,尤其外部电路为直流感性负载或为220V时
NO:normal open 常开,寻常与公共点断开
NC:normal close 常闭,寻常与公共点闭合
COM:common 公共端
继电器通电COM接NO,断电COM连回NC


12.别的硬件/接法

(1)利用真·智能插座(自己做,开源链接他没公布)

烧录需要烧录架或焊接线(VCC、GND、TXD、RXD、GPIO0、RST)

https://img-blog.csdnimg.cn/img_convert/aca792d02bf32ddbe0e97757d73feeb6.webp?x-oss-process=image/format,png

https://img-blog.csdnimg.cn/img_convert/ee841e294423b30f1a69f17592bf938f.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/5e10efad724bba71d1d80f30aba8d66e.webp?x-oss-process=image/format,png
(2)利用串口继电器(我的毕业设计,即将开源)


https://img-blog.csdnimg.cn/img_convert/29f80750f1b5af7c495d3b478851f388.webp?x-oss-process=image/format,png
https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Farduino.me%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fimage%2F318828b7cfac2c4ce7b05486d162e6f9.webp&pos_id=Sucu4Rmd
四、代码原文(带注释供参考)

/* *****************************************************************
* 日期:2024年1月26日   
* 本案例教程:
* 技术支持qq:1836035711
* *****************************************************************
* 使用前检查——软硬件配置

//1.开发板搜索关键词:NodeMcu 、四路继电器 或 继电器底板智能插座WIFI模块适用于ESP8266ESP-01/01S板
//2.开发板管理网址:填写在Arduino>文件>首选项>附加开发板管理网址 https://arduino.esp8266.com/stable/package_esp8266com_index.json
//3.硬件(开发板)库: 自动离线安装包下载地址https://www.123pan.com/s/dJrKVv-QEGB选择ESP8266的2.7.4~3.0.2版本
//                运行后会创建C:\Users\用户名\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2
//(1)ESP01S 开发板选择Arduino>工具>开发板>ESP8266Boards>generic esp8266 module
//(2)NodeMCU开发板选择Arduino>工具>开发板>ESP8266Boards>NodeMCU 1.0(ESP12E Module)
//4.软件(Blinker)库下载:官网下载https://diandeng.tech/dev(选Arduino SDK)
//                  或 GitHub下载master总版(推荐)https://github.com/blinker-iot/blinker-library/tree/master(点击Code>Download ZIP)
//            下载后:自动添加方式:Arduino>项目>加载库>添加.ZIP库               
//                  手动解压并放置在C:\Users\用户名\Documents\Arduino\libraries文件夹
//5.Blinker APP 下载本:官网下载https://diandeng.tech/dev

//6.APP界面配置(冒号后的文本完整复制粘贴至QQ发送到手机,黏贴到APP界面配置(清空原配置),并点击更新):{¨version¨¨2.0.0¨¨config¨{¨headerColor¨¨transparent¨¨headerStyle¨¨dark¨¨background¨{¨img¨¨assets/img/headerbg.jpg¨¨isFull¨«}}¨dashboard¨|{¨type¨¨btn¨¨ico¨¨fal fa-power-off¨¨mode¨Ê¨t0¨¨继电器1¨¨t1¨¨文本2¨¨bg¨Ê¨cols¨Ë¨rows¨Ë¨key¨¨b1¨´x´É´y´Ï¨clr¨¨#00A90C¨¨lstyle¨Ê}{ßCßDßEßFßGÊßH¨继电器2¨ßJßKßLÊßMËßNËßO¨b2¨´x´Ë´y´ÏßQßRßSÊ}{ßCßDßEßFßGÊßH¨继电器3¨ßJßKßLÊßMËßNËßO¨b3¨´x´Í´y´ÏßQßRßSÊ}{ßCßDßEßFßGÊßH¨继电器4¨ßJßKßLÊßMËßNËßO¨b4¨´x´Ï´y´ÏßSÊßQßR}{ßC¨deb¨ßGÉßLÉßMÑßNÌßO¨debug¨´x´É´y´Ò}{ßCßDßEßFßGÊßH¨总开¨ßJßKßLÊßMËßNËßO¨b0¨´x´É´y´ÍßQßRßSÉ}÷¨actions¨|¦¨cmd¨¦¨switch¨‡¨text¨‡¨on¨¨打开?name¨¨off¨¨关闭?name¨—÷¨triggers¨|{¨source¨ßf¨source_zh¨¨开关状态¨¨state¨|ßhßj÷¨state_zh¨|¨打开¨¨关闭¨÷}÷¨rt¨|÷}

* NodeMCU开发板的GPIO和板上引脚对应:(GPIO是ESP8266引脚号,D几是开发板上引脚号,ESP01s用Generic8266Moudle编译,直接写GPIO号,NodeMCU用NodeMCU1.0编译两个都可以)
*
* D0-GPIO16(属于断电计时RTC模块,用于深度睡眠唤醒,但可以配置为GPIO,另外无法触发普通中断)
* D1-GPIO5
* D2-GPIO4
* D3-GPIO0   (开机时输入高电平进入运行模式,开机时输入低电平进烧录模式,烧录模式不执行用户程序)
* D4-GPIO2   (开机必须输入高电平,UART1TXD 只有发送功能,可作打印 log)
* D5-GPIO14
* D6-GPIO12
* D7-GPIO13
* D8-GPIO15(开机时必须输入低电平)
* D9-GPIO3   (初始化Serial后用于硬件串口0即UART0)
* D10-GPIO1(初始化Serial后用于硬件串口0即UART0)(开机时必须输入高电平)
* A0-ADC0    (整个开发板只有一个模拟输入引脚,且模拟电压值为0-1.0V)
* 注意:
* (1)GPIO4,12,14,15支持14位高精度硬件PWM
* (2)GPIO9、10在DUAL4线制式flash通信可用,QUAD6线制时不可用,嫌IO少可以选择内置flash 的8285或ESP32系列
* (3)GPIO6-11基本不用来进行通用输入输出,一般用于连接开发板的闪存(flash程序存储器,烧录程序的地方)
* (4) EN 任何时候:高电平有效,芯片正常工作;低电平芯片关闭,电流很小
* *****************************************************************/
//先定义通讯模式、小米小爱MIOT标志
#define BLINKER_WIFI
#define BLINKER_MIOT_MULTI_OUTLET
//再包含Blinker库
#include <Blinker.h>
//定义通讯参数 供Blinker.begin()初始化函数调用*************************************************************************以下三行必须修改!!!!!!!!!!!!!!!!!!!!!!!!!!
char auth[] = "******************修改为自己的点灯授权码*************";//授权码
char ssid[] = "******************修改为自己的Wifi名****************";//WiFi名   必须是2.4G不能5G,路由器不能开双频合一或5G优选,必须有密码的WiFi,可以用电脑或手机热点,设置方法百度搜
char pswd[] = "******************修改为自己的WiFi密码**************";//WiFi密码
//定义四个继电器所在引脚(参考上文nodemcu开发板引脚表,ESP01S只能0和2,另外两个可以随意写一个nodemcu开发板引脚表里的GPIO号)
#define RELAYPIN_1 16         //D0
#define RELAYPIN_2 5            //D1
#define RELAYPIN_3 4            //D2
#define RELAYPIN_4 0            //D3(开机时GPIO0输入高电平进入运行模式,输入低电平进烧录模式,烧录模式不执行用户程序,若您继电器模块为高电平触发,平时低电平,则不可连接此引脚,需要换D5(GPIO14)
//定义全局变量
bool fresh=true;//刷新标志
bool oState = { false };//继电器输出状态数组:总开关(0)与四个继电器状态(1~4)一共5个布尔值:布尔变量true=1=HIGH高电平,false=0=LOW=低电平

void miotPowerState(const String & state, uint8_t num)//小爱同学修改继电器状态回调函数
{
    BLINKER_LOG("need set outlet: ", num, ", power state: ", state);//串口打印修改的继电器编号和写入的状态

    if (state == BLINKER_CMD_ON)                                    //若状态为开   
    {   
      oState = true;                                       //则状态赋值:向状态数组写入true(loop函数里会将其输出到继电器对应引脚)
      BlinkerMIOT.powerState("on", num);                        //反馈该继电器开了
      BlinkerMIOT.print();                                        //发送反馈
      if (num != 0) oState = true;                           //若打开的不是总开关,则打开总开关,允许分开关输出
    }
    else if (state == BLINKER_CMD_OFF)                              //若状态为关
    {
      oState = false;                                        //则状态赋值:向状态数组写入false(loop函数里会将其输出到继电器对应引脚)
      BlinkerMIOT.powerState("off", num);                         //反馈该继电器关了
      BlinkerMIOT.print();                                        //发送反馈
      if (num == 0)for (uint8_t o_num = 0; o_num < 5; o_num++)oState = false;//若关闭的是总开关,则将四个继电器全部关闭(开启总开关不会使继电器全部打开,只是允许输出)
    }
    fresh=true;//用标志位告诉loop函数刷新继电器状态
}

void miotQuery(int32_t queryCode, uint8_t num)//小爱同学通过点灯服务器查询继电器状态
{
    BLINKER_LOG("MIOT Query outlet: ", num,", codes: ", queryCode);//串口打印调试的继电器编号、查询的项目

    switch (queryCode)                                              //检测编号
    {
      case BLINKER_CMD_QUERY_ALL_NUMBER :                         //当项目为查询全部
            BLINKER_LOG("MIOT Query All");                        //串口打印全部
            BlinkerMIOT.powerState(oState ? "on" : "off", num);//反馈全部状态
            BlinkerMIOT.print();                                    //发送反馈
            break;
      case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :                  //当项目为查询电源状态
            BLINKER_LOG("MIOT Query Power State");                  //串口打印电源状态
            BlinkerMIOT.powerState(oState ? "on" : "off", num);//反馈电源状态
            BlinkerMIOT.print();                                    //发送反馈
            break;
      default :                                                   //当项目为查询其它
            BlinkerMIOT.powerState(oState ? "on" : "off", num);//反馈电源状态
            BlinkerMIOT.print();                                    //发送反馈
            break;
    }
}

void dataRead(const String & data)            //dataread函数,若Blinker APP数据包含未注册的组件键名,或无键名的多余数据则会进入此函数处理,例如输入框或调试组件输入的文本
{
    BLINKER_LOG("Blinker readString: ", data);//串口打印多余数据
    Blinker.vibrate();                        //Blinker APP震动   
    uint32_t BlinkerTime = millis();            //取时间戳
    Blinker.print("millis", BlinkerTime);       //向Blinker APP反馈时间戳
}
//点灯APP修改继电器0状态
BlinkerButton Button0("b0",button0_callback);//类库实例化语句,类名BlinkerButton按钮组件,实例名Button0,组件键名“b0”用句不需要在setup里attach了
void button0_callback(const String & state)    //按钮0回调函数,按下后设备开启继电器0
{
    if(state=="tap"){oState=!oState;}    //普通按键:tap反转状态
    else if(state=="on"){oState=true;}      //开关按键:on 短按开启
    else if(state=="off"){oState=false;}    //开关按键:off短按关闭
    else if(state=="press"){oState=true;}   //普通按键或开关按键:press长按开启
    else if(state=="pressup"){oState=false;}//普通按键或开关按键:pressup松开关闭
    Button0.print(oState?"on":"off");       //反馈状态到APP
    //digitalWrite(RELAYPIN_0,!oState);       //不输出到继电器
    if (state=="off")for (uint8_t o_num = 0; o_num < 5; o_num++)oState = false;//若关闭的是总开关,则将四个继电器全部关闭(开启总开关不会使继电器全部打开,只是允许输出)
    fresh=true;
}
//点灯APP修改继电器1状态
BlinkerButton Button1("b1",button1_callback);//类库实例化语句,类名BlinkerButton按钮组件,实例名Button1,组件键名“b1”用句不需要在setup里attach了
void button1_callback(const String & state)    //按钮1回调函数,按下后设备开启继电器1
{
    if(state=="tap"){oState=!oState;}    //普通按键:tap反转状态
    else if(state=="on"){oState=true;}      //开关按键:on 短按开启
    else if(state=="off"){oState=false;}    //开关按键:off短按关闭
    else if(state=="press"){oState=true;}   //普通按键或开关按键:press长按开启
    else if(state=="pressup"){oState=false;}//普通按键或开关按键:pressup松开关闭
    Button1.print(oState?"on":"off");       //反馈状态到APP
    digitalWrite(RELAYPIN_1,!oState);       //输出到继电器
    if (state=="on")oState = true;          //若打开的不是总开关,则打开总开关,允许分开关输出
    fresh=true;
}
//点灯APP修改继电器2状态
BlinkerButton Button2("b2",button2_callback);//类库实例化语句,类名BlinkerButton按钮组件,实例名Button2,组件键名“b2”用句不需要在setup里attach了
void button2_callback(const String & state)    //按钮2回调函数,按下后设备开启继电器2
{
    if(state=="tap"){oState=!oState;}    //普通按键:tap反转状态
    else if(state=="on"){oState=true;}      //开关按键:on 短按开启
    else if(state=="off"){oState=false;}    //开关按键:off短按关闭
    else if(state=="press"){oState=true;}   //普通按键或开关按键:press长按开启
    else if(state=="pressup"){oState=false;}//普通按键或开关按键:pressup松开关闭
    Button2.print(oState?"on":"off");       //反馈状态到APP
    digitalWrite(RELAYPIN_2,!oState);       //输出到继电器
    if (state=="on")oState = true;          //若打开的不是总开关,则打开总开关,允许分开关输出
    fresh=true;
}
//点灯APP修改继电器3状态
BlinkerButton Button3("b3",button3_callback);//类库实例化语句,类名BlinkerButton按钮组件,实例名Button3,组件键名“b3”用句不需要在setup里attach了
void button3_callback(const String & state)    //按钮3回调函数,按下后设备开启继电器3
{
    if(state=="tap"){oState=!oState;}    //普通按键:tap反转状态
    else if(state=="on"){oState=true;}      //开关按键:on 短按开启
    else if(state=="off"){oState=false;}    //开关按键:off短按关闭
    else if(state=="press"){oState=true;}   //普通按键或开关按键:press长按开启
    else if(state=="pressup"){oState=false;}//普通按键或开关按键:pressup松开关闭
    Button3.print(oState?"on":"off");       //反馈状态到APP
    digitalWrite(RELAYPIN_3,!oState);       //输出到继电器
    if (state=="on")oState = true;          //若打开的不是总开关,则打开总开关,允许分开关输出
    fresh=true;
}
//点灯APP修改继电器4状态
BlinkerButton Button4("b4",button4_callback);//类库实例化语句,类名BlinkerButton按钮组件,实例名Button4,组件键名“b4”用句不需要在setup里attach了
void button4_callback(const String & state)    //按钮4回调函数,按下后设备开启继电器4
{
    if(state=="tap"){oState=!oState;}    //普通按键:tap反转状态
    else if(state=="on"){oState=true;}      //开关按键:on 短按开启
    else if(state=="off"){oState=false;}    //开关按键:off短按关闭
    else if(state=="press"){oState=true;}   //普通按键或开关按键:press长按开启
    else if(state=="pressup"){oState=false;}//普通按键或开关按键:pressup松开关闭
    Button4.print(oState?"on":"off");       //反馈状态到APP
    digitalWrite(RELAYPIN_4,!oState);       //输出到继电器   
    if (state=="on")oState = true;          //若打开的不是总开关,则打开总开关,允许分开关输出
    fresh=true;
}
void heartbeat()                               //用户心跳包回调函数,Blinker.run检测到APP每30秒 get:state 请求心跳包时会顺带执行此函数
{
    Button1.print(oState?"on":"off");       //反馈状态到APP
    Button2.print(oState?"on":"off");       //反馈状态到APP
    Button3.print(oState?"on":"off");       //反馈状态到APP
    Button4.print(oState?"on":"off");       //反馈状态到APP
}
void setup()
{
    Serial.begin(115200);                         //初始化硬件串口UART0波特率115200 bps(调试时需要相应的调整Aruino>工具>串口监视器>波特率为115200)
    BLINKER_DEBUG.stream(Serial);               //将Blinker库代码调试信息流打印到硬件串口
    BLINKER_DEBUG.debugAll();                     //开启所有调试信息
   
    pinMode(RELAYPIN_1, OUTPUT);    digitalWrite(RELAYPIN_1, LOW);//初始化继电器1所在GPIO,并输出低电平
    pinMode(RELAYPIN_2, OUTPUT);    digitalWrite(RELAYPIN_2, LOW);//初始化继电器2所在GPIO,并输出低电平
    pinMode(RELAYPIN_3, OUTPUT);    digitalWrite(RELAYPIN_3, LOW);//初始化继电器3所在GPIO,并输出低电平
    pinMode(RELAYPIN_4, OUTPUT);    digitalWrite(RELAYPIN_4, LOW);//初始化继电器4所在GPIO,并输出低电平

    Blinker.begin(auth, ssid, pswd);            //调用Blinker库的开始成员函数,初始化Wifi连接(参数:授权码、WiFi名、密码)
    Blinker.attachData(dataRead);               //注册dataread函数,若APP数据包含未注册的组件键名则会进入此函数处理
    Blinker.attachHeartbeat(heartbeat);         //注册用户心跳包回调函数,Blinker.run检测到APP每30秒 get:state 请求心跳包时会顺带执行此函数
    BlinkerMIOT.attachPowerState(miotPowerState); //注册小爱同学修改继电器状态回调函数,Blinker.run()检测到小爱同学修改请求就会执行
    BlinkerMIOT.attachQuery(miotQuery);         //注册小爱同学查询继电器状态回调函数,Blinker.run()检测到小爱同学查询请求就会执行

    oState=true;//总开默认打开
}

void loop()
{
    Blinker.run();
    if(fresh){
                                        BLINKER_LOG("输出使能:",oState?"开":"关");
    digitalWrite(RELAYPIN_1, oState);BLINKER_LOG("继电器1: ",oState?"开":"关");
    digitalWrite(RELAYPIN_2, oState);BLINKER_LOG("继电器1: ",oState?"开":"关");
    digitalWrite(RELAYPIN_3, oState);BLINKER_LOG("继电器1: ",oState?"开":"关");
    digitalWrite(RELAYPIN_4, oState);BLINKER_LOG("继电器1: ",oState?"开":"关");
    fresh=false;
    }
}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【小爱同学】[Blinker·点灯科技]2024最新-小爱联动4路继电器 浅易开源教程