相关链接

项目简介

本项目是基于ESP32单片机四足机器人设计,从创建工程到写此文共用时7天,从已有的步态开始建立。
主要功能:执行16个不同的动作,配合表情变化,可以通过手机APP使用UDP远程控制,
可以使用AP模式或者STAION模式来控制,也可以用手机app配网无需打开或者更改程序,
带OTA空中下载功能方便更新,OTA网址可以通过手机app写入,使用巴法云平台托管OTA更新所需bin文件。

项目功能

  1. 机器人16个动作:立正,前进,后退,左转,右转,正常,趴下,睡眠,狗刨,装死,过来,臣服,你好,手指,投降,跳舞。
  2. 可以使用手机app或者电脑上的NetAssist通过udp协议直接向单片机传输动作指令或是功能指令。
    • 功能指令包括:动作控制,单个舵机控制,PWM频率控制,配网,配置OTA更新网址,切换ESP32的WiFi模式,触发OTA更新程序。
    • 动作指令包括:16个基础动作,RGB炫彩灯任务的挂起和恢复,显示本地IP,9个表情轮询展示。
  3. 带有0.96寸的OLED屏幕能够显示表情和提示信息:9个表情映射16个动作,显示本地IP,提示配网信息接受成功,显示OTA更新中提示,展示WiFi模式选择菜单。
  4. 两颗WS2812目前就做了炫彩灯功能。
  5. 四个按键,EN,BOOT,Key1,Key2,配合使用能够切换WiFi模式和触发OTA更新。
  6. 使用OTA更新功能方便进行远程更新下载。

项目参数

  • 采用PCA9685芯片控制8个舵机,使用I2C和单片机进行通信,能够节约引脚和算力。
  • 直接市面上比较普遍的充放一体模块进行电源设计,节省设计时间。链接
  • 四足的零件是直接淘宝买的成品。链接
  • 舵机是最便宜最烂的SG90。

硬件说明

本项目由以下部分组成:电源部分,主控部分,舵机控制部分,按键控制部分,功能器件部分。

硬件联系图

加重颜色代表底层,而减轻颜色代表顶层,最淡的代表盖在顶层之上。

单片机程序说明

一开始其实想用蓝牙的,连接方便,单片机程序方便,手机APP程序开发也方便,就是太大了,我没开蓝牙之前编译完用了22%的flash(默认程序分配1.2M大小),开蓝牙一下子占用到90%,导致后续程序估计写不下了,最后就用了UDP。

arduino的自带库是这样的,用idf就会好很多。

本程序采用FreeRTOS多任务结构运行,任务之间使用任务通知进行沟通,包括:

void ota_task(void *param)
//OTA任务,可被其他任务创建,用于触发OTA更新

void udp_control(void *param)
//UDP任务,用于接收发过来的指令,解析后通知其他任务处理,还能在启动任务时广播发出本地IP和WiFi模式以及RGB的状态,以便单片机不知道手机APP的IP情况下让APP也能接收后解析读取

void motion_task(void *param)
//舵机控制任务,接收UDP任务发送过来的通知,并且执行相应动作

void oled_task(void *param)
//OLED控制任务,接收UDP任务发送过来的通知,并且执行相应显示,还能够通过按键显示菜单来通知UDP重启并且切换WiFi模式

void ws2812_task(void *param)
//RGB炫彩灯任务,简单执行炫彩灯,可以被指令挂起或者恢复达到切换RGB显示的目的

void setup()
void loop()
//在setup中创建开始所需的任务以及一些必须的初始化,随后在loop中删除任务节约内存

OTA使用巴法云服务器进行bin文件托管,相关教程可以参考这篇blog

还把一些比较繁杂的过程都写成Class了,main.cpp就是主要流程。

由于这个工程写的比较快,没有美化什么,所以阅读估计不太方便。

具体的程序内容和介绍可以去看我github库,之后大概会在里面的readme写更加详细的代码功能。

随后有空可能会在代码中添加注释,这种比较小的工程不太愿意写什么注释,大家可以用VSCode里面找个AI插件,让AI辅助注释一下。目前我在用CodeGeeX,不能说特别厉害,但还是挺好使的,最主要不用钱!

可以看一下我的Commit,确实提交次数不多,都是在加功能,没啥优化。

手机APP程序说明

AI2的工程文件也会放在GitHub库中,这里只会发目前版本的APK文件。

可以看到默认master分支里面的 appinventor2 文件夹里面就是aia文件。

使用APP Inventor 2进行图形化编程开发,对于没有Android开发经验的新人还是非常友好的。

我直接用的MIT的原站而不是国内的不维护的网站,不知道工程能不能兼容。

唯一使用UDP拓展,就是这个:

图形化编程太大了不好截图就不发了,实物图有软件在手机上的截图
主要控件内容:

//指令发送部分,包括指令填写框和发送按钮

//单个舵机控制部分,同样使用上面的指令发送按钮

//5个移动动作:四向运动和立正,10个展示动作

//RGB开关

//我想跳舞!16号动作

//UDP所需的remote IP 和 remote Port填写框(会自动输入,也可以手动)和连接开关
    //UDP不像TCP那样一对一连接,所以这个连接按钮主要功能是切换面板内容

//UDP监听开关和监听显示框,是程序控制的

//AP模式和STA模式两个按钮,对应单片机上的AP模式和STA模式

//配网:WiFi名称和WiFi密码输入框,点击配网按钮

//OTA网址输入框和发送框,用于更新OTA网址

注意事项

  • 短期项目,内容比较潦草,可能会有奇怪的BUG,没有美化,功能也不是很完善。
  • 第一次下载需要物理连接串口进行platformIO的下载或者直接下载bin文件,之后可以脱离物理串口,连接网络后通过OTA进行空中下载。
  • 要使用OTA功能需要刷入OTA固件才行,而且Flash分配要有OTA的空间(默认就有)。
  • 板子上开的m3的孔对不上底板上的洞,我是用扎带把PCB板和底板捆起来的。
  • 舵机要对应我视频内的序号来,否则就得改代码了。
  • 如果买的是我发的连接的四足机器人套件,舵机就得买6孔机臂的,否则装不进
  • 不会写步态,是直接使用的这个UP主发的视频下的链接然后改了改,前后移动基本原地踏步。
  • WiFi名称还没测试过能否使用中文,不过工程全部都是UTF-8编码的,应该没问题。
  • 我链接的APP Inventor 2网站或者我的GitHub库网站进不去不要来问我。

组装流程

会一并剪进视频当中。

实物图

原理图和PCB