这篇文章上次修改于 373 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
ESP8266,算得上最经济的带有无线WiFi功能的MCU系列了。
而使用ESPEay,可以很方便的在网页上,对ESP8266功能进行设置,从而实现通过无线,远程对设备进行监控或控制。
型号选择
我选了其中最便宜的型号:ESP01/ESP01S,不到10元一片。
加上USB下载模块,成本也不超过20元。
这款是插针式封装,测试比较方便,不想焊线的话,直接用母头杜邦线连接就行。
基本参数:1M的flash,2个GPIO口,1个串口,支持WiFi。
只是拿来上手的话,也够用了。
固件选择
可选的有很多,有:NodeMCU(lua)、ESPEasy(WebUI)、MicroPython、ESPHOME。
作为新手,选择ESPEasy的主要原因是:烧写好固件,直接在网页上配置,比较方便。
而且ESPEasy是开源的,官方的wiki上文档也比较全。
固件烧写
- 软件下载。官方git上有烧写工具和固件的打包下载。
- 短接ESP01S的IO0和GND引脚,进入Programming mode。
下载模块接PC,如果设备管理器中识别不到COM口,需要下载对应的串口转USB驱动(根据转换芯片的型号,我的是CP210x)。 - 烧写固件。打开FlashESP8266.exe,选择固件(我用的是:ESP_Easy_mega_20220616_normal_ESP8266_1M)。
如果要重新烧写,可以先烧写blank_1MB文件,用于擦除已有配置。 - 烧写完成,拔掉短接线,重新上电。
功能设置-控制一个开关
- 首次连接,连接热点ESP_Easy,密码:configesp。
- 打开URL:192.168.4.1,配置WiFi连接,接入已有WiFi。之后可以接入同一WiFi进行配置。
- 菜单Config下,设置Unit Name,如:ESP_HOME。这个也是找不到网络时的热点名称。
- 菜单Controllers下,添加一个(openHAB)MQTT控制器。
勾选Enabled;默认订阅主题:%sysname%/#;发布主题:%sysname%/%tskname%/%valname%;超时时间可以设置长一点。 - 我用的自建的mqtt服务,只是测试也可以用这个:broker.hivemq.com:1883。
mqtt客户端可以使用paho。 - 菜单Devices下,添加一个Switch input - Switch类型开关。
勾选Enabled;配置Name,如:gpio;Values,如:pin0;绑定引脚,如GPIO-0;勾选Send to Controller,发布间隔可以设置为5秒。 - 这样,mqtt订阅主题:ESP_HOME/gpio/pin0,就可以每5秒收到一次引脚电平状态推送了。
- 如果要控制引脚输出,可以mqtt发布命令主题:ESP_HOME/cmd。
内容:gpio,0,1。其中,中间的0是引脚编号,可以是0或2;最后的1表示电平高低,可以是0或1。 - 控制还可以用延时命令,如:LongPulse,2,1,10。表示gpio2在10秒后置为高电平。
其他命令,可以查阅官方文档。
这样,如果加一个继电器模块(10元左右),就可以做一个智能插座了。
DH11温湿度模块配置
- DH11模块接电源和ESP01的gpio0/2引脚。
- 菜单Devices下,添加DH11设备。配置同开关配置,只不过有2个value名称,一个是温度,一个是湿度。
- mqtt订阅对应设置名称的主题,就可以读到实时的温度和湿度了。
这个模块也是几元就能买到。
WS2812彩灯灯条配置
- WS2812模块接电源和ESP01的gpio0/2引脚。
这里用到的电压要比ESP模块高一些,否则某些颜色的亮度不够。 - 菜单Devices下,添加Output - NeoPixel设备。类似开关配置,需要设置灯珠个数,没有value名称。
mqtt可以发送以下控制指令:
NeoPixel,<led nr>,<red 0-255>,<green 0-255>,<blue 0-255> NeoPixelAll,<red 0-255>,<green 0-255>,<blue 0-255> NeoPixelLine,<start led nr>,<stop led nr>,<red 0-255>,<green 0-255>,<blue 0-255>
分别是:控制单个灯珠,索引号,RGB颜色值;控制所有灯珠,RGB颜色值;指定起止范围内灯珠,RGB颜色值。
自定义规则
EspEasy还支持自定义规则,可以使用脚本实现一些关联触发、定时之类的操作。
- 菜单Tools下,选择advance。勾选允许Rules。
- 设置NTP。同上advance界面,勾选允许NTP服务;设置地址如:ntp1.aliyun.com;设置时区的分钟:480分钟。
如,每分钟通过mqtt发送IP、时间信息。
// 每分钟执行一次,All表示所有日期,**:**表示所有分钟 // 也可以指定过滤条件,如周几,每隔10分钟 On Clock#Time=All,**:** do Publish %sysname%/ssid,%ssid% Publish %sysname%/ip,%ip% Publish %sysname%/time,%systime% endon
这样,通过自定义脚本,可以实现每天指定时间通电,指定时间断电,远程开关机之类的。
还可以通过温度或湿度控制开关,如:on [DHT11Outside]#Temperature>20 do GPIO,2,1 endon
用途还是挺广的,配置也简单。
补充
使用mqtt通讯,主要是发布订阅方式,消息推送比较及时,不用某一方去轮询。
如果不想自己去实现客户端应用,服务端还可以安装Domoticz,直接在网页上配置关联设备,进行监控和控制。
没有评论