开源警示
- 本项目完全开源,仅供学习、研究和教育使用。
- 禁止任何未经授权收费传播。
- 禁止任何未经授权收费传播。
- 禁止任何未经授权收费传播。
- 本项目仅供学习与研究使用,不保证功能完整或适用性。
- 使用本项目产生的任何风险和损失,由使用者自行承担。
- 有疑问或更好建议可联系作者
- 作者联系方式: 498644995@qq.com
- qq: 498644995
- B站: 9175先生
- 视频有部分功能的详细介绍及原理
本仓库是一个基于STM32F103C8T6 + ESP32-S3-CAM的模块化嵌入式智能控制平台,实现人机交互、视觉采集与处理、人脸特征采集与姿态控制算法、多任务调度及可视化报警控制。系统将人脸识别结果与三轴云台联动,实现云台对目标的跟随、抓拍和报警动作。平台具备模块化设计、双 MCU 协作、多任务实时调度等特点,并支持互动与扩展功能,如内置小游戏、红外遥控、LED 控制及闹钟设置,并满足一定的实时性和精度要求
- 调度器 FunOS
- 仿 FreeRTOS 风格的轻量实时调度器。
- 支持任务创建/删除与周期调度(基于系统时钟)。
- 支持非阻塞延时(通过时间判断而非阻塞等待)。
- 支持设定延时后再调度任务(允许任务在过期后被调度执行)。
- 缺点不支持上下文切换和抢占式执行,
- 该程序框架下的任务应保持非阻塞、单次轮询不超过2ms
- 菜单与 UI
- 0.96" OLED:用于 STM32F103 的菜单界面、参数显示与游戏(贪吃蛇、扫雷、猜数字)。驱动程序采用江协科技0.96寸OLED
- 2.8" TFT(通过 ESP32-S3-CAM 或 SPI):可显示实时摄像头画面。该驱动程序采用EPS官方例程驱动程序
- 红外遥控多级菜单,软件表在menu.c中,拓展性强,添加软件名字及对应的进程函数即可使用
- 红外遥控交互:上下左右、OK、星号(返回)、井号(清除)及数字键输入。
- 菜单功能:RTC 实时时钟设置、闹钟设置与蜂鸣器报警、游戏、通讯录管理、LED 调速、摄像头旁闪光灯控制、机械臂配置与动作管理。
- 实时时钟与闹钟
- 集成 RTC,可以设置本地时间、日期并显示。
- 支持设置闹钟并触发蜂鸣器报警。
- 菜单内可调时间、启停闹钟、测试蜂鸣器。
- 机械臂(3 轴)
- 结构:基座旋转Base(Yaw)、中间翻滚(Roll)、末端俯仰(Pitch),搭载一个风扇/舵机作为外设。
- 控制模式:遥控控制、摇杆控制、自动控制(由 ESP32 人脸追踪下发目标坐标)、动作选择(动作表播放)。
- 控制细节:双摇杆支持、双死区过滤(ADC 死区与角度死区)、四种舵机模式选择。
- 平滑控制:基于简单的 PID/比例平滑算法(当前值与目标值按系数混合),平滑度可调。
- 支持动作表(表驱动),动作定义为目标角度与持续时间的数组,动作表以 const 放在 Arm_Action_Data.c 中并在 Arm_Action_Data.h 中 extern 声明。
- 通信协议(STM32 <-> ESP32)
- 使用 UART通信,自定义协议 命令集为字节帧(含帧头、命令ID、长度校验、数据、帧尾)。
- ESP32 下发人脸追踪解算参数(目标 pan/roll/tilt/fanspeed),蜂鸣器蜂鸣频率,STM32 接收并转换为目标角度执行。
- STM32上传LED指示灯参数控制摄像头闪光灯以及拍照指令ESP32指示灯测试双方收发通
- 具体传输协议在stm32_link.h中
- 具体指令集在USART_FrameHandler.h中
- 游戏与LED控制
- 贪吃蛇、扫雷、猜数字等小游戏运行于 STM32 菜单界面(OLED),可用红外操作。
- 通讯录功能 增加/删除/查看/多键字母输入。
- LED 调速菜单用于控制板载 LED 与摄像头旁闪光灯,以及ESP板载指示灯
- STM32 与 ESP32 均有指示灯状态显示(分别用于本机与视觉模块运行状态指示)。
- 拍照与拓展功能
- OV2640摄像头驱动程序为ESP32官方组件库提供
- 支持拍照 并将照片存储至sd卡 图片分辨率为1600*1200
- 获取的视频流为640*480分辨率,人脸识别率高
- LCD显示的实时画面为640480分辨率裁剪成320240分辨率
- 人脸识别及其追钟
- 人脸识别 基于ESP-WHO是乐鑫专为 AIoT 领域推出的软件开发框架
- 调用该框架的API传入该图像帧句柄即可返回人脸面部特征点坐标并绘制人像框和面部特征点
更新日志 2025/9/19 WatchBot_Contro 1.01 更新内容:修复闹钟定时在其他应用不能响应的问题
更新日志 2025/10/3 WatchBot_Contro 1.02 更新内容:修复显示舵机参数与操控舵机不相符问题 预设双MCU——USART通信指令集
更新日志 2025/10/13 WatchBot_Contro 1.03 更新内容:添加按下按提示音功能、蜂鸣器模块解耦、双MCU-USART通信驱动完成
更新日志 2025/10/14 WatchBot_Contro 1.04 更新内容:舵机电机模块解耦,RTC实时时钟解耦,PS2——ADC——DMA模块解耦
更新日志 2025/10/15 WatchBot_Contro 1.05 更新内容:IR_NEC模块解耦
更新日志 2025/10/17 WatchBot_Contro 1.06 更新内容:机械臂控制模块解耦,增添快速移动- 缓步平滑移动
更新日志 2025/10/18 WatchBot_Contro 1.07 更新内容:解耦摇杆增加双死区线性映射过滤算法,摇杆输入更平滑不抖动
更新日志 2025/10/18 WatchBot_Contro 1.08 更新内容:机械臂添加比例算法消抖,,摇杆控制机械臂模块,双死区过滤消抖
更新日志 2025/10/22 WatchBot_Contro 1.10 更新内容:重大更新,添加仿FreeRtos时间片调度器,程序框架及任务实时性优化 LED驱动和蜂鸣器驱动修复BUG,添加可调蜂鸣时间、开关
更新日志 2025/10/23 WatchBot_Contro 1.11 更新内容:可调LED界面重构解耦 界面优化,预设添加ESP32板载LED、CAM,LED设置
更新日志 2025/10/24 WatchBot_Contro 1.12 更新内容:可调LED界面优化完善,主页菜单重构解耦,拓展性增强,机械臂控制模块 修复摇杆控制直流电机BUG
更新日志 2025/10/25 WatchBot_Contro 1.13 更新内容:RTC实时时钟、闹钟模块重构解耦优化,拓展性、可读性、复用性增强 修复红外遥控器长按无效
更新日志 2025/10/26 WatchBot_Contr 1.14 新增蜂鸣器菜单,可调蜂鸣器。加载重构贪吃蛇至菜单,调度器调用,拓展性可读性增强 通讯录部分模块解耦
更新日志 2025/10/27 WatchBot_Contr 1.15 通讯录重构,扫雷部分功能重构,使用调度器轮询,猜数字重构。 机械臂模块分层,硬件驱动层 - 控制层 - 应用层 接线图重新整理
更新日志 2025/10/28 WatchBot_Contr 1.16 新增机械臂控制菜单、红外遥控机械臂菜单、摇杆控制菜单 机械臂参数显示,红外遥控可以设置机械臂角度参数
更新日志 2025/10/29 WatchBot_Contr 1.17 新增机械臂动作菜单可选两种动作demo,快速机动、摆手 修复舵机实时参数错误显示
更新日志 2025/10/31 WatchBot_Contr 1.18 新增串口接收指令集,USART下发人脸追踪解算参数 (目标 yaw/roll/pitch/fanspeed),蜂鸣器蜂鸣频率,STM32 接收并转换为目标角度执行/蜂鸣器频率
更新日志 2025/11/2 WatchBot_Contr 2.00 新增STM串口发送指令集,USART发送控制ESP32板载led以及摄像头闪光灯控制指令
更新日志 2025/11/7 WatchBot_Link 2.01 新增ESP32S3_LCDili9341驱动程序,图像库。esp32板载LED驱动程序
更新日志 2025/11/8 WatchBot_Link 2.02 新增ESP32S3_ov2640摄像头驱动程序,适配LCD显示屏,可将画面发送至屏幕
更新日志 2025/11/9 WatchBot_Link 2.03 新增ESP32S3_ws2812驱动程序,颜色时间模式可调 板载led功能完善、sd卡读写模块
更新日志 2025/11/10 WatchBot_Link 2.04 新增ESP32S3_1600x1200拍照以jpeg格式存储到sd卡,引脚资源稀缺开发进入瓶颈,裁剪lcd的cs引脚(下拉)和背光(上拉)
更新日志 2025/11/13 WatchBot_Link 2.05 使用espwho框架人脸检测,lcd显示人脸矩形框图,返回人脸五官二维坐标,预设uart通信驱动程序
更新日志 2025/11/15 WatchBot_Link 2.06 新增uart通信模块,与stm32相互通信,可通过stm32控制esp32led灯,esp32下发舵臂指令,蜂鸣器指令
更新日志 2025/11/16 WatchBot_Link 2.1 完成 STM32 与 ESP32 的串口通信模块优化,实现稳定通信。 修改 USART_ProcessByte 函数及命令执行队列逻辑,确保接收到的数据帧可以安全发送至命令处理任务,避免数据覆盖问题。 队列 cmd_execution_handle 创建并成功发送机械臂舵机和蜂鸣器指令数据帧。 指令下发与执行 STM32 成功下发指令,实现对 ESP32 板载 LED 灯的控制(可闪烁/颜色/模式控制)。 ESP32 能发送并打包机械臂舵机控制指令,实现四个角度同时控制(Pan、Roll、Tilt、Fan)偏航角、翻滚角、俯仰角、风扇转速 蜂鸣器指令处理逻辑补充完善,实现 STM32 可控制蜂鸣器频率与时长。 确保 UART 数据接收、缓存与任务处理流程稳定可靠。 ESP32支持 uint16 与浮点数据相互转换,用于角度、风扇转速 等参数发送。 对多任务并发情况下数据帧被覆盖的问题进行优化处理。 新增led控制指令,esp32板载LED频率控制,ESP32摄像头闪光灯频率控制、模式控制 模式(常亮、熄灭、红蓝爆闪、闪烁、亮几次)亮灭时间可调 修复若干已知通信与摇杆目标参数对不上 bug。 提高串口通信、机械臂控制、LED/蜂鸣器指令执行的整体稳定性。 stm32机械臂角度变量命名统一,将 Base 修改成 Pan,Pitch改成Tilt(Pan、Roll、Tilt、Fan)偏航角、翻滚角、俯仰角、风扇转速
更新日志 2025/11/18 WatchBot_Link 2.2 新增拍照功能,1600*1200格式存入sd卡,拍照途中将暂停人脸识别及其lcd任务进程800ms stm32新增拍照选项。修复诺干bug,警报闪光灯模式不切换,无法关闭闪光灯等bug
更新日志 2025/11/21 WatchBot_Link 2.3 人脸识别坐标解析解决负数坐标、框中心计算、测量像素角度映射 FoV 分辨率对应关系、人脸追踪中心坐标、死区处理 esp32新增结构体、set/offset/get 系列接口 控制机械臂角度限位 角度限位宏、风扇控制、全功能 API 通过串口发给主机stm 更改自定义协议帧,esp32发送机械臂控制参数采用10字节,一次传输偏航角、翻滚角、俯仰角参数 使用人像中心的X轴坐标和画面中心X轴坐标计算像素数量,通过像素角度映射计算舵机臂需要制动的偏航角 使用人像中心的Y轴坐标和画面中心Y轴坐标计算像素数量,通过像素角度映射计算舵机臂需要制动的俯仰角 使用左右眼睛与左右嘴角坐标 atan2f 计算倾斜角 加权融合算法计算舵机臂需要制动的翻滚角 硬件::::::::::: 洞洞板飞锡将双4pin端口和esp32s3cam固定 洞洞板固定在机械臂末端////原理图接线图未更新 WatchBot_Contro 2.3 更改自定义协议帧,stm32机械臂控制参数采用10字节,一次传输偏航角、翻滚角、俯仰角参数
更新日志 2025/11/24 WatchBot_Link 2.4 新增人脸追踪模式、巡逻模式, stm32选择自动控制,esp32进入巡逻模式扫描周围环境 巡逻范围偏航角、俯仰角、翻滚角、下个角度切换时间、每次步进多少度可在宏定义 人脸追踪模式将姿态解算后发送给主机对舵机pwm进行调制,将人脸保持在画面中央 未检测到人脸多少秒后进入巡逻模式时间可设置,检测到人脸后蜂鸣器蜂鸣 人脸姿态解算模块新增参数角度死区与角度补偿,头文件宏定义设置
更新日志 2025/11/27 WatchBot_Link 2.5 新增自动模式检测到人脸侵入时拍照存入sd卡 修复用户长按拍照键系统死机重启等故障 修复巡逻模式检测到人脸时拍照造成的系统死机重启等故障 修复检测到人脸蜂鸣器不蜂鸣,esp32蜂鸣器更改为队列通知 esp32-uart模块每个发送命令函数加互斥锁,解决资源竞争导致的系统死机重启等问题,stm32接收到乱码等bug 人脸姿态解算模块增加任务挂起与执行函数,未收到stm32发送的接管控制机械臂指令时处于静默状态 增加所有任务任务栈大小及其拍照、ai、lcd等任务队列大小,确保片上资源不浪费,队列深度和任务栈大小不足造成的死机重启等问题 esp32接收拍照指令增加时间间隔避免连续拍照造成psram爆满系统死机崩溃等问题 stm32增加发送拍照指令时间间隔避免用户重复发送同一指令造成esp32一直接收中断、系统实时性降低等问题 拍照函数增加1300ms阻塞延迟,确保拍照时有足够时间初始化成1600*1200JPEG格式并写入sd卡 补丁:加入拍照闪关灯后切换回原来的led状态 新增巡逻闪关灯和报警闪光灯 取消esp32机械臂动作表 新增巡逻路线的偏航角、翻滚角、俯仰角范围可设置,每次步进角度可设置,下次步进时间可设置
更新日志 2025/11/28 WatchBot_Link 2.5 STM32-LED控制菜单新增巡逻模式(红白蓝交替闪烁)、警报模式改为红蓝快速切换 ESP32在巡逻模式下led切换为巡逻模式,检测到人脸侵入切换回红蓝爆闪 接线图更新、物料清单完整更新。 至此该项目功能已经全部实现, 作为我的第一个开源项目,虽有诸多不完美,却承载了本人几个月的心血 特别佩服、感谢那些有开源精神的大佬,碰到诸多问题,经常能从开源项目、帖子、视频中寻找到答案 虽然该项目价值低、功能实现简单。但依旧开源,希望能帮助到有需要的人 至此 --- 再见!
开源警示
- 本项目完全开源,仅供学习、研究和教育使用。
- 禁止任何未经授权收费传播。
- 禁止任何未经授权收费传播。
- 禁止任何未经授权收费传播。
- 本项目仅供学习与研究使用,不保证功能完整或适用性。
- 使用本项目产生的任何风险和损失,由使用者自行承担。
- 有疑问或更好建议可联系作者
- 作者联系方式: 498644995@qq.com
- qq: 498644995
- B站: 9175先生
- 视频有部分功能的详细介绍及原理