【花雕动手做】行空板K10系列实验之网络服务NTP授时动态圆形挂钟 行空板K10是一款专为快速体验物联网和学习人工智能而设计的开发学习板100%采用国产芯片知识产权自主可控符合信息科技课程中编程学习、物联网及人工智能等教学需求。该板集成2.8寸LCD彩屏、WiFi蓝牙、摄像头、麦克风、扬声器、RGB指示灯、多种传感器及丰富的扩展接口。凭借高度集成的板载资源教学过程中无需额外连接其他设备便可轻松实现传感器控制、物联网应用以及人脸识别、语音识别、语音合成等AI人工智能项目。主要特点集成摄像头内置算法可进行离线图像检测集成麦克风内置算法可进行离线语音识别集成扬声器内置算法可进行离线语音合成2.8寸彩色屏幕数据展示更清晰集成度高利于教学接口丰富兼容软件多扩展性好行空板K10的网络服务模块都在这里网络服务 NTP 授时积木网络服务 Wi-Fi 相关积木辅助屏幕显示相关积木知识点Wi-FiWi-Fi无线保真是一种允许设备通过无线电波连接到互联网的技术。以下是一些关于Wi-Fi的关键知识点1、基本概念无线局域网WLANWi-Fi 技术基于无线局域网 (WLAN)通过无线电波在有限的区域内传输数据。频段常用的 Wi-Fi 频段有2.4GHz 和5GHz5GHz 频段提供更快的速度但覆盖范围较小2.4GHz 频段则覆盖范围较大但速度相对较慢。2、主要标准Wi-Fi 有多个版本每个版本在速度和覆盖范围上都有不同的性能802.11b2.4GHz 频段最大传输速度为11 Mbps。802.11g2.4GHz 频段最大传输速度为54 Mbps。802.11n2.4GHz 和5GHz 频段最大传输速度为600 Mbps。802.11ac5GHz 频段最大传输速度可达到1Gbps 以上。802.11axWi-Fi 62.4GHz 和5GHz 频段支持更高的速度和更大的设备连接数。3、Wi-Fi 的工作原理接入点APWi-Fi 网络的核心组件用于发送和接收无线信号通常为路由器。客户端设备例如智能手机、电脑、平板电脑等通过无线网络适配器连接到接入点。数据传输无线电波在接入点和客户端设备之间传输数据通过SSID服务集标识符和安全协议如 WPA2进行连接和加密。4、安全与加密WEP一种较早的加密标准安全性较低易被破解。WPA/WPA2较新的加密标准WPA2 是目前广泛使用的加密协议安全性更高。WPA3最新的加密协议提供更强大的安全性和易用性。5、Wi-Fi 的应用Wi-Fi 广泛应用于家庭、办公、公共场所等环境提供无线互联网连接家庭网络用于连接智能家居设备、智能电视等。办公网络用于企业内部的无线连接提高办公效率。公共热点例如咖啡店、机场等为用户提供免费或付费的无线连接服务。6、常见问题与解决方法信号弱检查路由器位置避免放置在金属物品或墙壁后面可以使用Wi-Fi中继器或Mesh网络增强信号。连接不稳定检查是否有设备过多导致网络拥堵尝试重启路由器或更换频段。慢速确保路由器和设备支持最新的Wi-Fi标准检查是否有网络干扰或带宽被占用。知识点NTP网络授时NTP 即网络时间协议Network Time Protocol是一种用于在计算机网络中同步时钟的协议以下从主要特点、工作原理、应用场景等方面进行详细介绍1、定义与基本信息NTP 属于应用层协议基于 UDP用户数据报协议传输使用 UDP 端口号 123。它的设计目标是使网络中的各个计算机保持时间同步将所有计算机的时间同步到一个统一的时间基准上其时间精度在局域网内可达亚毫秒级在广域网中通常能达到几十毫秒的精度。2、主要特点高精度通过复杂的算法和同步机制NTP 能够实现较高的时间同步精度满足大多数网络应用对时间准确性的要求。稳定性具有良好的稳定性能够在不同的网络环境和系统负载下保持时间同步的可靠性确保时间信息的准确传递和系统的稳定运行。分层架构采用分层的时间同步体系将时间服务器组织成不同的层级形成一个树形结构。顶层是权威时间源如原子钟或 GPS 时钟底层是普通的客户端。这种架构使得 NTP 能够适应大规模的网络环境实现高效的时间同步。可扩展性协议具有良好的可扩展性能够方便地添加新的功能和特性以适应不断变化的网络需求和技术发展。3、工作原理NTP 客户端向 NTP 服务器发送时间请求报文服务器接收到请求后会在报文中填入当前的时间戳并返回给客户端。客户端根据接收到的时间戳和本地时间计算出时间偏移量从而调整本地时钟。为了提高精度NTP 还会考虑网络延迟等因素采用多种算法对时间进行校准。4、应用场景金融领域在银行系统、证券交易等金融业务中时间的准确性至关重要。如股票交易的时间戳用于记录交易顺序和确定交易价格时间不同步可能导致交易记录混乱、价格不一致等问题影响市场的公平性和稳定性。电信行业通信网络中的各种设备需要精确的时间同步来保证信号的传输、交换和处理的准确性。如在 CDMA、GSM 等移动通信系统中基站之间需要精确同步以避免信号干扰确保用户通话质量和数据传输的稳定性。分布式系统在云计算、大数据处理等分布式系统中多个节点之间需要进行协同工作时间同步能够保证数据的一致性和操作的顺序性。如分布式数据库中的事务处理需要准确的时间戳来确保数据的更新顺序正确避免数据冲突和不一致。工业自动化在工业生产过程中各种自动化设备和控制系统需要精确的时间同步以实现生产流程的协调和监控。如汽车制造生产线中的机器人操作、流水线的启停控制等时间同步能够保证生产过程的准确性和高效性提高产品质量和生产效率。5、需要注意的事项网络延迟网络延迟可能会对时间同步的精度产生影响在跨广域网进行时间同步时需要考虑网络延迟的变化采用合适的算法进行补偿。服务器可靠性NTP 服务器的可靠性直接影响时间同步的效果应选择可靠的 NTP 服务器并建立备份服务器以防止单点故障。安全问题NTP 通信可能会受到网络攻击如时间欺骗、拒绝服务攻击等需要采取相应的安全措施如使用认证机制、加密传输等以确保时间同步的安全性和准确性。【花雕动手做】行空板K10系列实验之网络服务NTP授时动态圆形挂钟实验开源代码// 引入WiFi物联网库用于连接无线网络、支撑NTP网络授时#includeDFRobot_Iot.h// 行空板K10核心驱动库提供画布、画线、画圆、文字等图形绘制接口#includeunihiker_k10.h// NTP网络授时库同步互联网标准北京时间获取时、分、秒、日期#includeMPython_NtpTime.h// 全局浮点变量volatile防止编译器优化存储钟表绘图计算用角度偏移值、时分秒数值volatilefloatmind_n_h,mind_n_m,mind_n_s,mind_n_a,mind_n_b,mind_n_i,mind_n_j;// 自定义绘图函数声明提前告知编译器后续定义的四个钟表绘制函数voidDF_HuaShiZhen();// 绘制时针voidDF_HuaMiaoZhen();// 绘制秒针voidDF_HuaFenZhen();// 绘制分针voidDF_HuaBiaoPan();// 绘制钟表表盘外圈、刻度、中心圆点// 实例化WiFi联网对象DFRobot_Iot myIot;// 实例化网络时间同步对象MPython_NtpTime ntptime;// 实例化行空板K10主控操作对象UNIHIKER_K10 k10;// 设置屏幕旋转方向参数2uint8_tscreen_dir2;// 上电初始化函数仅执行一次voidsetup(){k10.begin();// 初始化K10全部底层硬件资源k10.initScreen(screen_dir);// 按设定方向初始化显示屏k10.creatCanvas();// 创建绘图画布所有图形文字都绘制在画布上myIot.wifiConnect(zhz3,z6156721);// 连接指定WiFi名称与密码while(!myIot.wifiStatus()){}// 阻塞等待WiFi连接成功才向下执行ntptime.setNtpTime(ntptime.UTCEast8_t,edu.ntp.org.cn);// 配置东八区北京时间、国内授时服务器k10.setScreenBackground(0xFFFFFF);// 设置屏幕背景为纯白色}// 主循环持续刷新时钟画面voidloop(){// 在坐标(75,5)位置、深蓝色、24号中英字体、透明度50、实心模式显示标题“圆形挂钟”k10.canvas-canvasText(圆形挂钟,75,5,0x000099,k10.canvas-eCNAndENFont24,50,true);// (45,40)红色字体打印NTP同步的完整日期k10.canvas-canvasText(ntptime.getDate(),45,40,0xFF0000,k10.canvas-eCNAndENFont24,50,true);// (45,70)蓝色字体打印NTP同步的时分秒时间k10.canvas-canvasText(ntptime.getTime(),45,0x0000FF,k10.canvas-eCNAndENFont24,50,true);// 提取网络时间里的小时、分钟、秒存入全局变量供绘图函数计算指针角度mind_n_hntptime.localTime(ntptime.Hour);mind_n_mntptime.localTime(ntptime.Minute);mind_n_sntptime.localTime(ntptime.Second);DF_HuaBiaoPan();// 第一步绘制表盘外圈、60秒刻度、12小时刻度、中心圆点DF_HuaShiZhen();// 第二步绘制时针DF_HuaFenZhen();// 第三步绘制分针DF_HuaMiaoZhen();// 第四步绘制秒针k10.canvas-updateCanvas();// 一次性把所有绘制内容刷新到屏幕显示delay(500);// 延时500ms降低刷新频率减少屏幕闪烁与运算压力}// 自定义函数绘制时针voidDF_HuaShiZhen(){k10.canvas-canvasSetLineWidth(6);// 设置时针线条粗细为6像素// 时针角度计算1小时30°每分钟额外偏移0.5°三角函数换算屏幕坐标偏移量mind_n_a(40*(sin((float)((30*mind_n_h)(0.5*mind_n_m))/180*PI)));mind_n_b(40*(cos((float)((30*mind_n_h)(0.5*mind_n_m))/180*PI)));// 从表盘中心点(120,200)画直线到计算出的时针端点深蓝色k10.canvas-canvasLine(120,200,(120mind_n_a),(200-mind_n_b),0x000066);}// 自定义函数绘制秒针voidDF_HuaMiaoZhen(){k10.canvas-canvasSetLineWidth(2);// 秒针最细线宽2像素// 每秒转动6°三角函数换算端点偏移mind_n_a(70*(sin((float)(6*mind_n_s)/180*PI)));mind_n_b(70*(cos((float)(6*mind_n_s)/180*PI)));// 中心点到秒针端点橙黄色线条k10.canvas-canvasLine(120,200,(120mind_n_a),(200-mind_n_b),0xFF9900);}// 自定义函数绘制分针voidDF_HuaFenZhen(){k10.canvas-canvasSetLineWidth(4);// 分针粗细4像素介于时针秒针之间// 每分钟转动6°计算坐标偏移mind_n_a(60*(sin((float)(6*mind_n_m)/180*PI)));mind_n_b(60*(cos((float)(6*mind_n_m)/180*PI)));// 中心点到分针端点大红色线条k10.canvas-canvasLine(120,200,(120mind_n_a),(200-mind_n_b),0xFF0000);}// 自定义函数绘制完整表盘外圆、60个秒刻度、12个时刻度、多层内圈、中心圆点voidDF_HuaBiaoPan(){k10.canvas-canvasSetLineWidth(3);// 外圈大圆线宽3像素// 绘制最外层表盘大圆圆心(120,200)半径82轮廓蓝色、填充浅青色、实心填充k10.canvas-canvasCircle(120,200,82,0x0000FF,0x00FFFF,true);mind_n_i0;// 循环60次画出60根秒刻度线每1秒一根刻度for(intindex0;index60;index){mind_n_a(80*(sin((float)(6*mind_n_i)/180*PI)));mind_n_b(80*(cos((float)(6*mind_n_i)/180*PI)));k10.canvas-canvasLine(120,200,(120mind_n_a),(200-mind_n_b),0x0000FF);mind_n_i1;}// 绘制第二层内圈小圆k10.canvas-canvasCircle(120,200,76,0x00FFFF,0x00FFFF,true);mind_n_j0;// 循环12次画出12根小时刻度每小时一根长刻度for(intindex0;index12;index){mind_n_a(80*(sin((float)(30*mind_n_j)/180*PI)));mind_n_b(80*(cos((float)(30*mind_n_j)/180*PI)));k10.canvas-canvasLine(120,200,(120mind_n_a),(200-mind_n_b),0x0000FF);mind_n_j1;}// 绘制第三层内层小圆k10.canvas-canvasCircle(120,200,72,0x00FFFF,0x00FFFF,true);// 表盘中心实心小圆点固定指针旋转中心k10.canvas-canvasCircle(120,200,4,0x0000FF,0x0000FF,true);}代码解读一、整体功能行空板 K10 连接 WiFi通过 NTP 同步北京时间利用画布绘图函数动态绘制圆形模拟钟表屏幕同时显示文字日期、数字时间时针、分针、秒针随实时时间同步转动每 500ms 刷新一次画面。二、头文件、全局变量与函数声明库文件作用DFRobot_Iot.hWiFi 联网基础没有网络无法获取标准时间unihiker_k10.h提供屏幕画布、画圆、画线、自定义字体绘图全套图形接口MPython_NtpTime.h网络授时提取时、分、秒、完整日期字符串。volatile float变量说明volatile关键字防止编译器优化保证绘图时实时读取数值mind_n_h/mind_n_m/mind_n_s存储网络读取的小时、分钟、秒mind_n_a/mind_n_b通用坐标偏移变量三角函数计算指针端点位置mind_n_i/mind_n_j循环计数变量分别用来画 60 个秒刻度、12 个小时刻度。前置函数声明提前声明 4 个自定义绘图函数告诉编译器后续会定义表盘、三针绘制逻辑避免编译报错。三、对象实例myIotWiFi 连接控制对象ntptimeNTP 时间同步对象k10K10 主板、画布、屏幕控制核心对象screen_dir2设定屏幕旋转角度四、setup () 上电初始化流程初始化主板硬件、显示屏、创建绘图画布连接指定 WiFi zhz3密码z6156721while (!myIot.wifiStatus()){}阻塞等待WiFi 连接成功才向下运行杜绝无网请求时间崩溃NTP 配置东八区北京时间授时服务器edu.ntp.org.cn设置屏幕底色为纯白色。五、loop () 主循环运行逻辑1、文字信息打印坐标 (75,5) 打印标题 “圆形挂钟”坐标 (45,40) 红色打印同步好的完整日期坐标 (45,70) 蓝色打印时分秒数字时间字体统一使用 24 号中英混合字体。2、提取时间数值把网络解析出的时、分、秒存入全局变量供给绘图函数做角度运算。绘图执行顺序顺序不能乱1DF_HuaBiaoPan()先画表盘底图、刻度、中心圆点2DF_HuaShiZhen()绘制时针3DF_HuaFenZhen()绘制分针4DF_HuaMiaoZhen()绘制秒针图层逻辑底层表盘→中层时针分针→最上层秒针。3、画面刷新与延时updateCanvas()一次性把所有图形渲染到屏幕delay(500)半秒刷新一次平衡画面流畅度与设备算力消耗。六、四大自定义绘图函数核心原理三角函数极坐标转屏幕直角坐标表盘中心点固定坐标 (120,200)DF_HuaBiaoPan () 表盘绘制外层大圆半径 82蓝边浅青填充循环 60 次画秒刻度每秒对应 6°从圆心向外画短线嵌套两层内圈实心浅青色圆循环 12 次画小时刻度每小时间隔 30°中心绘制实心小圆点作为所有指针旋转支点。DF_HuaShiZhen () 时针线宽 6 像素深蓝色长度 40 像素角度规则1 小时 30°额外叠加分钟带来的微小偏移每分钟 0.5°保证时针缓慢随分钟滑动不会整点才跳公式总角度 30× 小时 0.5× 分钟利用 sin/cos 把角度换算成 XY 偏移叠加中心坐标得到指针终点。DF_HuaFenZhen () 分针线宽 4 像素红色长度 60 像素角度规则1 分钟 6°公式总角度 6× 分钟。DF_HuaMiaoZhen () 秒针线宽 2 像素最细橙黄色长度 70 像素最长角度规则1 秒钟 6°公式总角度 6× 秒数。七、关键细节要点屏幕 Y 轴向下递增所以计算 Y 坐标时用 200 - mind_n_b 实现钟表向上伸展的正常视觉线条粗细区分层级时针粗 分针中 秒针细长度秒针最长、分针次之、时针最短贴合真实钟表样式每次 loop 会重绘整张表盘和指针旧画面被新画布覆盖实现指针转动动画依赖 WiFi 网络断网后程序卡在初始化 WiFi 等待环节无法进入时钟绘制循环。Mind图形编程实验场景图与视频记录