【花雕动手做】行空板 K10 系列实验之网络服务动态时钟详细 NTP 授时并实时显示
行空板K10是一款专为物联网与AI教学设计的国产开发板,集成了2.8寸彩屏、WiFi/蓝牙、摄像头、麦克风等丰富资源,支持离线图像识别、语音交互等功能。本文重点介绍了其网络服务模块的应用,包括Wi-Fi连接和NTP网络授时技术原理,并通过动态时钟实验展示了如何通过代码实现网络时间同步。实验使用国内教育网NTP服务器获取北京时间,并在屏幕上实时显示年、月、日、时、分、秒等信息,体现了该开发板在教学场


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

行空板K10的网络服务模块,都在这里
网络服务 NTP 授时积木

网络服务 Wi-Fi 相关积木

辅助:屏幕显示相关积木

知识点:Wi-Fi
Wi-Fi(无线保真)是一种允许设备通过无线电波连接到互联网的技术。以下是一些关于Wi-Fi的关键知识点:
1、基本概念
无线局域网(WLAN):Wi-Fi 技术基于无线局域网 (WLAN),通过无线电波在有限的区域内传输数据。
频段:常用的 Wi-Fi 频段有2.4GHz 和5GHz,5GHz 频段提供更快的速度,但覆盖范围较小;2.4GHz 频段则覆盖范围较大,但速度相对较慢。
2、主要标准
Wi-Fi 有多个版本,每个版本在速度和覆盖范围上都有不同的性能:
802.11b:2.4GHz 频段,最大传输速度为11 Mbps。
802.11g:2.4GHz 频段,最大传输速度为54 Mbps。
802.11n:2.4GHz 和5GHz 频段,最大传输速度为600 Mbps。
802.11ac:5GHz 频段,最大传输速度可达到1Gbps 以上。
802.11ax(Wi-Fi 6):2.4GHz 和5GHz 频段,支持更高的速度和更大的设备连接数。
3、Wi-Fi 的工作原理
接入点(AP):Wi-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授时
实验开源代码
// 引入所需功能库:DFRobot_Iot用于WiFi联网,unihiker_k10是行空板K10核心库,MPython_NtpTime用于网络授时
#include <DFRobot_Iot.h>
#include "unihiker_k10.h"
#include <MPython_NtpTime.h>
// 实例化行空板K10主控对象
UNIHIKER_K10 k10;
// 定义屏幕旋转方向参数,数值2代表指定屏幕摆放角度
uint8_t screen_dir=2;
// 实例化WiFi联网对象
DFRobot_Iot myIot;
// 实例化网络时间同步对象
MPython_NtpTime ntptime;
// 初始化函数,设备上电后仅执行一次
void setup() {
k10.begin(); // 初始化行空板K10底层硬件资源
k10.initScreen(screen_dir); // 根据设定参数初始化显示屏并设置旋转方向
k10.creatCanvas(); // 创建屏幕绘图画布,后续文字绘制都基于画布实现
k10.setScreenBackground(0x0000FF); // 设置屏幕背景色为纯蓝色
myIot.wifiConnect("zhz3", "z6156721"); // 连接指定WiFi,参数依次为WiFi名称、WiFi密码
while (!myIot.wifiStatus()) {} // 循环等待,直到WiFi连接成功才继续往下执行
ntptime.setNtpTime(ntptime.UTCEast8_t, "edu.ntp.org.cn"); // 配置网络授时:选择东八区北京时间,使用国内教育网NTP时间服务器
k10.canvas->canvasText("K10系列实验动态授时", 3, 0xFF0000); // 在屏幕第3行,以红色字体显示标题文本
}
// 主循环函数,程序会循环不间断执行
void loop() {
// 在屏幕对应行,白色字体分别绘制并拼接显示年份、月份、星期、日期、小时、分钟、秒
k10.canvas->canvasText((String(" 年份:") + String(ntptime.localTime(ntptime.Year))), 5, 0xFFFFFF);
k10.canvas->canvasText((String(" 月份:") + String(ntptime.localTime(ntptime.Month))), 6, 0xFFFFFF);
k10.canvas->canvasText((String(" 几周:") + String(ntptime.localTime(ntptime.Week))), 7, 0xFFFFFF);
k10.canvas->canvasText((String(" 日期:") + String(ntptime.localTime(ntptime.Date))), 8, 0xFFFFFF);
k10.canvas->canvasText((String(" 小时:") + String(ntptime.localTime(ntptime.Hour))), 9, 0xFFFFFF);
k10.canvas->canvasText((String(" 分钟:") + String(ntptime.localTime(ntptime.Minute))), 10, 0xFFFFFF);
k10.canvas->canvasText((String(" 秒钟:") + String(ntptime.localTime(ntptime.Second))), 11, 0xFFFFFF);
k10.canvas->updateCanvas(); // 刷新画布,将所有文字内容更新显示到屏幕上
delay(1000); // 延时1000毫秒(1秒),实现时间每秒刷新一次的效果
k10.canvas->canvasClear(11); // 清空屏幕第11行内容,避免秒数文字重叠残留
}
代码解读
一、整体功能
该程序实现行空板 K10 连接 WiFi 网络,从公共时间服务器同步标准北京时间,并在屏幕上实时显示年、月、星期、日期、时、分、秒,每秒刷新一次时间。
二、头文件与对象定义
#include <DFRobot_Iot.h>
#include "unihiker_k10.h"
#include <MPython_NtpTime.h>
UNIHIKER_K10 k10;
uint8_t screen_dir=2;
DFRobot_Iot myIot;
MPython_NtpTime ntptime;
#include <DFRobot_Iot.h>:导入物联网 WiFi 库,用于 WiFi 连接与状态检测。
#include "unihiker_k10.h":行空板 K10 专属驱动库,负责屏幕、画布等硬件操作。
#include <MPython_NtpTime.h>:网络授时库,用来获取互联网标准时间。
UNIHIKER_K10 k10:创建 K10 主板操作对象,后续所有硬件调用都基于此对象。
screen_dir=2:定义屏幕旋转方向,数值 2 为指定的屏幕显示角度。
DFRobot_Iot myIot:创建 WiFi 功能对象,实现配网、联网检测。
MPython_NtpTime ntptime:创建网络时间对象,负责时间同步与读取。
三、setup () 初始化函数(上电仅执行一次)
void setup() {
k10.begin();
k10.initScreen(screen_dir);
k10.creatCanvas();
k10.setScreenBackground(0x0000FF);
myIot.wifiConnect("zhz3", "z6156721");
while (!myIot.wifiStatus()) {}
ntptime.setNtpTime(ntptime.UTCEast8_t, "edu.ntp.org.cn");
k10.canvas->canvasText("K10系列实验动态授时", 3, 0xFF0000);
}
k10.begin():初始化行空板底层所有硬件资源。
k10.initScreen(screen_dir):按照预设方向初始化显示屏。
k10.creatCanvas():创建绘图画布,屏幕文字都需要绘制在画布上。
k10.setScreenBackground(0x0000FF):设置屏幕背景色为纯蓝色。
myIot.wifiConnect(“zhz3”, “z6156721”):连接 WiFi,参数分别为 WiFi 名称、WiFi 密码。
while (!myIot.wifiStatus()) {}:循环阻塞,等待 WiFi 连接成功后再执行后续代码。
ntptime.setNtpTime(…):配置授时规则,选择东八区(北京时间),使用国内教育网时间服务器同步时间。
canvasText(…):在屏幕第 3 行,用红色字体显示程序标题。
四、loop () 主循环函数(循环持续执行)
void loop() {
k10.canvas->canvasText((String(" 年份:") + String(ntptime.localTime(ntptime.Year))), 5, 0xFFFFFF);
k10.canvas->canvasText((String(" 月份:") + String(ntptime.localTime(ntptime.Month))), 6, 0xFFFFFF);
k10.canvas->canvasText((String(" 几周:") + String(ntptime.localTime(ntptime.Week))), 7, 0xFFFFFF);
k10.canvas->canvasText((String(" 日期:") + String(ntptime.localTime(ntptime.Date))), 8, 0xFFFFFF);
k10.canvas->canvasText((String(" 小时:") + String(ntptime.localTime(ntptime.Hour))), 9, 0xFFFFFF);
k10.canvas->canvasText((String(" 分钟:") + String(ntptime.localTime(ntptime.Minute))), 10, 0xFFFFFF);
k10.canvas->canvasText((String(" 秒钟:") + String(ntptime.localTime(ntptime.Second))), 11, 0xFFFFFF);
k10.canvas->updateCanvas();
delay(1000);
k10.canvas->canvasClear(11);
}
连续 7 行canvasText:读取网络时间,拼接文字后,在屏幕对应行以白色字体分别展示年份、月份、星期、日期、小时、分钟、秒。
k10.canvas->updateCanvas():刷新画布,将文字内容更新到屏幕上显示。
delay(1000):延时 1 秒,控制时间每秒刷新一次。
k10.canvas->canvasClear(11):清空屏幕第 11 行(秒数所在行),防止数字重叠、残影。
五、补充说明
颜色格式:0xRRGGBB,0x0000FF蓝色、0xFF0000红色、0xFFFFFF白色。
依赖环境:设备必须处在zhz3这个 WiFi 信号覆盖范围内,否则无法联网授时。
时区:UTCEast8_t代表东八区,对应我国标准北京时间。
Mind+图形编程

实验场景图与视频记录


openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)