瓦力(WALL·E)机器人 DIY 教程
作者:B站 UP 李不胖谁胖 · QQ 交流群:757384775
概述
简介:
相信童年看过《机器人瓦力》电影的小伙伴一定都想拥有一台属于自己的瓦力,本教程就DIY瓦力所需的物料和控制程序开始,带着大家一起DIY一个瓦力机器人。我想没有男孩子能抵抗的住这集成声、光、电、动的小机器人玩具吧,寒假带着娃做一个,把隔壁小孩馋哭 哈哈。

整体架构
动手做之前先理解这一节。80% 的故障可以靠这张图在 10 秒内定位:哪一段通信断了,就检查哪一段。
三段通信架构
瓦力的控制信号从手机/网页发出后,要经过三段通信才能到达执行模块:
1 | ┌──────────────────┐ 一段通信 ┌──────────────────┐ 二段通信 ┌──────────────────┐ 三段通信 ┌────────────────────┐ |
排查问题时按 一段 → 二段 → 三段 顺序逐级定位(详见文末”问题 Q&A”章节)。


电源拓扑
瓦力使用 12V → 5V 两级电源,三组电源域要严格区分共地、不共电:
1 | [3 × 18650 串联 ≈ 11.1V ~ 12.6V] |
| 电源域 | 电压 | 供给对象 | 备注 |
|---|---|---|---|
| 主电池 | ~12V | L298N、DC-DC 降压模块 | 船型开关串接在 + 极 |
| 主 5V | 5V | UNO、ESP32、PCA9685 VCC | DC-DC 降压输出 |
| 舵机 5V | 5V | PCA9685 V+ | 独立引线,电流峰值可达 3A |
| 信号 GND | 0V | 所有模块 | 必须全部共地 |
⚠️ 电源接错是最常见的炸板原因:
- 不要把 12V 直接接到 UNO 5V 或 ESP32 5V 引脚(会烧主控)
- PCA9685 V+ 不要从 UNO 5V 借电(舵机带不动、UNO 反复重启)
- 必须共地,否则串口通信会乱码或完全不通
完整接线总览
模块详细接线见各章节,下表是一站式查询:
| 模块 | 引脚 | 接到 | 引脚 | 用途 |
|---|---|---|---|---|
| ESP32 C3 ↔ UNO | IO00 (RX) | UNO | D1 (TX) | UART 透传 |
| IO01 (TX) | UNO | D0 (RX) | UART 透传 | |
| GND | UNO | GND | 共地 | |
| UNO ↔ L298N | D6 | L298N | IN1 | 左电机 |
| D7 | L298N | IN2 | 左电机 | |
| D8 | L298N | IN3 | 右电机 | |
| D9 | L298N | IN4 | 右电机 | |
| GND | L298N | GND | 共地 | |
| UNO ↔ PCA9685 | A4 | PCA9685 | SDA | I²C 数据 |
| A5 | PCA9685 | SCL | I²C 时钟 | |
| 5V | PCA9685 | VCC | 逻辑供电 | |
| GND | PCA9685 | GND | 共地 | |
| UNO ↔ RC522 NFC(选配) | D10 | RC522 | SDA | SPI 片选 |
| D11 | RC522 | MOSI | SPI | |
| D12 | RC522 | MISO | SPI | |
| D13 | RC522 | SCK | SPI | |
| 3.3V | RC522 | 3.3V | RC522 是 3.3V 模块 | |
| UNO ↔ DFPlayer MP3(选配) | D2 | DFPlayer | RX | 软串口 |
| D3 | DFPlayer | TX | 软串口 | |
| 5V | DFPlayer | VCC | 电源 | |
| ESP32 ↔ 激光头(选配) | IO10 | 激光头 | + | ESP32 直接控制 |
| GND | 激光头 | - | 共地 | |
| ESP32 ↔ ASR PRO 语音(选配) | IO06 | ASR PRO | PB5 | 软串口 |
| IO07 | ASR PRO | PB6 | 软串口 | |
| 5V | ASR PRO | 5V | 电源 | |
| ESP32 ↔ DHT11 温湿度(选配) | IO04 | DHT11 | OUT | 数据 |
| 3.3V | DHT11 | + | 电源 |
⚠️ ESP32 C3 不同板型 IO 编号不同,详见 一、1.2.1 节”ESP32 C3 板型引脚对照表”。
控制指令字符表
控制端发出的指令通过 ESP32 透传到 UNO 后,UNO 按以下字符表执行动作:
| 字符 | 动作 | 字符 | 动作 |
|---|---|---|---|
w |
前进 | s |
后退 |
a |
左转 | d |
右转 |
q |
停止 | k / i |
抬 / 低脖子 |
j / l |
左 / 右转头 | r / f |
抬 / 低头 |
t / g |
左手上 / 下 | y / h |
右手上 / 下 |
1 |
播放音乐 | 2 |
动作编组 1 |
3 |
复位 |
物料清单(BOM)
| 序号 | 模块 | 功能 | 数量 | 参考价格(单价) | 参考价格(总价) | 备注 |
|---|---|---|---|---|---|---|
| 1 | Arduino UNO R3开发板 | 主控芯片 | 1 | 16.4 | 16.4 | |
| 2 | ESP32 C3开发板 | MQTT协议连接服务器 | 1 | 9.9 | 9.9 | |
| 3 | L298N 双H桥电机驱动板 | 驱动履带电机 | 1 | 6.4 | 6.4 | |
| 4 | PCA9685 16路舵机驱动板 | 舵机驱动 | 1 | 12.5 | 12.5 | |
| 5 | 随身WIFI | 提供WIFI | 1 | 15 | 15 | |
| 6 | DC-DC 12V 转5V 直流降压模块 | 12V 转 5V供电 | 1 | 5.9 | 5.9 | |
| 7 | 12V 370偏轴减速电机 107转/分钟 | 驱动履带 | 2 | 15 | 30 | 注意要买偏轴的,不是中置的轴 |
| 8 | 18650电池盒(3节) | 电池仓 | 1 | 1.2 | 1.2 | |
| 9 | 18650电池 | 串联提供12V电源 | 3 | 8 | 24 | |
| 10 | 18650充电器 | 1 | 10 | 10 | ||
| 11 | SG90 9g舵机 | 驱动运动关节 | 7 | 3.79 | 26.53 | |
| 12 | DC电源插头5.5mm(公头) | 电池仓电源输出接头 | 2 | 0.3 | 0.6 | |
| 13 | PETG-ECO 黑色 | 打印履带、电机座 | 1 | 35 | 35 | 实际总用量大概1.2kg左右吧,毛估没有具体算过 |
| 14 | PETG-ECO 灰色 | 打印瓦力头部 | 1 | 35 | 35 | |
| 15 | PETG-ECO 卡特黄 | 打印瓦力身体 | 1 | 35 | 35 | |
| 16 | ASR PRO语音模块(带喇叭) | 语音识别 | 1 | 28.9 | 28.9 | 语音控制(可选) |
| 17 | 1.3寸TFT彩屏 | 天气时钟屏幕 | 1 | 12.9 | 12.9 | 天气时钟使用(可选) |
| 18 | ESP8266开发板 | 天气时钟控制芯片 | 1 | 13.3 | 13.3 | 天气时钟使用(可选) |
| 19 | 5V 激光模块 | 眼睛 | 1 | 0.65 | 0.65 | 可选 |
| 20 | WIFI摄像头 | 网络传输视频 | 1 | 20 | 20 | 可选 |
| 21 | Mini Mp3 Player | 播放音乐 | 1 | 3.8 | 3.8 | 可选 |
| 22 | MFRC-522 RFID模块 | NFC无线识别 | 1 | 3.9 | 3.9 | 可选 |
| 23 | DHT11温度传感器 | 测量温度 | 1 | 2.5 | 2.5 | 可选 |
| 24 | 船型开关 | 电源开关 | 1 | 0.5 | 0.5 | 可选 |
| 25 | 3W 8R 喇叭 | 播放音乐 | 1 | 4.2 | 4.2 | 可选 |
| 26 | 1u2g云服务器 | MQTT服务器、部署H5控制页面 | 1 | 69 | 69 | 可选 |
| 27 | 丙烯颜料(12种盒装) | 瓦力上色 | 1 | 1.8 | 1.8 | 可选 |
| 合计 | 424.88 |
如果只想完成基础功能,实现履带底盘的行进和关节运动的话硬件部分成本大概在160元,扩展的模块可根据自己需要选择性购买即可。
以下是DIY必备的一些工具和常见的小物品就不算在内了
| 序号 | 工具&物品名称 |
|---|---|
| 1 | 热熔胶枪 |
| 2 | 万用表 |
| 3 | 电烙铁 |
| 4 | 老虎钳 |
| 5 | TF卡、读卡器 |
| 6 | 回形针 |
| 7 | M3螺柱 螺母 |
| 8 | 502胶水 |
| 9 | 杜邦线(公对母、母对母) |
使用或涉及的技术栈
Arduino IDE 开发环境
Element Plus + Vue3 + Vite + TypeScript 自建H5控制页面
Linux + Nginx + Docker + EMQX 后台服务器
烧录前配置私密凭据
联网固件不再在源码中保存家庭 WiFi 或 Blinker 设备密钥。进入所选固件目录后执行:
1 | cp secrets.example.h secrets.h |
然后只在本机编辑 secrets.h。该文件已被 .gitignore 忽略,不要上传到网盘、Git 仓库或聊天群。公网 MQTT 的服务器配置继续保留在固件中,但 topic 必须改成自己的唯一值;Topic 中不要包含手机号、密码、地址等隐私信息。
如果旧版本中的 WiFi、Blinker 或 SSH 凭据曾公开过,仅从文件中删除并不能使旧凭据失效,还需要在路由器、Blinker 控制台或服务器上主动更换/撤销。
一、履带电机控制
1.1 履带电机使用的是12V偏轴107转/分钟的减速电机,电机驱动使用的是双H桥L298N驱动板
L298N资料:
| IN1 | IN2 | ENA(A) | 电机A状态 |
|---|---|---|---|
| 0或1 | 0或1 | 0 | 停止 |
| 1 | 0 | 1 | 顺时针 |
| 0 | 1 | 1 | 逆时针 |
| 0 | 0 | 1 | 制动 |
| 1 | 1 | 1 | 制动 |
| IN3 | IN4 | ENA(B) | 电机B状态 |
|---|---|---|---|
| 0或1 | 0或1 | 0 | 停止 |
| 1 | 0 | 1 | 顺时针 |
| 0 | 1 | 1 | 逆时针 |
| 0 | 0 | 1 | 制动 |
| 1 | 1 | 1 | 制动 |
这里我们不使用PWM调速,ENA(A) ENA(B)默认短接就是最大转速。
控制方式:两个履带电机正转为前进,都反转为后退,一正转一反转为转向。
| IN1 | IN2 | IN3 | IN4 | 行进状态 |
|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 停止 |
| 0 | 0 | 0 | 0 | 停止 |
| 1 | 0 | 1 | 0 | 前进 |
| 0 | 1 | 0 | 1 | 后退 |
| 1 | 0 | 0 | 1 | 右转 |
| 0 | 1 | 1 | 0 | 左转 |
1.2 电路连接:
DC12V降压模块的12V 连接 L298N 的12V输入来给L298N供电。
1 | L298N模块 Arduino UNO开发板 |
1 | ESP32 C3开发板 Arduino UNO开发板 |
1.2.1 ESP32 C3 板型引脚对照表
⚠️ 市面上”ESP32 C3”有多种板型,UART 引脚定义不同,烧代码前请按自己的板子修改,否则 ESP32 ↔ UNO 二段通信会完全不通!
| 板型 | Serial1 RX / TX | 板载 LED | Boot 键 | USB-串口芯片 | 备注 |
|---|---|---|---|---|---|
| 合宙 ESP32 C3 经典版 | IO00 / IO01 | IO12, IO13 | IO09 | CH343 | 本教程默认 |
| 合宙 ESP32 C3 简约版 | IO20 / IO21 | IO12, IO13 | IO09 | CH343 | - |
| ESP32 C3 SuperMini | IO20 / IO21 | IO08 | BOOT 按键 | CH340/CH9102 | 体积最小 |
| 立创 ESP32 C3 / 第三方板 | IO20 / IO21 | IO13 | BOOT 按键 | CP2102 | - |
代码中的 Serial1 初始化要按板型修改:
1 | // 合宙经典版(本教程默认) |
不知道自己板子是什么型号?
- 看板子背面丝印 / 包装上的型号
- 看插上电脑后设备管理器识别出的串口芯片(CH343 → 合宙;CH340/CP2102 → 第三方)
- 实在不确定,先用万用表通断测一下 UART TX 焊盘是哪个 IO
软串口方案(不推荐,会丢字符且性能差,仅作备选):
1 |
|
1.3 Arduino UNO代码
百度网盘链接:https://pan.baidu.com/s/1HNKWE4Z2C2nG0kT3WxBQWA?pwd=zm6l
1 | /** |
二、舵机控制
舵机控制使用的是PCA9685 16路舵机驱动板
下面是电路连接图:
1 | PCA9685舵机驱动板 Arduino UNO开发板 |
使用前请先确保Arduino IDE已安装了Adafruit PWM Servo Driver Library库
Arduino UNO舵机控制代码
百度网盘地址:链接:https://pan.baidu.com/s/1U4rW1MrFWgN5JhVQwd_Qtg?pwd=rghc
1 | /** |
2.1 舵机角度标定(必读,避免炸机)
直接烧别人的代码不标定,大概率会把舵机或外壳卡死。 每只瓦力组装后的舵机机械零位都不同,UP 主代码里的
servo_X_min/max_angle是他自己机器测出来的值,你必须按自己的机器重新标定。
为什么必须标定
代码中每个舵机都定义了机械限位常量:
1 | double servo_0_min_angle = 0; // 头俯仰下限 |
如果你的舵机臂安装角度不同、或外壳干涉位置不同,直接用 UP 主的 0~120 可能会:
- 越过机械限位 → 舵机 “嗞嗞” 响、烫手、齿轮打齿 → 舵机报废
- 碰到外壳 → 外壳变形、舵机堵转 → 舵机或外壳报废
- 关节抖动不停 → 舵机内部反馈错乱 → 过热烧毁
标定步骤
1. 不要装外壳! 只把 PCA9685、舵机、UNO、电源接好通电。
2. 烧录最简测试代码(每次只测一个舵机):
1 |
|
3. 从 90° 开始(SG90 物理中位,最安全)。
4. 逐步增减 5° 重新烧录,听声音、看动作:
| 现象 | 含义 | 下一步 |
|---|---|---|
| 舵机平稳无杂音 | 角度安全 | 继续推 5° |
| 舵机轻微抖动 | 接近限位 | 退回 5° 记下 |
| 舵机 “嗞嗞” 卡顿 / 烫手 | 越过限位 | 立刻断电,刚才的角度就是机械极限 |
不要越过限位再试 —— 越一次伤一次。
5. 记录每个舵机的安全 min / max,更新到完整代码:
1 | double servo_0_min_angle = <你测出来的最小值>; |
6. 装好外壳后再标一次 —— 外壳会进一步压缩活动范围,没装壳标定的值不能直接用。
各关节参考值(UP 主机器,仅作起点)
| 通道 | 关节 | UP 主 min | UP 主 max | UP 主初始 | 你的 min | 你的 max | 你的初始 |
|---|---|---|---|---|---|---|---|
| CH0 | 头俯仰 | 0° | 120° | 0° | |||
| CH1 | 头水平旋转 | 45° | 165° | 105° | |||
| CH2 | 脖子俯仰 | 0° | 50° | 0° | |||
| CH3 | 左眼 | 0° | 20° | 0° | |||
| CH4 | 右眼 | 0° | 20° | 20° | |||
| CH5 | 左手 | 20° | 100° | 100° | |||
| CH6 | (空,未使用) | - | - | - | - | - | - |
| CH7 | 右手 | 100° | 180° | 100° |
CH6 在原作中跳过未用,你可以分配给”嘴部开合”等扩展关节。
常见标定问题
| 现象 | 原因 | 解决 |
|---|---|---|
| 舵机抖动不停 | PCA9685 V+ 电流不够 | V+ 独立接 5V,不要从 UNO 5V 借电 |
| 上电瞬间舵机猛抽一下 | 上电瞬间 PWM 不稳定 | setup() 里立刻调用 servoSetUp() 复位 |
| 改了代码常量但不生效 | servo_X_current_angle 没同步改 |
min / max / current 三个常量一起改 |
| 关节互相干扰、误动作 | 多舵机同时上电误触发 | 逐个标定,未标定的舵机断电 |
| 复位后位置漂移 / 不准 | SG90 是开环舵机,电压不稳 | 检查 18650 电量、降压模块输出是否稳 5V |
| 每次上电姿态不一样 | 上电瞬间舵机随机抽搐 | setup() 末尾必须调用 servoSetUp() 强制归位 |
三、Web控制端
3.1 Arduino IDE开发环境搭建
Arduino官网 https://www.arduino.cc/
Arduino中文社区 https://arduino.me/
安装Arduino软件
添加开发板管理器 文件 -> 首选项 -> 其他开发板管理器地址 将如下链接填入
以下是Arduino中文社区提供的index 会比github上下载的快些,github可能会遇到下载失败的情况
1 | http://arduino.me/packages/esp8266.json |
3.安装Blinker库 在线安装失败 请尝试离线安装包 https://www.diandeng.tech/doc/getting-start-esp32-wifi
Blinker 首页 https://www.diandeng.tech/home
Blinker 的github仓库地址可以自行下载最新支持包 https://github.com/blinker-iot
Blinker 官网提供的安装包 https://www.diandeng.tech/sdk/blinker-library-0.3.10230510.zip
4.安装 ESP32、ESP8266 开发板库,直接点击分享的对应库的exe文件安装既可
5.安装USB串口驱动,这个要看你所使用的开发板上下载芯片的型号,合宙的ESP32 C3要安装CH343驱动,常见的是CH34X、CP21XX芯片等,文件里分享了这两种,如果没有的话请搜索你开发板的串口芯片型号,下载对应驱动后安装。
3.2 使用Blinker App 作为控制端
新建Blinker独立设备、复制设备秘钥替换代码中的Blinker设备秘钥。
1
2
3// Blinker设备秘钥
char auth[] = BLINKER_AUTH;更新Blinker App 瓦力设备的界面配置,使用如下代码进行替换。
瓦力界面配置代码:
1 | {¨version¨¨2.0.0¨¨config¨{¨headerColor¨¨transparent¨¨headerStyle¨¨dark¨¨background¨{¨img¨¨assets/img/headerbg.jpg¨¨isFull¨«}}¨dashboard¨|{¨type¨¨tex¨¨t0¨¨blinker入门示例¨¨t1¨¨文本2¨¨bg¨Ë¨ico¨´´¨cols¨Í¨rows¨Ê¨key¨¨tex-272¨´x´É´y´É¨speech¨|÷¨lstyle¨Ê¨clr¨¨#FFF¨}{ßC¨btn¨ßJ¨fas fa-arrow-alt-down¨¨mode¨ÉßE¨后退¨ßGßHßIÉßKËßLËßM¨btn-back¨´x´Ì´y´¤FßPÉßQ¨#076EEF¨}{ßCßSßJ¨fas fa-arrow-alt-up¨ßUÉßE¨前进¨ßGßHßIÉßKËßLËßM¨btn-go¨´x´Ì´y´¤BßQßXßPÉ}{ßCßSßJ¨fal fa-power-off¨ßUÉßE¨急停¨ßGßHßIÉßKËßLËßM¨btn-stop¨´x´Ì´y´¤DßQ¨#EA0909¨ßPÉ}{ßCßSßJ¨fas fa-arrow-alt-right¨ßUÉßE¨向右¨ßGßHßIÉßKËßLËßM¨btn-right¨´x´Î´y´¤DßPÉßQßX}{ßCßSßJ¨fas fa-arrow-alt-left¨ßUÉßE¨向左¨ßGßHßIÉßKËßLËßM¨btn-left¨´x´Ê´y´¤DßQßXßPÉ}{ßCßSßJ¨fad fa-arrow-alt-circle-up¨ßUÉßE¨抬脖子¨ßGßHßIÉßKËßLËßM¨btn-nick-up¨´x´Ì´y´ÏßQ¨#FBA613¨}{ßCßSßJ¨fad fa-arrow-alt-circle-down¨ßUÉßE¨低脖子¨ßGßHßIÉßKËßLËßM¨btn-nick-down¨´x´Ì´y´ÑßQßoßPÉ}{ßCßSßJ¨fad fa-arrow-alt-up¨ßUÉßE¨左手上¨ßGßHßIÉßKËßLËßM¨btn-left-hand-up¨´x´É´y´ÒßQ¨#00A90C¨ßPÉ}{ßCßSßJßsßUÉßE¨右手上¨ßGßHßIÉßKËßLËßM¨btn-right-hand-up¨´x´Ï´y´ÒßQßv}{ßCßSßJ¨fad fa-arrow-alt-down¨ßUÉßE¨左手下¨ßGßHßIÉßKËßLËßM¨btn-left-hand-down¨´x´É´y´¤BßPÉßQßv}{ßCßSßJßyßUÉßE¨右手下¨ßGßHßIÉßKËßLËßM¨btn-right-hand-down¨´x´Ï´y´¤BßQßv}{ßCßSßJ¨fad fa-arrow-alt-circle-left¨ßUÉßE¨左转头¨ßGßHßIÉßKËßLËßM¨btn-head-left¨´x´Ê´y´ÐßQßo}{ßCßSßJ¨fad fa-arrow-alt-circle-right¨ßUÉßE¨右转头¨ßGßHßIÉßKËßLËßM¨btn-head-right¨´x´Î´y´ÐßPÉßQßo}{ßCßSßJßyßUÉßE´低头´ßGßHßIÉßKËßLËßM¨btn-head-down¨´x´Ì´y´ÍßQßoßPÉ}{ßCßSßJßsßUÉßE´抬头´ßGßHßIÉßKËßLËßM¨btn-head-up¨´x´Ì´y´ËßQßo}{ßCßSßJ¨fad fa-user-robot¨ßUÉßE¨动作1¨ßGßHßIÉßKËßLËßM¨btn-act1¨´x´É´y´ÎßQßXßPÉ}{ßCßSßJ¨fad fa-redo-alt¨ßUÉßE¨动作复位¨ßGßHßIÉßKËßLËßM¨btn-reset¨´x´Ï´y´ÎßPÉßQßX}{ßCßSßJ¨fad fa-lightbulb-on¨ßUÉßE´激光´ßGßHßIÉßKËßLËßM¨btn-led¨´x´É´y´ÌßPÉßQße}{ßCßSßJ¨fad fa-thermometer-three-quarters¨ßUÉßE´温度´ßGßHßIÉßKËßLËßM¨btn-tem¨´x´Ï´y´ÌßPÉßQßv}{ßC¨deb¨ßUÉßIÉßKÑßLÌßM¨debug¨´x´É´y´¤H}÷¨actions¨|¦¨cmd¨¦¨switch¨‡¨text¨‡´on´¨打开?name¨¨off¨¨关闭?name¨—÷¨triggers¨|{¨source¨ß1P¨source_zh¨¨开关状态¨¨state¨|´on´ß1S÷¨state_zh¨|´打开´´关闭´÷}÷´rt´|÷} |
3.烧写控制代码到ESP32 C3开发板
合宙ESP32 C3 开发板官方文档 https://wiki.luatos.com/chips/esp32c3/index.html
如果使用的开发板不是ESP32 C3 请自行替换引脚定义,否则编译可能会出现报错。
代码中需要替换以下内容
1 | // Blinker设备秘钥 |
更改设备秘钥和wifi名称密码后,将ESP32_Blinker.ino 烧录到ESP32 C3开发板上
烧录之前请确保Arduino IDE已安装如下库:
1 | Blinker |
使用合宙ESP32 C3 烧录程序有一下几点需要注意,否则可能会导致烧录失败:
1.Flash Mode选择 “DIO” 模式。
2.USB CDC On Boot 选择 “Enabled” 方便串口调试。
3.按住板载boot键上电进入下载模式,此时两个板载led微亮。
4.如果烧录完成,板载的灯没有亮起,还是微亮状态,请按下reset键重启,或者给开发板重新上电。
3.3 Blinker控制方式的ESP32 C3代码(不推荐,连接可能不稳定)
百度网盘链接:https://pan.baidu.com/s/1OK_kX1OvmjliplcLMSUIGQ?pwd=e1in
1 | /** |
3.4 使用自建H5页面作为控制端
- 本节需要在Linux环境下使用Docker安装EMQX,并使用Nginx作为Web服务器部署瓦力的H5控制页面。
- EMQX官方文档:https://www.emqx.io/docs/zh/latest/deploy/install-docker.html
- EMQX Vue3示例:https://github.com/emqx/MQTT-Client-Examples/tree/master/mqtt-client-Vue3.js
1.安装Docker
1 | 安装相关工具 |
2.Docker安装 EMQX
1 | 拉取镜像 |
3.安装Nginx
1 | yum install -y nginx |
4.部署H5控制页面
1 | 安装unzip |
5.烧录ESP32_H5.ino程序到ESP32中
- 打开 ESP32_H5.ino 文件,替换mqtt链接相关的参数
1 | // MQTT Broker |
- 参数替换完成后,烧录程序到ESP32中,打开串口监视器查看日志。
- 打开H5控制页面,测试发送指令,并在串口监视器中查看。
不想自己搭建?直接使用作者分享的网站和 MQTT 服务器
1 | H5控制页面地址:https://walle.werfamily.fun |
自己搭建:需要替换如下,协议、服务器地址、端口

使用我搭建好的:topic请输入自己的B站UID

为了防止小伙伴订阅的主题重复冲突,所以使用时务必要将UID替换为自己的B站UID
B站UID查看的方法为 进入”我的主页” -> 点击空间 -> 点击详情
3.5 H5页面控制方式的ESP32 C3代码(推荐,连接稳定)
百度网盘链接:https://pan.baidu.com/s/1HEGymdvOeyf_LJFmb-WZXg?pwd=qh1i
1 | /** |
3.6 如何获取UID
电脑浏览器查看自己的UID 在个人资料中

手机端查看自己的UID
第一步

第二步

第三步

四、扩展模块(选配)
没有使用的模块请自行删除对应代码
完整版(包含所有模块)ESP32 C3代码:链接:https://pan.baidu.com/s/1AcRYgk3Fzj8J-DgBbBVwbA?pwd=453w
完整版(包含所有模块)Arduino UNO代码:链接:https://pan.baidu.com/s/1WTP7OwrzfyabWFWJCDkhqA?pwd=w5f2
使用语音控制模块前请先安装天问Block软件
天问官网 :http://www.twen51.com/new/twen51/index.php
ASR PRO语音模块代码:https://pan.baidu.com/s/1F9mbbMGzFKIO1RYE3TRoSA?pwd=ucwb
4.1 ASR PRO语音控制模块
1 |
|
4.2 DHT11温湿度模块
需要安装 DHT sensor library 库
1 | DHT11温湿度模块 ESP32 C3 |
4.3 RC522 RFID识别模块
Arduino_NFC代码:链接:https://pan.baidu.com/s/1FvI96uUmDy-ZOgpB4U8FaA?pwd=wzwa
需要安装 MFRC522 库
1 | RC522 RFID模块 Arduino UNO 开发板 |
4.4 Mini Mp3Player Mp3播放模块
需要安装 DFRobotDFPlayerMini 库
官方文档:https://wiki.dfrobot.com/DFPlayer_Mini_SKU_DFR0299
把音乐文件夹导入SD卡中
音乐链接:https://pan.baidu.com/s/15qRZ5JTXNoIE5nzJVDV0Vw?pwd=dmkf
Arduino_MP3代码:链接:https://pan.baidu.com/s/1Si77ZYmtONfURM49FJ6aQw?pwd=dpfk

1 | Mini Mp3Player模块 Arduino UNO 开发板 |
4.5 红色激光
1 | 红色激光头 ESP32 C3 |
问题Q&A
排查问题前,请先回到文档开头 “整体架构” 章节,对照其中的三段通信图和整体连接图,按图中定义来约定一二三段通信。
控制不了?没反应?
(1)首先确保H5控制端和ESP32都连接上了mqtt服务器。
(2)一段通信:H5控制端连接mqtt服务器后,点击发送指令,如果页面自己能收到指令并打印日志,则证明一段通信没问题。
(3)二段通信:H5发送指令后,ESP32串口有相应日志输出,并且板载Led交替闪烁。
(4)三段通信:H5发送指令后,UNO串口有相应日志输出。
ESP32连接不上MQTT服务器?
1.mqtt的topic是否已替换
2.WIFI和密码是否已替换
如何提问?
先确保以上链路的通信没问题之后,在检查模块接线。
1.开发板代码版本、问题描述
2.ESP32串口日志截图
3.UNO串口日志截图
第一次写教程录视频,难免有些卡壳和不足,如有错误之处还请指正,请见谅。
如果感觉对你有帮助的话,请帮忙点个一键三连,谢谢。
附录:资源下载汇总
各章节内部的下载链接保留不动,本附录用于一站式查询,方便对照下载。链接均为作者原始百度网盘地址,提取码已附带。
A.1 代码资源
| # | 资源 | 适用 | 链接 | 提取码 | 出现章节 |
|---|---|---|---|---|---|
| 1 | Arduino UNO 履带电机代码 | UNO 单独控制履带 | https://pan.baidu.com/s/1HNKWE4Z2C2nG0kT3WxBQWA | zm6l |
一、1.3 |
| 2 | Arduino UNO 舵机控制代码 | UNO 单独控制舵机(PCA9685) | https://pan.baidu.com/s/1U4rW1MrFWgN5JhVQwd_Qtg | rghc |
二、舵机控制 |
| 3 | Blinker 控制方式 ESP32 C3 代码 | ESP32 端,配合 Blinker App | https://pan.baidu.com/s/1OK_kX1OvmjliplcLMSUIGQ | e1in |
三、3.3 |
| 4 | H5 控制方式 ESP32 C3 代码 ⭐推荐 | ESP32 端,配合 H5 网页 | https://pan.baidu.com/s/1HEGymdvOeyf_LJFmb-WZXg | qh1i |
三、3.5 |
| 5 | 完整版 ESP32 C3 代码 | 含所有模块(MQTT + MP3 + 舵机 + OTA) | https://pan.baidu.com/s/1AcRYgk3Fzj8J-DgBbBVwbA | 453w |
四、扩展模块 |
| 6 | 完整版 Arduino UNO 代码 | UNO 主控集成所有模块(履带 + 舵机 + MP3 + NFC) | https://pan.baidu.com/s/1WTP7OwrzfyabWFWJCDkhqA | w5f2 |
四、扩展模块 |
| 7 | ASR PRO 语音模块代码 | 语音识别(天问 Block 工程) | https://pan.baidu.com/s/1F9mbbMGzFKIO1RYE3TRoSA | ucwb |
四、4.1 |
| 8 | Arduino_NFC 代码 | UNO + RC522 单模块测试 | https://pan.baidu.com/s/1FvI96uUmDy-ZOgpB4U8FaA | wzwa |
四、4.3 |
| 9 | Arduino_MP3 代码 | UNO + DFPlayer 单模块测试 | https://pan.baidu.com/s/1Si77ZYmtONfURM49FJ6aQw | dpfk |
四、4.4 |
| 10 | MP3 音乐文件包 | 配套音乐资源(拷贝到 TF 卡) | https://pan.baidu.com/s/15qRZ5JTXNoIE5nzJVDV0Vw | dmkf |
四、4.4 |
A.2 在线服务(作者搭建,可直接使用)
| 服务 | 地址 | 端口/协议 | 说明 |
|---|---|---|---|
| H5 控制页面 | https://walle.werfamily.fun | HTTPS | 浏览器打开即可,记得替换 Topic 为自己的 B 站 UID |
| 公共 MQTT Broker | t.werfamily.fun |
1883 (TCP) | Topic 格式 bili/<你的B站UID>,防止冲突 |
A.3 官方文档与开发工具
| 类别 | 名称 | 链接 |
|---|---|---|
| 开发 IDE | Arduino 官网 | https://www.arduino.cc/ |
| Arduino 中文社区 | https://arduino.me/ | |
| 开发板 | 合宙 ESP32 C3 文档 | https://wiki.luatos.com/chips/esp32c3/index.html |
| 控制端 | Blinker 官网 | https://www.diandeng.tech/home |
| Blinker GitHub | https://github.com/blinker-iot | |
| MQTT | EMQX 官方文档 | https://www.emqx.io/docs/zh/latest/deploy/install-docker.html |
| EMQX Vue3 示例 | https://github.com/emqx/MQTT-Client-Examples/tree/master/mqtt-client-Vue3.js | |
| 模块 | DFPlayer Mini 官方 Wiki | https://wiki.dfrobot.com/DFPlayer_Mini_SKU_DFR0299 |
| 板包索引 | ESP8266 板包 | http://arduino.me/packages/esp8266.json |
| ESP32 板包 | https://arduino.me/packages/esp32.json | |
| Blinker 离线安装 | Blinker 库 0.3.10230510 | https://www.diandeng.tech/sdk/blinker-library-0.3.10230510.zip |
A.4 配套子项目
| 项目 | 位置 | 说明 |
|---|---|---|
| 太空人天气时钟简明教程 | 太空人天气时钟+简明教程/ 子文件夹 |
NodeMCU + 1.3” IPS 屏天气时钟(物料表第 17/18 项可选模块) |
| 配套源代码(含 ESP32 全套 .ino) | 代码/ 子文件夹 |
与本文档配套的完整 Arduino 工程目录 |
A.5 烧录注意事项速查
| 板型 | Flash Mode | USB CDC On Boot | 进入下载模式 |
|---|---|---|---|
| 合宙 ESP32 C3 | DIO | Enabled | 按住 Boot 键上电,两个板载 LED 微亮 |
| 烧录失败 | — | — | 按 Reset 重启或重新上电 |
烧录前请确保已安装如下 Arduino 库:
Blinker、DHT sensor library、Adafruit Unified Sensor、EspSoftwareSerial、Adafruit_PWMServoDriver、PubSubClient、ArduinoJson、MFRC522、DFRobotDFPlayerMini、TFT_eSPI(按需)。
未完待续。视频教程还在陆续制作中,文档会同步更新,敬请期待!
