【平头哥RVB2601创意应用开发】自己动手解决NTP,显示电子时钟。
<article data-clipboard-cangjie="["root",{"copyFrom":673757249},["p",{},["span",{"data-type":"text"},["span",{"data-type":"leaf"},"【前言】 RVB2601在与自己的服务器建立连接上,同步服务器时间,初始化RTC时间。由于现有的NTP组件存在问题,几经周折后还没有弄好,只好与自己的服务同步时间。"]]],["p",{},["span",{"data-type":"text"},["span",{"data-type":"leaf"},"【步骤】"]]],["p",{},["span",{"data-type":"text"},["span",{"data-type":"leaf"},"1、在原来建立TCP连接的基础上,方法见:"]],["a",{"href":"https://occ.t-head.cn/community/post/detail?id=4031208131199119360"},["span",{"data-type":"text"},["span",{"data-type":"leaf"},"博文-【平头哥RVB2601创意应用开发】搭建TCPSERVE通信 "]]],["span",{"data-type":"text"},["span",{"data-type":"leaf"},"。"]]],["p",{},["span",{"data-type":"text"},["span",{"data-type":"leaf"},"2、服务器在第一次连接时返回时间:"]]]]"><p>【前言】 RVB2601在与自己的服务器建立连接上,同步服务器时间,初始化RTC时间。由于现有的NTP组件存在问题,几经周折后还没有弄好,只好与自己的服务同步时间。</p>
<p>【步骤】</p>
<p>1、在原来建立TCP连接的基础上,方法见:<a href="https://bbs.eeworld.com.cn/thread-1199366-1-1.html">【平头哥RVB2601创意应用开发】u8g2+IP - 平头哥RISC-V RVB2601活动专区 - 电子工程世界-论坛 (eeworld.com.cn)</a><a href="https://occ.t-head.cn/community/post/detail?id=4031208131199119360" rel="noopener noreferrer" target="_blank"> </a>。</p>
<p>2、服务器在第一次连接时返回时间:</p>
<pre>
<code> def send_message(self, data):
# 发送数据
data =datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
return self._stream.write(data.encode('utf-8'))</code></pre>
<article data-clipboard-cangjie="["root",{"copyFrom":673757249},["p",{},["span",{"data-type":"text"},["span",{"data-type":"leaf"},"在init.c中注册接收回调函数:"]]]]">
<p>3、在init.c中注册接收回调函数:</p>
<pre>
<code>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);
}</code></pre>
<article data-clipboard-cangjie="["root",{"copyFrom":673757249},["p",{},["span",{"data-type":"text"},["span",{"data-type":"leaf"},"4、回调函数中解释出时间并调置RTC时间:"]]]]">
<p>4、回调函数中解释出时间并调置RTC时间:</p>
<pre>
<code>void w800_data_receive_callback(int linkid, void *data, size_t len, char remote_ip, 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')*1000 + (int)(buf-'0')*100 + (int)(buf-'0')*10 + (int)(buf-'0'))-1900;
base_time.tm_mon = ((int)(buf-'0')*10 + (int)(buf-'0'))-1;
base_time.tm_mday = (int)(buf-'0')*10 +(int)(buf-'0');
base_time.tm_hour = (int)(buf-'0')*10 + (int)(buf-'0');
base_time.tm_min = (int)(buf-'0')*10 + (int)(buf-'0');
base_time.tm_sec = (int)(buf-'0')*10 + (int)(buf-'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!");
}
}</code></pre>
<article data-clipboard-cangjie="["root",{"copyFrom":673757249},["p",{},["span",{"data-type":"text"},["span",{"data-type":"leaf"},"5、在显示任务中增加显示功能:"]]]]">
<p>5、在显示任务中增加显示功能:</p>
<pre>
<code>void test_getIP_task()
{
char ssid;
int bssid;
int channel;
int rssi;
char disp;
//先获取AP信息,判断是否联网
//偿试连接到服务器
//发送数据
char ip;
char gw;
char mask;
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);
}
}</code></pre>
<p>效果:</p>
<p><iframe allowfullscreen="true" frameborder="0" height="510" src="https://training.eeworld.com.cn/shareOpenCourseAPI?isauto=true&lessonid=33111" style="background:#eee;margin-bottom:10px;" width="700"></iframe><br />
【感想】这块板的学习真的是吃力,慢慢的增加功能中,期待早点完成!加油!!!</p>
</article>
</article>
</article>
</article>
<p>同步服务器时间看视频效果不是还可以吧</p>
Jacktang 发表于 2022-4-11 20:54
同步服务器时间看视频效果不是还可以吧
<p>谢谢观看,虽然比不上NTP授时精确,但是成功了。这块板子很多配套的程序还有BUG。能解决问题就行吧,下面要攻http...</p>
<p> </p>
lugl4313820 发表于 2022-4-11 22:57
谢谢观看,虽然比不上NTP授时精确,但是成功了。这块板子很多配套的程序还有BUG。能解决问题就行吧,下面 ...
<p>加油加油:)</p>
soso 发表于 2022-4-12 11:52
加油加油:)
<p>现在的问题是串口资源不够用呀,我原来设计需要两个串口,现在日志一个串口,SPI1把串口2点了,无资源可用,看能不能搞定虚拟串口。能不能帮助向前面那位网友分享一下他的结果,我就少走点弯路了。<a href="https://bbs.eeworld.com.cn/thread-1196608-1-1.html">【新提醒】RISC-V RVB2601 初体验--第3节--IO模拟串口完成 - 平头哥RISC-V RVB2601活动专区 - 电子工程世界-论坛 (eeworld.com.cn)</a></p>
lugl4313820 发表于 2022-4-12 11:57
现在的问题是串口资源不够用呀,我原来设计需要两个串口,现在日志一个串口,SPI1把串口2点了,无资源可 ...
<p>我让我们同事跟进下:)</p>
soso 发表于 2022-4-12 12:03
我让我们同事跟进下:)
<p>非常感谢,我那边也向平头哥提交了工单,这板整得我没脾气呀。</p>
lugl4313820 发表于 2022-4-12 12:22
非常感谢,我那边也向平头哥提交了工单,这板整得我没脾气呀。
<p>多多沟通,多多交流 :)</p>
页:
[1]