
行空板K10是一款专为快速体验物联网和学习人工智能而设计的开发学习板,100%采用国产芯片,知识产权自主可控,符合信息科技课程中编程学习、物联网及人工智能等教学需求。该板集成2.8寸LCD彩屏、WiFi蓝牙、摄像头、麦克风、扬声器、RGB指示灯、多种传感器及丰富的扩展接口。凭借高度集成的板载资源,教学过程中无需额外连接其他设备,便可轻松实现传感器控制、物联网应用以及人脸识别、语音识别、语音合成等AI人工智能项目。
主要特点 集成摄像头&内置算法,可进行离线图像检测 集成麦克风&内置算法,可进行离线语音识别 集成扬声器&内置算法,可进行离线语音合成 2.8寸彩色屏幕,数据展示更清晰 集成度高,利于教学 接口丰富,兼容软件多,扩展性好
实验扩展板与福来轮小车

陀螺仪端掌控宝(带锂电池)
掌控板是国内专为中小学 Python 创客教育设计的开源微型开发板,搭载 ESP32 主控,自带 WiFi + 蓝牙,是一块 “掌上微型电脑”DFRobot。
一、核心板载硬件(不用外接配件就能玩)
二、两种编程方式,零基础友好
三、常见用途
- 课堂教学:编程入门、物联网、STEAM 科创课;
- 趣味制作:电子表、声光小游戏、声控彩灯、便携噪声 / 光照检测仪;
- 物联网:联网看天气、远程控制设备、环境数据上传云端;
- 可穿戴:智能手环、电子徽章、便携小仪器。
四、特点
体积小巧、一体化集成传感器、国产教育硬件、软硬件全开源,不用复杂接线就能快速做出智能小作品。

添加通信模块——无线广播(简版蓝牙)

板载传感器与小车扩展板相关积木
语音识别与合成模块积木


辅助:屏幕显示相关积木
LED控制模块

知识点:无线广播——行空板 K10 BLE、BLE Mesh 广播 (简版蓝牙) 一、BLE 普通广播(广播包 Advertising,非连接型)
二、BLE Mesh 网格广播组网
三、两者统一短板汇总 大数据传输能力弱:仅适配开关指令、1–2 组数字、简短标识 高速传输不行:实时音频、大屏多行文字、图像一律不推荐 穿墙能力一般,密集金属遮挡信号暴跌 大量设备同时发包容易产生蓝牙信道冲突丢包
四、行空板 K10 实操区分选择 简单一控多、电池低功耗、距离近 → BLE 普通 Advertising 广播(代码简单、资源占用最小) 多设备互相收发、需要中继扩距离、批量分组控制 → BLE Mesh(组网复杂一点,功能更强) 要传文字、声音、大量数据、距离远、设备多稳定通信 → 优先改用 WiFi UDP 广播
补充简易实操要点 BLE 广播必须设置唯一设备名称 / UUID,接收端过滤识别,避免抓取无关蓝牙设备数据包; Mesh 组网所有设备必须写入同一组网密钥、同一网络 ID 才能互相通信; 电池供电项目首选 BLE 体系,插电稳定大数据项目优先 WiFi。

掌控宝陀螺仪简版蓝牙发送端
【花雕动手做】行空板 K10 系列实验之简版蓝牙掌控板陀螺仪三驱全向福来轮小车
实验开源代码
// 掌控板底层驱动库,提供屏幕、加速度传感器、按键、RGB灯带硬件接口
#include <MPython.h>
// DFRobot ESP32 2.4G私有射频通信库,实现掌控板与小车点对点无线收发字符串指令
#include <DFRobot_ESP32_Radio.h>
// 函数前置声明,告知编译器后续定义的按键回调函数
void onButtonAPressed();
void onButtonBPressed();
// 实例化2.4G射频通信对象,负责无线报文发送
DFRobot_ESP32Radio Radio;
// 上电初始化函数,通电/复位仅执行一次
void setup() {
// 初始化掌控板全部硬件(屏幕、传感器、按键、灯光驱动)
mPython.begin();
// 绑定A按键按下事件:按下A键自动执行onButtonAPressed函数
buttonA.setPressedCallback(onButtonAPressed);
// 绑定B按键按下事件:按下B键自动执行onButtonBPressed函数
buttonB.setPressedCallback(onButtonBPressed);
// 开启2.4G射频模块,进入收发就绪状态
Radio.turnOn();
// 设置无线通信分组号13
// 重点:小车接收端必须设置相同分组13,收发分组不一致无法通信
Radio.setGroup(13);
// 设置RGB灯带全局亮度等级8,亮度取值区间 0 ~ 255
rgb.brightness(round(8));
// 光标定位屏幕第1行,打印标题文字
display.setCursorLine(1);
display.printLine("掌控板陀螺仪发送端");
// 光标定位屏幕第2行,打印操作提示
display.setCursorLine(2);
display.printLine("前后左右四个方向");
// 光标定位屏幕第4行,标注适配车型
display.setCursorLine(4);
display.printLine("三驱动全向轮小车");
}
// 主循环,初始化完成后无限循环持续运行
void loop() {
// 持续读取加速度传感器姿态
// 向前倾斜
if ((accelerometer.isGesture(accelerometer.TiltForward))) {
Radio.send("qian"); // 2.4G射频发送前进指令 qian
rgb.write(1, 0x00FF00); // 点亮第1颗RGB灯:绿色
display.setCursorLine(3);
display.printLine("前进"); // 屏幕第3行刷新状态
}
// 向后倾斜
if ((accelerometer.isGesture(accelerometer.TiltBack))) {
Radio.send("hou"); // 发送后退指令 hou
rgb.write(1, 0xFF0000); // 点亮第1颗RGB灯:红色
display.setCursorLine(3);
display.printLine("后退");
}
// 向左倾斜
if ((accelerometer.isGesture(accelerometer.TiltLeft))) {
Radio.send("zuo"); // 发送左横走指令 zuo
rgb.write(1, 0x0000FF); // 点亮第1颗RGB灯:蓝色
display.setCursorLine(3);
display.printLine("左横走");
}
// 向右倾斜
if ((accelerometer.isGesture(accelerometer.TiltRight))) {
Radio.send("you"); // 发送右横走指令 you
rgb.write(1, 0xFF9900); // 点亮第1颗RGB灯:橙黄色
display.setCursorLine(3);
display.printLine("右横走");
}
// 注意:代码未实现 ScreenDown(屏幕朝下)手势识别,无停车姿态触发
}
// ===================== 按键事件回调函数 =====================
// A按键按下触发
void onButtonAPressed() {
Radio.send("deng"); // 无线发送指令 deng(开灯)
rgb.write(1, 0xFFFFFF); // 第1颗RGB灯白色
display.setCursorLine(3);
display.printLine("开灯");
}
// B按键按下触发
void onButtonBPressed() {
Radio.send("ting"); // 无线发送指令 ting(停车)
rgb.write(1, 0x6600CC); // 第1颗RGB灯紫蓝色
display.setCursorLine(3);
display.printLine("停车");
}
知识点:三驱福来轮(三轮全向轮)控制原理 一、福来轮(全向 Omni 轮)基础结构与力学特性 福来轮vs麦克纳姆轮对比
二、三轮标准布局(核心硬件前提) 三个福来轮在圆形底盘上均匀正三角分布,两两夹角严格 120°,每个轮子主轴指向底盘几何中心:

三轮120°布局坐标系 1 号轮(前轮):安装角 90°,主轴沿车身 Y 轴正方向; 2 号轮(左后):安装角 210°; 3 号轮(右后):安装角 330°; 每个轮子独立配 1 个直流减速电机 + 驱动芯片,三路 PWM 独立调速、正反转控制。 关键:三个轮子缺一不可,两轮福来轮无法实现全向平移 / 原地自转。
三、底层力学运动原理(矢量叠加核心) 单个福来轮仅能沿自身主轴方向产生推力,垂直主轴方向可自由滑动,无阻力; 三个轮子的推力矢量在 XY 平面叠加,合成车身X 横向、Y 纵向平移速度 + 绕中心旋转角速度; 通过修改三个电机的转速大小、旋转方向(正负速度),改变三个推力矢量,就能合成平面内任意运动:直行、横移、斜走、原地零半径旋转。 运动学速度换算公式(主控代码核心计算) 设车身目标运动: Vx:车身左右横向速度(右为正) Vy:车身前后纵向速度(前为正) ω:车身原地旋转角速度(顺时针为正) R:底盘中心到任意轮子的距离 三个轮子目标线速度: plaintext V1 = Vy + R·ω V2 = -0.5·Vy – 0.866·Vx + R·ω V3 = -0.5·Vy + 0.866·Vx + R·ω 计算结果正负号 = 电机转向;数值绝对值 = PWM 调速占空比; 主控收到前进 / 横移 / 转圈指令后,先算出 Vx、Vy、ω,再代入公式算出三路电机转速输出。
四、6 种标准运动电机控制逻辑(对应语音遥控场景)
五、电子控制完整流程(行空板 / ESP32 语音小车适配)
六、三轮福来轮 vs 四轮麦克纳姆轮优缺点对比

七、典型应用场景 创客教育语音遥控小车(你当前行空板语音项目); 小型桌面巡检机器人、绘图机器人; 狭小空间转运轻型物料 AGV; 云台小型全向移动底座。
八、三轮驱动与四轮驱动全向福来轮配置图

掌控板 2.4G 射频遥控发送端 代码解读
一、头文件
#include <MPython.h>
#include <DFRobot_ESP32_Radio.h>
二、函数前置声明
void onButtonAPressed();
void onButtonBPressed();
C++ 语法规则:回调函数定义写在loop之后,必须提前声明,通知编译器函数原型。
- onButtonAPressed():A 按键按下触发;
- onButtonBPressed():B 按键按下触发。
三、全局对象
DFRobot_ESP32Radio Radio;
无线射频通信实例,负责发送字符串指令。
四、setup () 上电初始化(仅运行一次)
void setup() {
mPython.begin();
buttonA.setPressedCallback(onButtonAPressed);
buttonB.setPressedCallback(onButtonBPressed);
Radio.turnOn();
Radio.setGroup(13);
rgb.brightness(round(8));
display.setCursorLine(1);
display.printLine("掌控板陀螺仪发送端");
display.setCursorLine(2);
display.printLine("前后左右四个方向");
display.setCursorLine(4);
display.printLine("三驱动全向轮小车");
}
逐行解析:
核心约束:小车接收端射频分组必须同样设置 13,分组不一致无法收到任何信号;
五、loop () 主循环
void loop() {
if ((accelerometer.isGesture(accelerometer.TiltForward))) {
Radio.send("qian");
rgb.write(1, 0x00FF00);
display.setCursorLine(3);
display.printLine("前进");
}
if ((accelerometer.isGesture(accelerometer.TiltBack))) {
Radio.send("hou");
rgb.write(1, 0xFF0000);
display.setCursorLine(3);
display.printLine("后退");
}
if ((accelerometer.isGesture(accelerometer.TiltLeft))) {
Radio.send("zuo");
rgb.write(1, 0x0000FF);
display.setCursorLine(3);
display.printLine("左横走");
}
if ((accelerometer.isGesture(accelerometer.TiltRight))) {
Radio.send("you");
rgb.write(1, 0xFF9900);
display.setCursorLine(3);
display.printLine("右横走");
}
}
六、按键回调函数
void onButtonAPressed() {
Radio.send("deng");
rgb.write(1, 0xFFFFFF);
display.setCursorLine(3);
display.printLine("开灯");
}
void onButtonBPressed() {
Radio.send("ting");
rgb.write(1, 0x6600CC);
display.setCursorLine(3);
display.printLine("停车");
}
- A 键:发送指令deng,用于控制小车车载灯光;
- B 键:发送指令ting,强制小车停机;
- 按键属于边沿触发:按下一瞬间发送一次指令,不会持续发包。
指令映射总表

五大核心要点解读
1. 通信方式:2.4G 私有射频 vs UDP WiFi
- 2.4G Radio:不需要 WiFi 热点、无路由器,点对点直连;延迟低;缺点传输距离有限、不能接入互联网;
- 你之前 UDP 方案依靠 WiFi 组网,本套方案为独立射频方案。
2. 两种检测机制并存
- 姿态:loop 循环轮询 → 持续倾斜持续发包(持续运动)
- 按键:异步回调 → 按下瞬间单次发包
3. 重大逻辑短板(实操重点)
板子放平后不会自动发送停车指令! 场景问题:遥控松手,小车继续行驶,只能依靠 B 按键人工停机。 优化思路:增加判断,如果没有任何倾斜姿态,持续发送ting。
4. 射频通信硬性匹配条件
5. 适配车型
代码标注:三驱动全向轮小车;指令qian/hou/zuo/you可以直接给三轮全向轮或者四轮麦克纳姆轮小车共用,只需要接收端电机逻辑对应修改。
配套运行要求
Mind+图形编程

行空板K10无线广播(简版蓝牙)接收端小车
【花雕动手做】行空板 K10 系列实验之简版蓝牙掌控板陀螺仪三驱全向福来轮小车
实验开源代码
// 语音播报驱动库,提供TTS文本转语音朗读功能
#include "asr.h"
// 行空板K10硬件底层库:屏幕、画布、RGB灯带驱动
#include "unihiker_k10.h"
// microbit电机拓展板库,控制M1/M2/M3直流电机(三驱动全向轮)
#include <Microbit_Motor.h>
// DFRobot 2.4G私有射频通信库,接收掌控板遥控器下发无线指令
#include <DFRobot_ESP32_Radio.h>
// 函数前置声明:不同射频指令对应的回调函数
void onRadioReceive_0(); // 收到指令"qian"触发
void onRadioReceive_1(); // 收到指令"hou"触发
void onRadioReceive_2(); // 收到指令"deng"触发
void onRadioReceive_3(); // 收到指令"zuo"触发
void onRadioReceive_4(); // 收到指令"ting"触发
// 全局对象实例化
DFRobot_ESP32Radio Radio; // 2.4G射频通信对象
Microbit_Motor motorbit; // 三路电机驱动对象(三驱动全向轮底盘)
UNIHIKER_K10 k10; // 行空板K10主控硬件对象
uint8_t screen_dir=2; // 屏幕方向参数2:正向竖屏显示
ASR asr; // TTS语音播报对象
// 上电初始化函数,通电/复位仅执行一次
void setup() {
// 绑定射频字符串指令与回调函数:收到指定文本自动执行对应函数
Radio.setCallback("qian", onRadioReceive_0);
Radio.setCallback("hou", onRadioReceive_1);
Radio.setCallback("deng", onRadioReceive_2);
Radio.setCallback("zuo", onRadioReceive_3);
Radio.setCallback("ting", onRadioReceive_4);
// 初始化行空板全部硬件驱动
k10.begin();
// 初始化屏幕显示方向
k10.initScreen(screen_dir);
// 创建绘图画布,文字图形必须绘制在画布才能输出屏幕
k10.creatCanvas();
// 设置语音播报语速,数值越大语速越快,范围1~5
asr.setAsrSpeed(2);
// 开启2.4G射频模块
Radio.turnOn();
// 设置射频通信分组13
// ⚠️关键:遥控器掌控板必须同样 setGroup(13),分组不一致无法通信
Radio.setGroup(13);
// 设置屏幕背景黑色 0x000000
k10.setScreenBackground(0x000000);
// 在画布第5行绘制白色标题文字
k10.canvas->canvasText("行空板K10全向轮小车", 5, 0xFFFFFF);
// 刷新画布,文字显示到屏幕
k10.canvas->updateCanvas();
// 设置RGB灯带全局亮度等级6(0~255)
k10.rgb->brightness(round(6));
// 上电语音提示:文本转语音播报
asr.speak("行空板小车准备就绪");
}
// 主循环
void loop() {
// 全部功能依靠射频异步回调触发,无需循环轮询,循环留空
}
// ======================射频指令回调函数======================
// 收到指令【qian】前进
void onRadioReceive_0() {
motorbit.motorStop(M1); // M1电机停止
motorbit.motorRun(M2, CW, 200); // M2正转,速度200
motorbit.motorRun(M3, CCW, 200); // M3反转,速度200
k10.rgb->write(–1, 0x00FF00); // 全部RGB灯绿色
}
// 收到指令【hou】后退
void onRadioReceive_1() {
motorbit.motorStop(M1); // M1电机停止
motorbit.motorRun(M2, CCW, 200); // M2反转
motorbit.motorRun(M3, CW, 200); // M3正转
k10.rgb->write(–1, 0xFF0000); // 全部RGB灯红色
}
// 收到指令【deng】开灯+语音播报
void onRadioReceive_2() {
k10.rgb->write(–1, 0xFFFFFF); // 全部RGB白色常亮
asr.speak("打开白色灯光"); // TTS语音播报
}
// 收到指令【zuo】转圈(三轮全向轮横向移动逻辑)
void onRadioReceive_3() {
motorbit.motorRun(M1, CW, 200); // M1正转
motorbit.motorRun(M2, CW, 200); // M2正转
motorbit.motorRun(M3, CW, 200); // M3正转
k10.rgb->write(–1, 0x0000FF); // 全部RGB蓝色
}
// 收到指令【ting】整车停止
void onRadioReceive_4() {
motorbit.motorStop(ALL); // 停止所有电机
k10.rgb->write(–1, 0x6600CC); // 全部RGB紫蓝色
asr.speak("小车停止"); // 语音播报停车提示
}
行空板 K10【三轮全向轮小车 2.4G 射频接收端】代码解读
一、头文件清单
#include "asr.h"
#include "unihiker_k10.h"
#include <Microbit_Motor.h>
#include <DFRobot_ESP32_Radio.h>
二、函数前置声明
void onRadioReceive_0();
void onRadioReceive_1();
void onRadioReceive_2();
void onRadioReceive_3();
void onRadioReceive_4();
预先声明射频指令对应的回调函数。 该射频库特色:支持直接绑定【字符串指令→回调函数】,收到指定报文自动触发对应函数,不需要手动写大量 if 判断。
三、全局对象与变量
DFRobot_ESP32Radio Radio;
Microbit_Motor motorbit;
UNIHIKER_K10 k10;
uint8_t screen_dir=2;
ASR asr;
- Radio:2.4G 射频通信实例;
- motorbit:三路电机驱动对象;
- k10:行空板主控硬件对象;
- screen_dir=2:屏幕正向竖屏;
- asr:语音播报实例。
四、setup () 上电初始化(仅执行一次)
void setup() {
Radio.setCallback("qian", onRadioReceive_0);
k10.begin();
Radio.setCallback("hou", onRadioReceive_1);
Radio.setCallback("deng", onRadioReceive_2);
Radio.setCallback("zuo", onRadioReceive_3);
Radio.setCallback("ting", onRadioReceive_4);
k10.initScreen(screen_dir);
k10.creatCanvas();
asr.setAsrSpeed(2);
Radio.turnOn();
Radio.setGroup(13);
k10.setScreenBackground(0x000000);
k10.canvas->canvasText("行空板K10全向轮小车", 5, 0xFFFFFF);
k10.canvas->updateCanvas();
k10.rgb->brightness(round(6));
asr.speak("行空板小车准备就绪");
}
逐行解析:
硬性要求:掌控板遥控器必须同样设置setGroup(13),分组不一致完全无法通信;
五、loop () 主循环
void loop() {
}
全部业务由射频异步回调驱动,不需要轮询网络,循环空置,CPU 占用极低。
六、射频接收回调函数(核心执行逻辑)
1. 收到指令 qian 前进
void onRadioReceive_0() {
motorbit.motorStop(M1);
motorbit.motorRun(M2, CW, 200);
motorbit.motorRun(M3, CCW, 200);
k10.rgb->write(–1, 0x00FF00);
}
M1 停机,M2 正转、M3 反转;整车向前行驶;全部 RGB 绿色。
2. 收到指令 hou 后退
void onRadioReceive_1() {
motorbit.motorStop(M1);
motorbit.motorRun(M2, CCW, 200);
motorbit.motorRun(M3, CW, 200);
k10.rgb->write(–1, 0xFF0000);
}
M1 停机,M2 反转、M3 正转;整车后退;全部 RGB 红色。
3. 收到指令 deng 开灯
void onRadioReceive_2() {
k10.rgb->write(–1, 0xFFFFFF);
asr.speak("打开白色灯光");
}
电机不动作;RGB 全白;语音播报提示。
4. 收到指令 zuo 左横走(三轮全向轮特有运动)
void onRadioReceive_3() {
motorbit.motorRun(M1, CW, 200);
motorbit.motorRun(M2, CW, 200);
motorbit.motorRun(M3, CW, 200);
k10.rgb->write(–1, 0x0000FF);
}
三路电机全部同向旋转,产生横向推力,小车向左平移;RGB 蓝色。
5. 收到指令 ting 停车
void onRadioReceive_4() {
motorbit.motorStop(ALL);
k10.rgb->write(–1, 0x6600CC);
asr.speak("小车停止");
}
停止全部电机;RGB 紫蓝色;语音播报小车停止。
指令完整对照表

整套项目通信架构
- 发送端:掌控板(陀螺仪姿态遥控器) 2.4G 射频,分组 13;倾斜板子持续发送qian/hou/zuo/you;B 按键发送ting停车。
- 接收端:本段代码(行空板 K10 小车) 射频接收指令,驱动三轮全向轮底盘、灯光、语音。
四大重点特性与现存问题
1. 射频绑定机制优势
不需要在同一个接收函数内写大量if(message == "")判断;指令分发由库底层完成,代码结构清晰。
2. 适配底盘:三轮全向轮
运动逻辑不能直接照搬四轮麦克纳姆轮程序。 三轮全向轮横向移动依靠三台电机同方向旋转实现。
3. 明显缺陷【实操重点】
4. 通信特点
DFRobot_ESP32_Radio 属于私有 2.4G 射频: 无需路由器、无热点组网;延迟低; 无法接入互联网,传输距离有限。
运行前置条件
Mind+图形编程

实验场景图与视频记录

【【驴友花雕】行空板 K10 系列实验之简版蓝牙掌控板陀螺仪三驱全向福来轮小车 #DIY动手做 #智能小车编程 #机器人小车 #人工智能技术 #科技改变生活】
https://www.bilibili.com/video/BV1Uiga6PEgU/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987
网硕互联帮助中心







评论前必须登录!
注册