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   阅读(7)   评论(0)
 标签: 创客 ESP32 物联网

涨知识
EDA

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

评论:
相关文章
在ESP32上实现WEB交互界面

本文主要介绍在未联网(AP热点)情况下实现WEB交互界面的CSS和javascript库。


Arduino ESP32获取芯片、RAM信息

本文介绍如何使用Arduino-ESP32库中的API函数获取ESP32的芯片、RAM信息等,并提供了一个示例程序代码。


ESP32 FreeRTOS 双核使用

ESP32系列(包括ESP32-S3)搭载Xtensa双核处理器,默认情况下Arduino框架仅使用单核运行用户代码,通过多核编程,可以充分利用硬件资源来提升系统响应和性能。


ESP32 GPIO 矩阵和引脚多路复用

ESP32 芯片有34个物理GPIO管脚。每个GPIO管脚都可用作一个通用IO,或连接一个内部的外设信号。IO_MUX ¹、RTC IO MUX 和GPIO交换矩阵用于将信号从外设传输至GPIO管脚。


ESP32Encoder:高效的ESP32旋转编码器库

ESP32Encoder库是一个利用ESP32脉冲计数器硬件外设实现高效旋转编码器读取的软件库。


适合学习物联网的几款盒子

本文对比了几款适合物联网开发的盒子硬件参数,供大家参考。


乐动掌控

乐动掌控采用掌控板作为主控,塑胶一体式外壳,侧面和底面开具多个乐高扩展孔位,兼容乐高积木,可完成多种创意应用。


ESP32 MicroPython存储数据到闪存

在MicroPython的ESP32库中,NVS类用于管理非易失性存储,支持 32 位有符号整数和 二进制blob。


MicroPython umqtt库的使用

umqtt 是 MicroPython 的一个轻量级 MQTT 客户端库,使得在微控制器上使用 MQTT 协议变得简单易行。本文将介绍 umqtt 的实用方法,帮助您更好地在项目中应用这一技术。


Arduino-ESP32 Preferences库使用详解

Arduino-ESP32项目提供的Preferences库是一个专为ESP32设计的非易失性存储解决方案,它替代了传统的Arduino EEPROM库,提供了更强大、更可靠的数据存储功能。

搜索
小鹏STEM教研服务

专属教研服务系统,助您构建STEM课程体系,打造一站式教学环境。

小鹏AIoT服务

为讲师、学员提供专属的物联网教学环境。