『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 42965|回复: 41

[经验分享] 小白3天闯入ESPhome的收获

  [复制链接]

19

主题

274

帖子

1948

积分

金牌会员

Rank: 6Rank: 6

积分
1948
金钱
1674
HASS币
50
发表于 2020-2-14 16:32:31 | 显示全部楼层 |阅读模式

我希望依托homeassistant+ESP-01组合,形成自己的智能家居整体方案,改善居家环境,享受科技带来的舒适。我不懂开发,但看着前辈们实现的自动化能力又是羡慕不已。已经入门几个月了,之前一直是应用ESP-01,和sonoff固件连接终端硬件。sonoff固件成熟、简单、上手快,特别适合我这类入门级的小白。但是,这几个月也是坑坑洼洼,几乎让我崩溃。
我遇到的问题:家里玄关原先有三个86型开关,分别负责玄关、卫生间、厨房的开关灯。我将ESP-01组合放进这个位置中,作为控制节点和一些传感器采集节点。三个位置共用一根0.3平方零线,串接三个开关位置,每个位置中包含有1个ESP-01,1个继电器(或2个),1个电容触摸开关,1个多普勒传感器,1个温湿度传感器或光敏电阻。每个组合在线下单独测试的时候都很正常,但是只要装进86开关位置之后,就会莫名的死机、自己开关灯、莫名的感应有人。甚至于直接使用一个ESP-01继电器都会出问题。过年之前被迫全部拆下,换回硬开关,好让自己过一个没有家人抱怨的年。是ESP-01不稳定?是我的组合有问题?还是共零线相互干扰?还是过载过热?能想到的都试过了,能做的都做了。最后思路集中在两个点上,sonoff固件是不是不太适合8266-01?是不是8266这芯片真的是需要很大的电流?
曾经想过放弃8266-01,转投8266-12?但我真的不舍,ESP-01占用空间远比8266-12小得多,几乎可以直接塞入86型开关盒中,而且家庭中终端应用应该足可以应对。我相信很多入门不久的小白都会像我这样彷徨。于是,下定决心,再做一次挣扎,试一试ESPhome固件,听说它是更贴近芯片低层的,而不像sonoff固件外面又包了一层应用,占用的芯片内存可能会少一些,反馈动作更快一些,耗能可能也会更低一些。
这里是我这三天闯入ESPhome的一些体会,希望可以帮到像我这样的小白。
1       ESPhome安装:之前之所以绕过ESPhome,是我在电脑端安装支持环境时遇到了种种问题,无法搭建起环境。其实,我从一开始就错了。ESPhome直接装在homeassistant主机上就行了。命令就两个,超级简单。我homeassistant是装在树莓派3上的:

# 安装ESPhome
sudo pip3 install esphome

# 安装浏览器支持
sudo pip3 install tornado esptool

2       ESP-01刷机:树莓派上接ESP-01,电脑浏览器中操作刷机。
注意:这里只是刷机方法,实际上在upload上传刷机之前,就要把“使用方案”确定好,填入浏览器的edit中。刷机实际是根据这个yaml文件的配置进行刷机的。
2.1      树莓派上,打开浏览器支持工具:这个一定要启动起来,否则电脑浏览器不能刷机的。

sudo esphome config/ dashboard

2.2      电脑上,浏览器输入“安装机器的ip:6052”。比如http://192.168.1.3:6052
2.3      电脑上,在浏览器中开始刷机。注意选择usb刷机。第一次刷机成功之后,再使用OTA方式调整、更新等其他刷机操作。
1、      选择芯片8266
2、      给这个芯片取个名字
3、      wifi,密码,OTA密码
4、      树莓派的usb插入串口刷机版
5、      upload
             如果有问题,重刷
3       刷机刷什么,怎么用:
其他固件是直接选择某一个版本的固件,下载,刷机。之后,自己再做配置。但是ESPhome不是这样,他更类似一种底层配置,然后根据配置进行刷机。所以,上面的刷机只是一个刷机方法,真正的刷机,是从要做什么开始。
3.1      你要做什么,需要支持什么硬件,就在这里找,
3.2      配置yaml:电脑浏览器中edit内容
3.3      验证是否有错误
3.4      upload刷机
ESPhome的特点,就是刷机前,编写yaml文件,然后刷机。而它的yaml设置简单,示例完整,足够灵活,还是底层级的。你想象的方案对不对,能不能运行起来,硬件会不会不支持,这里都一目了然。而它对于我们也是有一点点要求,就是需要我们有一点逻辑基础。
4       排查问题:ESPhome的好处就是排查问题更简单,一目了然。
4.1      vlidate检查,在编写yaml之后,刷机前,在浏览器里就可以检查是否有误
4.2      upload刷机时,如果通不过,会有说明是哪里有问题
4.3      实际控制或采集数据时不正常,可以在浏览器中查看log,只要树莓派的浏览器支持是打开的,log显示的就是每个动作的实时过程
4.4      第一次刷机,一定要选择usb,就是刷到树莓派usb上那个ESP-01。如果选择了OTA,会报错,显示连接无反馈。这个折腾了我半天,吃完饭才想起来,是要刷到usb上。
5       与homeassistant集成
5.1      集成:天然集成,不需要过多考虑。刷机成功并显示正常后,进入homeassistant,会自动提示有新设备。直接提交确认就可以了。homeassistant页面就立即看到这个设备和它的状态。
5.2      configuration.yaml文件不会出现这个设备,homeassistant状态里也不会有这个设备。需要调用时,需要到homeassistant的配置-集成(或设备)中去查找。
6       ESPhome效果
6.1      ESPhome效果怎么样?
好用的不得了,我的问题一下子就解决了,2天了,没有再胡乱动作过。同时还发现了,ESP8266真是电耗很高,我原先的03mm的零线带三个位置节点,明显是太小了。原先每个组合配置的小电源5v700mA,有点小,卫生间配了2个继电器,就有带不动的现象了,表现为死机,但不会乱动。
尤其是,ESPhome刷机的ESP-01,脱网也可以运行。就是说,在一个ESP-01的组合装置中,如果有相关的自动化,脱网也可以动作。
6.2      一个yaml示例,卧室夜灯灯带。ESP-01,灯带+红外人体感应+DHT温湿度传感器+电容开关。
官方组件说明:https://esphome.io/components/light/monochromatic.html

esphome:
  name: bedroom_1_night_light
  platform: ESP8266
  board: esp01_1m

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Bedroom 1 Night Light"
    password: "Ka3567jui"

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: !secret esphome_password

ota:
  password: !secret esphome_password

# 按钮

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO1
      mode: INPUT_PULLUP
      inverted: True
    name: "Bedroom1 Night Light Button"
    on_press:
      then:
        - light.toggle: 
            id: light1
            
# 人体红外
  - platform: gpio
    pin: GPIO3
    name: "Bedroom1 Motion"
    device_class: motion
    
# 光带
light:
  - platform: monochromatic
    id: light1
    name: "Bedroom1 Night_light"
#    restore_mode: ALWAYS_OFF
    output: output_component1
output:
  - platform: esp8266_pwm
    id: output_component1
    pin: GPIO0

# 温湿度
sensor:
  - platform: dht
    pin: GPIO2
    temperature:
      name: "Bedroom1 Temperature"
    humidity:
      name: "Bedroom1 Humidity"
    update_interval: 120s
    model: DHT11

评分

参与人数 1金钱 +20 收起 理由
+ 20 厉害了word楼主!

查看全部评分

回复

使用道具 举报

12

主题

545

帖子

2037

积分

金牌会员

Rank: 6Rank: 6

积分
2037
金钱
1492
HASS币
0
发表于 2020-2-15 09:14:00 | 显示全部楼层
会吗?我拆了一个老蓝牙耳机充电器 5V 180MA的也可以驱动 一块NODEMCU 和 一个继电器呀,
回复

使用道具 举报

18

主题

267

帖子

2666

积分

论坛技术达人

积分
2666
金钱
2359
HASS币
190
发表于 2020-2-15 13:22:18 | 显示全部楼层
是有的固件耗电,用Arduino写的MQTT灯的esp8266固件非常省电。试过MicroPython运行在esp8266上,发热相当大,不知道EspHome是不是基于MicroPython的
回复

使用道具 举报

1

主题

52

帖子

437

积分

中级会员

Rank: 3Rank: 3

积分
437
金钱
385
HASS币
0
发表于 2020-2-15 19:26:58 | 显示全部楼层
学习学习,谢谢楼主
回复

使用道具 举报

19

主题

274

帖子

1948

积分

金牌会员

Rank: 6Rank: 6

积分
1948
金钱
1674
HASS币
50
 楼主| 发表于 2020-2-15 21:19:22 来自手机 | 显示全部楼层
magic900321 发表于 2020-2-15 13:22
是有的固件耗电,用Arduino写的MQTT灯的esp8266固件非常省电。试过MicroPython运行在esp8266上,发热相当大 ...

我用L7805降压到5v,烫手,估计耗电不小。我明天试试Arduino。估计这pwm不会太省电
回复

使用道具 举报

19

主题

274

帖子

1948

积分

金牌会员

Rank: 6Rank: 6

积分
1948
金钱
1674
HASS币
50
 楼主| 发表于 2020-2-15 21:23:21 来自手机 | 显示全部楼层
潇洒哥er 发表于 2020-2-15 09:14
会吗?我拆了一个老蓝牙耳机充电器 5V 180MA的也可以驱动 一块NODEMCU 和 一个继电器呀, ...

真的?我再查查电路,都是官网固件和官网电路啊
回复

使用道具 举报

6

主题

352

帖子

1333

积分

金牌会员

Rank: 6Rank: 6

积分
1333
金钱
981
HASS币
0
发表于 2020-2-15 23:19:27 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

79

帖子

266

积分

中级会员

Rank: 3Rank: 3

积分
266
金钱
187
HASS币
0
发表于 2020-2-17 16:40:13 | 显示全部楼层
看看先~~~~
回复

使用道具 举报

1

主题

100

帖子

1138

积分

金牌会员

Rank: 6Rank: 6

积分
1138
金钱
1038
HASS币
0
发表于 2020-2-17 21:11:31 | 显示全部楼层
有空也试试ESPhome看好用不,原来也一直用sonoff固件,总有死机现象
回复

使用道具 举报

0

主题

15

帖子

64

积分

注册会员

Rank: 2

积分
64
金钱
49
HASS币
0
发表于 2020-2-18 11:33:37 | 显示全部楼层
为什么我刷机没成功过....
先在电脑上装esphome进行刷机,选择USB设备后,直接无法识别;
然后用虚拟机装了个hassos,里面装了esphome,然后能识别设备,但点击“UPLOAD”后报以下错误,是不是需要翻墙才能装?
Downloading  [######------------------------------]   17%  00:00:10
Downloading...
Error: Please read http://bit.ly/package-manager-ioerror
ChunkedEncodingError: ("Connection broken: ConnectionResetError(104, 'Connection reset by peer')", ConnectionResetError(104, 'Connection reset by peer')):
  File "/usr/local/lib/python3.6/dist-packages/platformio/builder/main.py", line 126:
    env.SConscript("$BUILD_SCRIPT")
  File "/root/.platformio/packages/tool-scons/script/../engine/SCons/Script/SConscript.py", line 605:
    return _SConscript(self.fs, *files, **subst_kw)
  File "/root/.platformio/packages/tool-scons/script/../engine/SCons/Script/SConscript.py", line 286:
    exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
  File "/root/.platformio/platforms/espressif32/builder/main.py", line 209:
    target_elf = env.BuildProgram()
  File "/root/.platformio/packages/tool-scons/script/../engine/SCons/Environment.py", line 224:
    return self.method(*nargs, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/platformio/builder/tools/platformio.py", line 122:
    _build_project_deps(env)
  File "/usr/local/lib/python3.6/dist-packages/platformio/builder/tools/platformio.py", line 47:
    project_lib_builder = env.ConfigureProjectLibBuilder()
  File "/root/.platformio/packages/tool-scons/script/../engine/SCons/Environment.py", line 224:
    return self.method(*nargs, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/platformio/builder/tools/piolib.py", line 1043:
    project.install_dependencies()
  File "/usr/local/lib/python3.6/dist-packages/platformio/builder/tools/piolib.py", line 878:
    lm.install(uri)
  File "/usr/local/lib/python3.6/dist-packages/platformio/managers/lib.py", line 359:
    force=force)
  File "/usr/local/lib/python3.6/dist-packages/platformio/managers/package.py", line 703:
    pkg_dir = self._install_from_piorepo(name, requirements)
  File "/usr/local/lib/python3.6/dist-packages/platformio/managers/lib.py", line 220:
    if app.get_setting("strict_ssl") else dl_data['url'], requirements)
  File "/usr/local/lib/python3.6/dist-packages/platformio/managers/package.py", line 481:
    dlpath = self.download(url, tmp_dir, sha1)
  File "/usr/local/lib/python3.6/dist-packages/platformio/managers/package.py", line 193:
    raise e
  File "/usr/local/lib/python3.6/dist-packages/platformio/managers/package.py", line 179:
    fd.start(with_progress=with_progress)
  File "/usr/local/lib/python3.6/dist-packages/platformio/downloader.py", line 83:
    f.write(next(itercontent))
  File "/usr/local/lib/python3.6/dist-packages/requests/models.py", line 753:
    raise ChunkedEncodingError(e)
========================== [FAILED] Took 5.98 seconds ==========================
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-23 13:41 , Processed in 0.102526 second(s), 32 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表