021_STM32程序移植之_ESP8266连接onenet

发布时间: 2024-08-16
来源: 电子工程世界

本次教程是使用STM32C8T6通过ESP8266-12F模块将数据传输到ONENET云端去,并且云端能够下发命令给单片机来实现云端控制。本次实验硬件设备:STM32C8T6最小系统,ESP8266-12F模块,wifi。下面是简单的设备传输结构图:

 

 

 

/********************************神奇的分割线********************************/

视频演示教程:https://v.qq.com/x/page/i0814q78no3.html

资料下载地址:https://download.csdn.net/download/xiaoguoge11/10858840

欢迎关注公众号:luxiaoguogege

/********************************神奇的分割线********************************/

 

/********************************神奇的分割线********************************/

   实验中只是将定义的数据进行上传,具体的可以自己添加外部数据采集模块来实现数据的上传及控制。本次实验中查看到的资料网址:

OneNET -中国移动物联网开放平台:https://open.iot.10086.cn/

基于WIFI方式连接OneNET(ESP8266):https://open.iot.10086.cn/doc/art441.html#109

麒麟开发板代码、资料:https://open.iot.10086.cn/bbs/thread-863-1-1.html

机智云开发板使用方法:https://pan.baidu.com/s/1AQIpM4mJ5EimHEYCDM9McQ

/********************************神奇的分割线********************************/

 

/********************************神奇的分割线********************************/

关于解决连接久了之后设备断开连接玄学BUG问题,这位大佬解决了


基于STM32和ESP8266的LED灯状态上传与命令下发(附源码) 

https://open.iot.10086.cn/bbs/forum.php?mod=viewthread&tid=23845&extra=page%3D1%26filter%3Dtypeid%26typeid%3D13

 

额,这个是程序上传之后第二天发现的问题,所以我程序是有BUG的,具体的额解决方法可以参考上面连接大佬的分析,

因为时间是什么时候断的,具体为什么断这个因素太不明确了,懒得再分析浪费时间,所以提出简单粗暴的方法:

 

1. 每隔几分钟重新调用一次与云端连接函数,假如连接失败程序就会卡死在那里,那么我们就再重新初始化ESP8266再进行重连

在程序的main.c程序中替换成这个,也就是增加重连函数,这个只是暂时解决方法测试一早上esp8266重新初始化了30次左右,

但是还是能保证掉线自动连接,具体为什么断现在原因还不太明确,等以后有时间再慢慢分析

main.c程序


 1 #include 'public.h'

 2 

 3 int main()

 4 {

 5     int timeCount = 0;    //发送间隔变量

 6     int esp8266_rest = 0;     

 7     int connect_time = 0;   /*连接时间*/

 8     delay_init();

 9     Usart1_Init(115200);                            //串口1,打印信息用

10     Usart2_Init(115200);                            //串口2,驱动ESP8266用

11     UsartPrintf(USART_DEBUG, ' Hardware init OKrn');

12     

13     ESP8266_Init();                    //初始化ESP8266

14         

15     while(OneNet_DevLink())    //接入OneNET

16         delay_ms(500);

17 

18    send_data.Data1 = 1;

19    send_data.Data2 = 1;

20   while(1)

21     {

22         if(++timeCount >= 500)                                    //发送间隔5s

23         {

24             printf('向onenet平台发送数据:rn');

25             OneNet_SendData();                                    //发送数据

26             

27             timeCount = 0;

28             ESP8266_Clear();

29         }    

30         esp8266_rec();        /*主程序中调用来进行接收,数据处理不用这个,这个只是调用*/

31         

32         if(connect_time++ >= 2000)                                    //间隔20s就重新连接一次

33         {

34               printf('重新连接平台rn');

35                 connect_time = 0;

36                 while(OneNet_DevLink())    //接入OneNET

37                 {

38                     esp8266_rest++;

39                 delay_ms(500);    

40                     if(esp8266_rest == 10)

41                     {

42                         send_data.Data1 += 1;

43                         printf('重新连接平台第 %d 次',send_data.Data1);

44                         esp8266_rest = 0;

45                         ESP8266_Init();                    //初始化ESP8266

46                     }

47                 }

48 

49         }                    

50         

51         delay_ms(10);

52     }

53 }


文章来源于: 电子工程世界 原文链接

本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。