这篇文章上次修改于 343 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

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上文档也比较全。

固件烧写

  1. 软件下载。官方git上有烧写工具和固件的打包下载。
  2. 短接ESP01S的IO0和GND引脚,进入Programming mode。
    下载模块接PC,如果设备管理器中识别不到COM口,需要下载对应的串口转USB驱动(根据转换芯片的型号,我的是CP210x)。
  3. 烧写固件。打开FlashESP8266.exe,选择固件(我用的是:ESP_Easy_mega_20220616_normal_ESP8266_1M)。
    如果要重新烧写,可以先烧写blank_1MB文件,用于擦除已有配置。
  4. 烧写完成,拔掉短接线,重新上电。

功能设置-控制一个开关

  1. 首次连接,连接热点ESP_Easy,密码:configesp。
  2. 打开URL:192.168.4.1,配置WiFi连接,接入已有WiFi。之后可以接入同一WiFi进行配置。
  3. 菜单Config下,设置Unit Name,如:ESP_HOME。这个也是找不到网络时的热点名称。
  4. 菜单Controllers下,添加一个(openHAB)MQTT控制器。
    勾选Enabled;默认订阅主题:%sysname%/#;发布主题:%sysname%/%tskname%/%valname%;超时时间可以设置长一点。
  5. 我用的自建的mqtt服务,只是测试也可以用这个:broker.hivemq.com:1883。
    mqtt客户端可以使用paho。
  6. 菜单Devices下,添加一个Switch input - Switch类型开关。
    勾选Enabled;配置Name,如:gpio;Values,如:pin0;绑定引脚,如GPIO-0;勾选Send to Controller,发布间隔可以设置为5秒。
  7. 这样,mqtt订阅主题:ESP_HOME/gpio/pin0,就可以每5秒收到一次引脚电平状态推送了。
  8. 如果要控制引脚输出,可以mqtt发布命令主题:ESP_HOME/cmd。
    内容:gpio,0,1。其中,中间的0是引脚编号,可以是0或2;最后的1表示电平高低,可以是0或1。
  9. 控制还可以用延时命令,如:LongPulse,2,1,10。表示gpio2在10秒后置为高电平。
    其他命令,可以查阅官方文档。

这样,如果加一个继电器模块(10元左右),就可以做一个智能插座了。

DH11温湿度模块配置

  1. DH11模块接电源和ESP01的gpio0/2引脚。
  2. 菜单Devices下,添加DH11设备。配置同开关配置,只不过有2个value名称,一个是温度,一个是湿度。
  3. mqtt订阅对应设置名称的主题,就可以读到实时的温度和湿度了。

这个模块也是几元就能买到。

WS2812彩灯灯条配置

  1. WS2812模块接电源和ESP01的gpio0/2引脚。
    这里用到的电压要比ESP模块高一些,否则某些颜色的亮度不够。
  2. 菜单Devices下,添加Output - NeoPixel设备。类似开关配置,需要设置灯珠个数,没有value名称。
  3. 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还支持自定义规则,可以使用脚本实现一些关联触发、定时之类的操作。

  1. 菜单Tools下,选择advance。勾选允许Rules。
  2. 设置NTP。同上advance界面,勾选允许NTP服务;设置地址如:ntp1.aliyun.com;设置时区的分钟:480分钟。
  3. 如,每分钟通过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,直接在网页上配置关联设备,进行监控和控制。