一、项目介绍
本项目以 ESP32-S3 微控制器为核心,结合摄像头模块、WS2812B、舵机模块,构建一个智能家居视频监控系统。
1.1 硬件介绍
- ESP32-S3-WROOM-1U 是一款通用型 Wi-Fi + 低功耗蓝牙 MCU 模组,搭载 ESP32-S3 系列芯片。除具有丰富的外设接口外,模组还拥有强大的神经网络运算能力和信号处理能力,适用于 AIoT 领域的多种应用场景,例如唤醒词检测和语音命令识别、人脸检测和识别、智能家居、智能家电、智能控制面板、智能扬声器等。
- adafruit ov5640 由 Adafruit 推出的具有一个高质量的 OV5640相机,500万像素传感器元件,120度广角镜头,以及所需要的所有支持电路。
- WS2812B 是一个集控制电路与发光电路于一体的智能外控LED光源。其外型与一个5050 LED灯珠相同,每个元件即为一个像素点。像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路,还包含有高精度的内部振荡器和可编程定电流控制部分,有效保证了像素点光的颜色高度一致。
1.2 功能概览
- 实时视频监控:系统通过连接的摄像头不断监控家中的动态,用户可以通过移动应用实时查看家中的情况。
- 远程控制:用户可以远程操作家中的智能设备,如灯光、空调、门锁等,实现家居自动化。
- 云台控制:用户可以远程操作摄像头云台功能。
1.3 设计思路
- 模块化设计:将系统分为视频采集、数据传输、用户交互等功能模块,各模块相对独立,便于维护和升级。
- 高效数据处理:利用ESP32的双核处理器特性,并行处理视频数据和传感器数据。
- 安全性考虑:在视频传输过程中,采用加密算法保证数据的安全性。
- 智能家居平台集成:集成到智能家居应用平台,利用智能家居平台的强大功能,实现家居自动化,UI交互以及远程控制。
二、功能实现
2.1 硬件设计
ESP32-S3-EYE 是乐鑫推出的一款小型 AI(人工智能)开发板,搭载 ESP32-S3 芯片和乐鑫 AI 开发框架 ESP-WHO。 本设计参考 ESP32-S3-EYE 原理图,在 ESP32-S3-WROOM-1U 模块的基础上增加 adafruit ov5640、WS2812B 和舵机控制电路实现。本项目硬件设计框图如下图所示:
2.2 软件功能实现
软件方面参考了很多成熟方案,综合评比各方面功能最终决定采用 ESPHome + Home Assistant 完成固件开发与远程控制。
Home Assistant 是一款在 Python 3 上运行的家庭自动化平台。能够跟踪和控制家庭中的所有设备,并提供自动化控制平台。有一个简单的、适合移动设备的界面来控制你的所有设备,且不会将任何数据存储在云端,以保护个人隐私。
ESPHome 是一个通过简单而强大的配置文件控制您的 ESP8266/ESP32 和 RP2040 的系统,并通过家庭自动化系统远程控制它们。
2.3 关键代码及说明
本制作由于使用的 ESPHome 作为固件的开发,因此都是通过配置文件的形式对固件进行配置相应的功能。以下是关键部分说明:
2.3.1 网络配置
网络配置时如果默认的DNS连不上,需要设置静态IP。否则在 HomeAssistant 中该设置一直是离线状态。
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: 192.168.2.147
gateway: 192.168.2.1
subnet: 255.255.255.0
2.3.2 基本开关
基本开关一般用于控制只有打开、关闭 两种状态的设备,例如:电灯开关、设备开关等。本制作中用于控制设备的重启。
# 开关
switch:
# Restart
- platform: restart
name: "重启 restart"
2.3.3 舵机控制
舵机控制用于控制摄像头X和Y轴舵机,通过简单的PWM控制舵机进行位置转动,本制作中用于控制摄像头云台位置,实现摄像头更大范围的视野。
# 云台舵机
servo:
# X轴云台舵机
- id: x_servo
output: x_servo_output
auto_detach_time: 1s
transition_length: 1s
# Y轴云台舵机
- id: y_servo
output: y_servo_output
auto_detach_time: 1s
transition_length: 1s
# 输出
output:
# X轴云台舵机控制输出
- platform: ledc
id: x_servo_output
channel: 2
pin: GPIO40
frequency: 50 Hz
# Y轴云台舵机控制输出
- platform: ledc
id: y_servo_output
channel: 4
pin: GPIO41
frequency: 50 Hz
2.3.4 灯光控制
灯光控制用于控制设备的灯具开关,亮度、色温、颜色调节等功能。本制作中使用了 4 颗 WS2812B 灯珠作为补光灯使用,可在光线较暗时打开补光灯调节环境光亮度,以使摄像头获得较好的视觉效果。
# 补光灯
light:
- platform: esp32_rmt_led_strip
name: "WS2812"
rgb_order: GRB
pin: GPIO42
num_leds: 4
rmt_channel: 0
chipset: ws2812
2.3.5 视频摄像
摄像机组件用于获取实时视频流,在本制作中提供实时视频流,支持远程观看家庭或办公室等场所的实时影像。
# 摄像头
esp32_camera:
name: camera
external_clock:
pin: GPIO15
frequency: 20MHz
i2c_pins:
sda: GPIO4
scl: GPIO5
data_pins: [GPIO10, GPIO9, GPIO8, GPIO11, GPIO12, GPIO18, GPIO17, GPIO16]
vsync_pin: GPIO6
href_pin: GPIO7
pixel_clock_pin: GPIO13
jpeg_quality: 15
vertical_flip: false
2.3.6 按键云台控制
按键提供简单的点击操作,在本制作中使用了5个按键实现摄像机的云台转动功能,即左移、右移、上移、下移以及回中功能。
# 按键组件
button:
# X轴云台左移
- platform: template
id: x_servo_left
name: "X轴云台左移 left"
on_press:
- number.decrement: x_servo_sensor_number
# X轴云台右移
- platform: template
id: x_servo_right
name: "X轴云台右移 right"
on_press:
- number.increment: x_servo_sensor_number
# Y轴云台左移
- platform: template
id: x_servo_down
name: "Y轴云台下移 down"
on_press:
- number.decrement: y_servo_sensor_number
# Y轴云台右移
- platform: template
id: x_servo_up
name: "Y轴云台上移 up"
on_press:
- number.increment: y_servo_sensor_number
# 云台回中(X,Y轴同时操作)
- platform: template
name: "云台回中 center"
on_press:
- number.set:
id: x_servo_sensor_number
value: 0
- number.set:
id: y_servo_sensor_number
value: 0
三、功能展示
3.1 硬件展示
3.1.1 PCB顶面
3.1.2 PCB底面
3.1.3 硬件3D预览
顶面
底面
3.2 实物展示
3.2.1 PCB实物
3.2.2 外壳+云台展示
3.3 智能家居控制界面展示
四、总结
本项目成功实现了基于ESP32的智能家居视频监控应用,涵盖视频采集、数据传输、智能检测与用户交互等多个功能模块。通过模块化设计和高效的数据处理机制,系统具备稳定、可靠和易于扩展的特性。在未来,我们可以进一步优化视频压缩算法,提高数据传输效率和图像质量,同时拓展更多的智能家居功能,如联动安防设备和家电控制,实现完整的智能家居系统。
遇到的问题
- 云台X轴舵机在控制时会有抖动出现,经排查由于整个云台加上控制板太重导致X轴云台电机输出轴不平衡,需要对外壳以及X、Y轴传动机构进行减重以及经轴的平衡处理,当然也可以更换驱动更强劲的舵机来进行改善。
- 补光不足,原本想法还是挺好的,在摄像模块周四放置了四个 WS2812B 灯珠进行补光操作,但由于该灯珠的功率有限,实际上补光的效果很有限,只在近距离的情况下比较明显,稍远一些就起不到补光作用了。如有稍远距离的补光需求,可以将其接入到智能家居中,也可以实现联动控制。
- 硬件方案中设计有一个小功率的锂电池充电电路,可以实现锂电池的充电与供电。外壳也预留了锂电池的接口槽,但实际使用下来还是稍有不便。应该将锂电池放置到外壳内才对,由于在焊接PCB时已经将锂电池接口插座焊接上了,因此在设计外壳时只考虑了接口而没有考虑将锂电池内置到外壳内
心得体会
《FastBond》这活动自由度比较高,最大限度地发挥个人的想象力、创造力进行创作。当然所要求的知识也是比较全面的,一个项目下来能将自己的知识融会贯通,理论结合实践。
最后,感谢硬禾学堂联合 DigiKey 推出的这次活动!此次活动带给我许多宝贵实践经验和机会,我们下期活动再见!