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

涨知识
RISC-V

RISC-V(发音为“risk-five”)是一个基于精简指令集(RISC)原则的开源指令集架构(ISA)。RISC-V指令集可以自由地用于任何目的,允许任何人设计、制造和销售RISC-V芯片和软件。

评论:
相关文章
MimiClaw应用与开发教程1:部署和测试

MimiClaw‌ 是一款基于 ‌ESP32-S3‌ 芯片的超轻量级AI助手,适合嵌入式AI与物联网开发者快速部署本地化AI代理。本系列教程基于MimiClaw的Arduino移植版本进行讲解,小节主要讲解部署和测试。


ESP32扫描wifi 热点列表

就像我们用手机打开WiFi功能后可以浏览附近的可用WiFi。要将手机连接到热点,通常需要打开Wi-Fi设置应用程序,列出可用的网络,然后选择所需的热点。然后输入密码(或不输入密码),可以使用ESP32进行相同的操作。


MimiClaw 配置飞书机器人和添加硬件控制技能

本文本介绍配置飞书机器人为MimiClaw的一个输入/输出端,和添加一个控制WS2812与LED的控制技能。


ESP32-S3 部署 MimicLaw 完整教程:从零到成功调用 DeepSeek

一块 30 块钱的开发板 + 一个大模型 API,就能做出可以听懂人话的智能硬件。 本文记录完整安装过程和踩坑经验,确保你跟着做就能跑通。


MimiClaw 架构全解析,把 “智能龙虾” 跑在 ESP32 上

本文将从手绘架构图入手,逐层拆解 MimiClaw 的分层设计、核心模块、数据流转与底层实现,带你解剖这只“智能虾”的技术骨架,看懂在 C 语言加持下,AI 智能体如何以可穿戴设备的形态,在你身边稳稳运行、离线服务、主动响应。


如何用 platform.local.txt 深度定制 ESP32 编译流程?

本文介绍如何在不脱离 ArduinoIDE 可视化开发的前提下,通过一个名为 platform.local.txt 的小文件,实现对 ESP32 编译流程的精准控制。


优化Arduino-ESP32程序体积

本文将系统分析程序体积增长的五大根源,并提供经过验证的优化方案,帮助减小固件大小。


开发ESP32大模型AI语音助手-从软件到硬件

本文所DIY的语音助手设备端使用的是MicroPython、服务端是Python,对于很多开发者来说MicroPython入门没难度。


【ESP32 C++教程】Unit10-2:音频录制

本小节使用音频开发框架实现一个音频录制到文件的示例。


ESP32 I2S 接口深度解析:从时序、格式到 ESP-IDF 驱动实战

I2S协议通过BCLK、LRCLK和DATA三线精准传输音频数据,但时序边沿、帧格式、时钟源等细节常引发噪声或断连。本文详解ESP32的I2S实现,从协议原理到ESP-IDF v5.x代码配置,助你避开常见陷阱,确保音频稳定传输。