当前位置:   article > 正文

基于stm32的eps8266网络时间的获取_esp8266 获取网络日期

esp8266 获取网络日期

一、硬件及软件准备

STM32F103ZE开发板,eps8266, st-link驱动 ,串口连接助手,keil5

二、如何获取网络时间

在已经连接到电脑wifi后(在后文),就可以网络时间进行获取。

理解时间数据应该是从uart串口中获得的,

  1. void upload_data(void)
  2. {
  3. uint8_t *buf;
  4. /* 接收来自ATK-MW8266D UART的一帧数据 */
  5. buf = atk_mw8266d_uart_rx_get_frame();
  6. if (buf != NULL)
  7. {
  8. printf("%s", buf);
  9. strcpy(dataBuff,(const char*)buf);
  10. /* 重开开始接收来自ATK-MW8266D UART的数据 */
  11. atk_mw8266d_uart_rx_restart();
  12. }
  13. }
  14. /**
  15. * @brief 我的ATK-MW8266D发送AT指令
  16. * @param cmd : 待发送的AT指令
  17. * ack : 等待的响应
  18. * timeout: 等待超时时间
  19. * @retval ATK_MW8266D_EOK : 函数执行成功
  20. * ATK_MW8266D_ETIMEOUT: 等待期望应答超时,函数执行失败
  21. */
  22. void mycmd(char *cmd, char *ack, uint32_t timeout)
  23. {
  24. uint8_t *ret = NULL;
  25. atk_mw8266d_uart_rx_restart();
  26. atk_mw8266d_uart_printf("%s\r\n", cmd);
  27. if ((ack == NULL) || (timeout == 0))
  28. {
  29. //return ATK_MW8266D_EOK;
  30. }
  31. else
  32. {
  33. while (1)
  34. {
  35. ret = atk_mw8266d_uart_rx_get_frame();
  36. if (ret != NULL)
  37. {
  38. printf("%s",ret);
  39. if (strstr((const char *)ret, ack) != NULL)
  40. {
  41. //printf("%s",strstr((const char *)ret, ack));
  42. while(1){}
  43. //return ATK_MW8266D_EOK;
  44. }
  45. else
  46. {
  47. atk_mw8266d_uart_rx_restart();
  48. }
  49. }
  50. timeout--;
  51. delay_ms(1);
  52. }
  53. //return ATK_MW8266D_ETIMEOUT;
  54. }
  55. }
  56. /**
  57. * @brief 计算时间
  58. * @param 无
  59. * @retval 无
  60. */
  61. void computeTime(char* date)
  62. {
  63. int hour_offset=23;
  64. int min_offset=26;
  65. hour=(*(date+hour_offset)-'0')*10+(*(date+hour_offset+1)-'0');
  66. min=(*(date+min_offset)-'0')*10+(*(date+min_offset+1)-'0');
  67. hour+=8;
  68. if(hour>=24)
  69. {
  70. hour-=24;
  71. }
  72. }
  73. /**
  74. * @brief 时间字符串
  75. * @param 无
  76. * @retval 无
  77. */
  78. void Time(void)
  79. {
  80. time[0]=hour/10+'0';
  81. time[1]=hour%10+'0';
  82. time[3]=min/10+'0';
  83. time[4]=min%10+'0';
  84. }
  85. /**
  86. * @brief 刷新时间
  87. * @param 无
  88. * @retval 无
  89. */
  90. void showTime(void)
  91. {
  92. Time();
  93. lcd_show_string(100, 275, 220, 16, 16, time, BLUE);
  94. printf("time:%s",time);
  95. }
  96. /**
  97. * @brief 获取时间
  98. * @param 无
  99. * @retval 无
  100. */
  101. void getTime(void)
  102. {
  103. uint8_t *ret = NULL;
  104. char *strr=NULL;
  105. char cmd[]="1";
  106. char ack[]="Date";
  107. atk_mw8266d_uart_rx_restart();
  108. atk_mw8266d_uart_printf("%s\r\n", cmd);
  109. delay_ms(100);
  110. while (ret == NULL)
  111. {
  112. ret = atk_mw8266d_uart_rx_get_frame();
  113. if (ret != NULL)
  114. {
  115. //printf("%s",ret);
  116. strr=strstr((const char *)ret, ack) ;
  117. if (strr != NULL)
  118. {
  119. computeTime(strr);
  120. showTime();
  121. /*Time();
  122. lcd_show_string(100, 275, 220, 16, 16, time, BLUE);
  123. printf("time:%s",time); */
  124. //printf("%s",strstr((const char *)ret, ack));
  125. //while(1){}
  126. //return ATK_MW8266D_EOK;
  127. }
  128. else
  129. {
  130. atk_mw8266d_uart_rx_restart();
  131. }
  132. }
  133. delay_ms(1);
  134. }
  135. /*
  136. printf("%s",ret);
  137. if(ret!=NULL)
  138. {
  139. strr=strstr((const char *)ret, ack) ;
  140. if (strr != NULL)
  141. {
  142. computeTime(strr);
  143. lcd_show_string(10, 155, 220, 32, 32, time, RED);
  144. printf("time:%s",time);
  145. //printf("%s",strstr((const char *)ret, ack));
  146. //while(1){}
  147. //return ATK_MW8266D_EOK;
  148. }
  149. else
  150. {
  151. atk_mw8266d_uart_rx_restart();
  152. }
  153. }*/
  154. }

初始化内容 

  1. #include "./BSP/ATK_MW8266D/atk_mw8266d.h"
  2. #include "./SYSTEM/delay/delay.h"
  3. #include <string.h>
  4. #include <stdio.h>
  5. /*8266初始化*/
  6. static void atk_mw8266d_hw_init(void)
  7. {
  8. GPIO_InitTypeDef gpio_init_struct;
  9. ATK_MW8266D_RST_GPIO_CLK_ENABLE();
  10. gpio_init_struct.Pin = ATK_MW8266D_RST_GPIO_PIN;
  11. gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP;
  12. gpio_init_struct.Pull = GPIO_NOPULL;
  13. gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
  14. HAL_GPIO_Init(ATK_MW8266D_RST_GPIO_PORT, &gpio_init_struct);
  15. }
  16. /**
  17. * @brief ATK-MW8266D复位
  18. * @param ÎÞ
  19. * @retval ÎÞ
  20. */
  21. void atk_mw8266d_hw_reset(void)
  22. {
  23. ATK_MW8266D_RST(0);
  24. delay_ms(100);
  25. ATK_MW8266D_RST(1);
  26. delay_ms(500);
  27. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/553520
推荐阅读
相关标签
  

闽ICP备14008679号