MCU请求网络时间例程
本帖最后由 bigfanofloT 于 2016-11-22 19:55 编辑本期为大家带来MCU请求网络时间的方法,前期例程http://club.gizwits.com/thread-4032-1-1.html是手机APP远程控制STM32底板Gokit2的4个LED,我们在此基础上添加同步网络时间方法。云端数据点:
在开发向导下载串口通信协议,找到4.13,MCU请求获取网络时间:
可以看出MCU发出的命令码是0x17,WIFI模组回复的命令码是0x18.
下面开始增加同步网络时间方法:
step1:在gizwits_protocol.h的PROTOCOL_CMDTYPE结构体添加2个命令码:
step2:在gizwits_protocol.c文件里编写一个获取网络时间的API,即发送命令码0x17;
step3:在gizwits_protocol.h文件**一下定义的获取网络时间API,另外**一个结构体用来保存时间:年、月、日、时、分、秒;
step4:在gizwits_protocol.c里面的int32_t gizwitsHandle(dataPoint_t *currentData)函数里面添加以下代码,即WIFI模组返回时间后,就读取时间;在函数体外面定义一下用来保存时间的结构体mytime;
step5:最后在main.c的userhandle里面添加打印日期的代码,这里1s打印一次便于观察;
最后烧录好用串口调试助手看是酱紫的:
http://player.youku.com/player.php/sid/XMTgzMDU5MzExNg==/v.swf
这里只是演示了MCU获取时间的方法,在上电未连接服务器时获取的时间是有误的,具体需要根据实际修改,比如判断连接服务器后才获取时间。
附件:
1.完整keil工程源码:
**** Hidden Message *****
2.本例程的串口通信协议文档:
3.测试手机APP:
本帖最后由 kentleo 于 2016-11-26 13:46 编辑
按教程《3分钟教你使用STM32CubeMX配置工程并移植机智云生成的协议》以及本文指导移植,数据点配置了三个led开关。当不操作app的led开关时,时间获取正常。但一旦操作app控制led亮灭,时间信息就卡死在WiFi2mcu这个节点上,之后不断输出的就是卡死当时的时间内容。
请教可能发生这个问题的原因。(没有使用os)
以下内容是log输出的内容。
其中flag是判断是否连接网络成功的标志。
Get One Packet!
WiFi2MCU: ff ff 00 10 18 2e 00 00 07 e0 0b 1a 0d 12 25 58 39 1b 2d 7f
MCU2WiFi: ff ff 00 05 17 2f 00 00 4b
**当前时间为2016 年 11 月 26 日13 时 18 分 37 秒**
flag
Get One Packet!
WiFi2MCU: ff ff 00 10 18 2f 00 00 07 e0 0b 1a 0d 12 26 58 39 1b 2e 82
MCU2WiFi: ff ff 00 05 17 30 00 00 4c
**当前时间为2016 年11 月 26 日13 时 18 分38 秒**
flag
Get One Packet!
WiFi2MCU: ff ff 00 10 18 30 00 00 07 e0 0b 1a 0d 12 27 58 39 1b 2f 85
MCU2WiFi: ff ff 00 05 17 31 00 00 4d
**当前时间为2016 年11 月 26 日13 时 18 分 39 秒**
flag
Get One Packet!
WiFi2MCU: ff ff 00 10 18 31 00 00 07 e0 0b 1a 0d 12 28 58 39 1b 30 88
MCU2WiFi: ff ff 00 05 17 32 00 00 4e
**当前时间为2016 年11 月 26 日13 时 18 分 40 秒**
flag
Get One Packet!
WiFi2MCU: ff ff 00 08 03 0a 00 00 01 02 00 18
MCU2WiFi: ff ff 00 05 04 0a 00 00 13
Evt: EVENT_CH2RELATER 0
valueCH2Relater Changed
changed, report data
MCU2WiFi: ff ff 00 10 05 33 00 00 04 00 00 00 00 00 00 00 00 00 00 4c
MCU2WiFi: ff ff 00 05 17 34 00 00 50
**当前时间为2016 年 11 月 26 日13 时 18 分 40 秒**
flag
MCU2WiFi: ff ff 00 05 17 35 00 00 51
**当前时间为2016 年11 月 26 日13 时 18 分 40 秒**
flag
MCU2WiFi: ff ff 00 05 17 36 00 00 52
**当前时间为2016 年 11 月 26 日13 时 18 分 40 秒**
楼主!从论坛下载最新版的微信宠物屋工程文件(.HEX除外)是不是相当于一个空壳子来的?也就是说用户如果要想控制LED0到LED4、电机正反转、彩色灯、温湿度等,还要用户自己修改代码,是不是这样理解的?因为我烧写宠物屋文件夹里面自带的hex文件给gokit可以用手机控制。但是如果我用keil5软件打开“gokit_mcu_stm32”工程,然后编译生成新的hex,然后把这个新的hex烧写进去后,发现手机可以发现设备,但是手机无法连接上设备。。。什么问题 et One Packet!
****my time is:2017:8:15:17:44:53******
Get One Packet!
****my time is:2017:8:15:17:44:53******
Get One Packet!
****my time is:2017:8:15:17:44:53******
Get One Packet!
****my time is:2017:8:15:17:44:53******
Get One Packet!
****my time is:2017:8:15:17:44:53******
Get One Packet!
****my time is:2017:8:15:17:44:53******
Get One Packet!
为什么我的时间一直不变化啊! 占沙发,,,马上试一下 学习学习,感谢大神的案例。 学习一下 我的课题正好需要这个MCU求网络时间..... 好详细的教程 领教了 谢谢 正想搞网络时间 本帖最后由 kentleo 于 2016-11-25 16:41 编辑
stm32 cubemx freertos工程,三个任务。1、gizwitsHandle;2、获取传感器数据,并放入datapoint;3、楼主获取时间任务。
目前问题是,任务执行数秒到数十秒后,获取数据失败,时钟停止更新,远端app控制同时失败。
在uartWrite函数中加入信号量保护,依然无解。
请教解决思路。多谢
另外,在没有加入时间获取功能前,系统也出现运行一段时间后远端数据无法传入WiFi模块。
很奇怪。
kentleo 发表于 2016-11-25 16:40
stm32 cubemx freertos工程,三个任务。1、gizwitsHandle;2、获取传感器数据,并放入datapoint;3、楼主获 ...
不熟悉OS的话,就不要用 高手高手,高高手 kentleo 发表于 2016-11-26 12:58
按教程《3分钟教你使用STM32CubeMX配置工程并移植机智云生成的协议》以及本文指导移植,数据点配置了三个le ...
HAL库UART发送数据函数有超时,把那个改大点试试,另外别用中文 bigfanofloT 发表于 2016-11-26 13:54
HAL库UART发送数据函数有超时,把那个改大点试试,另外别用中文
感谢楼主的提醒。问题就是出现在串口收发的问题上。目前问题已解决。多谢。 好东西0000000000000000000000 学习学习,感谢大神的案例。:lol 赞赞赞~又一学习案例~ 正想要的 学习了。 好详细的教程 领教了 顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶