71浏览
查看: 71|回复: 14

[K10教程] 【花雕动手做】行空板K10简版蓝牙掌控板麦轮陀螺仪小车

[复制链接]
本帖最后由 驴友花雕 于 2026-7-20 18:41 编辑

【花雕动手做】行空板K10简版蓝牙掌控板麦轮陀螺仪小车图2

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

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


【花雕动手做】行空板K10简版蓝牙掌控板麦轮陀螺仪小车图1

驴友花雕  高级技神
 楼主|

发表于 3 天前

【花雕动手做】行空板K10掌控板姿态陀螺仪动态遥控小车

实验扩展板与麦轮小车

【花雕动手做】行空板K10简版蓝牙掌控板麦轮陀螺仪小车图1

【花雕动手做】行空板K10简版蓝牙掌控板麦轮陀螺仪小车图2

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 3 天前

【花雕动手做】行空板K10掌控板姿态陀螺仪动态遥控小车

遥控发射端掌控宝(带锂电池)

掌控板是国内专为**中小学 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 科创课;
- 趣味制作:电子表、声光小游戏、声控彩灯、便携噪声 / 光照检测仪;
- 物联网:联网看天气、远程控制设备、环境数据上传云端;
- 可穿戴:智能手环、电子徽章、便携小仪器。

四、特点
体积小巧、一体化集成传感器、国产教育硬件、软硬件全开源,不用复杂接线就能快速做出智能小作品。

【花雕动手做】行空板K10简版蓝牙掌控板麦轮陀螺仪小车图1


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 3 天前

【花雕动手做】行空板K10掌控板姿态陀螺仪动态遥控小车

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

【花雕动手做】行空板K10简版蓝牙掌控板麦轮陀螺仪小车图2

【花雕动手做】行空板K10简版蓝牙掌控板麦轮陀螺仪小车图1
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 3 天前

【花雕动手做】行空板K10掌控板姿态陀螺仪动态遥控小车

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

【花雕动手做】行空板K10简版蓝牙掌控板麦轮陀螺仪小车图1

【花雕动手做】行空板K10简版蓝牙掌控板麦轮陀螺仪小车图2

辅助:屏幕显示相关积木

【花雕动手做】行空板K10简版蓝牙掌控板麦轮陀螺仪小车图4

LED控制模块

【花雕动手做】行空板K10简版蓝牙掌控板麦轮陀螺仪小车图3

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 3 天前

【花雕动手做】行空板K10掌控板姿态陀螺仪动态遥控小车

知识点:无线广播------行空板 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。

【花雕动手做】行空板K10简版蓝牙掌控板麦轮陀螺仪小车图1



回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 3 天前

【花雕动手做】行空板K10掌控板姿态陀螺仪动态遥控小车

本帖最后由 驴友花雕 于 2026-7-20 11:11 编辑

掌控板陀螺仪姿态遥控器发射端

【花雕动手做】行空板 K10 系列实验之掌控板陀螺仪姿态遥控器控制小车前后左右行走

实验开源代码

  1. // 引入掌控板核心驱动库,封装屏幕、加速度传感器、RGB彩灯、IO等全部板载硬件接口
  2. #include <MPython.h>
  3. // 引入DFRobot ESP32 2.4G射频无线库,实现掌控板与行空板小车点对点无线传指令
  4. #include <DFRobot_ESP32_Radio.h>
  5. // 实例化无线通信对象Radio,所有无线开关、频道设置、指令发送都依靠该对象操作
  6. DFRobot_ESP32Radio Radio;
  7. // 上电初始化函数,设备复位/通电只执行1次
  8. void setup() {
  9.     // 掌控板硬件总初始化,必须放在setup第一行,启动屏幕、传感器、灯光底层驱动
  10.         mPython.begin();
  11.     // 开启2.4G无线射频模块,进入发送就绪状态
  12.         Radio.turnOn();
  13.     // 设置无线通信分组频道13,只有小车接收端分组号一致才能收到信号
  14.         Radio.setGroup(13);
  15.     // 控制第1颗RGB彩灯,待机底色紫色 0x663366(无倾斜操作时默认颜色)
  16.         rgb.write(1, 0x663366);
  17.     // 光标定位到OLED屏幕第1行
  18.         display.setCursorLine(1);
  19.     // 第1行打印标题文字
  20.         display.printLine("陀螺姿态小车遥控器");
  21.     // 光标定位到屏幕第2行
  22.         display.setCursorLine(2);
  23.     // 提示用户倾斜板子控制四个移动方向
  24.         display.printLine("前后左右四个方向");
  25.     // 光标定位屏幕第4行
  26.         display.setCursorLine(4);
  27.     // 操作说明:将屏幕朝下翻转,小车执行停车指令
  28.         display.printLine("屏幕朝下停车一秒");
  29. }
  30. // 主循环,初始化完成后无限循环运行,持续轮询加速度传感器姿态手势
  31. void loop() {
  32.     // 判断手势:掌控板向前倾斜
  33.         if ((accelerometer.isGesture(accelerometer.TiltForward))) {
  34.         // 无线发送前进拼音指令qian
  35.                 Radio.send("qian");
  36.         // 第1颗RGB切换绿色,标识前进状态
  37.                 rgb.write(1, 0x00FF00);
  38.         // 光标跳至屏幕第3行,刷新状态文字
  39.                 display.setCursorLine(3);
  40.                 display.printLine("前进");
  41.         }
  42.     // 判断手势:掌控板向后倾斜
  43.         if ((accelerometer.isGesture(accelerometer.TiltBack))) {
  44.         // 无线发送后退指令hou
  45.                 Radio.send("hou");
  46.         // 彩灯切换红色,标识后退
  47.                 rgb.write(1, 0xFF0000);
  48.                 display.setCursorLine(3);
  49.                 display.printLine("后退");
  50.         }
  51.     // 判断手势:掌控板向左倾斜
  52.         if ((accelerometer.isGesture(accelerometer.TiltLeft))) {
  53.         // 无线发送左横移指令zuo(适配麦克纳姆轮小车)
  54.                 Radio.send("zuo");
  55.         // 彩灯切换蓝色,标识左移
  56.                 rgb.write(1, 0x0000FF);
  57.                 display.setCursorLine(3);
  58.                 display.printLine("左横走");
  59.         }
  60.     // 判断手势:掌控板向右倾斜
  61.         if ((accelerometer.isGesture(accelerometer.TiltRight))) {
  62.         // 无线发送右横移指令you
  63.                 Radio.send("you");
  64.         // 彩灯切换橙黄色,标识右移
  65.                 rgb.write(1, 0xFF9900);
  66.                 display.setCursorLine(3);
  67.                 display.printLine("右横走");
  68.         }
  69.     // 判断手势:掌控板屏幕朝下翻转平放
  70.         if ((accelerometer.isGesture(accelerometer.ScreenDown))) {
  71.         // 无线发送停车指令ting,小车电机停止运转
  72.                 Radio.send("ting");
  73.         // 彩灯切换粉紫色,标识停车状态
  74.                 rgb.write(1, 0xCC33CC);
  75.                 display.setCursorLine(3);
  76.                 display.printLine("停车");
  77.         }
  78. }
复制代码



回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 3 天前

【花雕动手做】行空板K10掌控板姿态陀螺仪动态遥控小车

掌控板姿态遥控发送端代码解读

一、头文件引入

  1. #include <MPython.h>
  2. #include <DFRobot_ESP32_Radio.h>
复制代码

1. `#include <MPython.h>`
掌控板官方集成库,一次性提供屏幕、加速度传感器、RGB 灯、按键等所有板载硬件操作能力,没有这个库无法操作掌控板自带外设。
2. `#include <DFRobot_ESP32_Radio.h>`
ESP32 专用 2.4G 无线通信库,实现两块开发板近距离点对点无线传输,不需要 WiFi、路由器,专门用于小车遥控信号传输。

二、创建无线对象

  1. DFRobot_ESP32Radio Radio;
复制代码

定义全局无线通信实例 `Radio`,后续所有开启无线、设置频道、发送指令都依靠这个对象调用方法。

三、setup () 初始化函数(上电仅执行一次)

  1. void setup() {
  2.         mPython.begin();
  3.         Radio.turnOn();
  4.         Radio.setGroup(13);
  5.         rgb.write(1, 0x663366);
  6.         display.setCursorLine(1);
  7.         display.printLine("陀螺姿态小车遥控器");
  8.         display.setCursorLine(2);
  9.         display.printLine("前后左右四个方向");
  10. }
复制代码

逐行解析:

1. `mPython.begin();`
掌控板硬件初始化入口,必须写在 setup 第一行,启动屏幕、传感器、灯光驱动。
2. `Radio.turnOn();`
打开 2.4G 无线射频模块,进入就绪发送状态。
3. `Radio.setGroup(13);`
设置无线通信分组为 13。只有接收端行空板 K10 设置相同分组,才能收到无线指令;多台小车同时使用可修改分组数字防止互相干扰。
4. `rgb.write(1, 0x663366);`
控制第 1 颗 RGB 彩灯,设置待机紫色,板子平放无倾斜时保持该颜色。
5. `display.setCursorLine(1); display.printLine("陀螺姿态小车遥控器");`
光标定位屏幕第 1 行,打印标题。
6. `display.setCursorLine(2); display.printLine("前后左右四个方向");`
光标定位屏幕第 2 行,打印操作提示,告诉使用者倾斜板子控制小车四向移动。

四、loop () 主循环(上电后无限重复执行)

本程序没有事件回调,采用**循环实时轮询**加速度传感器姿态,持续检测板子倾斜状态。

  1. void loop() {
  2.         // 检测:板子向前倾斜
  3.         if ((accelerometer.isGesture(accelerometer.TiltForward))) {
  4.                 Radio.send("qian");        // 无线发送前进指令字符串qian
  5.                 rgb.write(1, 0x00FF00);    // 第1颗灯变绿色
  6.                 display.setCursorLine(3);
  7.                 display.printLine("前进"); // 屏幕第三行刷新文字
  8.         }
  9.         // 检测:板子向后倾斜
  10.         if ((accelerometer.isGesture(accelerometer.TiltBack))) {
  11.                 Radio.send("hou");
  12.                 rgb.write(1, 0xFF0000);
  13.                 display.setCursorLine(3);
  14.                 display.printLine("后退");
  15.         }
  16.         // 检测:板子向左倾斜
  17.         if ((accelerometer.isGesture(accelerometer.TiltLeft))) {
  18.                 Radio.send("zuo");
  19.                 rgb.write(1, 0x0000FF);
  20.                 display.setCursorLine(3);
  21.                 display.printLine("左横走");
  22.         }
  23.         // 检测:板子向右倾斜
  24.         if ((accelerometer.isGesture(accelerometer.TiltRight))) {
  25.                 Radio.send("you");
  26.                 rgb.write(1, 0xFF9900);
  27.                 display.setCursorLine(3);
  28.                 display.printLine("右横走");
  29.         }
  30. }
复制代码

### 核心对象 `accelerometer` 说明

`accelerometer` 是掌控板内置三轴加速度传感器对象,自带姿态识别函数:

- `accelerometer.isGesture(姿态参数)`:自动判断当前板子倾斜手势,返回真 / 假;
- `TiltForward`:向前倾斜
- `TiltBack`:向后倾斜
- `TiltLeft`:向左倾斜
- `TiltRight`:向右倾斜

### 每段 if 分支统一逻辑

1. 通过 `Radio.send()` 向外发送对应拼音指令;
2. 修改第 1 颗 RGB 灯为专属颜色,区分运动方向;
3. 光标固定到屏幕第 3 行,使用`printLine`整行覆盖刷新当前动作文字。

五、整体功能总结

1. 硬件角色:掌控板作为**姿态感应遥控器**;
2. 控制逻辑:倾斜板子识别方向,持续无线发送拼音指令 `qian / hou / zuo / you`;
3. 适配底盘:左横走、右横走对应麦克纳姆轮全向小车;
4. 灯光状态区分:
   - 平放待机:紫色
   - 前倾前进:绿色
   - 后倾后退:红色
   - 左倾左移:蓝色
   - 右倾右移:橙黄色
5. 通信匹配要求:小车接收端(行空板 K10)无线分组必须设为 13,且代码中要识别 `qian/hou/zuo/you` 四条指令执行对应电机动作。


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 前天 10:19

【花雕动手做】行空板K10掌控板姿态陀螺仪动态遥控小车

本帖最后由 驴友花雕 于 2026-7-20 11:12 编辑

Mind+图形编程

【花雕动手做】行空板K10简版蓝牙掌控板麦轮陀螺仪小车图1
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 前天 11:18

【花雕动手做】行空板K10掌控板姿态陀螺仪动态遥控小车

行空板K10无线广播接收端小车

【花雕动手做】行空板 K10 系列实验之掌控板陀螺仪姿态遥控器控制小车前后左右行走

实验开源代码

  1. // 引入行空板K10官方硬件驱动库,提供屏幕、画布、RGB灯带等板载外设操作接口
  2. #include "unihiker_k10.h"
  3. // 引入电机拓展板驱动库,用于四路直流电机独立控制(麦克纳姆轮四轮底盘专用)
  4. #include <Microbit_Motor.h>
  5. // 引入ESP32 2.4G无线射频通信库,接收掌控板姿态遥控器发来的运动指令
  6. #include <DFRobot_ESP32_Radio.h>
  7. // 提前声明5个无线接收回调函数:收到对应字符串指令自动执行对应函数
  8. void onRadioReceive_0();  // 接收"qian"前进指令
  9. void onRadioReceive_1();  // 接收"hou"后退指令
  10. void onRadioReceive_2();  // 接收"ting"停车指令
  11. void onRadioReceive_3();  // 接收"zuo"左横走指令
  12. void onRadioReceive_4();  // 接收"you"右横走指令
  13. // 创建2.4G无线通信对象,负责监听、匹配无线指令
  14. DFRobot_ESP32Radio Radio;
  15. // 屏幕显示方向变量,数值2代表屏幕正向正常显示
  16. uint8_t            screen_dir=2;
  17. // 行空板K10主设备对象,统一操作屏幕、画布、RGB灯
  18. UNIHIKER_K10       k10;
  19. // 四路电机控制对象,控制麦克纳姆四轮M1/M2/M3/M4
  20. Microbit_Motor     motorbit;
  21. // 上电初始化函数,通电/复位仅执行一次
  22. void setup() {
  23.     // 初始化行空板底层硬件(IO、屏幕、灯光、串口驱动)
  24.         k10.begin();
  25.     // 无线指令绑定回调:收到字符串"qian",自动运行前进函数onRadioReceive_0
  26.         Radio.setCallback("qian", onRadioReceive_0);
  27.     // 绑定后退指令回调
  28.         Radio.setCallback("hou", onRadioReceive_1);
  29.     // 绑定停车指令回调
  30.         Radio.setCallback("ting", onRadioReceive_2);
  31.     // 绑定左横走指令回调
  32.         Radio.setCallback("zuo", onRadioReceive_3);
  33.     // 绑定右横走指令回调
  34.         Radio.setCallback("you", onRadioReceive_4);
  35.     // 根据预设方向初始化屏幕
  36.         k10.initScreen(screen_dir);
  37.     // 创建绘图画布,所有文字图形必须绘制在画布上才能显示
  38.         k10.creatCanvas();
  39.     // 开启2.4G无线射频模块,进入信号监听接收模式
  40.         Radio.turnOn();
  41.     // 设置无线通信分组13,必须和发送端掌控板分组完全一致才能通信
  42.         Radio.setGroup(13);
  43.     // 设置屏幕背景色为纯黑色 0x000000
  44.         k10.setScreenBackground(0x000000);
  45.     // 在画布X坐标5处绘制白色标题文字
  46.         k10.canvas->canvasText("行空板K10 智能小车", 5, 0xFFFFFF);
  47.     // 将画布绘制内容刷新到实体屏幕,不调用则画面无更新
  48.         k10.canvas->updateCanvas();
  49.     // 设置RGB灯带全局亮度为6(亮度范围0~255,数值越大越亮)
  50.         k10.rgb->brightness(round(6));
  51. }
  52. // 主循环函数,初始化完成后无限循环
  53. void loop() {
  54.     // 全部功能依靠无线事件回调自动触发,无需在循环内轮询检测信号,留空即可
  55. }
  56. // ====================== 无线指令回调函数 ======================
  57. // 收到"qian"前进指令触发
  58. void onRadioReceive_0() {
  59.     // ALL代表全部四轮电机,CW顺时针正转,速度200(0~255),四轮同步前进
  60.         motorbit.motorRun(ALL, CW, 200);
  61.     // write(-1) = 点亮全部RGB灯,绿色,标识前进状态
  62.         k10.rgb->write(-1, 0x00FF00);
  63. }
  64. // 收到"hou"后退指令触发
  65. void onRadioReceive_1() {
  66.     // ALL四轮电机CCW逆时针反转,小车整体后退
  67.         motorbit.motorRun(ALL, CCW, 200);
  68.     // 全彩灯亮红色,标识后退状态
  69.         k10.rgb->write(-1, 0xFF0000);
  70. }
  71. // 收到"ting"停车指令触发
  72. void onRadioReceive_2() {
  73.     // 第0颗RGB灯点亮紫蓝色
  74.         k10.rgb->write(0, 0x6600CC);
  75.     // 停止全部四路电机,小车立刻刹车静止
  76.         motorbit.motorStop(ALL);
  77. }
  78. // 收到"zuo"左横走指令(麦克纳姆轮专属平移逻辑)
  79. void onRadioReceive_3() {
  80.     // M1左轮前:正转
  81.         motorbit.motorRun(M1, CW, 200);
  82.     // M2右轮前:反转
  83.         motorbit.motorRun(M2, CCW, 200);
  84.     // M3左轮后:正转
  85.         motorbit.motorRun(M3, CW, 200);
  86.     // M4右轮后:反转
  87.         motorbit.motorRun(M4, CCW, 200);
  88.     // 全彩灯亮蓝色,标识左横移状态
  89.         k10.rgb->write(-1, 0x0000FF);
  90. }
  91. // 收到"you"右横走指令(麦克纳姆轮专属平移逻辑)
  92. void onRadioReceive_4() {
  93.     // M1左轮前:反转
  94.         motorbit.motorRun(M1, CCW, 200);
  95.     // M2右轮前:正转
  96.         motorbit.motorRun(M2, CW, 200);
  97.     // M3左轮后:反转
  98.         motorbit.motorRun(M3, CCW, 200);
  99.     // M4右轮后:正转
  100.         motorbit.motorRun(M4, CW, 200);
  101.     // 全彩灯亮橙橘色,标识右横移状态
  102.         k10.rgb->write(-1, 0xFF6600);
  103. }
复制代码


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 前天 11:25

【花雕动手做】行空板K10掌控板姿态陀螺仪动态遥控小车

# 行空板 K10 麦克纳姆轮小车接收端 代码解读

一、头文件导入区

  1. #include "unihiker_k10.h"
  2. #include <Microbit_Motor.h>
  3. #include <DFRobot_ESP32_Radio.h>
复制代码

1. `unihiker_k10.h`:行空板 K10 官方底层库,操作屏幕、画布、RGB 灯带、系统硬件;
2. `Microbit_Motor.h`:四路电机驱动库,适配 microbit 电机拓展板,独立控制 M1/M2/M3/M4 四个直流电机,专为四轮麦克纳姆轮底盘设计;
3. `DFRobot_ESP32_Radio.h`:ESP32 2.4G 无线射频库,和掌控板遥控器点对点通信,无需 WiFi。

二、函数前置声明

  1. void onRadioReceive_0();
  2. void onRadioReceive_1();
  3. void onRadioReceive_2();
  4. void onRadioReceive_3();
  5. void onRadioReceive_4();
复制代码

C++ 语法规则:自定义函数写在`loop`下方,必须提前声明,告知编译器这 5 个无线接收回调函数分别对应 5 条遥控指令。

- `onRadioReceive_0`:接收`qian`前进
- `onRadioReceive_1`:接收`hou`后退
- `onRadioReceive_2`:接收`ting`停车
- `onRadioReceive_3`:接收`zuo`左横移
- `onRadioReceive_4`:接收`you`右横移

三、全局对象与变量定义

  1. DFRobot_ESP32Radio Radio;
  2. uint8_t            screen_dir=2;
  3. UNIHIKER_K10       k10;
  4. Microbit_Motor     motorbit;
复制代码

1. `Radio`:无线通信实例,管理无线开关、频道、指令绑定;
2. `screen_dir=2`:屏幕显示参数,2 = 正向正常显示;
3. `k10`:行空板主硬件对象,统一控制屏幕、画布、RGB 彩灯;
4. `motorbit`:四路电机控制对象,单独操控四个车轮电机。

四、setup () 上电初始化(仅运行一次)

  1. void setup() {
  2.         k10.begin();
  3.         Radio.setCallback("qian", onRadioReceive_0);
  4.         Radio.setCallback("hou", onRadioReceive_1);
  5.         Radio.setCallback("ting", onRadioReceive_2);
  6.         Radio.setCallback("zuo", onRadioReceive_3);
  7.         Radio.setCallback("you", onRadioReceive_4);
  8.         k10.initScreen(screen_dir);
  9.         k10.creatCanvas();
  10.         Radio.turnOn();
  11.         Radio.setGroup(13);
  12.         k10.setScreenBackground(0x000000);
  13.         k10.canvas->canvasText("行空板K10 智能小车", 5, 0xFFFFFF);
  14.         k10.canvas->updateCanvas();
  15.         k10.rgb->brightness(round(6));
  16. }
复制代码

逐行拆解:

1. `k10.begin()`:行空板全部硬件初始化,IO、屏幕、灯光驱动启动;
2. `Radio.setCallback("指令", 函数名)`
无线事件绑定:射频模块后台持续监听数据,收到匹配字符串自动执行对应函数,属于异步回调,不占用主循环;
3. `k10.initScreen(screen_dir)`:按照设定方向初始化屏幕;
4. `k10.creatCanvas()`:创建绘图画布,屏幕文字、图形都要绘制在画布上;
5. `Radio.turnOn()`:打开 2.4G 无线模块,进入接收监听模式;
6. `Radio.setGroup(13)`:通信分组频道 13,**遥控器掌控板必须设置相同分组,否则收不到信号**;
7. `k10.setScreenBackground(0x000000)`:屏幕底色设纯黑色;
8. `canvasText(文字, x坐标, 颜色)`:在画布 x=5 位置打印白色标题;
9. `updateCanvas()`:刷新画布内容到屏幕,不调用文字不会显示;
10. `rgb->brightness(6)`:设置 RGB 灯带全局亮度 6(范围 0~255)。

五、loop () 主循环

  1. void loop() {
  2. }
复制代码

程序所有控制逻辑全部依靠无线回调触发,不需要在循环里轮询检测无线信号,因此循环留空,不影响任何功能。

六、五大无线回调核心动作逻辑(麦克纳姆轮专属)

### 1. 收到 qian 前进

  1. void onRadioReceive_0() {
  2.         motorbit.motorRun(ALL, CW, 200);
  3.         k10.rgb->write(-1, 0x00FF00);
  4. }
复制代码

- `ALL`:同时控制 M1/M2/M3/M4 四个电机;
- `CW`:电机顺时针正转;速度 200(0 最慢,255 最快);
- `write(-1, 0x00FF00)`:全部 RGB 灯点亮绿色,代表前进状态。

### 2. 收到 hou 后退

  1. void onRadioReceive_1() {
  2.         motorbit.motorRun(ALL, CCW, 200);
  3.         k10.rgb->write(-1, 0xFF0000);
  4. }
复制代码

- `CCW`:电机逆时针反转,四轮同步倒车;
- 全彩灯亮红色标识后退。

### 3. 收到 ting 停车

  1. void onRadioReceive_2() {
  2.         k10.rgb->write(0, 0x6600CC);
  3.         motorbit.motorStop(ALL);
  4. }
复制代码

- `motorStop(ALL)`:切断四路电机输出,小车立刻刹车;
- 只点亮第 0 颗彩灯为紫蓝色,其余灯熄灭。

### 4. 收到 zuo 左横走(麦克纳姆轮横向平移原理)

  1. void onRadioReceive_3() {
  2.         motorbit.motorRun(M1, CW, 200);
  3.         motorbit.motorRun(M2, CCW, 200);
  4.         motorbit.motorRun(M3, CW, 200);
  5.         motorbit.motorRun(M4, CCW, 200);
  6.         k10.rgb->write(-1, 0x0000FF);
  7. }
复制代码

四轮对角差速:左前、左后正转;右前、右后反转,合力让整车向左横向平移;全灯蓝色。

### 5. 收到 you 右横走

  1. void onRadioReceive_4() {
  2.         motorbit.motorRun(M1, CCW, 200);
  3.         motorbit.motorRun(M2, CW, 200);
  4.         motorbit.motorRun(M3, CCW, 200);
  5.         motorbit.motorRun(M4, CW, 200);
  6. }
复制代码

四轮对角反向差速:左前、左后反转;右前、右后正转,整车向右横向平移;全灯橙黄色。

# 整体配套工作流程

1. 发送端:掌控板姿态遥控器,前倾 / 后倾 / 左倾 / 右倾 / 屏幕朝下翻转,分别发送`qian/hou/zuo/you/ting`;
2. 通信通道:2.4G 射频,分组 13;
3. 接收端行空板 K10 收到指令自动触发回调,控制四轮麦克纳姆轮实现全向移动;
4. 每种运动匹配独有色光,直观反馈小车运行状态。

# 关键知识点总结

1. **回调机制优势**:无需在 loop 循环持续扫描无线信号,CPU 资源占用极低,响应更及时;
2. **麦克纳姆轮逻辑区分**:普通两轮差速小车无法左右平移,本代码通过单独控制四个电机正反转实现横移;
3. RGB 参数规则:`write(-1,颜色)`控制所有灯带,`write(序号,颜色)`只控制单颗灯;
4. 通信硬性约束:收发两端`setGroup(13)`数值必须完全一致;
5. 持续遥控效果:遥控器保持倾斜会不断重复发送指令,小车持续保持对应方向运动,只有收到`ting`指令才会停止。


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 前天 14:36

【花雕动手做】行空板K10掌控板姿态陀螺仪动态遥控小车

Mind+图形编程

【花雕动手做】行空板K10简版蓝牙掌控板麦轮陀螺仪小车图1
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 前天 15:21

【花雕动手做】行空板K10掌控板姿态陀螺仪动态遥控小车

实验场景图与视频记录

【花雕动手做】行空板K10简版蓝牙掌控板麦轮陀螺仪小车图1

【花雕动手做】行空板K10简版蓝牙掌控板麦轮陀螺仪小车图3

【花雕动手做】行空板K10简版蓝牙掌控板麦轮陀螺仪小车图2

【花雕动手做】行空板K10简版蓝牙掌控板麦轮陀螺仪小车图4
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 前天 16:05

【花雕动手做】行空板K10掌控板姿态陀螺仪动态遥控小车

本帖最后由 驴友花雕 于 2026-7-20 16:06 编辑

【花雕动手做】行空板K10简版蓝牙掌控板麦轮陀螺仪小车图1

【花雕动手做】行空板K10简版蓝牙掌控板麦轮陀螺仪小车图2


【【花雕动手做】行空板 K10 系列实验之掌控板陀螺仪姿态遥控器控制小车前后左右行走#智能小车编程 #单片机 #陀螺仪小车 #行空板K10 #DIY动手做】


https://www.bilibili.com/video/BV1h4KU66EER/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987




https://www.bilibili.com/video/BV11ZKm68Ejm/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987








回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 前天 18:38

【花雕动手做】行空板K10无线广播掌控板姿态陀螺仪小...

【花雕动手做】行空板K10简版蓝牙掌控板麦轮陀螺仪小车图1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2026 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail