Hi3861 OpenHarmony嵌入式应用入门(嵌入式arm实战项目)

Hi3861 OpenHarmony嵌入式应用入门sntp(Simple Network Time Protocol)是一种网络时间协议,它是NTP(Network Time Prot

sntp(简单网络时间协议)是一种网络时间协议,是NTP(网络时间协议)的简化版本。

该项目是从LwIP 中提取的SNTP 代码。

“Hi3861 SDK”已包含预编译的lwip,但未启用SNTP功能(无法修改静态库)。

您必须确保连接到模块的热点可以访问您的网络。

修改网络参数

在Hi3861开发板上运行以上四个测试程序之前,需要根据您的无线路由器和Linux系统IP修改net_params.h文件中的相关代码。

将PARAM_HOTSPOT_SSID 更改为您的热点名称。将PARAM_HOTSPOT_PSK 更改为您的热点密码。

您可能需要更改学校时间服务器的IP地址并更改以下代码。

无效SntpSetServers(无效)

{

IP4_ADDR(g_ntpServerList[0], 223, 113, 97, 98); //cn.ntp.org.cn

IP4_ADDR(g_ntpServerList[1], 114, 118, 7, 163); //ntp.ntsc.ac.cn

IP4_ADDR(g_ntpServerList[2], 120, 25, 108, 11); //time.pool.aliyun.com

IP4_ADDR(g_ntpServerList[3], 119, 28, 206, 193); //cn.pool.ntp.org

for (size_t i=0; i SNTP_SERVERS; i++) {

sntp_setserver(i, (ip_addr_t*)g_ntpServerList[i]);

}

}

此方法对URL 执行ping 操作并从返回的消息中确定IP 地址。

代码编写

修改D:\\DevEcoProjects\\test\\src\\vendor\\rtplay\\rt_hi3861\\demo\\BUILD.gn文件。

# 版权所有(c) 2023 北京华清远见教育科技有限公司

# 根据Apache 许可证2.0 版(“许可证”)获得许可。

# 除非按照许可证,否则您不得使用此文件。

# 许可证副本可在以下位置获取:

#

#http://www.apache.org/licenses/LICENSE-2.0

#

# 软件,除非适用法律要求或经我们书面同意。

# 根据许可证分发的任何内容均“按原样”分发。

# 不提供任何形式的明示或暗示的保证或条件。

# 具体语言的权限管理请参见许可证。

# 基于许可证的限制。

导入(\’//build/lite/config/component/lite_component.gni\’)

lite_component(\’演示\’) {

特征=[

#\’base_00_helloworld:base_helloworld_example\’,

#\’base_01_led:base_led_example\’,

#\’base_02_loopkey:base_loopkey_example\’,

#\’base_03_irqkey:base_irqkey_example\’,

#\’base_04_adc:base_adc_example\’,

#\’base_05_pwm:base_pwm_example\’,

#\’base_06_ssd1306:base_ssd1306_example\’,

#\’kernel_01_task:kernel_task_example\’,

#\’kernel_02_timer:kernel_timer_example\’,

#\’kernel_03_event:kernel_event_example\’,

#\’kernel_04_mutex:kernel_mutex_example\’,

#\’kernel_05_semaphore_as_mutex:kernel_semaphore_as_mutex_example\’,

#\’kernel_06_semaphore_for_sync:kernel_semaphore_for_sync_example\’,

#\’kernel_07_semaphore_for_count:kernel_semaphore_for_count_example\’,

#\’kernel_08_message_queue:kernel_message_queue_example\’,

#\’wifi_09_hotspot:wifi_hotspot_example\’,

#\’wifi_10_sta:wifi_sta_example\’,

#\’tcp_11_server:tcp_server_example\’,

#\’tcp_12_client:tcp_client_example\’,

#\’udp_13_server:udp_server_example\’,

#\’udp_14_client:udp_client_example\’,

#\’network_15_mqtt:network_mqtt_example\’,

\’network_16_sntp:network_sntp_example\’,

]

}

创建D:\\DevEcoProjects\\test\\src\\vendor\\rtplay\\rt_hi3861\\demo\\network_16_sntp 文件夹

在文件夹中创建D:\\DevEcoProjects\\test\\src\\vendor\\rtplay\\rt_hi3861\\demo\\network_16_sntp\\BUILD.gn文件

# 版权所有(c) 2020,HiHope 社区。

#

# 以源代码和二进制形式重新分发和使用(有或没有)

# 如果满足以下条件则允许更改:

#

#1. 源代码的重新分发必须保留上述版权声明。

# 条件列表和以下免责声明。

#

# 2. 以二进制形式重新分发必须复制上述版权声明。

# 文档中的条件列表和以下免责声明

# 和/或分发时附带的其他材料。

#

#3. 未列出版权所有者的姓名或名称。

# 贡献者可用于认可或推广源自以下内容的产品:

# 未经事先书面许可,不得使用本软件。

#

# 本软件由版权所有者和贡献者“按原样”提供。

# 以及任何明示或暗示的保证,包括但不限于:

# 不承担适销性和特定用途适用性的默示保证。

否认。在任何情况下,版权所有者或贡献者均不承担任何责任。

# 对于任何直接的、间接的、偶然的、特殊的、模范的或后果性的事情。

# 损害(包括但不限于替代或替代采购)

# 使用、数据或利润丢失或业务中断。

# 基于责任的原因和理论(无论合同或严格责任)

# 除使用以外的任何方式引起的侵权行为(包括疏忽或其他原因)

# 即使您已被告知可能会造成此类损害,也请勿使用该软件。

static_library(\’network_sntp_example\’) {

来源=[

\’network_sntp_example.c\’,

\’wifi_connecter.c\’,

\’//第三方/sntp/src/sntp.c\’,

\’//第三方/sntp/src/sntp_port.c\’,

\’//第三方/sntp/src/sntp_debug.c\’

]

定义=[

#\’SNTP_SERVER_DNS=1\’,

\’LWIP_HAVE_INT64=0\’,

\’LWIP_DEBUG\’,

\’SNTP_DEBUG=0xA0\’,

“LWIP_DBG_TYPES_ON=LWIP_DBG_ON”

]

include_dirs=[

\’//第三方/sntp/include\’,

\’//third_party/sntp/include/lwip/apps\’,

\’//基础/通信/wifi_lite/接口/wifiservice\’,

\’//供应商/hisi/hi3861/hi3861/third_party/lwip_sack/include/\’,

]

}

在文件夹中创建D:\\DevEcoProjects\\test\\src\\vendor\\rtplay\\rt_hi3861\\demo\\network_16_sntp\\wifi_connecter.h文件。头文件包含用于Wi-Fi 连接的宏。该文件与tcp_12_client\\wifi_connecter.h 相同

添加以下宏定义。

#ifndef PARAM_HOTSPOT_TYPE

#define PARAM_HOTSPOT_TYPE WIFI_SEC_TYPE_PSK /* 在wifi_device_config.h 中定义*/

万一

在文件夹中创建D:\\DevEcoProjects\\test\\src\\vendor\\rtplay\\rt_hi3861\\demo\\network_16_sntp\\wifi_connecter.c文件。这与tcp_12_client\\wifi_connecter.c 相同。

在文件夹中创建文件D:\\DevEcoProjects\\test\\src\\vendor\\rtplay\\rt_hi3861\\demo\\network_16_sntp\\network_sntp_example.c

/*

* 版权所有(c) 2020,HiHope 社区。

*

* 以源代码和二进制形式重新分发和使用,有或没有

*如果满足以下条件,则允许更改:

*

* 1. 源代码的再分发必须保留上述版权声明。

*下面列出了条款和条件以及免责声明。

*

* 2. 以二进制形式重新分发必须复制上述版权声明。

* 此条件列表和文件中的免责声明如下

* 和/或分发时附带的其他材料。

*

*3. 未列出版权所有者姓名和版权所有者姓名。

* 贡献者可用于认可或推广源自以下来源的产品:

*未经事先书面许可,不得使用本软件。

*

*本软件由版权所有者和贡献者“按原样”提供。

* 以及任何明示或暗示的保证,包括但不限于:

*不提供适销性和特定用途适用性的默示保证。

* 在任何情况下,版权所有者或贡献者均不承担任何责任。

* 对于任何直接的、间接的、偶然的、特殊的、模范的或后果性的事情。

* 损坏(包括但不限于替代品或购买替代产品)

* 服务、使用、数据或利润损失或业务中断。

* 基于任何责任原因或理论,无论是合同责任还是严格责任。

* 或以使用以外的任何方式引起的任何侵权行为(包括疏忽或其他行为);

* 即使被告知可能造成此类损害,也禁止使用该软件。

*/

#include stdio.h

#include \’ohos_init.h\’

#include \’cmsis_os2.h\’

#include \’sntp.h\’

#include \’wifi_connecter.h\’

#include \’lwip/pbuf.h\’

#include \’lwip/dns.h\’

#include \’lwip/ip4_addr.h\’

#定义SNTP_SERVERS 4

//#define ARRAY_SIZE(a) sizeof(a)/sizeof(a[0])

#定义堆栈大小(4096)

#定义DELAY_TICKS_500 (500)

静态int g_netId=-1;

#如果SNTP_SERVER_DNS

静态const char* g_ntpServerList[]={

//参考来自https://dns.icoa.cn/ntp/#china

\’cn.ntp.org.cn\’, //中国NTP快速授时服务

\’ntp.ntsc.ac.cn\’, //国家授时中心NTP服务器

\’time.pool.aliyun.com\’, //阿里云公共NTP服务器

\’cn.pool.ntp.org\’, //国际NTP快速授时服务

};

//#define SNTP_SERVERS ARRAY_SIZE(g_ntpServerList)

无效SntpSetServernames(无效)

{

for (size_t i=0; i SNTP_SERVERS; i++) {

sntp_setservername(i, g_ntpServerList[i]);

}

}

除此之外

//ip4_addr_t g_ntpServerList[SNTP_MAX_SERVERS];

ip4_addr_t g_ntpServerList[SNTP_SERVERS];

无效SntpSetServers(无效)

{

IP4_ADDR(g_ntpServerList[0], 223, 113, 97, 98); //cn.ntp.org.cn

IP4_ADDR(g_ntpServerList[1], 114, 118, 7, 163); //ntp.ntsc.ac.cn

IP4_ADDR(g_ntpServerList[2], 120, 25, 108, 11); //time.pool.aliyun.com

IP4_ADDR(g_ntpServerList[3], 119, 28, 206, 193); //cn.pool.ntp.org

for (size_t i=0; i SNTP_SERVERS; i++) {

sntp_setserver(i, (ip_addr_t*)g_ntpServerList[i]);

}

}

万一

静态无效SntpTask(无效)

{

WifiDeviceConfig 设置={0};

//准备AP配置参数

//strcpy(config.ssid, PARAM_HOTSPOT_SSID);

//strcpy(config.preSharedKey, PARAM_HOTSPOT_PSK);

strcpy_s(config.ssid, WIFI_MAX_SSID_LEN, PARAM_HOTSPOT_SSID);

strcpy_s(config.preSharedKey, WIFI_MAX_KEY_LEN, PARAM_HOTSPOT_PSK);

config.securityType=PARAM_HOTSPOT_TYPE;

g_netId=ConnectToHotspot(配置);

printf(\’netId=%d\\r\\n\’, g_netId);

#如果SNTP_SERVER_DNS

ip4_addr_t dnsServerAddr;

IP4_ADDR(dnsServerAddr, 202, 98, 0, 68);

dns_setserver(0, (结构ip_addr *)dnsServerAddr);

dns_init();

SntpSetServernames();

除此之外

SntpSetServers();

万一

sntp_setoperatingmode(SNTP_OPMODE_POLL);

sntp_init();

printf(\’sntp_enabled: %d\\r\\n\’, sntp_enabled());

for (size_t i=0; i SNTP_SERVERS; i++) {

printf(\’sntp_getreachability(%zu): %d\\r\\n\’, i, sntp_getreachability(i));

}

osDelay(DELAY_TICKS_500);

for (size_t i=0; i SNTP_SERVERS; i++) {

printf(\’sntp_getreachability(%zu): %d\\r\\n\’, i, sntp_getreachability(i));

}

}

静态无效SntpEntry(无效)

{

osThreadAttr_t 属性={0};

attr.name=\’SntpTask\’;

attr.stack_size=STACK_SIZE;

attr.priority=osPriorityNormal;

if (osThreadNew(SntpTask, NULL, attr)==NULL) {

printf(\'[SntpEntry] 创建SntpTask 失败!\\n\’);

}

}

SYS_RUN(SntpEntry);

使用构建。编译成功后,使用upload进行写入。

#Hi3861 以上有关OpenHarmony嵌入式应用入门的相关内容摘自互联网,仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/93081.html

(0)
CSDN's avatarCSDN
上一篇 2024年7月5日 上午10:07
下一篇 2024年7月5日 上午10:07

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注