1975|7

6960

帖子

11

TA的资源

版主

楼主
 

【平头哥RVB2601创意应用开发】自己动手解决NTP,显示电子时钟。 [复制链接]

 

【前言】 RVB2601在与自己的服务器建立连接上,同步服务器时间,初始化RTC时间。由于现有的NTP组件存在问题,几经周折后还没有弄好,只好与自己的服务同步时间。

【步骤】

1、在原来建立TCP连接的基础上,方法见:【平头哥RVB2601创意应用开发】u8g2+IP - 平头哥RISC-V RVB2601活动专区 - 电子工程世界-论坛 (eeworld.com.cn) 

2、服务器在第一次连接时返回时间:

    def send_message(self, data):
        # 发送数据
        data =  datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        return self._stream.write(data.encode('utf-8'))

3、在init.c中注册接收回调函数:

if(app_netmgr_hdl) {
		//init uservice for wifi
        utask_t *task = utask_new("netmgr", 2 * 1024, QUEUE_MSG_COUNT, AOS_DEFAULT_APP_PRI);
        netmgr_service_init(task);
		//join AP, WIFI_SSID & WIFI_PSW both are Macro
        netmgr_config_wifi(app_netmgr_hdl, WIFI_SSID, sizeof(WIFI_SSID), WIFI_PSW, sizeof(WIFI_PSW));
		//init w800 AT parser
		w800_module_init(task, &w800_param);
		//register input event callback for w800 module
//		w800_packet_input_cb_register(&w800_in);
		//start uservice
		w800_packet_input_cb_register(&w800_data_receive_callback);//注册接收回调函数
        netmgr_start(app_netmgr_hdl);
		//subscribe events which is managed by netmgr uservice
        event_subscribe(EVENT_NETMGR_GOT_IP, network_event, NULL);
        event_subscribe(EVENT_NETMGR_NET_DISCON, network_event, NULL);
    }

4、回调函数中解释出时间并调置RTC时间:

void w800_data_receive_callback(int linkid, void *data, size_t len, char remote_ip[16], uint16_t remote_ports)
{
	uint8_t *buf;
	
	csi_rtc_time_t base_time;
	csi_error_t ret = 0;
	buf = (uint8_t *)data;
	if(len == 0)
	{
		return;
	}
	//返回格式为:2022-02-01 11:11:00
	base_time.tm_year = ((int)(buf[0]-'0')*1000 + (int)(buf[1]-'0')*100 + (int)(buf[2]-'0')*10 + (int)(buf[3]-'0'))-1900;
	base_time.tm_mon = ((int)(buf[5]-'0')*10 + (int)(buf[6]-'0'))-1;
	base_time.tm_mday = (int)(buf[8]-'0')*10 +(int)(buf[9]-'0');
	base_time.tm_hour = (int)(buf[11]-'0')*10 + (int)(buf[12]-'0');
	base_time.tm_min = (int)(buf[14]-'0')*10 + (int)(buf[15]-'0');
	base_time.tm_sec = (int)(buf[17]-'0')*10 + (int)(buf[18]-'0');
	LOGD(TAG,"year:%04d-%2d-%2d %2d:%2d:%2d",base_time.tm_year,base_time.tm_mon,base_time.tm_mday,base_time.tm_hour,base_time.tm_min,base_time.tm_sec);
	ret = csi_rtc_init(&g_rtc, 0);
	ret = csi_rtc_set_time(&g_rtc, &base_time);
	if(ret == 0)
	{
		LOGD(TAG,"set time OK!");
	}
	else{
		LOGD(TAG,"set time ERROR!");
	}

}

5、在显示任务中增加显示功能:

void test_getIP_task()
{
	char ssid[32];
	int bssid[6];
	int channel;
	int rssi;
	char disp[40];
	//先获取AP信息,判断是否联网
	//偿试连接到服务器
	//发送数据
	char ip[16];
	char gw[16];
	char mask[16];
	csi_rtc_time_t this_time;
	csi_error_t ret;
	int ipinfo = -1;
	while(1){
		ipinfo = w800_link_info(ip,gw,mask);
		if(ipinfo == 0){
			u8g2_ClearBuffer(&u8g2);
			u8g2_SetFont(&u8g2,u8g2_font_u8glib_4_tr);
			u8g2_DrawStr(&u8g2,5,8,ip);//显示IP地址
		}
		ipinfo = w800_ap_info(ssid, bssid, &channel, &rssi);
		if(ipinfo == 0)
		{
			sprintf(disp,"RSSI:%d",rssi);
			u8g2_DrawStr(&u8g2,80,8,disp);
			
		}
		u8g2_SetFont(&u8g2,u8g2_font_7x13_tr);
		//获取时间
		ret = csi_rtc_get_time(&g_rtc, &this_time);
		
		sprintf(disp,"%04d-%02d-%02d",this_time.tm_year+1900,this_time.tm_mon+1,this_time.tm_mday);
		u8g2_DrawStr(&u8g2,15,24,disp);
		sprintf(disp,"%02d:%02d:%02d",this_time.tm_hour,this_time.tm_min,this_time.tm_sec);
		u8g2_DrawStr(&u8g2,20,40,disp);
		u8g2_SendBuffer(&u8g2);
		aos_msleep(1000);
	}
}

效果:


【感想】这块板的学习真的是吃力,慢慢的增加功能中,期待早点完成!加油!!!

最新回复

多多沟通,多多交流 :)   详情 回复 发表于 2022-4-12 13:47
点赞 关注
 
 

回复
举报

6802

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

同步服务器时间看视频效果不是还可以吧

点评

谢谢观看,虽然比不上NTP授时精确,但是成功了。这块板子很多配套的程序还有BUG。能解决问题就行吧,下面要攻http...    详情 回复 发表于 2022-4-11 22:57
 
 
 

回复

6960

帖子

11

TA的资源

版主

板凳
 
Jacktang 发表于 2022-4-11 20:54 同步服务器时间看视频效果不是还可以吧

谢谢观看,虽然比不上NTP授时精确,但是成功了。这块板子很多配套的程序还有BUG。能解决问题就行吧,下面要攻http...

 

点评

加油加油:)  详情 回复 发表于 2022-4-12 11:52
 
 
 

回复

2万

帖子

74

TA的资源

管理员

4
 
lugl4313820 发表于 2022-4-11 22:57 谢谢观看,虽然比不上NTP授时精确,但是成功了。这块板子很多配套的程序还有BUG。能解决问题就行吧,下面 ...

加油加油:)

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

点评

现在的问题是串口资源不够用呀,我原来设计需要两个串口,现在日志一个串口,SPI1把串口2点了,无资源可用,看能不能搞定虚拟串口。能不能帮助向前面那位网友分享一下他的结果,我就少走点弯路了。【新提醒】RISC-V  详情 回复 发表于 2022-4-12 11:57
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 
 

回复

6960

帖子

11

TA的资源

版主

5
 

现在的问题是串口资源不够用呀,我原来设计需要两个串口,现在日志一个串口,SPI1把串口2点了,无资源可用,看能不能搞定虚拟串口。能不能帮助向前面那位网友分享一下他的结果,我就少走点弯路了。【新提醒】RISC-V RVB2601 初体验--第3节--IO模拟串口完成 - 平头哥RISC-V RVB2601活动专区 - 电子工程世界-论坛 (eeworld.com.cn)

点评

我让我们同事跟进下:)  详情 回复 发表于 2022-4-12 12:03
 
 
 

回复

2万

帖子

74

TA的资源

管理员

6
 
lugl4313820 发表于 2022-4-12 11:57 现在的问题是串口资源不够用呀,我原来设计需要两个串口,现在日志一个串口,SPI1把串口2点了,无资源可 ...

我让我们同事跟进下:)

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

点评

非常感谢,我那边也向平头哥提交了工单,这板整得我没脾气呀。  详情 回复 发表于 2022-4-12 12:22
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 
 

回复

6960

帖子

11

TA的资源

版主

7
 
soso 发表于 2022-4-12 12:03 我让我们同事跟进下:)

非常感谢,我那边也向平头哥提交了工单,这板整得我没脾气呀。

点评

多多沟通,多多交流 :)  详情 回复 发表于 2022-4-12 13:47
 
 
 

回复

2万

帖子

74

TA的资源

管理员

8
 
lugl4313820 发表于 2022-4-12 12:22 非常感谢,我那边也向平头哥提交了工单,这板整得我没脾气呀。

多多沟通,多多交流 :)

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表