![]()
MAKER: 店长大人
之前家里鱼缸灯坏掉了,于是我用Ardunio做了驱动,使用Zigbee跟搭载Home asssistant的树莓派通讯,实现了远程控制。因为当时还剩下个原装的温度传感器没有接入,趁着年货节,我淘了个ESP8266,准备把Arduino替换下来,一个10+RMB块钱的ESP8266就可以解决的事情,没必要把80多块钱的Arduino放在那么潮湿的环境中。
材料清单
– 树莓派,挂载了Home assistant系统,配置好远程访问。
具体看我之前的总结:https://shumeipai.nxez.com/2020/01/07/raspberry-pi-homeassistant-wechat-mini-programs-connect-smart-home.html
– NTC 温度传感器,因为我鱼缸自带的就是这种热敏电阻式传感器,50K的,觉得还可以,其实就是个电阻。
– ESP8266模块,自带GPIO管脚。我用的是NodeMCU V2版的。超级好用啊,有木有!如下图
![]()
– 分压电阻,NTC这种传感器在ESPhome中配置需要加个分压电阻,我用的是51K的,主要跟我的NTC在25度温度下阻值相差不大。其实分压电阻不宜太小,也不要太大,1/3左右是个不错的选择。
– 12V RGB灯及部分驱动电路。这个是之前的,我没有更改,3个TIP41三极管做开关元件,驱动12VRGB灯。
一、在树莓派上配置ESPHome
ESPhome是个开源固件+配置平台,适用于ESP家族的开发板。
先在树莓派上安装ESPhome,这样我们可以用它来给8266开发板刷固件。
1、树莓派命令行使用以下代码安装esphome:
sudo pip install tornado sudo pip3 install esphome
安装好以后,使用以下命令开打esphome:
sudo esphome config/ dashboard
如下图
![]()
然后命令行会开始显示对应启动日志,我们打开浏览器,输入树莓派ip的加esphome端口6052即可访问:
xxx.xxx.xxx.xxx:6052
如下图:因为我已经配置过一个8266了,所以主页面会有个设备。若第一使用,主页是空的,点击右侧红色添加按钮即可进行添加设备生成一个标准yaml配置文件。此时8266可以暂时先不连接到树莓派。
![]()
点击红色添加按钮后,我们按照顺序进行填写配置就好。
1、填写设备名称,此处你可以自定义一个名字。如下图
![]()
2、接下来,进入设备硬件选择,请核对你手中的ESP设备对应选择,如我手中的是nodemcu,我直接选nodemcu即可:
![]()
3、填写WiFi信息,并设置外部访问密码,该密码等会连接HA时需要。请填写家里的2.4Gwifi网络信息。我手中的8266反正不支持5G wifi频段。
![]()
4、最后一步,配置成功。哈哈哈。此时,你就可以点击当前设备上的edit按钮来检查下生成的配置文件信息。如下图:
![]()
![]()
![]()
到这里,基本信息已经配置好了。接下来我们要手动编辑设备操作代码了:
1、灯光控制的配置,配置中gpio端口号可以直接写8266板子上标识的号码。根据我提前绘制的电路图,我选择D1~D3分别为RGB三色的驱动管脚,此处引入ESPHome官方platform: RGB。
![]()
配置如下:
![]()
这样就可以点击右下角保存了。
2、执行编译并上传。
请将你的ESP8266通过mini-usb口接入树莓派的USB口,此时,主页右上角应该会提示新接入外部设备端口。如下图。
![]()
![]()
选择这个ttyUSB设备,先确认设备条上绿灯亮起,代表8266模块已经正常连接,然后点击VALIDATE按钮,进行配置验证,验证通过会提示VALIDATED,并出现👍图标。确认一切没有问题,就可以点击UPLOAD进行固件上载了。
![]()
第一次固件上载,ESPhome会自动下载并加载编译环境,可能耗时比较长,请耐心等待,我第一上载时,由于网络问题,编译环境依赖一直下载不到,只好等到第二天,网络好了才搞定。一般来讲,只要是出现绿色,就说明一切OK,进程中会有各种成功的提示,请耐心等待。如下图:
![]()
到这里,配置工作基本完成了。你只需要把模块从树莓派上取下来,然后放到它应该存在的电路中,供电即可,它会自动进行网络连接。后期如果需要修改配置并重新上传,只要你的ESP8266模块可以连接网络。我们可以就使用OTA模式,没必要用线再连接。OTA连接就在主页右上角的选择中,后期操作都可以使用OTA的方式。
配置好了接下来,我们开始把它接入HA。
二、HA连接ESP模块
浏览器访问HA主页,基于HA和ESPhome的无缝衔接,基本上配置好ESP8266模块后,HA会自动识别它,你只需要输入访问密码即可一键绑定。进入HA主页-配置-集成页面,点击添加按钮,列表中选择ESPhome,找到设备,输入访问密码即可:
![]()
添加完毕后,返回HA主页,添加实例,此时就会把ESP8266上你写入的灯的实例显示在HA上。如下图,嗯很炫酷的样子:
![]()
三、关于那根NTC传感器的接入
接入这根传感器其实很痛苦,主要坑太多,好在最后成功。我在这里稍微说下应该避免的坑:
1、NTC传感器在使用时,最好接入分压电阻。如下图:
![]()
R1这个分压电阻阻值可以自定义。具体大小可以根据手中的NTC电阻来计算。
2、NTC传感器,要明确B值,即25度下的电阻值,这个在ESPhome的函数中是需要填入的,如果你不确定,那可以根据官方文档,使用三个参考量,让ESPhome后台帮你计算。具体填写格式如下:
已知B值:
# Example configuration entry
sensor:
- platform: ntc
# ...
calibration:
b_constant: 3950
reference_temperature: 25°C
reference_resistance: 10kOhm
未知B值:
# Example configuration entry
sensor:
- platform: ntc
# ...
calibration:
- 10.0kOhm -> 25°C
- 27.219kOhm -> 0°C
- 14.674kOhm -> 15°C
这些在ESPhome官方文档中都有,可以去查看。链接如下:
https://esphome.io/components/sensor/ntc.html
3、最重要的也是最坑的一个。ESP8266这个模块,它获取参考电压的管脚是A1,但是A1会把它获取到的电压自动等比转化为0-1V的对应值。也就是说,你的Vout实际电压是1.5V(VCC=3.3V),而A1反馈给MCU的值却是0.454V,但是,但是,MCU根据NTC的线性函数计算时,它使用的默认VCC参考电压却是3.3V。所以计算出来的结果完全不对,坑啊。所以此处要在配置中添加参数项,对参考电压进行修改或者也可以按照比例放大A1输入到MCU的值。两种方法只修改一个就好,若同时都修改了,又是错。具体方法如下:
a.修改A1的比例:
sensor:
- platform: adc
# ...
filters:
- multiply: 3.3
b.修改VCC参考电压
# Example configuration entry
sensor:
- platform: resistance
sensor: source_sensor
configuration: DOWNSTREAM
resistor: 5.6kOhm
reference_voltage: 1.1V
name: Resistance Sensor
四、成品图
![]()
![]()
五、贴我的yaml完整代码出来,仅供参考
esphome:
name: my_esp8266
platform: ESP8266
board: nodemcuv2
wifi:
ssid: "xxxxxxxxxxxxxxx"
password: "xxxxxxxxxxxxx"
manual_ip:
static_ip: 192.168.31.41
gateway: 192.168.31.1
subnet: 255.255.255.0
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "My Esp8266 Fallback Hotspot"
password: "L9BOEwztGylf"
captive_portal:
# Enable logging
logger:
# Enable Home Assistant API
api:
password: "xxxxxx"
ota:
password: "xxxxxx"
output:
- platform: esp8266_pwm
pin: D3
frequency: 1000 Hz
id: pwm_b
- platform: esp8266_pwm
pin: D2
frequency: 1000 Hz
id: pwm_g
- platform: esp8266_pwm
pin: D1
frequency: 1000 Hz
id: pwm_r
light:
- platform: rgb
name: "12Vrgb"
red: pwm_r
green: pwm_g
blue: pwm_b
sensor:
- platform: ntc
sensor: resistance_sensor
calibration:
b_constant: 3950
reference_temperature: 25°C
reference_resistance: 50kOhm
name: NTC Temperature
# Example source sensors:
- platform: resistance
id: resistance_sensor
sensor: source_sensor
configuration: DOWNSTREAM
resistor: 51kOhm
name: Resistance Sensor
- platform: adc
id: source_sensor
pin: A0
filters:
- multiply: 3.3
update_interval: never
switch:
- platform: gpio
pin: D0
id: ntc_vcc
interval:
- interval: 60s
then:
- switch.turn_on: ntc_vcc
- component.update: source_sensor
- switch.turn_off: ntc_vcc

发表评论