lugl4313820 发表于 2022-4-11 18:05

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

<article data-clipboard-cangjie="[&quot;root&quot;,{&quot;copyFrom&quot;:673757249},[&quot;p&quot;,{},[&quot;span&quot;,{&quot;data-type&quot;:&quot;text&quot;},[&quot;span&quot;,{&quot;data-type&quot;:&quot;leaf&quot;},&quot;【前言】 RVB2601在与自己的服务器建立连接上,同步服务器时间,初始化RTC时间。由于现有的NTP组件存在问题,几经周折后还没有弄好,只好与自己的服务同步时间。&quot;]]],[&quot;p&quot;,{},[&quot;span&quot;,{&quot;data-type&quot;:&quot;text&quot;},[&quot;span&quot;,{&quot;data-type&quot;:&quot;leaf&quot;},&quot;【步骤】&quot;]]],[&quot;p&quot;,{},[&quot;span&quot;,{&quot;data-type&quot;:&quot;text&quot;},[&quot;span&quot;,{&quot;data-type&quot;:&quot;leaf&quot;},&quot;1、在原来建立TCP连接的基础上,方法见:&quot;]],[&quot;a&quot;,{&quot;href&quot;:&quot;https://occ.t-head.cn/community/post/detail?id=4031208131199119360&quot;},[&quot;span&quot;,{&quot;data-type&quot;:&quot;text&quot;},[&quot;span&quot;,{&quot;data-type&quot;:&quot;leaf&quot;},&quot;博文-【平头哥RVB2601创意应用开发】搭建TCPSERVE通信 &quot;]]],[&quot;span&quot;,{&quot;data-type&quot;:&quot;text&quot;},[&quot;span&quot;,{&quot;data-type&quot;:&quot;leaf&quot;},&quot;。&quot;]]],[&quot;p&quot;,{},[&quot;span&quot;,{&quot;data-type&quot;:&quot;text&quot;},[&quot;span&quot;,{&quot;data-type&quot;:&quot;leaf&quot;},&quot;2、服务器在第一次连接时返回时间:&quot;]]]]">
<p>【前言】&nbsp;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">&nbsp;</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="[&quot;root&quot;,{&quot;copyFrom&quot;:673757249},[&quot;p&quot;,{},[&quot;span&quot;,{&quot;data-type&quot;:&quot;text&quot;},[&quot;span&quot;,{&quot;data-type&quot;:&quot;leaf&quot;},&quot;在init.c中注册接收回调函数:&quot;]]]]">
<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 &amp; 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, &amp;w800_param);
                //register input event callback for w800 module
//                w800_packet_input_cb_register(&amp;w800_in);
                //start uservice
                w800_packet_input_cb_register(&amp;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="[&quot;root&quot;,{&quot;copyFrom&quot;:673757249},[&quot;p&quot;,{},[&quot;span&quot;,{&quot;data-type&quot;:&quot;text&quot;},[&quot;span&quot;,{&quot;data-type&quot;:&quot;leaf&quot;},&quot;4、回调函数中解释出时间并调置RTC时间:&quot;]]]]">
<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(&amp;g_rtc, 0);
        ret = csi_rtc_set_time(&amp;g_rtc, &amp;base_time);
        if(ret == 0)
        {
                LOGD(TAG,"set time OK!");
        }
        else{
                LOGD(TAG,"set time ERROR!");
        }

}</code></pre>

<article data-clipboard-cangjie="[&quot;root&quot;,{&quot;copyFrom&quot;:673757249},[&quot;p&quot;,{},[&quot;span&quot;,{&quot;data-type&quot;:&quot;text&quot;},[&quot;span&quot;,{&quot;data-type&quot;:&quot;leaf&quot;},&quot;5、在显示任务中增加显示功能:&quot;]]]]">
<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(&amp;u8g2);
                        u8g2_SetFont(&amp;u8g2,u8g2_font_u8glib_4_tr);
                        u8g2_DrawStr(&amp;u8g2,5,8,ip);//显示IP地址
                }
                ipinfo = w800_ap_info(ssid, bssid, &amp;channel, &amp;rssi);
                if(ipinfo == 0)
                {
                        sprintf(disp,"RSSI:%d",rssi);
                        u8g2_DrawStr(&amp;u8g2,80,8,disp);
                       
                }
                u8g2_SetFont(&amp;u8g2,u8g2_font_7x13_tr);
                //获取时间
                ret = csi_rtc_get_time(&amp;g_rtc, &amp;this_time);
               
                sprintf(disp,"%04d-%02d-%02d",this_time.tm_year+1900,this_time.tm_mon+1,this_time.tm_mday);
                u8g2_DrawStr(&amp;u8g2,15,24,disp);
                sprintf(disp,"%02d:%02d:%02d",this_time.tm_hour,this_time.tm_min,this_time.tm_sec);
                u8g2_DrawStr(&amp;u8g2,20,40,disp);
                u8g2_SendBuffer(&amp;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&amp;lessonid=33111" style="background:#eee;margin-bottom:10px;" width="700"></iframe><br />
【感想】这块板的学习真的是吃力,慢慢的增加功能中,期待早点完成!加油!!!</p>
</article>
</article>
</article>
</article>

Jacktang 发表于 2022-4-11 20:54

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

lugl4313820 发表于 2022-4-11 22:57

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

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

<p>&nbsp;</p>

soso 发表于 2022-4-12 11:52

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

<p>加油加油:)</p>

lugl4313820 发表于 2022-4-12 11:57

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>

soso 发表于 2022-4-12 12:03

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

<p>我让我们同事跟进下:)</p>

lugl4313820 发表于 2022-4-12 12:22

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

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

soso 发表于 2022-4-12 13:47

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

<p>多多沟通,多多交流 :)</p>
页: [1]
查看完整版本: 【平头哥RVB2601创意应用开发】自己动手解决NTP,显示电子时钟。