ESP32-CAM通过ESPHome连接到Homeassistant

老于从今年开始入坑HomeAssistant,折腾这么旧,这次用ESP32-CAM做了个摄像头,这次就介绍下老于的折腾过程吧。

一、ESPHome简介及安装

一般自己DIY的硬件接入HomeAssistant一般有两种方式,分别是ESPHome和MQTT。这两个都是在加载项商店中的,所以要用的话首先要确定你的HomeAssistant中是有加载项的。

老于说过现在是在群晖VMM中安装了HomeAssistant的OS版本,这个版本是HomeAssistant中功能齐全的。老于在用的版本信息如下:

ESP32-CAM通过ESPHome连接到Homeassistant

因为ESPHome的介绍是:ESPHome add-on for intelligently managing all your ESP8266/ESP32 devices。它是一个系统,可以通过简单但功能强大的配置文件来控制ESP8266/ESP32,并通过家庭自动化系统对其进行远程控制。老于觉得ESPHome就是为ESP8266/ESP32整的,所以老于用的就是ESPHome。

下面就安装ESPHome。需要在HomeAssistant中依次打开“配置”—“加载项”—右下角的“加载项商店”,找到ESPHome:

ESP32-CAM通过ESPHome连接到Homeassistant

选择第一个稳定版本,点击进去:

ESP32-CAM通过ESPHome连接到Homeassistant

点击“安装”,进行安装,因为网络原因,可能要等一会,如果失败的话,多尝试几次,安装完成后再打开就是这样的:

ESP32-CAM通过ESPHome连接到Homeassistant

把后面的几个开关都打开,这样HomeAssistant启动后这个就可以自动启动了,而且也添加到了HomeAssistant的侧边栏。

这样ESPHome就安装好了。

点击左边栏的ESPHome,就可以看到它的主页面了:

ESP32-CAM通过ESPHome连接到Homeassistant

二、ESP32-CAM简介

虽然现在摄像头越来越普及,但是要在HomeAssistant中使用最好购买支持ONVIF协议的,但是价格都比较高,一般都在200左右。而ESP32-CAM模块价格不超过50块人民币,如果成功了,再跟别人谈论家里用的摄像头,你就可以自豪地说我家的摄像头是我自己做的,老于觉得这个牛可以吹好几个星期啊。

首先介绍下ESP32-CAM模块:

ESP32-CAM通过ESPHome连接到Homeassistant

先看看官方介绍:

ESP32-CAM通过ESPHome连接到Homeassistant

硬件配置:

ESP32-CAM通过ESPHome连接到Homeassistant

各引脚定义:

ESP32-CAM通过ESPHome连接到Homeassistant

在使用过程中,实际使用的引脚有四个,分别是电源端口:左下角的5V、右上角的GND;信号端口:右侧上方的U0TXD、U0RXD;烧录短接端口:右侧GPIO0和它上方紧挨的GND。如果使用USB-TTL线进行烧录的话就需要使用以上六个端口。

老于为了方便买的套件:

ESP32-CAM通过ESPHome连接到Homeassistant

左侧是ESP32-CAM底板,可以直接供电和进行烧录,不用像USB-TTL那样需要自己连线,这个直接插上去就能用了;中间就是ESP32-CAM模块开发板;右侧是标配OV2640标准视角模块,是200W像素的。

组合成一起就是这样的:

ESP32-CAM通过ESPHome连接到Homeassistant

这样就可以直接使用Micro-USB线连接这个跟电脑,进行固件烧录;也可以直接使用Micro-USB直接供电。如果没有底板的话,使用USB-TTL烧录的话,接线图如下:

ESP32-CAM通过ESPHome连接到Homeassistant

烧录后,正常工作供电的话,连接5V和GND两根线就行了。

三、编译固件

首先进入ESPHome主界面:

ESP32-CAM通过ESPHome连接到Homeassistant

点击“+ NEW DEVICE”绿色按钮,进入添加流程:

ESP32-CAM通过ESPHome连接到Homeassistant

点击“CONTINUE”,进入创建配置页面:

ESP32-CAM通过ESPHome连接到Homeassistant

第一个Name是新建设备的名称,下面的Network name和Password是HomeAssistant所在WiFi的名称和密码,这两个只有第一次使用的时候才会要求填写,后续再新增设备是不用填写WiFi名称密码的。

填写完成后,点击下一步:

ESP32-CAM通过ESPHome连接到Homeassistant

进入型号选择界面:

ESP32-CAM通过ESPHome连接到Homeassistant

点击“Pick specific board”,因为老于使用的是安信可的ESP32-CAM模块,就在下拉菜单中选择“Ai Thinker ESP32 CAM”,继续“NEXT”:

ESP32-CAM通过ESPHome连接到Homeassistant

这时候就放烟花庆祝了,创建完成了:

ESP32-CAM通过ESPHome连接到Homeassistant

点击空白处或者“SKIP”,不要点INSTALL。

这个时候只是在ESPHome添加了,但是ESP32-CAM模块还没添加到HomeAssistant中,需要继续配置:

在新增加的设备下面,点击EDIT按钮:

ESP32-CAM通过ESPHome连接到Homeassistant

进入yaml编辑界面:

ESP32-CAM通过ESPHome连接到Homeassistant

需要注意的四个地方老于都画出来了,第一个api key,是后续ESP32-CAM与HomeAssistant配对需要使用的,有位数要求,最好不改,复制粘贴下来备用;第二个password是后续进行ota升级的密码,可以修改成好记的,但是一般也用不到;第三个wifi那,需要输入HomeAssistant所在局域网的名称和密码;下面还有一个password是它自带热点的密码,老于也修改了,并且这几个能修改的密码老于都改成与WiFi密码一样,省的忘了。

另外,需要在第29行captive_portal后面增加部分代码,具体可以参见ESP32 Camera Component 这个官网说明,在网页中找到Configuration for Ai-Thinker Camera的相关代码:

ESP32-CAM通过ESPHome连接到Homeassistant

如果嫌麻烦的话,直接用老于的现成的就行了:

captive_portal:

esp32_camera:

external_clock:

pin: GPIO0

frequency: 20MHz

i2c_pins:

sda: GPIO26

scl: GPIO27

data_pins: [GPIO5, GPIO18, GPIO19, GPIO21, GPIO36, GPIO39, GPIO34, GPIO35]

vsync_pin: GPIO25

href_pin: GPIO23

pixel_clock_pin: GPIO22

power_down_pin: GPIO32

name: Camera01 #连接HomeAssistant后显示的名称,可以更改

完成后整体是这样的:

ESP32-CAM通过ESPHome连接到Homeassistant

先点击右上角的SAVE保存一下,然后点击INSTALL,开始编译流程:首先弹出安装方式选择界面,选择最后一个“Manual download”:

ESP32-CAM通过ESPHome连接到Homeassistant

到选择版本界面,选择Legacy format:

ESP32-CAM通过ESPHome连接到Homeassistant

然后就进入编译界面了:

ESP32-CAM通过ESPHome连接到Homeassistant

第一编译时间比较长,老于第一次编译了四五十分钟,等着就行了,除了第一次之外,后续如果你还有硬件要编译的话就很快了,一般两三分钟就好。一切顺利的话,会到达下面的界面,会提示成功“successfully compiled program”。这个时候浏览器应该也下载了一个esp32cam01.bin这样的bin文件,这个就是需要写入的固件。

ESP32-CAM通过ESPHome连接到Homeassistant

到这里固件就编译完成了,需要写入ESP32-CAM硬件中。

四、烧录固件

烧录硬件:一种是使用USB-TTL,需要自己接线,具体接线方式,参见上面老于的介绍;另一种是使用底板,老于买的是套装,包含底板的直接插上就行了,不用自己接线。

烧录软件:官方一般让用ESPHome Flasher进行烧录,在固件版本选择的时候也选择的这个版本,但是这个版本依赖Github,成功率不高;老于推荐采用乐鑫烧录软件,毕竟ESP32就是乐鑫的。

固件准备:除了上面下载的那个bin文件外,还需要另外三个bin文件,这三个文件老于一起打包好了,因为文件不大,就放到百度网盘了,百度网盘地址:https://pan.baidu.com/s/1atL0bJFoIaRh5WQfsQJy_w?pwd=ejug,提取码:ejug。

都准备好后,把底板与电脑连接起来,打开设备管理器,找到这个端口号,记住,老于这个是COM3端口:

ESP32-CAM通过ESPHome连接到Homeassistant

打开烧录软件:

ESP32-CAM通过ESPHome连接到Homeassistant

ChipType那通过下拉菜单选择ESP32,WorkMode保持develop不变,点击OK按钮:

ESP32-CAM通过ESPHome连接到Homeassistant

进入烧录界面:

ESP32-CAM通过ESPHome连接到Homeassistant

点击长框后面的三个小点,分别把编译好的固件,老于打包好的三个固件导入;前面的框打钩;根据bin,分别在后面的框中填入:0x10000、0x1000、0xE000、0x8000;确认下面的COM端口是不是刚刚查看到的端口,最终成这样的界面:

ESP32-CAM通过ESPHome连接到Homeassistant

先点左下角的ERASE,擦除原来的固件,等显示完成后,再点击START,等待右下角的绿框编程“FINISH完成”。

ESP32-CAM通过ESPHome连接到Homeassistant

这样固件也就烧录完成了,把它跟电脑连接线拔了吧。

五、接入HomeAssistant

断开ESP32-CAM与电脑的连接后,接入电源。

电源接好后,稍等一下HomeAssistant中左下角的通知,会有数字提醒:

ESP32-CAM通过ESPHome连接到Homeassistant

点击进去,会有新设备提醒,点击“Check it out.”

ESP32-CAM通过ESPHome连接到Homeassistant

点击后,就直接到集成界面了,发现了esp32cam01这个设备,需要进行配置:

ESP32-CAM通过ESPHome连接到Homeassistant

点击配置按钮后,会弹出窗口,要求输入加密秘钥:

ESP32-CAM通过ESPHome连接到Homeassistant

这个秘钥就是老于说的在进行固件编译时的api key,很长的那一串,粘贴进去,然后点击提交按钮,就提示创建成功了。

ESP32-CAM通过ESPHome连接到Homeassistant

然后在集成界面就新增了一个ESPHome设备:

ESP32-CAM通过ESPHome连接到Homeassistant

这个可以在HomeAssistant界面中添加了:

ESP32-CAM通过ESPHome连接到Homeassistant

图像出来了,但是图像质量不咋的,有水波纹,关键图像貌似是翻转的。

六、异常处理

一、图像有水波纹

老于查了一下,按照官方的说法就是电源的问题,输入电源要到5V2A。老于用的电源是手机充电器,电源应该没问题;电源线是手机原装的肯定也没有问题;最后就是底板,老于觉得底板应该没有问题,但是目前来看这个底板的嫌疑最大,于是就决定直接用电源线连接ESP32-CAM。

ESP32-CAM通过ESPHome连接到Homeassistant

然后这样测试后水波纹就没有了。。。太相信官方的底板了。。。这个底板就只用来烧录吧,ESP32-CAM还是直接连接电源吧。

然后改进下,用块面包板连接了:

ESP32-CAM通过ESPHome连接到Homeassistant

二、图像翻转的问题

老于重新烧录了几次,图像还都是翻转的,本来打算放弃了直接凑活用。后来去官方文档看看了,可以到ESPHome首页搜索ESP32 Camera Component。

官方文档第一部分是一个示例,突然发现里面有个resolution是老于上次配置时没有的,看样子是分辨率的设置。

ESP32-CAM通过ESPHome连接到Homeassistant

老于一喜,既然这个分辨率有参数那么翻转啥的应该有相应的参数,就继续往下看。

第一部分是Configuration Variables,配置变量,应该就是ESPHome创建device时原有的那些代码;

第二部分connection options,连接选项,这个都是针脚的定义就是上篇老于提供的那些代码;

再往下的Frame Settings、Image Settings、Exposure Settings、Sensor Gain Settings、White Balance Setting、Automations、Test Setting,都是没有用过的参数。这些参数中果然有垂直翻转和水平翻转选项,也有很多其他图像相关的选项。

老于把这些参数都复制在下面了,也整理好了相关的注释,需要的话可以直接使用。老于在这里面把垂直翻转、水平翻转由默认的true,调整为false,也就是关了翻转功能;同时把brightness亮度由默认0调整为1,增加图像亮度。

##### Frame Settings 帧设置

#max_framerate: 10 #最大帧速率,最大60,默认10fps

#idle_framerate: 0.1 #无请求时帧速率,默认0.1fps

##### Image settings 图片设置

#resolution: 640x480 #分辨率默认640*480

#jpeg_quality: 10 #图片质量默认10,10最好63最差

vertical_flip: false #是否垂直翻转图像,默认值为true

horizontal_mirror: false #是否水平镜像图像,默认值为true

#contrast: 0 #对比度,-2到2,默认为0

brightness: 1 #亮度默认为0,-2到2

#saturation: 0 #饱和度默认为0,-2到2

#special_effect: none #图片效果默认为none

##### Exposure Settings 曝光设置

#aec_mode: auto #曝光模块的模式,默认auto

#aec2: false #是否启用自动曝光控制,默认false

#ae_level: 0 #自动曝光级别,默认为0,-2到2

#aec_value: 300 #曝光值,0到1200,默认300

#### Sensor Gain Settings 传感器增益设置:

#agc_mode: auto #增益控制模块的模式,默认值auto

#agc_value: 0: #应用于图片的增益值,默认0,0到30

#agc_gain_ceiling: 2x #似乎充当“ISO”设置,默认值2x,相机灵敏度低,画面干净无噪点,最大128x

#### White Balance Setting 白平衡设置:

#wb_mode: auto #白平衡模式,默认值为auto

#### Automations 自动化:

#on_stream_start #在流启动时执行的自动化。

#on_stream_stop #在流停止时执行的自动化。

#### Test Setting 测试设置

#test_pattern: false #出于测试目的,可以用测试颜色模式替换从传感器获取的图片,默认false

虽然这些代码没有用到,但老于都写到yaml这个文件中了,如果需要调整就直接去掉注释的“#”就可以了:

ESP32-CAM通过ESPHome连接到Homeassistant

这些代码需要结合老于上一篇和这次的代码,都复制到里面去。

复制进去后,点击右上角“SAVE”,再点击“INSTALL”,进入编译流程,获得相应的bin硬件。

然后重新烧录到ESP32-CAM中。

ESP32-CAM通过ESPHome连接到Homeassistant

图像是正常了,左右上下颠倒都好了,亮度也可以了,但是这个像素质量。。。真是没话说。。。不过想想这才29块钱,还要啥自行车呢。

如果画质不合适的话可以自己调整下上面的参数然后编译烧录,再编译再烧录,直到合适,反正老于不折腾了。。。

来源:https://zhuanlan.zhihu.com/p/577606023

- 本文内容来自网络,如有侵权,请联系本站处理。

2022-11   阅读(250)   评论(0)
 标签: 创客 ESP32 物联网

涨知识
EDA

电子设计自动化(英语:Electronic design automation,缩写:EDA)是指利用计算机辅助设计(CAD)软件,来完成超大规模集成电路(VLSI)芯片的功能设计、综合、验证、物理设计(包括布局、布线、版图、设计规则检查等)等流程的设计方式。

评论:
相关文章
Arduino-ESP32与ESP-IDF的版本对应表

Arduino-ESP32与ESP-IDF的版本对应表。


Arduino-ESP32文件系统全解析:SPIFFS、LittleFS、SD卡操作

Arduino-ESP32提供了多种文件系统解决方案,本文将深入解析SPIFFS、LittleFS和SD卡三种主流存储方案,帮助你做出最佳选择。


ESP32-P4-WIFI6开发板

ESP32-P4-WIFI6-DEV-KIT是一款微雪(Waveshare)设计的基于 ESP32-P4 的多媒体开发板,并集成 ESP32-C6,支持 Wi-Fi 6 和 BLE 5 无线连接。它提供丰富的人机交互接口,包括 MIPI-CSI (集成图像信号处理器 ISP)、MIPI-DSI、SPI、I2S、I2C、LED PWM、MCPWM、RMT、ADC、UART 和 TWAI 等。


ESP-Hosted 入门介绍 &使用指南

ESP-Hosted 解决方案提供了将 ESP 板用作 Wi-Fi 和 Bluetooth/BLE 连接的通信处理器的方法。


设备上云太麻烦?ESP-Hosted一站触达!

ESP-Hosted 提供了一种将ESP芯片和模组用作通信协处理器的解决方案,该解决方案为主机微处理器或微控制器提供无线连接,使主机能够与其他设备通信。简单来说为网卡方案。


ESP32 + Arduino使用TFT_eSPI库

Arduino+ESP32上使用TFT_eSPI库快速点亮这个屏幕,驱动芯片ST7789


ESP32 利用 SPI 连通 TFT 彩屏

本文给出了一个ESP32与SPI 接口TFT显示屏接线的详细说明,供大家参考。


在Micropython下使用ESPNow功能进行数据传输

本文讲解如何在Micropython环境下使用ESP32的ESPNow功能进行数据传输。


用 ESP32-S3 打造多功能 USB Dongle

ESP-Dongle 是一款基于 ESP32-S3 芯片开发的多功能 USB Device 解决方案。它不仅外形小巧,功能齐全,更集成了无线 U 盘、SD 卡读取以及 USB 无线网卡等多项功能。


利用 ESP32-S3 和 CSI 技术打造智能家居

ESP32 系列芯片可以利用 CSI 数据实现动作检测和存在检测。无论是自动调节灯光、风扇,还是节能控制,CSI 技术为智能家居带来了新的可能性。随着 CSI 技术的发展,未来的智能家居将能够更精确地感知和响应我们的行为,实现更高效、更人性化的控制。