【花雕动手做】行空板 K10 掌控板 AB 键无线广播遥控小车

2026-07-19612
AI 快速预览详细 收起
行空板K10是一款专为快速体验物联网和学习人工智能而设计的开发学习板,集成摄像头、麦克风、扬声器、2.8寸彩色屏幕等多种传感器及扩展接口。该板支持离线图像检测、语音识别和语音合成,非常适合中小学信息科技课程中的编程学习、物联网及人工智能教学。通过本项目,学生可以轻松实现传感器控制和物联网应用,提升实践能力。
【花雕动手做】行空板 K10 掌控板 AB 键无线广播遥控小车图2

行空板K10是一款专为快速体验物联网和学习人工智能而设计的开发学习板,100%采用国产芯片,知识产权自主可控,符合信息科技课程中编程学习、物联网及人工智能等教学需求。该板集成2.8寸LCD彩屏、WiFi蓝牙、摄像头、麦克风、扬声器、RGB指示灯、多种传感器及丰富的扩展接口。凭借高度集成的板载资源,教学过程中无需额外连接其他设备,便可轻松实现传感器控制、物联网应用以及人脸识别、语音识别、语音合成等AI人工智能项目。

主要特点
集成摄像头&内置算法,可进行离线图像检测
集成麦克风&内置算法,可进行离线语音识别
集成扬声器&内置算法,可进行离线语音合成
2.8寸彩色屏幕,数据展示更清晰
集成度高,利于教学
接口丰富,兼容软件多,扩展性好


【花雕动手做】行空板 K10 掌控板 AB 键无线广播遥控小车图1

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(13)
驴友花雕
驴友花雕
作者
【花雕动手做】行空板K10掌控板AB键无线广播遥控小车
【【花雕动手做】行空板 K10 系列实验之掌控板AB键无线广播通信遥控小车#diy电子爱好者 #单片机diy #手工机械爱好者 #行空板K10 #diy机器人】
https://www.bilibili.com/video/BV1vPK66WEM1/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987
[media=x,500,375]https://www.bilibili.com/video/BV1vPK66WEM1/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987[/media]
驴友花雕
驴友花雕
作者
实验场景图与视频记录



驴友花雕
驴友花雕
作者
Mind+图形编程

驴友花雕
驴友花雕
作者
行空板 K10 小车接收端 代码解读
一、头文件导入区
[code]#include "unihiker_k10.h"
#include
#include [/code]
1. `unihiker_k10.h`:行空板 K10 官方底层库,操控屏幕、画布、板载 RGB 彩灯
2. `Microbit_Motor.h`:电机驱动库,适配 microbit 电机拓展板,控制小车直流电机启停、正反转、调速
3. `DFRobot_ESP32_Radio.h`:ESP32 专用 2.4G 无线通信库,和之前掌控板遥控器配对通信,不需要 WiFi
二、函数前置声明
[code]void onRadioReceive_0();
void onRadioReceive_1();[/code]
两个自定义函数放在`loop`下方,C/C++ 规则要求提前声明,告诉编译器存在这两个无线接收回调函数。
- `onRadioReceive_0`:收到无线字符串`on`触发
- `onRadioReceive_1`:收到无线字符串`off`触发
三、对象与全局变量创建
[code]DFRobot_ESP32Radio Radio;
Microbit_Motor motorbit;
UNIHIKER_K10 k10;
uint8_t screen_dir=2;[/code]
1. `Radio`:无线通信实例,所有收发、频道、指令绑定都靠这个对象
2. `motorbit`:电机控制实例,统一管理两路小车电机
3. `k10`:行空板 K10 主设备对象,操作屏幕、灯光、画布
4. `screen_dir=2`:屏幕方向参数,2 代表屏幕正向正常显示
四、setup () 初始化函数(上电仅执行一次)
[code]
void setup() {
Radio.setCallback("on", onRadioReceive_0);
k10.begin();
Radio.setCallback("off", onRadioReceive_1);
k10.initScreen(screen_dir);
k10.creatCanvas();
Radio.turnOn();
Radio.setGroup(13);
k10.setScreenBackground(0x000000);
k10.canvas->canvasText("行空板K10 智能小车", 5, 0xFFFFFF);
k10.canvas->updateCanvas();
k10.rgb->brightness(round(6));
}[/code]
逐行拆解:
1. `Radio.setCallback("on", onRadioReceive_0);`
无线指令绑定:当无线模块收到文本`on`,自动执行`onRadioReceive_0`函数,属于事件回调,不用循环反复检测信号。
2. `k10.begin();`
行空板硬件总初始化,启动 IO、屏幕、灯光底层驱动。
3. `Radio.setCallback("off", onRadioReceive_1);`
绑定第二条指令:收到`off`自动执行停止函数。
4. `k10.initScreen(screen_dir);`
根据变量`screen_dir=2`初始化屏幕显示方向。
5. `k10.creatCanvas();`
创建绘图画布,所有文字、图形必须绘制在画布上才能显示。
6. `Radio.turnOn();`
开启 2.4G 无线射频模块,进入接收等待状态。
7. `Radio.setGroup(13);`
设置无线通信频道分组 13,**必须和遥控器掌控板分组号完全一致**,否则无法通信;多台小车同时使用可修改分组避免互相干扰。
8. `k10.setScreenBackground(0x000000);`
设置屏幕背景为纯黑色(RGB 十六进制,00 红 00 绿 00 蓝)。
9. `k10.canvas->canvasText("行空板K10 智能小车", 5, 0xFFFFFF);`
在画布坐标 x=5 位置,打印白色标题文字。
10. `k10.canvas->updateCanvas();`
画布刷新函数,绘图完成后必须调用,画面才会输出到实体屏幕。
11. `k10.rgb->brightness(round(6));`
全局调节板载 RGB 灯亮度,亮度等级 6,数值范围 0~255,数字越大灯越亮。
五、loop () 主循环
[code]void loop() {
}[/code]
程序初始化完成后会无限执行 loop。本项目所有功能由无线接收事件自动触发,不需要在循环里写检测代码,因此留空不影响运行。
六、无线接收回调函数(核心动作逻辑)
### 1. 收到 "on" 执行前进
[code]void onRadioReceive_0() {
motorbit.motorRun(ALL, CW, 200);
k10.rgb->write(-1, 0x00FF00);
delay(1000);
k10.rgb->write(-1, 0x000000);
}[/code]
1. `motorbit.motorRun(ALL, CW, 200);`
- ALL:左右两路电机同时控制
- CW:电机顺时针正转(小车前进)
- 200:电机速度,取值 0~255
2. `k10.rgb->write(-1, 0x00FF00);`
参数`-1`代表控制**全部板载 RGB 灯**,颜色设置绿色,提示小车启动。
3. `delay(1000);` 绿灯保持 1 秒
4. `write(-1, 0x000000)` 全部彩灯熄灭
### 2. 收到 "off" 执行停止
[code]void onRadioReceive_1() {
motorbit.motorStop(ALL);
k10.rgb->write(-1, 0xFF0000);
delay(1000);
k10.rgb->write(-1, 0x000000);
}[/code]
1. `motorbit.motorStop(ALL);` 停止全部电机,小车立刻刹车静止
2. 所有 RGB 灯亮红色,代表停止状态
3. 红灯维持 1 秒后熄灭
整体程序完整逻辑
硬件搭配
发送端:掌控板(A 键发 on,B 键发 off)
接收端:行空板 K10 + 电机拓展板 + 小车底盘
完整工作流程
1. 两块设备无线分组都为 13,配对通信;
2. 行空板开机初始化屏幕,显示黑色背景 + 白色标题;
3. 无线模块持续监听遥控器信号;
4. 遥控器按 A 发送`on`:小车前进、全板彩灯亮绿 1 秒;
5. 遥控器按 B 发送`off`:小车停止、全板彩灯亮红 1 秒。
关键知识点总结
1. **无线回调机制**:硬件后台监听数据,匹配指定字符串自动运行对应函数,不占用主循环资源;
2. **画布绘图逻辑**:先创建画布→绘制文字 / 图形→调用`updateCanvas()`刷新屏幕,缺一不可;
3. **RGB 参数规则**:`write(-1, 颜色)`控制所有灯,填写数字 1/2 可单独控制单颗彩灯;`0x000000`等于关灯;
4. **电机参数**:CW 正转、CCW 反转,ALL 代表双电机,速度区间 0~255;
5. 延时`delay(1000)`:每次触发灯光固定亮 1 秒,期间多次遥控不会延长灯光时长。
驴友花雕
驴友花雕
作者
行空板K10 无线广播小车接收端
【花雕动手做】行空板 K10 系列实验之掌控板AB键无线广播通信遥控小车
实验开源代码
[code]// 引入行空板K10官方驱动库,提供屏幕、RGB灯、画布等板载硬件操作接口
#include "unihiker_k10.h"
// 引入电机驱动库,用于控制microbit电机拓展板/直流减速小车电机
#include
// 引入ESP32 2.4G无线射频通信库,接收遥控器发来的无线指令
#include
// 函数声明:两个无线数据接收回调函数,收到对应字符串自动触发
void onRadioReceive_0();
void onRadioReceive_1();
// 创建2.4G无线通信对象,负责收发无线数据
DFRobot_ESP32Radio Radio;
// 创建电机控制对象,统一操作左右两路电机
Microbit_Motor motorbit;
// 创建行空板K10主硬件对象,操作屏幕、RGB、画布等外设
UNIHIKER_K10 k10;
// 定义屏幕显示方向变量,数值2代表屏幕默认正向显示
uint8_t screen_dir=2;
// 上电初始化函数,仅运行一次
void setup() {
// 绑定无线回调:当收到字符串"on"时,自动执行onRadioReceive_0函数
Radio.setCallback("on", onRadioReceive_0);
// 初始化行空板K10底层硬件(串口、IO、灯光驱动等)
k10.begin();
// 绑定无线回调:当收到字符串"off"时,自动执行onRadioReceive_1函数
Radio.setCallback("off", onRadioReceive_1);
// 根据预设方向初始化屏幕,screen_dir=2为正常正向显示
k10.initScreen(screen_dir);
// 创建画布对象,所有文字、图形绘制都要在画布上完成
k10.creatCanvas();
// 开启2.4G无线射频模块,准备接收遥控器信号
Radio.turnOn();
// 设置无线通信分组为13,必须和发送端掌控板分组完全一致才能通信
Radio.setGroup(13);
// 设置屏幕背景色为纯黑色 0x000000
k10.setScreenBackground(0x000000);
// 在画布坐标(5,0)位置绘制白色文字:行空板K10 智能小车,字号默认
k10.canvas->canvasText("行空板K10 智能小车", 5, 0xFFFFFF);
// 将画布上绘制的内容刷新到实体屏幕,不调用则画面不会更新
k10.canvas->updateCanvas();
// 设置板载RGB灯总亮度,round(6)代表亮度等级6(0最暗,255最亮)
k10.rgb->brightness(round(6));
}
// 主循环,程序初始化完成后无限循环
void loop() {
// 全部功能依靠无线接收回调触发,循环内无需写任何逻辑,留空
}
// 收到无线字符串"on"时执行的回调函数
void onRadioReceive_0() {
// ALL代表全部电机,CW=正转,速度200(范围0~255),小车前进
motorbit.motorRun(ALL, CW, 200);
// rgb.write(-1)代表控制全部板载RGB灯,设置为绿色0x00FF00
k10.rgb->write(-1, 0x00FF00);
// 灯光保持1秒
delay(1000);
// 1秒后关闭所有RGB灯(黑色=熄灭)
k10.rgb->write(-1, 0x000000);
}
// 收到无线字符串"off"时执行的回调函数
void onRadioReceive_1() {
// 停止所有电机,小车刹车静止
motorbit.motorStop(ALL);
// 全部RGB灯点亮红色0xFF0000,代表停止状态
k10.rgb->write(-1, 0xFF0000);
// 红灯保持1秒
delay(1000);
// 熄灭全部彩灯
k10.rgb->write(-1, 0x000000);
}
[/code]
驴友花雕
驴友花雕
作者
Mind+图形编程

驴友花雕
驴友花雕
作者
掌控板无线遥控发送端 代码解读
一、头文件引入区
[code]#include
#include [/code]
1. `#include `
掌控板专属底层库,封装屏幕、按键、RGB 灯、传感器所有板载硬件接口,Mind + 开发掌控板必备,没有它无法操作屏幕、A/B 按键、彩灯。
2. `#include `
DFRobot 官方 2.4G 无线通信库,依托 ESP32 射频实现板间点对点无线收发,**不依赖 WiFi、路由器**,两块掌控板直接通信,适合做小车遥控。
二、函数声明区
[code]void onButtonAPressed();
void onButtonBPressed();[/code]
C++ 语法规则:如果自定义函数写在主函数下方,编译器提前看不到函数,必须先声明。
两个函数分别对应 A 键、B 键按下后的执行逻辑,属于**按键回调函数**。
三、对象实例化
[code]DFRobot_ESP32Radio Radio;[/code]
创建无线通信对象 `Radio`,后续所有无线开关、分组、发指令操作,都通过这个对象调用。
四、setup () 初始化函数(上电只执行 1 次)
[code]void setup() {
mPython.begin();
buttonA.setPressedCallback(onButtonAPressed);
buttonB.setPressedCallback(onButtonBPressed);
Radio.turnOn();
Radio.setGroup(13);
rgb.write(1, 0x0000FF);
display.setCursorLine(1);
display.printLine("Mind+小车遥控器");
display.setCursorLine(2);
display.printLine("A on B off");
}[/code]
逐段拆解:
1. `mPython.begin();`
掌控板硬件总初始化,必须放在 setup 第一行,启动屏幕、按键、灯光驱动。
2. `buttonA.setPressedCallback(onButtonAPressed);`
给 A 按键绑定回调函数:芯片后台自动检测按键,按下瞬间自动运行`onButtonAPressed`,不用在循环反复扫描按键,程序无卡顿。B 按键同理。
3. `Radio.turnOn();` 开启 2.4G 无线射频模块。
4. `Radio.setGroup(13);` 设置通信频道分组 13。
只有收发两块掌控板分组数字完全一致,才能互相接收数据;多台小车同时使用,修改分组数字防止遥控串台干扰。
5. `rgb.write(1, 0x0000FF);`
控制第 1 颗板载 RGB 灯,0x0000FF 是纯蓝色,开机默认蓝色待机灯效。
6. 屏幕打印逻辑
`display.setCursorLine(x)` 切换打印行,`printLine()` 整行刷新文字,覆盖该行原有内容。
- 第 1 行:打印标题「Mind + 小车遥控器」
- 第 2 行:操作提示,告知用户 A 键开、B 键关小车
五、loop () 主循环
[code]void loop() {
}[/code]
loop 是程序上电后无限循环执行的函数,本程序全程依靠**按键回调事件**触发功能,不需要循环内写检测逻辑,因此留空。
六、按键回调功能函数
### 1. A 键按下函数
[code]void onButtonAPressed() {
Radio.send("on");
rgb.write(1, 0x00FF00);
display.setCursorLine(3);
display.printLine("on");
}[/code]
按下 A 键自动执行三件事:
1. 无线发送文本指令 `on`;
2. 第 1 颗 RGB 灯变为绿色,表示发送 “开启小车” 指令成功;
3. 屏幕第三行打印 on,直观显示当前发送指令。
### 2. B 键按下函数
[code]void onButtonBPressed() {
Radio.send("off");
rgb.write(1, 0xFF0000);
display.setCursorLine(3);
display.printLine(" off");
}[/code]
按下 B 键自动执行三件事:
1. 无线发送文本指令 `off`;
2. 第 1 颗 RGB 灯变为红色,表示发送 “关闭小车” 指令成功;
3. 第三行打印带前置空格的`off`,利用空格覆盖上一步打印的`on`,避免文字重叠。
# 整体程序功能总结
1. 硬件:掌控板作为无线遥控器发送端;
2. 通信:2.4G 射频,分组 13 频道点对点通信;
3. 交互逻辑:
- 开机蓝灯,屏幕显示遥控提示;
- A 键:发 on、绿灯、屏幕显示 on,控制小车启动;
- B 键:发 off、红灯、屏幕显示 off,控制小车停止;
4. 配套要求:小车端(接收端)掌控板无线分组必须设为 13,接收`on/off`字符串后执行前进 / 停止动作。
# 核心技术点说明
1. 回调机制:异步触发,不占用 loop 循环资源;
2. 私有 2.4G 无线:无需联网,近距离稳定控制;
3. RGB 三色标识状态:蓝 = 待机,绿 = 开,红 = 关;
4. 整行打印覆盖:简易实现屏幕状态刷新,不用清屏函数。
驴友花雕
驴友花雕
作者
掌控板无线广播遥控发射端
【花雕动手做】行空板 K10 系列实验之掌控板AB键无线广播通信遥控小车
实验开源代码
[code]// 引入掌控板官方底层驱动库,提供屏幕、按键、RGB灯等板载硬件操作接口
#include
// 引入DFRobot ESP32无线射频通信库,实现两块掌控板之间2.4G无线收发数据
#include
// 函数声明:提前告诉编译器下面有两个按键按下触发的回调函数
void onButtonAPressed();
void onButtonBPressed();
// 创建无线通信类实例对象Radio,后续通过这个对象调用无线收发功能
DFRobot_ESP32Radio Radio;
// 系统初始化函数,上电/复位只运行一次
void setup() {
// 初始化掌控板所有硬件:屏幕、按键、灯光、传感器等,必须第一行执行
mPython.begin();
// 绑定A按键按下的回调函数:按下A键自动执行onButtonAPressed函数
buttonA.setPressedCallback(onButtonAPressed);
// 绑定B按键按下的回调函数:按下B键自动执行onButtonBPressed函数
buttonB.setPressedCallback(onButtonBPressed);
// 开启2.4G无线射频模块,初始化无线硬件
Radio.turnOn();
// 设置无线通信分组为13,只有收发两端分组号完全一致才能互相通信
Radio.setGroup(13);
// 控制第1颗RGB彩灯,设置颜色纯蓝色(0x0000FF 十六进制RGB:绿0 红0 蓝255)
rgb.write(1, 0x0000FF);
// 将文字光标移动到屏幕第1行,准备打印文字
display.setCursorLine(1);
// 在第1行屏幕打印标题:Mind+小车遥控器
display.printLine("Mind+小车遥控器");
// 光标切换到屏幕第2行
display.setCursorLine(2);
// 第二行打印操作提示:A开启 B关闭
display.printLine("A on B off");
}
// 主循环函数,setup执行完成后无限循环运行
void loop() {
// 本程序所有功能依靠按键回调触发,无需在循环内写逻辑,留空即可
}
// A按键按下触发的回调函数
void onButtonAPressed() {
// 通过无线模块向同分组设备发送字符串 "on"
Radio.send("on");
// 第1颗RGB灯切换为绿色(0x00FF00:绿255,红0,蓝0)
rgb.write(1, 0x00FF00);
// 光标跳至屏幕第3行
display.setCursorLine(3);
// 第三行打印on,表示已发送开启指令
display.printLine("on");
}
// B按键按下触发的回调函数
void onButtonBPressed() {
// 无线发送关闭指令字符串 "off"
Radio.send("off");
// 第1颗RGB灯切换为红色(0xFF0000:红255,绿0,蓝0)
rgb.write(1, 0xFF0000);
// 光标到屏幕第3行
display.setCursorLine(3);
// 打印带空格的off,覆盖上一行的on文字,显示关闭状态
display.printLine(" off");
}
[/code]
驴友花雕
驴友花雕
作者
知识点:无线广播------行空板 K10 BLE、BLE Mesh 广播
一、BLE 普通广播(广播包 Advertising,非连接型)
1. 工作原理
发送板不建立蓝牙配对连接,定时(间隔可设)向外发送短小广播数据包;周围所有开启蓝牙扫描的 K10/ESP32 设备被动抓取数据,属于一对多离线通信,全程不用 WiFi、路由器。
发送端:只发包,不等待应答
接收端:持续扫描,识别目标设备标识后读取内容
2. 核心参数
传输距离:空旷 5–10 米,隔墙大幅衰减
功耗优势:发送、待机电流都很低,电池供电可长时间运行
数据限制:单帧广播载荷很短,一般几十字节以内
拓扑:1 个发射源→N 个接收机,接收机之间互不通信
3. 适用场景
一块主控批量控制多台 LED、蜂鸣器、小电机开关
手环式传感器广播温湿度、按键状态给多块行空板
无网络教室简易一控多教具
4. 短板
不能传长文本、语音、图片、大量数值
无可靠重传机制,干扰环境容易丢包
只能单向发,接收端无法回传数据给发射板
二、BLE Mesh 网格广播组网
1. 工作原理
所有行空板加入同一个 Mesh 网络,节点地位平等:
任意一块板子发送一条消息,全网所有 Mesh 节点同步收到;信号弱的节点还能中继转发消息,扩大覆盖范围,属于多向全网广播。
完全离线运行,不需要 WiFi 路由。
2. 对比普通 BLE 广播优势
信号中继:远距离、隔墙场景靠中间板子接力传递信号
双向互通:每个节点既能发全网广播,也能接收全网消息
分组控制:可划分分组,消息只发给指定分组设备,不用全部设备响应
稳定性高于单纯 Advertising 广播,自带简单纠错
3. 典型应用
教室几十台行空板灯光同步亮灭、抢答同步触发
多房间灯光、智能开关统一控制
分布式传感器,任意节点上报数据全网可见
4. 固有局限
单条消息数据量依旧偏小,依旧无法承载音频、大图
组网设备数量过多时,消息延迟会上升
相比 WiFi UDP,传输速度慢很多
三、两者统一短板汇总
大数据传输能力弱:仅适配开关指令、1–2 组数字、简短标识
高速传输不行:实时音频、大屏多行文字、图像一律不推荐
穿墙能力一般,密集金属遮挡信号暴跌
大量设备同时发包容易产生蓝牙信道冲突丢包
四、行空板 K10 实操区分选择
简单一控多、电池低功耗、距离近 → BLE 普通 Advertising 广播(代码简单、资源占用最小)
多设备互相收发、需要中继扩距离、批量分组控制 → BLE Mesh(组网复杂一点,功能更强)
要传文字、声音、大量数据、距离远、设备多稳定通信 → 优先改用 WiFi UDP 广播
补充简易实操要点
BLE 广播必须设置唯一设备名称 / UUID,接收端过滤识别,避免抓取无关蓝牙设备数据包;
Mesh 组网所有设备必须写入同一组网密钥、同一网络 ID 才能互相通信;
电池供电项目首选 BLE 体系,插电稳定大数据项目优先 WiFi。

驴友花雕
驴友花雕
作者
板载传感器与小车扩展板相关积木


辅助:屏幕显示相关积木

LED控制模块

驴友花雕
驴友花雕
作者
添加通信模块——无线广播


驴友花雕
驴友花雕
作者

遥控发射端掌控宝(带锂电池)
掌控板是国内专为**中小学 Python 创客教育**设计的开源微型开发板,搭载 ESP32 主控,自带 WiFi + 蓝牙,是一块 “掌上微型电脑”DFRobot。
一、核心板载硬件(不用外接配件就能玩)
1. **1.3 寸 OLED 显示屏**:128×64 分辨率,显示文字、动画、图片,支持中文;
2. **交互部件**:A/B 物理按键、6 路金手指触摸键、3 颗全彩 RGB 灯、蜂鸣器(播放音乐);
3. **内置传感器**:麦克风(拾音)、光线传感器、三轴加速度 / 磁场传感器(做电子罗盘、计步器);
4. **通信**:WiFi、蓝牙双无线,可联网、两块板子无线互传数据;
5. **拓展**:底部金手指引出全部 IO,能外接舵机、温湿度、电机等模块。
二、两种编程方式,零基础友好
1. **图形化积木编程(mPython/Mind+)**:拖拽模块,小学生也能上手;
2. **MicroPython 代码编程**:直接写 Python 代码,衔接初高中信息技术课程。
三、常见用途
- 课堂教学:编程入门、物联网、STEAM 科创课;
- 趣味制作:电子表、声光小游戏、声控彩灯、便携噪声 / 光照检测仪;
- 物联网:联网看天气、远程控制设备、环境数据上传云端;
- 可穿戴:智能手环、电子徽章、便携小仪器。
四、特点
体积小巧、一体化集成传感器、国产教育硬件、软硬件全开源,不用复杂接线就能快速做出智能小作品。

驴友花雕
驴友花雕
作者
实验扩展板与麦轮小车


- 没有更多了 -