157浏览
查看: 157|回复: 11

[K10教程] 【花雕动手做】K10 实验之 UDP 广播双 K10 双向通信点亮LED

[复制链接]
本帖最后由 驴友花雕 于 2026-6-15 17:52 编辑

【花雕动手做】K10 实验之 UDP 广播双 K10 双向通信点亮LED图1

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

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


【花雕动手做】K10 实验之 UDP 广播双 K10 双向通信点亮LED图2

驴友花雕  高级技神
 楼主|

发表于 6 天前

【花雕动手做】K10实验之UDP广播双K10双向通信点亮LED

行空板K10的网络服务模块,都在这里

【花雕动手做】K10 实验之 UDP 广播双 K10 双向通信点亮LED图2

添加WIFI和UDP广播模块

【花雕动手做】K10 实验之 UDP 广播双 K10 双向通信点亮LED图4

相关积木

【花雕动手做】K10 实验之 UDP 广播双 K10 双向通信点亮LED图3

【花雕动手做】K10 实验之 UDP 广播双 K10 双向通信点亮LED图1

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 6 天前

【花雕动手做】K10实验之UDP广播双K10双向通信点亮LED

辅助:屏幕显示相关积木

【花雕动手做】K10 实验之 UDP 广播双 K10 双向通信点亮LED图1

LED控制模块

【花雕动手做】K10 实验之 UDP 广播双 K10 双向通信点亮LED图2

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 6 天前

【花雕动手做】K10实验之UDP广播双K10双向通信点亮LED

知识点:行空板 K10 WiFi 局域网 UDP 广播

一、UDP 基础概念
UDP 全称用户数据报协议,属于 TCP/IP 网络协议,是无连接、广播式、尽力传输的通信方式。
放到行空板场景:所有设备连同一个 WiFi 路由器,组成局域网,依靠 IP + 端口收发数据;支持一台发送、全网所有设备同时接收,也就是 UDP 广播。
和 TCP 最大区别:不用提前握手建立连接,发消息直接抛到局域网里,速度快、代码简单,但不自动重传丢包数据。

二、运行硬性前提(必须满足)
全部通信行空板 K10 连接同一个 WiFi 热点;
设备自动获取同一段内网 IP(常见 192.168.4.xxx、192.168.1.xxx);
通信双方设置完全一致的端口号(截图示例固定 8888);
程序开头必须先执行 WiFi 配网连接,没连上 WiFi,UDP 模块无法启动。

三、相关图形积木功能解析
1. 基础服务端积木
设置 UDP 服务器端口 8888
本机开启 UDP 监听服务,占用 8888 端口,持续等候局域网内所有广播数据包。一块板子可同时做服务端 + 客户端。
当 UDP 服务器收到 广播消息
事件回调块:一旦局域网内有设备发出广播数据,立刻触发内部执行逻辑(点灯、屏幕打印、动作指令)。
UDP 服务器发送消息 "xxx"
向外发送全网广播包,当前 WiFi 局域网里所有开启 UDP 8888 端口的设备全部收到这条内容。
2. 基础客户端积木
设置 UDP 客户端连接到服务器 IP 192.168.4.1 端口 8888
客户端绑定目标服务端的内网 IP 与端口,建立通信目标;广播场景下 IP 可填局域网广播地址,实现一对多群发。
UDP 客户端发送消息 "xxx"
两种用法:①定向发给上面填写的单个服务器 IP;②发送全网广播,所有同端口设备接收。
当 UDP 客户端收到 广播消息
客户端独立监听广播数据包,收到数据后执行内部程序逻辑。

四、两种常用工作模式
模式 1:一对多广播(教学最常用)
1 块主控发送,N 台从板同步接收动作
主控(发送端):WiFi 联网 → UDP 开启 8888 端口 → 按键 / 陀螺仪触发「服务器发送消息」;
所有从板:WiFi 连同一个热点 → UDP 端口 8888 → 绑定「收到广播消息」回调,识别指令点灯、动作;
特点:一块板子下发指令,几十台设备同步响应。
模式 2:点对点双向通信
A 板客户端连 B 板服务端 IP,双向互发消息,适合一问一答、状态回传(比如小车上报速度、传感器数值回传给主控)。

五、完整积木程序标准结构
发送主控模板
【连接 WiFi】填入 WiFi 名称、密码(第一步必加)
【设置 UDP 服务器端口 8888】
循环 / 按键触发:【UDP 服务器发送消息 "hong"】
接收从板模板
【连接 WiFi】同一个 WiFi 账号密码
【设置 UDP 服务器端口 8888】
【当 UDP 服务器收到广播消息】
判断收到文本,匹配hong/bai/qian等指令,执行 RGB 变色、屏幕文字。

六、UDP 核心优缺点
优点
天然一对多广播:一次发送全网同端口设备接收,批量控制效率高;
速度快延迟低:无握手、无校验重传,体感几乎无卡顿;
兼容多设备:行空板、电脑、手机、ESP32 全都能互通;
数据承载量大:相比离线 Radio 射频,UDP 支持长文本、大量传感器数值、中等长度数据流;
覆盖范围广:路由器 WiFi 全屋覆盖,穿墙能力优于 2.4G 私有射频。
缺点
强依赖 WiFi 网络:无路由器、无 WiFi 环境完全无法运行,户外断电场景不能用;
无可靠传输:干扰、信号弱时会丢包,没有自动补发;稳定场景可重复发送 2 次指令;
功耗更高:WiFi 模块持续通电工作,电池续航比离线 Radio 短;
多组隔离麻烦:多小组实验要分不同 WiFi 热点才能互不干扰,不像 Radio 简单改 Group 数字。

七、实操避坑关键点
WiFi 必须一模一样:发送、接收板子 WiFi 名称、密码完全一致,大小写不能错;
端口号统一:所有设备 UDP 端口必须都是 8888,数字不同收不到;
广播无需精准匹配单个 IP:发全网广播时不用填每台从板 IP,局域网全部 8888 端口设备自动接收;
不要超大段文本发送,过长数据包容易分包乱码;
程序逻辑里不要加超长delay(),会阻塞 UDP 消息监听;
路由器 2.4G WiFi 稳定性优于 5G,行空板优先连 2.4G 频段。

【花雕动手做】K10 实验之 UDP 广播双 K10 双向通信点亮LED图1

【花雕动手做】K10 实验之 UDP 广播双 K10 双向通信点亮LED图2

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 6 天前

【花雕动手做】K10实验之UDP广播双K10双向通信点亮LED

知识点:局域网(Local Area Network,简称LAN)是一种在相对较小的地理范围(如一个办公室、一栋楼或者一个校园)内连接计算机和其他设备的计算机网络系统。局域网的特点是覆盖范围小、传输速度快、没有长距离通信费用。
在局域网中,用户可以共享硬件(如打印机)、软件和数据。局域网中的设备可以通过有线(如以太网)或无线(如Wi-Fi)技术连接。局域网的主要用途包括共享资源、传输数据和通信。

【花雕动手做】K10 实验之 UDP 广播双 K10 双向通信点亮LED图1

以行空板为例进行组网。

【花雕动手做】K10 实验之 UDP 广播双 K10 双向通信点亮LED图2

【花雕动手做】K10 实验之 UDP 广播双 K10 双向通信点亮LED图3


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 6 天前

【花雕动手做】K10实验之UDP广播双K10双向通信点亮LED

【花雕动手做】行空板K10系列实验之UDP广播双行空板K10双向通信点亮LED
实验开源代码(UDP广播服务器)

  1. // 引入DF官方物联网WiFi驱动库,支持开启SoftAP自建热点、读取热点网关IP、WiFi状态管理
  2. #include <DFRobot_Iot.h>
  3. // 行空板K10整机硬件驱动库,封装屏幕、画布、A按键、RGB彩灯等全部板载外设
  4. #include "unihiker_k10.h"
  5. // WiFi UDP服务端专用库,用于搭建标准局域网UDP监听服务,接收客户端消息、广播回复数据
  6. #include <DFRobot_UDPServer.h>
  7. // 前置函数声明:编译器提前识别两个事件回调函数,用于绑定UDP接收、按键按下动作
  8. void onButtonAPressed();
  9. void onUdpServerRecvMsg(String message);
  10. // 行空板K10全局硬件控制对象,统一调度屏幕、按键、RGB灯、绘图画布资源
  11. UNIHIKER_K10      k10;
  12. // 屏幕显示方向配置参数3,可根据设备摆放角度切换画面翻转
  13. uint8_t           screen_dir=3;
  14. // WiFi物联网管理实例,控制热点开启、IP查询、无线参数配置
  15. DFRobot_Iot       myIot;
  16. // UDP服务端通信实例,负责监听指定端口、绑定接收回调、向局域网发送UDP广播消息
  17. DFRobot_UDPServer myserver;
  18. /**
  19. * setup:上电仅执行一次的初始化入口函数
  20. * 执行顺序:硬件底层初始化→绑定UDP接收回调→屏幕画布初始化→绑定A按键触发事件→绘制白色背景标题→开启本机WiFi热点→屏幕打印热点网关IP→开启UDP8888监听端口
  21. */
  22. void setup() {
  23.     // 初始化K10全部底层硬件总线、IO引脚、屏幕驱动、RGB驱动、系统时钟
  24.         k10.begin();
  25.         // 为UDP服务端绑定消息接收回调函数:后台监听到客户端UDP数据包,自动执行onUdpServerRecvMsg
  26.         myserver.setCallback(onUdpServerRecvMsg);
  27.         // 根据预设数值3初始化屏幕显示朝向
  28.         k10.initScreen(screen_dir);
  29.         // 创建内存画布缓冲区,文字先写入缓存再一次性刷新屏幕,降低画面闪烁
  30.         k10.creatCanvas();
  31.         // 给板载A物理按键绑定按下中断回调:按下A键立刻运行onButtonAPressed发送消息函数
  32.         k10.buttonA->setPressedCallback(onButtonAPressed);
  33.         // 设置屏幕整体背景底色为纯白色(十六进制色值0xFFFFFF)
  34.         k10.setScreenBackground(0xFFFFFF);
  35.         // 在画布第3行写入红色标题文字,标记本机身份为UDP服务端
  36.         k10.canvas->canvasText("        行空板K10-服务器", 3, 0xFF0000);
  37.         // 开启本机SoftAP无线热点模式,本机变身小型无线路由器
  38.         // 热点名称:AP ;连接密码:88888888
  39.         myIot.setSoftAP("AP", "88888888");
  40.         // 拼接字符串,读取并打印本机热点网关IP地址,放置在画布第5行蓝色字体
  41.         k10.canvas->canvasText((String("   获取本机IP:") + String(myIot.getWiFiSoftIP())), 5, 0x0000FF);
  42.         // 将画布内所有文字缓存一次性渲染刷新到实体显示屏
  43.         k10.canvas->updateCanvas();
  44.         // UDP服务端开启8888端口,持续监听局域网内客户端发来的UDP数据包
  45.         myserver.setPort(8888);
  46. }
  47. /**
  48. * loop:程序无限主循环
  49. * 本程序采用纯事件驱动架构,WiFi热点、UDP数据包监听、按键检测全部由库后台反文旁虫立线程处理
  50. * 无需要循环轮询的业务逻辑,循环体空置即可稳定运行
  51. */
  52. void loop() {
  53. }
  54. /**
  55. * A按键按下专属回调函数
  56. * 触发动作:按下A键,UDP服务端向局域网内所有接入热点、监听8888端口的设备广播文本消息
  57. */
  58. void onButtonAPressed() {
  59.         // 广播发送UDP字符串:hello,I am server
  60.         myserver.sendUdpMsg("hello,I am server");
  61. }
  62. /**
  63. * UDP服务端消息接收回调函数
  64. * 入参message:客户端传输过来的完整字符串数据
  65. * 触发逻辑:收到任意客户端UDP消息,全部RGB灯点亮浅青蓝色,维持2秒后自动熄灭
  66. */
  67. void onUdpServerRecvMsg(String message) {
  68.         // 参数-1代表控制板载全部RGB灯珠,灯光颜色赋值浅青蓝色0x33FFFF
  69.         k10.rgb->write(-1, 0x33FFFF);
  70.         // 灯光保持点亮2000毫秒(2秒)
  71.         delay(2000);
  72.         // RGB全部赋值黑色,熄灭所有彩灯
  73.         k10.rgb->write(-1, 0x000000);
  74. }
复制代码

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 6 天前

【花雕动手做】K10实验之UDP广播双K10双向通信点亮LED

行空板 K10 自建热点 UDP 服务端代码解读

1. 头文件与全局定义

  1. #include <DFRobot_Iot.h>
  2. #include "unihiker_k10.h"
  3. #include <DFRobot_UDPServer.h>
复制代码

DFRobot_Iot.h:WiFi 管理库,负责开启自建热点 (SoftAP)、读取本机热点 IP;
unihiker_k10.h:K10 硬件驱动,管控屏幕、画布、A 按键、RGB 彩灯;
DFRobot_UDPServer.h:标准 WiFi UDP 服务端库,开启端口监听、接收客户端消息、广播发送数据。


  1. // 提前声明两个事件回调函数
  2. void onButtonAPressed();
  3. void onUdpServerRecvMsg(String message);
  4. UNIHIKER_K10      k10;       // 整机硬件总控制器
  5. uint8_t           screen_dir=3; // 屏幕翻转方向3,适配摆放角度
  6. DFRobot_Iot       myIot;      // WiFi热点管理对象
  7. DFRobot_UDPServer myserver;   // UDP服务端通信对象
复制代码

2. setup () 开机一次性初始化

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

初始化全部硬件:屏幕总线、按键 IO、RGB 灯、系统底层资源。

  1. myserver.setCallback(onUdpServerRecvMsg);
复制代码

绑定 UDP 接收回调:后台扫描到客户端 UDP 数据包,自动执行接收函数,不用循环轮询。

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

设置屏幕显示方向;创建画布缓存,文字统一刷新减少屏幕闪烁。

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

绑定 A 按键中断:按下 A 键,立刻执行发送 UDP 消息的函数。

  1. k10.setScreenBackground(0xFFFFFF);
  2.         k10.canvas->canvasText("        行空板K10-服务器", 3, 0xFF0000);
复制代码

屏幕底色纯白;第 3 行红色大字标注本机是 UDP 服务端。

  1. myIot.setSoftAP("AP", "88888888");
复制代码

核心:本机开启WiFi 热点
热点名称:AP
连接密码:88888888
本机变身小型路由器,其他板子连这个热点就能组成局域网。本机热点固定网关 IP:192.168.4.1

  1. k10.canvas->canvasText((String("   获取本机IP:") + String(myIot.getWiFiSoftIP())), 5, 0x0000FF);
  2.         k10.canvas->updateCanvas();
复制代码

读取本机热点 IP,在第 5 行蓝色字体打印;刷新画布把全部文字显示到屏幕。

  1. myserver.setPort(8888);
  2. }
复制代码

UDP 服务端开启8888 端口持续监听,等待客户端连接收发消息。

3. loop () 主循环

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

循环空白,全程事件驱动:
WiFi 热点、UDP 收包、按键检测全部由库后台线程独立运行,不需要在 loop 里反复扫描信号。

4. 两个回调功能函数
(1)A 按键按下:主动广播消息

  1. void onButtonAPressed() {
  2.         myserver.sendUdpMsg("hello,I am server");
  3. }
复制代码

按下 A 键,向所有连接本热点、监听 8888 端口的设备,广播发送文本 hello,I am server。
(2)收到客户端 UDP 消息触发动作

  1. void onUdpServerRecvMsg(String message) {
  2.         k10.rgb->write(-1, 0x33FFFF); // -1 = 全部RGB灯,点亮浅青亮色
  3.         delay(2000);                   // 灯光保持2秒
  4.         k10.rgb->write(-1, 0x000000); // 熄灭所有彩灯
  5. }
复制代码

message变量储存客户端发来的完整文字内容;本段代码只做灯光反馈,没有打印收到的文本。

5. 整套配对通信规则
本机(服务端)
角色:UDP 服务端 + WiFi 热点发射器
IP:192.168.4.1
端口:8888
行为:按 A 发广播;收到消息亮浅青灯 2 秒
配套客户端要求
WiFi 必须连接热点 AP、密码88888888;
UDP 客户端连接地址 192.168.4.1、端口8888;
客户端按 A 发送消息,服务端灯光响应;服务端按 A 发消息,客户端可屏幕打印文字。

6. 协议区分重点
本代码 = 标准 WiFi 局域网 UDP
完全符合教科书 UDP(User Datagram Protocol)传输层协议,依托 TCP/IP、IP + 端口寻址,和你截图里 IP 端口的 UDP 图形积木是同一套网络方案,必须依赖 WiFi。
和DFRobot_ESP32_Radio(BLE蓝牙广播)本质区别
| 项目 | WiFi UDP(当前代码)|BLE 分组广播(Radio 库)|
|--------|-----------------------|-----------------------------|
| 网络依赖 | 必须 WiFi 组网       | 无 WiFi,上电离线通信     |
| 寻址标识 | IP 地址 + 端口号    | Group 分组数字                |
| 功耗 | WiFi 功耗偏高,电池续航短 | BLE 低功耗,续航更长 |
| 传输数据 | 支持较长文本、批量数据 | 仅限 10 字符内短指令 |

7. 实操注意点
delay(2000)会阻塞消息接收:亮灯 2 秒内新来的 UDP 消息会延后响应;优化可用非阻塞毫秒计时;
UDP 无丢包重传,信号差容易丢包,稳定场景可连续两次 send 发送;
只支持 2.4G WiFi,5G 频段无法连接;
热点名、密码、端口号两端必须完全一致,大小写不能出错。

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 6 天前

【花雕动手做】K10实验之UDP广播双K10双向通信点亮LED

Mind+图形编程(UDP广播服务器)

【花雕动手做】K10 实验之 UDP 广播双 K10 双向通信点亮LED图1
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 6 天前

【花雕动手做】K10实验之UDP广播双K10双向通信点亮LED

【花雕动手做】行空板K10系列实验之UDP广播双行空板K10双向通信点亮LED
实验开源代码(UDP广播客户端)

  1. // 引入DF物联网WiFi库,实现连接指定WiFi热点、查询本地IP、检测联网状态
  2. #include <DFRobot_Iot.h>
  3. // 行空板K10硬件驱动库,封装屏幕、画布、A按键、RGB彩灯所有板载外设接口
  4. #include "unihiker_k10.h"
  5. // WiFi UDP客户端专用库,用于主动连接UDP服务端、发送消息、绑定接收回调
  6. #include <DFRobot_UDPClient.h>
  7. // 前置声明两个事件回调函数,编译器预识别函数标识,用于绑定UDP接收、按键按下动作
  8. void onUdpClientRecvMsg(String message);
  9. void onButtonAPressed();
  10. // 行空板整机硬件总控制对象,统一管理屏幕、按键、RGB灯、绘图画布硬件资源
  11. UNIHIKER_K10      k10;
  12. // 屏幕显示朝向参数3,根据设备摆放角度翻转画面显示
  13. uint8_t           screen_dir=3;
  14. // WiFi物联网管理实例,负责热点连接、IP读取、无线状态监测
  15. DFRobot_Iot       myIot;
  16. // UDP客户端通信实例,建立与服务端的UDP通信链路、收发数据包
  17. DFRobot_UDPClient myclient;
  18. /**
  19. * setup 上电初始化函数,设备开机仅运行一次
  20. * 执行流程:硬件底层初始化→绑定UDP接收回调→屏幕画布初始化→绑定A按键触发事件→绘制黑色背景标题界面→连接服务端开启的AP热点→阻塞等待WiFi联网成功→屏幕打印联网状态与本机IP→UDP客户端连接服务端192.168.4.1:8888→刷新屏幕所有文字
  21. */
  22. void setup() {
  23.     // 初始化K10全部底层硬件:屏幕驱动、按键IO、RGB灯驱动、系统时钟、总线资源
  24.         k10.begin();
  25.         // 为UDP客户端绑定消息接收回调:后台监听到服务端下发的UDP数据包,自动执行onUdpClientRecvMsg
  26.         myclient.setCallback(onUdpClientRecvMsg);
  27.         // 根据预设数值3初始化屏幕显示翻转方向
  28.         k10.initScreen(screen_dir);
  29.         // 创建内存绘图画布缓冲区,文字先存入缓存批量刷新,减少屏幕闪烁撕裂
  30.         k10.creatCanvas();
  31.         // 给板载A物理按键绑定按下中断回调:按下A键立刻运行发送UDP消息的函数
  32.         k10.buttonA->setPressedCallback(onButtonAPressed);
  33.         // 设置屏幕整体背景底色为纯黑色 0x000000
  34.         k10.setScreenBackground(0x000000);
  35.         // 画布第3行写入绿色标题文字,标记本机身份为UDP客户端
  36.         k10.canvas->canvasText("        行空板K10-客户端", 3, 0x00FF00);
  37.         // 第一次刷新画布,展示客户端标题
  38.         k10.canvas->updateCanvas();
  39.         // 发起WiFi连接:连接服务端板子创建的热点,热点名AP,密码88888888(必须与服务端热点参数完全一致)
  40.         myIot.wifiConnect("AP", "88888888");
  41.         // 阻塞死循环,不完成WiFi连接则程序暂停向下执行,保证网络就绪后再启动UDP客户端
  42.         while (!myIot.wifiStatus()) {}
  43.         // 第5行写入红色文字,提示热点连接成功
  44.         k10.canvas->canvasText("         成功连接AP热点", 5, 0xFF0000);
  45.         // 拼接字符串,读取本机被热点分配的局域网IP,第7行蓝色字体打印IP地址
  46.         k10.canvas->canvasText((String("       配置 IP:") + String(myIot.getWiFiLocalIP())), 7, 0x0000FF);
  47.         // UDP客户端主动对接UDP服务端
  48.         // 目标服务端IP:192.168.4.1(服务端自建热点的固定网关IP),统一通信端口8888
  49.         myclient.connectToServer("192.168.4.1",8888);
  50.         // 二次刷新画布,把联网成功提示、本机IP全部渲染到屏幕
  51.         k10.canvas->updateCanvas();
  52. }
  53. /**
  54. * loop 无限主循环
  55. * 程序采用纯事件驱动架构,WiFi连接状态、UDP数据包监听、按键中断检测全部由库后台反文旁虫立线程运行
  56. * 无循环轮询业务逻辑,循环体空置不影响整套通信稳定运行
  57. */
  58. void loop() {
  59. }
  60. /**
  61. * UDP客户端消息接收回调函数
  62. * 入参message:服务端广播下发的完整字符串消息内容
  63. * 触发逻辑:收到服务端任意UDP消息,所有RGB灯点亮纯红色,持续2秒后熄灭彩灯
  64. */
  65. void onUdpClientRecvMsg(String message) {
  66.         // 参数-1代表控制全部板载RGB灯珠,灯光赋值纯红色0xFF0000
  67.         k10.rgb->write(-1, 0xFF0000);
  68.         // 灯光保持点亮2000毫秒(2秒)
  69.         delay(2000);
  70.         // RGB全部赋值黑色,关闭所有彩灯
  71.         k10.rgb->write(-1, 0x000000);
  72. }
  73. /**
  74. * A按键按下专属回调函数
  75. * 触发动作:按下A键,UDP客户端向192.168.4.1:8888发送文本UDP数据包
  76. */
  77. void onButtonAPressed() {
  78.         // 发送字符串消息:hello,I am client
  79.         myclient.sendUdpMsg("hello,I am client");
  80. }
复制代码



回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 6 天前

【花雕动手做】K10实验之UDP广播双K10双向通信点亮LED

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

行空板 K10 UDP 客户端代码解读

一、头部引入与全局定义

  1. // DFR物联网WiFi库:负责连接外部热点、查询本机IP、检测WiFi在线状态
  2. #include <DFRobot_Iot.h>
  3. // K10硬件驱动库:管理屏幕、画布、A按键、RGB彩灯全部外设
  4. #include "unihiker_k10.h"
  5. // WiFi UDP客户端库:实现标准UDP客户端连接、消息收发、接收事件绑定
  6. #include <DFRobot_UDPClient.h>
  7. // 提前声明两个回调函数,给编译器识别,用于绑定事件
  8. void onUdpClientRecvMsg(String message);
  9. void onButtonAPressed();
  10. UNIHIKER_K10      k10;       // 整机硬件控制总对象
  11. uint8_t           screen_dir=3; // 屏幕翻转方向3,适配设备摆放角度
  12. DFRobot_Iot       myIot;      // WiFi管理实例
  13. DFRobot_UDPClient myclient;   // UDP客户端通信实例
复制代码

二、setup () 开机一次性初始化

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

初始化屏幕、按键、RGB、系统总线等所有底层硬件,硬件程序必备首行。

  1. myclient.setCallback(onUdpClientRecvMsg);
复制代码

绑定 UDP 接收回调:后台线程监听服务端数据包,收到消息自动运行onUdpClientRecvMsg,不用在 loop 循环轮询。

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

设置屏幕显示翻转角度;创建画布缓存,文字批量刷新,减少屏幕闪烁。

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

A 按键绑定中断回调:物理按下 A 键,立刻执行发送 UDP 消息的函数。

  1. k10.setScreenBackground(0x000000);
  2.         k10.canvas->canvasText("        行空板K10-客户端", 3, 0x00FF00);
  3.         k10.canvas->updateCanvas();
复制代码

屏幕底色设纯黑;第 3 行绿色大字标记本机是 UDP 客户端;第一次刷新文字到屏幕。

  1. myIot.wifiConnect("AP", "88888888");
  2.         while (!myIot.wifiStatus()) {}
复制代码

连接服务端搭建的 WiFi 热点:热点名AP、密码88888888;
while阻塞死循环:必须等到 WiFi 连接成功,代码才会向下执行,防止无网络启动 UDP 失败。

  1. k10.canvas->canvasText("         成功连接AP热点", 5, 0xFF0000);
  2.         k10.canvas->canvasText((String("       配置 IP:") + String(myIot.getWiFiLocalIP())), 7, 0x0000FF);
复制代码

联网成功后,第 5 行红字提示连接成功;第 7 行拼接打印本机被热点分配的内网 IP 地址。

  1. myclient.connectToServer("192.168.4.1",8888);
复制代码

UDP 客户端发起连接:
目标服务端 IP:192.168.4.1(服务端 SoftAP 固定网关 IP)
统一通信端口:8888

  1. k10.canvas->updateCanvas();
  2. }
复制代码

刷新画布,把联网提示、本机 IP 完整显示在屏幕上。

三、loop () 主循环

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

循环完全空置,整套程序事件驱动运行:
WiFi 连接、UDP 收包、按键检测全部由库后台反文旁虫立线程处理,无需手动循环扫描信号。

四、两个核心回调函数
1、收到服务端 UDP 消息回调

  1. void onUdpClientRecvMsg(String message) {
  2.         k10.rgb->write(-1, 0xFF0000); // -1=全部RGB灯,点亮纯红色
  3.         delay(2000);                   // 灯光保持2秒
  4.         k10.rgb->write(-1, 0x000000); // 熄灭所有彩灯
  5. }
复制代码

message变量存放服务端发来的完整字符串;本段只做灯光反馈,没有打印文本内容。
2、A 按键按下发送消息回调

  1. void onButtonAPressed() {
  2.         myclient.sendUdpMsg("hello,I am client");
  3. }
复制代码

每按一次 A 键,向服务端 IP:8888 发送 UDP 文本:hello,I am client。

五、与配套服务端完整配对关系

【花雕动手做】K10 实验之 UDP 广播双 K10 双向通信点亮LED图1

双向交互流程
先启动服务端,热点开启、UDP 端口打开;
客户端上电自动连热点,联网后自动对接服务端 UDP;
客户端按 A → 发送 client 消息 → 服务端灯光亮起;
服务端按 A → 广播 server 消息 → 客户端灯光亮起。

六、通信方案定性区分
本套 UDPClient/UDPServer = 标准 WiFi 局域网 UDP
完全符合 User Datagram Protocol 传输层协议,依托 TCP/IP 网络,用 IP + 端口寻址,和你截图里 IP、端口的图形 UDP 积木是同一套,必须依靠 2.4G WiFi 才能运行。

和DFRobot_ESP32_Radio(BLE 蓝牙广播)核心差异

| 对比项 | WiFi UDP(当前代码)|BLE 分组广播(Radio 库)|
|-----------|---------------------|-----------------------------|
|WiFi 依赖 | 必须连接热点组网   | 无 WiFi,上电离线通信       |
| 寻址方式 | 内网 IP + 端口号    | Group 分组数字 (0~255)     |
| 功耗      | WiFi 模块持续工作,续航短 | BLE 低功耗,电池续航久 |
| 传输能力 | 支持较长文本、批量数据 | 仅限 10 字符内短开关指令 |

实操避坑要点
delay(2000)会阻塞消息接收:亮灯 2 秒内新来的 UDP 消息会延迟响应;优化用millis()做非阻塞计时;
UDP 是不可靠传输,无自动丢包重传,干扰环境可以连续两次sendUdpMsg提升成功率;
仅支持 2.4G WiFi,5G 频段无法连接;
热点名称、密码、端口号两端必须一字不差,大小写、符号不能出错;
服务端未开机开热点时,客户端会卡在while (!myIot.wifiStatus()){}死循环里卡死。



回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 6 天前

【花雕动手做】K10实验之UDP广播双K10双向通信点亮LED

Mind+图形编程(UDP广播客户端)

【花雕动手做】K10 实验之 UDP 广播双 K10 双向通信点亮LED图1
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 6 天前

【花雕动手做】K10实验之UDP广播双K10双向通信点亮LED

实验场景图与视频记录

【花雕动手做】K10 实验之 UDP 广播双 K10 双向通信点亮LED图3

【花雕动手做】K10 实验之 UDP 广播双 K10 双向通信点亮LED图1

【花雕动手做】K10 实验之 UDP 广播双 K10 双向通信点亮LED图2
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail