8浏览
查看: 8|回复: 8

[K10教程] 【花雕动手做】K10系列实验之无线广播A按键遥控 LED 变色

[复制链接]
【花雕动手做】K10系列实验之无线广播A按键遥控 LED 变色图2

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

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

【花雕动手做】K10系列实验之无线广播A按键遥控 LED 变色图1

驴友花雕  高级技神
 楼主|

发表于 1 小时前

【花雕动手做】K10系列实验之无线广播A按键遥控LED变色

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

【花雕动手做】K10系列实验之无线广播A按键遥控 LED 变色图1

【花雕动手做】K10系列实验之无线广播A按键遥控 LED 变色图3

板载传感器相关积木

【花雕动手做】K10系列实验之无线广播A按键遥控 LED 变色图2


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 1 小时前

【花雕动手做】K10系列实验之无线广播A按键遥控LED变色

辅助:屏幕显示相关积木

【花雕动手做】K10系列实验之无线广播A按键遥控 LED 变色图2

LED控制模块

【花雕动手做】K10系列实验之无线广播A按键遥控 LED 变色图1

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 1 小时前

【花雕动手做】K10系列实验之无线广播A按键遥控LED变色

知识点:无线广播------行空板 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系列实验之无线广播A按键遥控 LED 变色图1

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 1 小时前

【花雕动手做】K10系列实验之无线广播A按键遥控LED变色

【花雕动手做】行空板 K10 系列实验之无线广播使用A按键遥控板载LED灯循环变色
实验开源代码(无线广播发送端)

  1. // 引入行空板K10硬件驱动库,封装屏幕、画布、按键、RGB彩灯全部外设接口
  2. #include "unihiker_k10.h"
  3. // 引入DF官方ESP32 BLE无线广播库,实现离线分组一对多消息发送
  4. #include <DFRobot_ESP32_Radio.h>
  5. // 动态计数变量,volatile修饰:防止编译器优化,回调函数修改数值时读取准确
  6. volatile float mind_n_FaSong;
  7. // 提前声明A按键按下的回调函数,setup绑定按键事件需要编译器识别该函数
  8. void onButtonAPressed();
  9. // 行空板整机硬件总控制对象
  10. UNIHIKER_K10       k10;
  11. // 无线BLE广播通信对象
  12. DFRobot_ESP32Radio Radio;
  13. // 屏幕朝向参数,2为设备默认正向显示
  14. uint8_t            screen_dir=2;
  15. /**
  16. * setup 上电初始化函数,仅开机运行一次
  17. * 执行流程:硬件初始化→绑定A按键回调→屏幕画布初始化→开启蓝牙广播、设置分组→绘制开机界面、设置彩灯亮度
  18. */
  19. void setup() {
  20.     // 初始化行空板底层IO、屏幕总线、RGB、按键等硬件资源
  21.         k10.begin();
  22.         // 给A按键绑定按下触发函数:按下A键自动执行onButtonAPressed
  23.         k10.buttonA->setPressedCallback(onButtonAPressed);
  24.         // 初始化屏幕显示方向
  25.         k10.initScreen(screen_dir);
  26.         // 创建内存绘图画布,文字缓存批量刷新,降低屏幕闪烁
  27.         k10.creatCanvas();
  28.         // 打开ESP32-S3蓝牙BLE射频模块,进入发送就绪状态
  29.         Radio.turnOn();
  30.         // 设置通信分组编号13;只有分组同为13的接收板才能接收广播指令
  31.         Radio.setGroup(13);
  32.         // 设置屏幕背景颜色为深灰色 0x333333
  33.         k10.setScreenBackground(0x333333);
  34.         // 画布第3行浅粉色大标题
  35.         k10.canvas->canvasText(" 行空板K10无线广播", 3, 0xFFCCCC);
  36.         // 画布第4行浅青色功能说明文字
  37.         k10.canvas->canvasText("A按键循环控制变色灯", 4, 0x99FFFF);
  38.         // 将画布所有文字一次性刷新渲染到屏幕
  39.         k10.canvas->updateCanvas();
  40.         // 设置RGB彩灯亮度等级5,亮度适中
  41.         k10.rgb->brightness(round(5));
  42. }
  43. /**
  44. * loop 主无限循环
  45. * 本程序依靠按键事件回调驱动,无持续循环任务,循环体空置
  46. */
  47. void loop() {
  48. }
  49. /**
  50. * A按键按下回调函数
  51. * 逻辑:计数累加,对3取模实现三色循环切换,每次按键发送对应数字广播指令,本机同步亮灯提示1秒
  52. */
  53. void onButtonAPressed() {
  54.         // 每按一次A键,计数变量+1
  55.         mind_n_FaSong += 1;
  56.         // 取模判断:数值除以3余数等于1
  57.         if ((((int32_t(mind_n_FaSong)) % (int32_t(3)))==1)) {
  58.                 // BLE广播发送字符串指令"1"
  59.                 Radio.send("1");
  60.                 // 第6行打印红色提示文字
  61.                 k10.canvas->canvasText("     点亮红色LED", 6, 0xFF0000);
  62.                 k10.canvas->updateCanvas();
  63.                 // 全部RGB灯点亮纯红色
  64.                 k10.rgb->write(-1, 0xFF0000);
  65.                 delay(1000);          // 保持亮灯、文字1秒
  66.                 k10.canvas->canvasClear(6); // 清空第6行提示文字
  67.                 k10.rgb->write(-1, 0x000000);// 熄灭所有RGB彩灯
  68.         }
  69.         // 余数不等于1,进入第一层else分支
  70.         else {
  71.                 // 判断除以3余数等于2
  72.                 if ((((int32_t(mind_n_FaSong)) % (int32_t(3)))==2)) {
  73.                         // 广播发送指令"2"
  74.                         Radio.send("2");
  75.                         // 第8行打印蓝色提示文字
  76.                         k10.canvas->canvasText("     点亮蓝色LED", 8, 0x0000FF);
  77.                         k10.canvas->updateCanvas();
  78.                         // RGB全亮蓝色
  79.                         k10.rgb->write(-1, 0x0000FF);
  80.                         delay(1000);
  81.                         k10.canvas->canvasClear(8);
  82.                         k10.rgb->write(-1, 0x000000);
  83.                 }
  84.                 // 余数既不是1也不是2,余数等于0
  85.                 else {
  86.                         if ((((int32_t(mind_n_FaSong)) % (int32_t(3)))==0)) {
  87.                                 // 广播发送指令"0"
  88.                                 Radio.send("0");
  89.                                 // 第10行打印提示文字
  90.                                 k10.canvas->canvasText("     点亮绿色LED", 10, 0x00FF00);
  91.                                 k10.canvas->updateCanvas();
  92.                                 // 灯光赋值浅青绿色 0x33FFFF
  93.                                 k10.rgb->write(-1, 0x33FFFF);
  94.                                 delay(1000);
  95.                                 k10.canvas->canvasClear(10);
  96.                                 k10.rgb->write(-1, 0x000000);
  97.                         }
  98.                 }
  99.         }
  100. }
复制代码


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 1 小时前

【花雕动手做】K10系列实验之无线广播A按键遥控LED变色

代码解读

1. 头文件与全局变量部分

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

unihiker_k10.h:行空板 K10 硬件驱动,管控屏幕、画布、A 按键、RGB 彩灯
DFRobot_ESP32_Radio.h:DF 蓝牙广播库,底层 ESP32-S3 BLE 离线一对多发消息

  1. volatile float mind_n_FaSong;
复制代码

volatile关键字:这个变量会在按键回调函数里被修改,防止编译器优化缓存,保证读取数值实时准确;
作用:记录 A 键按下次数,用来循环切换 3 种灯光模式;
类型 float 只是存储计数,计算时强制转为整数运算。

  1. void onButtonAPressed();
复制代码

函数前置声明,setup 中要绑定按键回调,编译器需要提前识别这个按键处理函数。

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

k10:行空板整机总对象,操控全部板载外设
Radio:无线 BLE 广播通信对象
screen_dir=2:屏幕默认正向显示

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

  1. void setup() {
  2.         k10.begin();
复制代码

初始化全部底层硬件:屏幕总线、按键 IO、RGB 灯驱动、系统时钟。

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

绑定按键事件:按下 A 键,自动执行onButtonAPressed函数,属于中断事件驱动,不用在 loop 循环扫描按键。

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

初始化屏幕方向;创建内存画布,文字先写入缓存,统一刷新屏幕,减少闪屏。

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

打开蓝牙 BLE 广播模块;设置通信组别 13。
互通硬性条件:接收端代码必须同样setGroup(13),不同组别收不到信号。

  1. k10.setScreenBackground(0x333333);
  2.         k10.canvas->canvasText(" 行空板K10无线广播", 3, 0xFFCCCC);
  3.         k10.canvas->canvasText("A按键循环控制变色灯", 4, 0x99FFFF);
  4.         k10.canvas->updateCanvas();
复制代码

屏幕底色深灰色;在 3、4 行打印标题说明文字;刷新画布把文字显示到屏幕。

  1. k10.rgb->brightness(round(5));
复制代码

设置 RGB 彩灯亮度等级 5,亮度适中。

  1. plaintext
  2. }
复制代码

3. loop () 主循环

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

循环为空,全程靠按键事件回调驱动,没有需要循环执行的任务,蓝牙、按键都由库后台处理。
4. A 键按下回调核心逻辑

  1. void onButtonAPressed() {
  2.         mind_n_FaSong += 1;
复制代码

每按一次 A 键,计数数值 + 1。
判断 1:次数对 3 取模余数 = 1

  1. if ((((int32_t(mind_n_FaSong)) % (int32_t(3)))==1)) {
  2.                 Radio.send("1");//广播发送指令1
  3.                 k10.canvas->canvasText("     点亮红色LED", 6, 0xFF0000);
  4.                 k10.canvas->updateCanvas();
  5.                 k10.rgb->write(-1, 0xFF0000);//本机全RGB亮红灯
  6.                 delay(1000);//保持1秒
  7.                 k10.canvas->canvasClear(6);//清除本行文字
  8.                 k10.rgb->write(-1, 0x000000);//关灯
  9.         }
复制代码

判断 2:余数 = 2

  1. else {
  2.                 if ((((int32_t(mind_n_FaSong)) % (int32_t(3)))==2)) {
  3.                         Radio.send("2");//广播指令2
  4.                         屏幕打印蓝色文字、本机亮蓝灯1秒后复原
  5.                 }
复制代码

判断 3:余数 = 0

  1.   else {
  2.                         if ((((int32_t(mind_n_FaSong)) % (int32_t(3)))==0)) {
  3.                                 Radio.send("0");//广播指令0
  4.                                 屏幕打印文字,本机点亮浅青亮色0x33FFFF,1秒后关灯清文字
  5.                         }
  6.                 }
  7.         }
  8. }
复制代码

按键循环切换对照表

【花雕动手做】K10系列实验之无线广播A按键遥控 LED 变色图1

按压循环顺序:
第 1 下红 → 第 2 下蓝 → 第 3 下浅青绿 → 第 4 下回到红,无限循环切换

整体运行逻辑
通信方式:BLE 离线广播,不需要 WiFi、路由器;一块发送板可以同时控制多台接收行空板同步变色;
触发方式:按键中断回调,不占用主循环;
本地反馈:每次按下屏幕打印提示文字 + RGB 亮对应颜色,1 秒自动恢复待机。

缺点与优化点
delay(1000)阻塞:亮灯 1 秒内再次按 A 键,按键动作会延迟响应;
计数变量用 float 浮点型不规范,标准写法改用uint16_t cnt=0;整型更稳定;
多层嵌套 if 可读性差,可以替换switch((int)cnt%3)简化代码结构。

配套接收端要求
接收端分组必须是 13,绑定三条指令回调:
收到 "0" → 亮浅青灯
收到 "1" → 亮红灯
收到 "2" → 亮蓝灯

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 半小时前

【花雕动手做】K10系列实验之无线广播A按键遥控LED变色

Mind+图形编程(无线广播发送端)

【花雕动手做】K10系列实验之无线广播A按键遥控 LED 变色图1
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 半小时前

【花雕动手做】K10系列实验之无线广播A按键遥控LED变色

【花雕动手做】行空板 K10 系列实验之无线广播使用A按键遥控板载LED灯循环变色
实验开源代码(无线广播接收端)

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


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 半小时前

【花雕动手做】K10系列实验之无线广播A按键遥控LED变色

行空板 K10 BLE 广播接收端代码解读

一、头部引用与全局定义

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

unihiker_k10.h:行空板硬件驱动,操控屏幕、画布、RGB 彩灯;
DFRobot_ESP32_Radio.h:蓝牙 BLE 广播库,负责监听无线指令、绑定触发函数。

  1. // 预先声明3个接收指令的回调函数
  2. void onRadioReceive_0();
  3. void onRadioReceive_1();
  4. void onRadioReceive_2();
  5. DFRobot_ESP32Radio Radio;    // 无线通信对象
  6. uint8_t screen_dir=2;        // 屏幕正向显示
  7. UNIHIKER_K10 k10;            // 行空板整机控制对象
复制代码

二、setup () 上电一次性初始化

  1. void setup() {
  2.         k10.begin();
复制代码

初始化屏幕、RGB 灯、系统底层硬件。

  1. // 绑定指令和对应的执行函数
  2.         Radio.setCallback("0", onRadioReceive_0); //收到字符0 → 执行0号函数
  3.         Radio.setCallback("1", onRadioReceive_1); //收到字符1 → 执行1号函数
  4.         Radio.setCallback("2", onRadioReceive_2); //收到字符2 → 执行2号函数
复制代码

这是事件绑定核心,蓝牙后台抓到匹配消息,自动运行对应函数。

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

设置屏幕方向,创建画布缓存,文字统一刷新防止闪屏。

  1. Radio.turnOn();       //开启蓝牙广播接收
  2.         Radio.setGroup(13);   //通信分组13
复制代码

只有发送板同样设置 Group13,两边才能互相通信,分组隔离互不干扰。

  1. k10.setScreenBackground(0x333333); //屏幕深灰色底色
  2.         k10.canvas->canvasText(" 行空板K10接收广播", 5, 0xFFCC99);
  3.         k10.canvas->canvasText(" LED循环变色接收端", 7, 0x99FF99);
  4.         k10.canvas->updateCanvas(); //刷新文字到屏幕
  5.         k10.rgb->brightness(round(2)); //RGB亮度调低,柔和不刺眼
  6. }
复制代码

三、loop 主循环

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

循环为空,全程事件驱动。蓝牙接收是库后台反文旁虫立运行,不需要在 loop 里反复查询信号。

四、三个接收回调功能
onRadioReceive_0() 匹配指令"0"
全部 RGB 亮绿色,持续 1 秒后熄灭
onRadioReceive_1() 匹配指令"1"
全部 RGB 亮红色,持续 1 秒后熄灭
onRadioReceive_2() 匹配指令"2"
全部 RGB 亮蓝色,持续 1 秒后熄灭

收发一一对应表格

【花雕动手做】K10系列实验之无线广播A按键遥控 LED 变色图1

按压循环:红 → 蓝 → 绿 → 红 无限循环

整套工作流程
发送端按 A 键,计数累加、取模判断,向外 BLE 发送 0/1/2;
所有 Group13 的接收板蓝牙自动捕获数据包;
匹配到字符后,立刻点亮对应颜色 RGB 灯 1 秒。

优缺点说明
优点
离线蓝牙通信,不用 WiFi 路由器,电池就能供电;
一对多控制,一块发送板可同时控制多台接收板同步变色;
代码分层清晰,发送、接收独立程序,方便课堂分组实验。
缺点
delay(1000)阻塞:亮灯 1 秒内新来指令会排队延迟;
BLE 只适合简短字符指令,无法传输大量文字、音频、数值;
距离远、隔墙、金属遮挡会出现信号丢包。

回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail