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

[K10教程] 【花雕动手做】K10系列实验之无线广播一对二遥控板载灯

[复制链接]
【花雕动手做】K10系列实验之无线广播一对二遥控板载灯图1

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

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


【花雕动手做】K10系列实验之无线广播一对二遥控板载灯图2

驴友花雕  高级技神
 楼主|

发表于 前天 08:43

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯

本帖最后由 驴友花雕 于 2026-6-10 08:46 编辑

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

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯图1


【花雕动手做】K10系列实验之无线广播一对二遥控板载灯图2
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 前天 08:44

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯

辅助:屏幕显示相关积木

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯图1

LED控制模块

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯图2

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 前天 08:45

【花雕动手做】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

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 前天 08:48

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯

【花雕动手做】行空板 K10 系列实验之无线广播一对二遥控板载 LED 灯
实验开源代码(1对2 无线广播发送端)

  1. // 引入行空板K10官方硬件驱动头文件,封装屏幕、画布、按键、RGB彩灯全部外设接口
  2. #include "unihiker_k10.h"
  3. // 引入DFRobot无线射频库,底层基于ESP32-S3 BLE离线广播,实现分组一对多消息发送
  4. #include <DFRobot_ESP32_Radio.h>
  5. // 函数前置声明:按键按下的事件回调函数,setup中要绑定按键,编译器需要提前识别这两个函数
  6. void onButtonAPressed();
  7. void onButtonBPressed();
  8. // 实例化无线通信对象,所有BLE广播开启、分组设置、消息发送都由该对象操作
  9. DFRobot_ESP32Radio Radio;
  10. // 屏幕方向配置变量,数值2为设备默认正向显示
  11. uint8_t screen_dir = 2;
  12. // 行空板整机硬件总对象,统一管理板子所有板载外设
  13. UNIHIKER_K10 k10;
  14. /**
  15. * setup函数:Arduino框架初始化函数,上电只执行一次
  16. * 执行流程:整机硬件初始化→屏幕画布创建→绑定按键回调→开启BLE广播并配置分组→绘制开机界面、设置彩灯亮度
  17. */
  18. void setup() {
  19.     // 初始化行空板底层硬件总线、IO端口、系统时钟
  20.     k10.begin();
  21.     // 根据设定参数初始化屏幕显示方向
  22.     k10.initScreen(screen_dir);
  23.     // 创建内存绘图画布,文字图形先写入缓存,统一刷新屏幕,减少闪烁
  24.     k10.creatCanvas();
  25.     // 给A按键绑定按下触发回调:按下A键自动运行onButtonAPressed函数
  26.     k10.buttonA->setPressedCallback(onButtonAPressed);
  27.     // 给B按键绑定按下触发回调:按下B键自动运行onButtonBPressed函数
  28.     k10.buttonB->setPressedCallback(onButtonBPressed);
  29.     // 打开ESP32-S3蓝牙BLE广播射频模块,进入发射就绪状态
  30.     Radio.turnOn();
  31.     // 设置无线通信分组编号1;只有分组号一致的接收行空板才能收到广播消息
  32.     Radio.setGroup(1);
  33.     // 设置屏幕整体背景颜色为纯黑色 十六进制0x000000
  34.     k10.setScreenBackground(0x000000);
  35.     // 在画布第3行写入标题文字,字体浅橘色0xFFCC99
  36.     k10.canvas->canvasText("行空板 K10 无线广播", 3, 0xFFCC99);
  37.     // 在画布第4行写入说明文字,字体粉紫色0xFF99FF
  38.     k10.canvas->canvasText("     1对2发送A\\B端", 4, 0xFF99FF);
  39.     // 将画布缓存里所有文字画面一次性刷新到实体显示屏
  40.     k10.canvas->updateCanvas();
  41.     // 设置板载RGB彩灯全局亮度,数值2属于低亮度,光线柔和不刺眼
  42.     k10.rgb->brightness(round(2));
  43. }
  44. /**
  45. * loop主循环:上电setup执行完毕后无限循环运行
  46. * 本程序依靠按键事件回调驱动,无持续循环任务,因此内部为空
  47. * 按键检测、蓝牙发送全部由库内部后台事件处理,不需要轮询扫描
  48. */
  49. void loop() {
  50. }
  51. /**
  52. * A按键按下回调处理函数
  53. * 功能:向外BLE广播发送指令"hong",本机屏幕提示、点亮红灯,1秒后清除文字、熄灭彩灯
  54. */
  55. void onButtonAPressed() {
  56.     // 向分组1所有在线接收设备广播发送字符串指令 hong
  57.     Radio.send("hong");
  58.     // 在画布第6行打印红色操作提示文字
  59.     k10.canvas->canvasText("  发送A端打开红色灯", 6, 0xFF0000);
  60.     // 刷新画布,提示文字显示在屏幕上
  61.     k10.canvas->updateCanvas();
  62.     // RGB灯控制:参数-1代表全部板载灯珠统一赋值,颜色红色0xFF0000
  63.     k10.rgb->write(-1, 0xFF0000);
  64.     // 保持红灯点亮、文字显示1000毫秒(1秒)
  65.     delay(1000);
  66.     // 清空画布第6行的提示文本
  67.     k10.canvas->canvasClear(6);
  68.     // RGB全部设置黑色,等同于关闭彩灯
  69.     k10.rgb->write(-1, 0x000000);
  70. }
  71. /**
  72. * B按键按下回调处理函数
  73. * 功能:向外BLE广播发送指令"bai",本机屏幕提示、点亮白灯,1秒后清除文字、熄灭彩灯
  74. */
  75. void onButtonBPressed() {
  76.     // 向分组1全网广播发送字符串指令 bai
  77.     Radio.send("bai");
  78.     // 画布第8行写入白色提示文字
  79.     k10.canvas->canvasText("  发送B端打开白色灯", 8, 0xFFFFFF);
  80.     // 刷新画布更新屏幕画面
  81.     k10.canvas->updateCanvas();
  82.     // 全部RGB灯珠设为纯白色 0xFFFFFF
  83.     k10.rgb->write(-1, 0xFFFFFF);
  84.     // 保持亮灯1秒
  85.     delay(1000);
  86.     // 清空第8行提示文字
  87.     k10.canvas->canvasClear(8);
  88.     // 熄灭所有RGB彩灯
  89.     k10.rgb->write(-1, 0x000000);
  90. }
复制代码


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 前天 08:53

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯

代码解读

一、整体定位
这份是行空板 K10 BLE 无线广播发送程序
通信底层:DFRobot_ESP32_Radio 封装 ESP32-S3 蓝牙广播,离线不用 WiFi、路由器,一块发送板可同时控制多台接收板。
触发方式:按下按键 A/B,向外群发指令,本机同步亮灯、屏幕提示。

二、头部引用与全局变量

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

unihiker_k10.h:行空板专用驱动,封装屏幕、画布、按键 A/B、RGB 彩灯所有硬件接口,不用操作底层 IO。
DFRobot_ESP32_Radio.h:简易蓝牙广播库,一键开关射频、设置分组、收发文本指令。

  1. void onButtonAPressed();
  2. void onButtonBPressed();
复制代码

函数提前声明,因为 setup 里要绑定按键回调,编译器需要预先识别这两个自定义函数。

  1. DFRobot_ESP32Radio Radio;
复制代码

无线通信核心对象,所有蓝牙广播开关、分组、发送消息都调用这个对象。

  1. uint8_t screen_dir=2;
复制代码

屏幕朝向参数,2 是默认正向显示,修改数值可以旋转屏幕画面。

  1. UNIHIKER_K10 k10;
复制代码

行空板整机总实例,屏幕、按键、彩灯、画布全部由它调度控制。

三、setup () 上电一次性初始化流程

  1. k10.begin();
复制代码

初始化行空板底层硬件:屏幕 SPI 总线、按键输入引脚、RGB 灯驱动、系统时钟。

  1. k10.initScreen(screen_dir); k10.creatCanvas();
复制代码

初始化屏幕方向;创建内存画布。
所有文字先写入内存缓存,调用updateCanvas()才一次性刷新屏幕,减少闪烁。
按键绑定回调

  1. k10.buttonA->setPressedCallback(onButtonAPressed);
  2. k10.buttonB->setPressedCallback(onButtonBPressed);
复制代码

采用事件中断机制:按键物理按下,自动执行对应函数,不需要在 loop 里不停扫描按键。
蓝牙广播配置

  1. Radio.turnOn();
  2. Radio.setGroup(1);
复制代码

turnOn()打开蓝牙 BLE 广播射频;
setGroup(1)设置组别,只有组别数字相同的板子才能互相通信,多组实验互不干扰。
屏幕界面初始化

  1. k10.setScreenBackground(0x000000); //背景纯黑
  2. k10.canvas->canvasText("行空板 K10 无线广播", 3, 0xFFCC99);
  3. k10.canvas->canvasText("     1对2发送A\\B端", 4, 0xFF99FF);
  4. k10.canvas->updateCanvas();
复制代码

在画布 3、4 行写入两行标题说明文字,最后刷新显示到屏幕。
k10.rgb->brightness(round(2));
设置 RGB 彩灯全局亮度为 2,低亮度,光线柔和。

四、loop () 主循环

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

循环为空。
整套程序靠按键事件回调驱动,蓝牙发送、按键检测都是库后台自动处理,无持续运行任务,无需填充代码。

五、按键回调执行逻辑
1. onButtonAPressed(A 键按下)

  1. Radio.send("hong");
复制代码

向组 1 全网广播发送文本指令hong,所有同组接收板同步收到消息。
屏幕第 6 行打印红色提示文字,刷新画布显示。

  1. k10.rgb->write(-1, 0xFF0000);
复制代码

参数-1代表控制全部板载 RGB 灯珠,颜色设红色。

  1. delay(1000);
复制代码

保持亮灯、文字显示 1 秒。
清空第 6 行文字,RGB 灯全部熄灭(颜色 0x000000 = 黑色)。
2. onButtonBPressed(B 键按下)
逻辑和 A 键对称:
广播发送指令bai
屏幕第 8 行打印白色提示文字
RGB 全亮纯白色
延时 1 秒后清文字、灭灯

六、收发配合关系
本代码 = 发送端;
接收端代码需要用Radio.setCallback("hong",函数)、Radio.setCallback("bai",函数)绑定两条指令;
两端必须统一setGroup(1)才能正常通信;
拓扑:1 块发送板 → N 台接收板,典型一对多离线控制。

七、优缺点
优点:接线极简、电池可供电、无网络依赖、代码易懂适合教学;
缺点:delay是阻塞延时,亮灯 1 秒期间再次按键会延迟响应;BLE 只适合简短指令,不能传音频、大图、大量文字。

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 前天 09:03

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯

Mind+图形编程(1对2 发送端)

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯图1

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 前天 09:05

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯

【花雕动手做】行空板 K10 系列实验之无线广播一对二遥控板载 LED 灯
实验开源代码(1对2 无线广播接收A端)

  1. // 引入行空板K10硬件驱动库,封装屏幕、画布、RGB彩灯等所有板载外设操作接口
  2. #include "unihiker_k10.h"
  3. // 引入DF官方ESP32无线库,底层基于BLE蓝牙广播,实现离线分组消息接收
  4. #include <DFRobot_ESP32_Radio.h>
  5. // 提前声明无线消息接收回调函数,setup中绑定指令时编译器需要识别该函数
  6. void onRadioReceive_0();
  7. // 创建无线通信操作实例,负责蓝牙开启、分组配置、指令绑定、消息监听
  8. DFRobot_ESP32Radio Radio;
  9. // 屏幕朝向参数,数值2为板子默认正向显示模式
  10. uint8_t screen_dir=2;
  11. // 行空板整机硬件总对象,统一管控屏幕、彩灯、画布硬件资源
  12. UNIHIKER_K10 k10;
  13. /**
  14. * setup初始化函数:上电仅执行一次
  15. * 执行顺序:硬件初始化→绑定广播指令回调→屏幕画布初始化→开启蓝牙广播→配置通信分组→绘制开机文字界面→设置彩灯亮度
  16. */
  17. void setup() {
  18.         // 初始化行空板底层硬件总线、IO引脚、系统时钟等基础配置
  19.         k10.begin();
  20.         // 核心绑定配置:当蓝牙收到广播字符串"hong"时,自动执行onRadioReceive_0函数
  21.         Radio.setCallback("hong", onRadioReceive_0);
  22.         // 根据预设方向初始化显示屏
  23.         k10.initScreen(screen_dir);
  24.         // 创建内存绘图画布,文字先写入缓存,统一刷新屏幕,避免频繁刷屏闪烁
  25.         k10.creatCanvas();
  26.         // 打开ESP32-S3蓝牙BLE广播射频模块,进入后台消息监听状态
  27.         Radio.turnOn();
  28.         // 设置无线通信分组编号1;只有分组号完全一致的发送端才能发送消息被本机接收
  29.         Radio.setGroup(1);
  30.         // 设置屏幕背景底色为纯白色 0xFFFFFF
  31.         k10.setScreenBackground(0xFFFFFF);
  32.         // 在画布第5行写入蓝色标题文字
  33.         k10.canvas->canvasText("行空板K10接收广播", 5, 0x0000FF);
  34.         // 在画布第7行写入红色说明文字,提示功能为接收A端红灯指令
  35.         k10.canvas->canvasText("  1对2的A端红色灯", 7, 0xFF0000);
  36.         // 将画布缓存内所有文字画面一次性刷新渲染到实体屏幕
  37.         k10.canvas->updateCanvas();
  38.         // 设置板载RGB彩灯全局亮度等级2,低亮度柔和不刺眼
  39.         k10.rgb->brightness(round(2));
  40. }
  41. /**
  42. * loop主循环函数:setup运行完毕后无限循环空跑
  43. * 程序采用事件驱动,蓝牙消息由库后台自动扫描接收,匹配指令直接触发回调
  44. * 无传感器采集、动态画面刷新等持续任务,因此内部无需填写代码
  45. */
  46. void loop() {
  47. }
  48. /**
  49. * 接收"hong"指令专属回调函数
  50. * 触发条件:同分组发送板广播发送字符串hong
  51. * 功能:全部RGB灯点亮红色,持续1秒后熄灭彩灯
  52. */
  53. void onRadioReceive_0() {
  54.         // 参数-1代表控制所有板载RGB灯珠,颜色赋值红色0xFF0000
  55.         k10.rgb->write(-1, 0xFF0000);
  56.         // 保持红灯点亮1000毫秒(1秒)
  57.         delay(1000);
  58.         // RGB灯全部设置黑色,实现关灯效果
  59.         k10.rgb->write(-1, 0x000000);
  60. }
复制代码


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 前天 09:08

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯

接收A端代码解读

1. 头文件与全局定义

  1. // 行空板K10硬件驱动库,操控屏幕、画布、RGB灯硬件
  2. #include "unihiker_k10.h"
  3. // DFRobot无线库,底层依托ESP32-S3 BLE蓝牙广播,实现离线无线接收指令
  4. #include <DFRobot_ESP32_Radio.h>
  5. // 提前声明接收消息的回调函数,初始化绑定指令时编译器识别函数
  6. void onRadioReceive_0();
  7. // 创建无线通信操作对象,管理蓝牙开关、分组、指令绑定
  8. DFRobot_ESP32Radio Radio;
  9. // 屏幕方向参数,2=正常正向显示画面
  10. uint8_t screen_dir=2;
  11. // 行空板整体硬件控制对象
  12. UNIHIKER_K10 k10;
复制代码

2. setup () 上电初始化(只运行 1 次)

  1. void setup() {
  2.         k10.begin();
  3.     // 绑定规则:收到广播文字"hong",自动运行onRadioReceive_0函数
  4.         Radio.setCallback("hong", onRadioReceive_0);
  5.         // 初始化屏幕显示方向
  6.         k10.initScreen(screen_dir);
  7.     // 创建画布,文字先存缓存,统一刷新屏幕,防止闪屏
  8.         k10.creatCanvas();
  9.         Radio.turnOn();//开启BLE蓝牙广播,后台持续监听空中广播数据包
  10.         Radio.setGroup(1);//设定通信组别1,只有同组发送板才能发送消息给本机
  11.         k10.setScreenBackground(0xFFFFFF);//屏幕底色设白色
  12.         k10.canvas->canvasText("行空板K10接收广播", 5, 0x0000FF);//第5行蓝色标题
  13.         k10.canvas->canvasText("  1对2的A端红色灯", 7, 0xFF0000);//第7行红色说明文字
  14.         k10.canvas->updateCanvas();//把画布文字刷新显示到屏幕
  15.         k10.rgb->brightness(round(2));//RGB彩灯亮度调至2,低亮度柔和
  16. }
复制代码

3. loop () 主循环

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

循环空置,整套程序是事件驱动模式。
蓝牙接收由库后台反文旁虫立扫描广播包,不用在 loop 里循环查询消息;匹配到预设指令,立刻自动执行绑定好的回调函数。

4. 无线接收回调函数

  1. void onRadioReceive_0() {
  2.         k10.rgb->write(-1, 0xFF0000); // -1 = 全部板载RGB灯,点亮红色
  3.         delay(1000);                   //红灯持续亮1秒钟
  4.         k10.rgb->write(-1, 0x000000);  //RGB灯全部熄灭(黑色代表关灯)
  5. }
复制代码

整套收发联动逻辑
发送板:按下 A 键,BLE 广播发送字符串 hong
接收板:提前绑定"hong"对应点灯函数
通信硬性条件:发送、接收两边代码里Radio.setGroup(1)数字必须完全一样
通信特点:BLE 离线广播,不需要 WiFi、路由器;一块发送板可以同时控制多台接收行空板同步亮红灯

优缺点说明
优点:无需网络、电池供电即可运行、一对多批量控制、代码简单适合课堂教学
缺点:delay (1000) 是阻塞延时,亮灯等待的 1 秒内,新收到的指令会延迟执行;BLE 只适合短指令,不能传输语音、大图、大量文字。

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 前天 09:10

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯

Mind+图形编程(1对2 接收A端)

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯图1
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 前天 09:12

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯

【花雕动手做】行空板 K10 系列实验之无线广播一对二遥控板载 LED 灯
实验开源代码(1对2 无线广播接收B端)

  1. // 导入行空板K10专属硬件驱动头文件,封装屏幕、画布、RGB彩灯等硬件操作接口
  2. #include "unihiker_k10.h"
  3. // 导入DF官方ESP32无线通信库,底层封装ESP32-S3的BLE蓝牙广播,实现离线分组收发消息
  4. #include <DFRobot_ESP32_Radio.h>
  5. // 提前声明无线消息接收回调函数,setup中绑定指令时编译器需要识别这个函数
  6. void onRadioReceive_0();
  7. // 实例化无线通信对象,负责蓝牙开关、分组配置、消息指令绑定、后台监听广播包
  8. DFRobot_ESP32Radio Radio;
  9. // 屏幕方向配置变量,数值2为行空板K10默认正向显示
  10. uint8_t screen_dir=2;
  11. // 行空板整机硬件总对象,统一管控屏幕、彩灯、画布所有板载外设
  12. UNIHIKER_K10 k10;
  13. /**
  14. * setup:Arduino上电初始化函数,设备开机只执行一次
  15. * 执行流程:整机硬件初始化→绑定广播指令回调→屏幕画布初始化→开启BLE广播→设置通信分组→绘制开机界面→设置彩灯亮度
  16. */
  17. void setup() {
  18.         // 初始化行空板底层硬件,初始化IO、屏幕总线、彩灯驱动、系统时钟
  19.         k10.begin();
  20.         // 核心绑定:当蓝牙接收到广播字符串"bai"时,自动触发运行onRadioReceive_0函数
  21.         Radio.setCallback("bai", onRadioReceive_0);
  22.         // 根据设定参数初始化显示屏朝向
  23.         k10.initScreen(screen_dir);
  24.         // 创建内存绘图画布,文字先写入缓存,统一刷新屏幕,减少画面闪烁
  25.         k10.creatCanvas();
  26.         // 打开ESP32-S3蓝牙BLE射频模块,进入持续接收监听状态
  27.         Radio.turnOn();
  28.         // 设置通信分组编号1;只有分组号完全一致的发送设备,消息才能被本机接收
  29.         Radio.setGroup(1);
  30.         // 设置屏幕背景颜色为深灰色 0x333333
  31.         k10.setScreenBackground(0x333333);
  32.         // 在画布第5行写入蓝色标题文字
  33.         k10.canvas->canvasText("行空板K10接收广播", 5, 0x0000FF);
  34.         // 在画布第7行写入白色说明文字,标注功能为接收B端白色灯指令
  35.         k10.canvas->canvasText("  1对2的B端白色灯", 7, 0xFFFFFF);
  36.         // 将画布缓存内所有文字一次性刷新渲染到实体屏幕
  37.         k10.canvas->updateCanvas();
  38.         // 设置RGB彩灯全局亮度为2,低亮度,光线柔和不刺眼
  39.         k10.rgb->brightness(round(2));
  40. }
  41. /**
  42. * loop:Arduino无限主循环
  43. * 本程序纯事件驱动,蓝牙接收由库后台反文旁虫立运行,无循环执行任务,函数内部留空即可
  44. */
  45. void loop() {
  46. }
  47. /**
  48. * 接收"bai"指令的回调处理函数
  49. * 触发条件:同分组发送板广播发送字符串bai
  50. * 功能:全部RGB灯点亮纯白色,维持1秒后熄灭彩灯
  51. */
  52. void onRadioReceive_0() {
  53.         // 参数-1代表控制所有板载RGB灯珠,颜色赋值纯白色0xFFFFFF
  54.         k10.rgb->write(-1, 0xFFFFFF);
  55.         // 保持白灯点亮1000毫秒(1秒)
  56.         delay(1000);
  57.         // RGB灯全部设为黑色,实现关灯效果
  58.         k10.rgb->write(-1, 0x000000);
  59. }
复制代码


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 前天 09:16

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯

代码解读

一、头文件与全局变量解析

  1. // 行空板K10硬件驱动库,封装屏幕、画布、RGB彩灯硬件操作
  2. #include "unihiker_k10.h"
  3. // DFRadio无线库,底层是ESP32-S3 BLE蓝牙广播,实现离线无线收发指令
  4. #include <DFRobot_ESP32_Radio.h>
  5. // 预先声明接收消息的回调函数,初始化绑定指令时编译器识别
  6. void onRadioReceive_0();
  7. // 无线通信操作对象,管理蓝牙开关、分组、指令绑定监听
  8. DFRobot_ESP32Radio Radio;
  9. // 屏幕方向参数,2为设备默认正向显示
  10. uint8_t screen_dir=2;
  11. // 行空板整机硬件控制总对象
  12. UNIHIKER_K10 k10;
复制代码


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

  1. void setup() {
  2.         k10.begin();
  3.     // 绑定监听规则:收到广播文本"bai",自动执行onRadioReceive_0函数
  4.         Radio.setCallback("bai", onRadioReceive_0);
  5.         // 初始化屏幕显示方向
  6.         k10.initScreen(screen_dir);
  7.     // 创建画布,文字先存内存缓存,统一刷新屏幕,防止频繁刷屏闪烁
  8.         k10.creatCanvas();
  9.         Radio.turnOn();//开启BLE蓝牙模块,后台持续扫描空中广播数据包
  10.         Radio.setGroup(1);//通信分组1,只有同分组的发送板才能发送消息过来
  11.         k10.setScreenBackground(0x333333);//屏幕底色设置深灰色
  12.         k10.canvas->canvasText("行空板K10接收广播", 5, 0x0000FF);//第5行蓝色标题
  13.         k10.canvas->canvasText("  1对2的B端白色灯", 7, 0xFFFFFF);//第7行白色功能说明
  14.         k10.canvas->updateCanvas();//把画布文字刷新显示到屏幕
  15.         k10.rgb->brightness(round(2));//RGB彩灯亮度等级2,低亮度柔和
  16. }
复制代码


三、loop 主循环

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


程序采用事件驱动机制,不需要在循环里轮询检测蓝牙信号。无线库在后台反文旁虫立监听广播,匹配到指令直接调用回调函数,无循环任务所以置空。

四、无线接收回调函数

  1. void onRadioReceive_0() {
  2.         k10.rgb->write(-1, 0xFFFFFF); // -1=全部板载RGB灯,点亮纯白色
  3.         delay(1000);                   //白灯持续点亮1秒
  4.         k10.rgb->write(-1, 0x000000);  //RGB灯全部熄灭
  5. }
复制代码


整套 1 发双收完整配合逻辑
发送端:A 键广播hong、B 键广播bai,分组固定 Group1
接收板 1(红灯):绑定hong,收到指令亮红灯 1 秒
接收板 2(本段代码):绑定bai,收到指令亮白灯 1 秒

通信特性
BLE 离线广播,不用 WiFi、路由器,电池供电即可运行
一块发送板可同时操控多台接收设备同步动作
仅适合简短文本指令,无法传输音频、大图、大量数据
小缺陷:delay(1000)属于阻塞延时,亮灯期间新指令会排队延迟响应。
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 前天 09:19

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯

Mind+图形编程(1对2 接收B端)

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯图1
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 前天 09:23

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯

实验场景图与视频记录
【花雕动手做】K10系列实验之无线广播一对二遥控板载灯图4

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯图2

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯图3

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯图1

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯图6

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯图5

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯图7




回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 前天 09:24

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯


【花雕动手做】K10系列实验之无线广播一对二遥控板载灯图1

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯图2

【花雕动手做】K10系列实验之无线广播一对二遥控板载灯图3
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail