【花雕动手做】行空板 K10 系列实验之六通道简版蓝牙掌控板陀螺仪双驱差速智能小车


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

小车方案使用的铝制底板、TT电机与扩展板




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

添加通信模块——无线广播


板载传感器与小车扩展板相关积木


辅助:屏幕显示相关积木

LED控制模块

知识点:无线广播------行空板 K10 BLE、BLE Mesh 广播
一、BLE 普通广播(广播包 Advertising,非连接型)
- 工作原理
发送板不建立蓝牙配对连接,定时(间隔可设)向外发送短小广播数据包;周围所有开启蓝牙扫描的 K10/ESP32 设备被动抓取数据,属于一对多离线通信,全程不用 WiFi、路由器。
发送端:只发包,不等待应答
接收端:持续扫描,识别目标设备标识后读取内容 - 核心参数
传输距离:空旷 5–10 米,隔墙大幅衰减
功耗优势:发送、待机电流都很低,电池供电可长时间运行
数据限制:单帧广播载荷很短,一般几十字节以内
拓扑:1 个发射源→N 个接收机,接收机之间互不通信 - 适用场景
一块主控批量控制多台 LED、蜂鸣器、小电机开关
手环式传感器广播温湿度、按键状态给多块行空板
无网络教室简易一控多教具 - 短板
不能传长文本、语音、图片、大量数值
无可靠重传机制,干扰环境容易丢包
只能单向发,接收端无法回传数据给发射板
二、BLE Mesh 网格广播组网
- 工作原理
所有行空板加入同一个 Mesh 网络,节点地位平等:
任意一块板子发送一条消息,全网所有 Mesh 节点同步收到;信号弱的节点还能中继转发消息,扩大覆盖范围,属于多向全网广播。
完全离线运行,不需要 WiFi 路由。 - 对比普通 BLE 广播优势
信号中继:远距离、隔墙场景靠中间板子接力传递信号
双向互通:每个节点既能发全网广播,也能接收全网消息
分组控制:可划分分组,消息只发给指定分组设备,不用全部设备响应
稳定性高于单纯 Advertising 广播,自带简单纠错 - 典型应用
教室几十台行空板灯光同步亮灭、抢答同步触发
多房间灯光、智能开关统一控制
分布式传感器,任意节点上报数据全网可见 - 固有局限
单条消息数据量依旧偏小,依旧无法承载音频、大图
组网设备数量过多时,消息延迟会上升
相比 WiFi UDP,传输速度慢很多
三、两者统一短板汇总
大数据传输能力弱:仅适配开关指令、1–2 组数字、简短标识
高速传输不行:实时音频、大屏多行文字、图像一律不推荐
穿墙能力一般,密集金属遮挡信号暴跌
大量设备同时发包容易产生蓝牙信道冲突丢包
四、行空板 K10 实操区分选择
简单一控多、电池低功耗、距离近 → BLE 普通 Advertising 广播(代码简单、资源占用最小)
多设备互相收发、需要中继扩距离、批量分组控制 → BLE Mesh(组网复杂一点,功能更强)
要传文字、声音、大量数据、距离远、设备多稳定通信 → 优先改用 WiFi UDP 广播
补充简易实操要点
BLE 广播必须设置唯一设备名称 / UUID,接收端过滤识别,避免抓取无关蓝牙设备数据包;
Mesh 组网所有设备必须写入同一组网密钥、同一网络 ID 才能互相通信;
电池供电项目首选 BLE 体系,插电稳定大数据项目优先 WiFi。

掌控板陀螺仪姿态遥控器发射端
【花雕动手做】行空板 K10 系列实验之六通道简版蓝牙掌控板陀螺仪双驱差速智能小车
实验开源代码
// 引入掌控板底层驱动库,支持屏幕、按键、RGB灯、加速度传感器
#include <MPython.h>
// 导入DFRobot 2.4G无线射频通信库(ESP32Radio,非蓝牙,代码文字标注有误)
#include <DFRobot_ESP32_Radio.h>
// ==========函数声明==========
// A按键按下触发函数
void onButtonAPressed();
// B按键按下触发函数
void onButtonBPressed();
// ==========创建通信对象==========
DFRobot_ESP32Radio Radio;
// ==========初始化函数(上电运行一次)==========
void setup() {
// 启动掌控板硬件初始化(屏幕、按键、传感器底层开启)
mPython.begin();
// 绑定A按键按下的回调函数,按键触发自动执行onButtonAPressed
buttonA.setPressedCallback(onButtonAPressed);
// 绑定B按键按下的回调函数
buttonB.setPressedCallback(onButtonBPressed);
Radio.turnOn(); // 开启2.4G射频无线模块
Radio.setGroup(13); // 设置通信分组:收发两端必须同为13组才能通信
rgb.brightness(round(8)); // 设置板载RGB灯带亮度,范围0~255,此处亮度8
// 屏幕第1行文字
display.setCursorLine(1);
display.printLine("掌控板陀螺仪发送端");
// 屏幕第2行文字(⚠注意:程序实际使用2.4G Radio,不是蓝牙,文字描述笔误)
display.setCursorLine(2);
display.printLine("六通道简版蓝牙");
// 屏幕第4行文字,适配二驱动差速小车
display.setCursorLine(4);
display.printLine("二驱动差速小车");
}
// ==========主循环(不断重复执行)==========
void loop() {
// 判断掌控板向前倾斜姿态
if ((accelerometer.isGesture(accelerometer.TiltForward))) {
Radio.send("qian"); // 无线发送字符串指令:前进
rgb.write(1, 0x00FF00); // RGB灯设置绿色
display.setCursorLine(3);
display.printLine("前进"); // 第3行刷新状态文字
}
// 判断向后倾斜
if ((accelerometer.isGesture(accelerometer.TiltBack))) {
Radio.send("hou"); // 发送:后退指令
rgb.write(1, 0xFF0000); // RGB红色
display.setCursorLine(3);
display.printLine("后退");
}
// 判断向左倾斜
if ((accelerometer.isGesture(accelerometer.TiltLeft))) {
Radio.send("zuo"); // 发送:左转指令
rgb.write(1, 0x0000FF); // RGB蓝色
display.setCursorLine(3);
display.printLine("左转弯");
}
// 判断向右倾斜
if ((accelerometer.isGesture(accelerometer.TiltRight))) {
Radio.send("you"); // 发送:右转指令
rgb.write(1, 0xFF9900); // RGB橙黄色
display.setCursorLine(3);
display.printLine("右转弯");
}
}
// ==========按键A回调函数:开灯指令==========
void onButtonAPressed() {
Radio.send("deng"); // 发送开灯指令
rgb.write(1, 0xFFFFFF); // RGB白色
display.setCursorLine(3);
display.printLine("开灯");
}
// ==========按键B回调函数:停车指令==========
void onButtonBPressed() {
Radio.send("ting"); // 发送停车指令
rgb.write(1, 0x6600CC); // RGB紫色
display.setCursorLine(3);
display.printLine("停车");
}
掌控板射频遥控发送端 代码解读
一、项目总览
控制器:掌控板(ESP32)
通信方式:DFRobot_ESP32_Radio 2.4G 射频通信(⚠屏幕文字写 “蓝牙” 属于笔误,并非蓝牙)
用途:作为遥控器,依靠板载加速度传感器识别倾斜姿态,搭配 A/B 按键,向行空板 K10 小车发送控制指令,适配两驱差速小车。
通信配对条件:接收端射频分组必须设置为 13。
二、模块分段解析
- 头文件与对象定义
#include <MPython.h> // 掌控板底层驱动:屏幕、RGB灯、按键、加速度传感器
#include <DFRobot_ESP32_Radio.h> // 2.4G无线射频通信库
void onButtonAPressed();
void onButtonBPressed();
DFRobot_ESP32Radio Radio; // 创建射频通信对象
- setup () 上电初始化(只运行 1 次)
mPython.begin():初始化掌控板全部外设
setPressedCallback():为 A、B 按键绑定中断回调函数,按键按下立刻触发对应函数,无需轮询检测按键
Radio.turnOn() 开启射频模块;setGroup(13) 设置通信组别
rgb.brightness(8) 设置板载 RGB 灯光亮度
屏幕打印固定标题文本,标识设备功能 - loop () 主循环(无限循环执行)
核心:轮询加速度传感器姿态手势
TiltForward 向前倾斜 → 发送qian 前进
TiltBack 向后倾斜 → 发送hou 后退
TiltLeft 向左倾斜 → 发送zuo 左转
TiltRight 向右倾斜 → 发送you 右转
每次识别到姿态,同步修改 RGB 灯光颜色,并在屏幕第三行刷新当前运行状态。
逻辑特点:多个独立if判断,允许多个姿态同时识别。 - 按键回调函数(事件触发)
onButtonAPressed():按下 A 键,发送指令deng,控制小车车灯开启
onButtonBPressed():按下 B 键,发送指令ting,小车停车
三、指令对照表

四、存在的一些实操问题(后附优化方案)
持续倾斜会重复发包
loop 高速循环,保持倾斜姿态时,不断重复发送相同指令,占用通信带宽。
放平掌控板不会自动停车
只有手动按 B 键发送ting,小车才能停下;遥控器恢复水平无任何指令输出。
多姿态可同时触发
例如同时前倾 + 左倾,会连续发送前进、左转两条指令,小车动作冲突失控。
无防抖处理
手部轻微晃动容易导致姿态频繁切换,小车频繁变速。
五、配套硬件 & 软件要求
接收端:行空板 K10,同样导入 ESP32_Radio 库,分组设置 13
Mind + 环境,安装 DFRobot ESP32Radio 库,主板选择掌控板
收发设备必须在近距离(2.4G 射频视距通信)
Mind+图形编程

行空板K10简版蓝牙小车端
【花雕动手做】行空板 K10 系列实验之六通道简版蓝牙掌控板陀螺仪双驱差速智能小车
实验开源代码
// 离线语音合成TTS库,实现语音播报
#include "asr.h"
// 行空板K10底层驱动库:屏幕、RGB灯、按键
#include "unihiker_k10.h"
// Microbit电机驱动库,适配电机拓展板
#include <Microbit_Motor.h>
// DFRobot 2.4G射频通信库,和掌控板遥控器配对通信
#include <DFRobot_ESP32_Radio.h>
// ====================函数声明====================
// 收到指令"qian"触发
void onRadioReceive_0();
// 收到指令"hou"触发
void onRadioReceive_1();
// 收到指令"deng"触发
void onRadioReceive_2();
// 收到指令"zuo"触发
void onRadioReceive_3();
// 收到指令"ting"触发
void onRadioReceive_4();
// ====================创建对象====================
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(); // 创建画布,用于屏幕文字绘图
asr.setAsrSpeed(2); // 设置语音播报语速,数值越大语速越快
Radio.turnOn(); // 开启2.4G射频模块
Radio.setGroup(13); // 设置通信分组【必须和遥控器Group=13保持一致】
k10.setScreenBackground(0x000000); // 设置屏幕背景黑色
// 在画布写入标题文字
k10.canvas->canvasText("行空板 K10 双驱小车", 5, 0xFFFFFF);
k10.canvas->updateCanvas(); // 刷新画布,文字显示到屏幕
k10.rgb->brightness(round(6)); // 设置板载RGB亮度
asr.speak("行空板小车准备就绪"); // 上电语音播报提示
}
// ====================主循环====================
// ⚠本程序所有功能依靠射频事件回调实现,loop无业务代码
void loop() {
}
// ====================射频指令回调函数====================
// 指令:qian 前进
void onRadioReceive_0() {
motorbit.motorRun(M1, CW, 200); // M1电机顺时针运转,速度200
motorbit.motorRun(M4, CW, 200); // M4电机顺时针运转,速度200
k10.rgb->write(-1, 0x00FF00); // 全部RGB灯设置绿色
}
// 指令:hou 后退
void onRadioReceive_1() {
motorbit.motorRun(M1, CCW, 200); // M1电机逆时针
motorbit.motorRun(M4, CCW, 200); // M4电机逆时针
k10.rgb->write(-1, 0xFF0000); // RGB红色
}
// 指令:deng 开灯
void onRadioReceive_2() {
k10.rgb->write(-1, 0xFFFFFF); // RGB白色常亮
asr.speak("打开白色灯光"); // 语音播报
}
// 指令:zuo 左转
void onRadioReceive_3() {
motorbit.motorRun(M1, CW, 200); // 左轮前进
motorbit.motorRun(M4, CCW, 200); //
k10.rgb->write(-1, 0x0000FF); // RGB蓝色
}
// 指令:ting 停车
void onRadioReceive_4() {
motorbit.motorStop(ALL); // 停止所有电机
k10.rgb->write(-1, 0x6600CC); // RGB紫色
asr.speak("小车停止"); // 语音播报停止提示
}
行空板 K10 小车射频接收端 代码解读
整体概述
硬件:行空板 K10 + microbit 电机驱动板(双驱差速小车)
通信:DFRobot_ESP32_Radio 2.4G 私有射频
工作模式:事件回调机制,配合上一份【掌控板姿态遥控器】使用
功能:接收无线指令,控制小车前进 / 后退 / 左转 / 停车、RGB 灯光、离线 TTS 语音播报
通信硬性规则:收发双方 Radio.setGroup(13) 分组必须一致才能通信。
一、头文件与对象解析
#include "asr.h" // 离线TTS语音合成库,实现中文播报
#include "unihiker_k10.h" // 行空板K10底层驱动(屏幕、RGB、外设)
#include <Microbit_Motor.h> // microbit电机扩展板驱动库
#include <DFRobot_ESP32_Radio.h>// 2.4G无线射频通信库
// 函数声明:收到对应无线指令自动触发的回调函数
void onRadioReceive_0(); //qian
void onRadioReceive_1(); //hou
void onRadioReceive_2(); //deng
void onRadioReceive_3(); //zuo
void onRadioReceive_4(); //ting
// 对象实例
DFRobot_ESP32Radio Radio; // 射频通信对象
Microbit_Motor motorbit; // 电机控制对象
UNIHIKER_K10 k10; // 行空板主控对象
uint8_t screen_dir=2; //屏幕旋转方向
ASR asr; //语音播报对象
二、setup () 初始化函数(上电仅运行一次)
Radio.setCallback(“指令字符串”, 函数名)
射频库功能:监听空中数据包,匹配到指定文本就自动执行绑定函数,不需要在 loop 轮询。
plaintext
“qian” → onRadioReceive_0
“hou” → onRadioReceive_1
“deng” → onRadioReceive_2
“zuo” → onRadioReceive_3
“ting” → onRadioReceive_4
k10.begin():初始化行空板全部硬件
initScreen() + creatCanvas():初始化显示屏,创建绘图画布
asr.setAsrSpeed(2):设置语音播报语速
Radio.turnOn(); Radio.setGroup(13):开启射频模块,设置通信组别
屏幕设置黑色背景、显示标题、刷新画布
设置 RGB 灯带亮度
asr.speak(“行空板小车准备就绪”):上电语音提示
三、loop () 主循环
void loop() {
}
关键特点:循环为空!
整套程序完全依靠无线事件回调驱动。射频库在后台独立监听消息,收到指令自动运行回调函数,无需轮询检测无线数据。
四、回调函数功能对照表

实验场景图与视频记录




【【花雕动手做】行空板 K10 系列实验之六通道简版蓝牙掌控板陀螺仪双驱差速智能小车 #diy机器人 #手工机器人 #制作小车 #行空板k10 #科技改变生活】
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)