021_STM32程序移植之_ESP8266连接onenet

发布者:幸福之舞最新更新时间:2024-08-16 来源: cnblogs关键字:STM32  程序移植  ESP8266 手机看文章 扫描二维码
随时随地手机看文章

本次教程是使用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 }


关键字:STM32  程序移植  ESP8266 引用地址:021_STM32程序移植之_ESP8266连接onenet

上一篇:022_STM32中断优先级分组解析
下一篇:018_STM32程序移植之_串口接收中文

推荐阅读最新更新时间:2024-11-08 11:29

基于VSCode搭建STM32开发环境
众所周知, Keil 是一款收费软件,虽然可以Po解使用,但很多 公司 还是有点害怕,想必有不少读者都收到过**函。 之前,开发 单片机 项目,可以说 Keil 是最佳选择之一,但VSCode横空问世之后,这种格局被打破。 因为 VSCode 免费且好用,可以安装各种插件,很多 工程师 逐渐从Keil 转向了 VSCode。而且,VSCode还能实现 Keil 不能实现的一些功能。 下面就给大家分享一下 VSCode 搭建 STM32 开发环境的一些常规且使用的功能。 一、需要的软件和工具 下载 最新版 VS Code: 安装好插件,具有良好的代码补全与调试功能。 下载 LLVM:用于代码补全,其实可以理解
[单片机]
基于VSCode搭建<font color='red'>STM32</font>开发环境
STM32 芯片 IWDG 关闭 停用 方法
百度搜索真心是开发者的敌人,开发工作很多时候也是浪费青春和生命的工作,你费大把时间,解决的无非是写鸡毛蒜皮无关痛痒的问题,百度上还找不到这样的小问题的答案。 stm32 芯片 IWDG 怎么停用 我再一个项目上开启了IWDG,后来意外的把代码刷到了另一个产品上,产品就打开了IWDG 因为我需要进行调试,所以得先关掉,但是IWDG 断电都保存,就这小问题费了2 3 个小时, 百度给出的结论是,不能关闭,只能复位/重启??????(所以什么叫重启,怎么样重启?) 上google一搜索,发现 使用这个 可以在调试模式下关闭 IWDG,实际也是把WDG_SW设置为了1 __HAL_DBGMCU_FREEZE_IWD
[单片机]
<font color='red'>STM32</font> 芯片 IWDG 关闭 停用 方法
stm32之i2C硬件驱动ht16c22
使用硬件i2c,驱动ht16c22,程序不稳定是肯定的,还是贴出来吧,项目中最好不要用。 文件i2c.h内容: #ifndef _STM32F103_I2C_H_ #define _STM32F103_I2C_H_ #include stm32f10x.h #define SlaveAddress 0x7e //0x7e //#define ModeSet 0b10001100 //80Hz,turn on sys and LCD bias,1/3 bias #define ModeSet 0x8C //80Hz,turn on sys and LCD bias,1/3 bias //#define VlcdAdjus
[单片机]
STM32 NVIC嵌套向量中断控制器函数分析
中断管理函数 CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。但STM32并没有使用CM3内核的全部东西,而是只用了它的一部分。STM32有76个中断,包括16个内核中断和60个可屏蔽中断,具有16级可编程的中断优先级。而我们常用的就是这60个可屏蔽中断,所以我们就只针对这60个可屏蔽中断进行介绍。 在MDK内,与NVIC相关的寄存器,MDK为其定义了如下的结构体: typedef struct { vu32 ISER ; u32 RESERVED0 ; vu32 ICER ; u32 RSERVED1 ; vu32 ISPR ; u32 RESERVE
[单片机]
<font color='red'>STM32</font> NVIC嵌套向量中断控制器函数分析
STM32外部中断(EXTI)分析和应用
本篇博文基于STM32F103ZET6芯片,与大多数STM32F10x芯片兼容; 代码基于ST官网提供的3.5.0标准库 如有不足之处,还望前辈多多指教; 一些需要了解的基础知识 STM32每个GPIO口都可以作为外部中断输入口使用 每个中断都设有状态位 每个中断/事件都有独立的触发和屏蔽设置。 STM32103有19个外部中断(但是供GPIO口使用的中断只有16个) 分别是: 0~15:对应外部中断IO的输入中断 16 : 连接到PVD输出 17 :连接到RTC闹钟时间 18 :连接到USB唤醒事件 这里会容易出现一个问题说:STM32F103ZET6的GPIO管脚一共有6*16即96个GPIO管脚,如何对应只有0~15
[单片机]
<font color='red'>STM32</font>外部中断(EXTI)分析和应用
STM32串口通信:修改标准库的printf通过USART打印
USART1需要事先进行较为麻烦配置,配置之后发现即使用HAL函数发送语句还要事先以字符串方式定义,实在是麻烦,虽然后面另外自己写了一个简单的库来操作串口,但看到了更简单的方法,修改标准库中printf相关的两个函数,达到通过printf来串口输出的效果。 (在配置完要使用的串口后) 先在main.c中加上 #include stdio.h 然后重定向两个函数,这里指定的是USART1接口,PA9和PA10,其他USART或者UART自行修改即可 int fputc(int ch, FILE *f) { USART1- DR=(uint8_t)ch; while((USART1- SR&0X40)==0); return ch
[单片机]
STM32学习记录9:STM32F10X_XX宏定义的选择
如果你使用stm32f10x_stdperiph_lib,会发现在stm32f10x.h文件会有一段关于宏选择的代码,如: view plain copy #if !defined (STM32F10X_LD) && !defined (STM32F10X_MD) && !defined (STM32F10X_HD) && !defined (STM32F10X_CL) /* #define STM32F10X_LD */ /*! STM32F10X_LD: STM32 Low density devices */ /* #define STM32F10X_MD */ /*! STM32F10
[单片机]
<font color='red'>STM32</font>学习记录9:STM32F10X_XX宏定义的选择
stm32和同类单片机用ADC采集多通道信号量
在此之前,使用stm32的ADC采集信号,使用到的通道就只有一个,用的时候也是别人写好的代码,没去研究,然而最近用GD32F350单片机作一个电源板时,要采集6个通道的信号,所以就仔细看了手册,有规则通道和注入通道两个概念,按概念,规则通道是按顺序采集,注入通道可以最多设备四个,有独立的保存采集数据的寄存器。如果超过4个就不能没每个每个通道对应一个数据寄存器;如果是规则通道,当通道数大于一时是可以先设置采集通道再读数据,但是我想要的是像手册上说大的一次就把6个通道的数据采集出来,但是规则通道只有一个数据寄存器,如何知道每一次采集的数据是对应哪一个通道呢?最后问了一个做电源有经验的人,他说使用DMA,设置数据长度为6个,然后每个通道
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved