资讯专栏INFORMATION COLUMN

stm32f373利用esp8266连接onenet平台

sorra / 1364人阅读

摘要:添加设备名和鉴权信息。记录如下数据二引脚连接和接电源接地和连接至配置的串口三代码编写串口配置单片机需配置两个串口,串口打印至串口助手,显示连接状态。串口用来发送信息至串口配置代码如下系列配置和系列配置不同点在于口上拉和推挽配置略有不同。

学习目标:

1.注册onenet平台
2.esp8266引脚连接
3.stm32373代码移植编写

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、注册onenet平台

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

注册进入onenet平台
点击右上方控制台
再点击进入多协议接入,进入产品创建界面。
//链接: link.

点击进入添加产品

创建按心情填写,但接入协议选MQTT(旧版)!!!

接着在产品下创建设备。
进入产品后,左上方点击设备列表之后,开始添加设备。
添加设备名和鉴权信息。
记录如下数据

二、esp8266引脚连接

3v3和EN接电源3.3V
GND接地
RX和TX连接至stm32373配置的串口

三、代码编写

1.串口配置

单片机需配置两个串口,串口1打印至串口助手,显示连接状态。串口2用来发送信息至esp8266.

串口1配置代码如下:
373系列配置和103系列配置不同点在于I/O口上拉和推挽配置略有不同。

</>复制代码

  1. //USART1_TX GPIOA.9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  2. //复用推挽输出
  3. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽
  4. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9 //USART1_RX
  5. GPIOA.10初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10 // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//浮空输入 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10

串口1打印代码如下:

</>复制代码

  1. void UsartPrintf(USART_TypeDef *USARTx, char *fmt,...) //串口打印,相当于printf{
  2. unsigned char UsartPrintfBuf[296];
  3. va_list ap;
  4. unsigned char *pStr = UsartPrintfBuf;
  5. va_start(ap, fmt);
  6. vsnprintf((char *)UsartPrintfBuf, sizeof(UsartPrintfBuf), fmt, ap);
  7. //格式化
  8. va_end(ap);
  9. while(*pStr != 0)
  10. {
  11. USART_SendData(USARTx, *pStr++);
  12. while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET);
  13. }}

串口2配置代码如下:

</>复制代码

  1. //USART3_TX PD8 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //PD8 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  2. //复用推挽输出
  3. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  4. GPIO_Init(GPIOD, &GPIO_InitStructure); //初始化PD8 //USART3_RX
  5. PB9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//浮空输入 GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PB9

串口2发送代码如下:

</>复制代码

  1. _Bool ESP8266_SendCmd(char *cmd, char *res){
  2. unsigned char timeOut = 200;
  3. Usart_SendString(USART3, (unsigned char *)cmd, strlen((const char *)cmd));
  4. while(timeOut--)
  5. {
  6. if(ESP8266_WaitRecive() == REV_OK)
  7. //如果收到数据
  8. {
  9. if(strstr((const char *)esp8266_buf, res) != NULL)
  10. //如果检索到关键词
  11. {
  12. ESP8266_Clear();
  13. //清空缓存
  14. return 0;
  15. }
  16. }
  17. delay_ms(10);
  18. }
  19. return 1;}

2.代码移植

从onenet官方网站上下载物联网程序,
移植出
esp8266.c
onenet.c
MqttKit.c文件

更改esp8266.c中的串口发送函数
代码如下:

</>复制代码

  1. void ESP8266_Init(void){
  2. ESP8266_Clear();
  3. UsartPrintf(USART1, "0. AT/r/n");
  4. while(ESP8266_SendCmd("AT/r/n", "OK"))
  5. delay_ms(500);
  6. UsartPrintf(USART1, "1. RST/r/n");
  7. ESP8266_SendCmd("AT+RST/r/n", "");
  8. delay_ms(500);
  9. ESP8266_SendCmd("AT+CIPCLOSE/r/n", "");
  10. delay_ms(500);
  11. UsartPrintf(USART1, "2. CWMODE/r/n");
  12. while(ESP8266_SendCmd("AT+CWMODE=1/r/n", "OK"))
  13. delay_ms(500);
  14. UsartPrintf(USART1, "3. AT+CWDHCP/r/n");
  15. while(ESP8266_SendCmd("AT+CWDHCP=1,1/r/n", "OK"))
  16. delay_ms(500);
  17. UsartPrintf(USART1, "4. CWJAP/r/n");
  18. while(ESP8266_SendCmd(ESP8266_WIFI_INFO, "GOT IP"))
  19. delay_ms(500);
  20. UsartPrintf(USART1, "5. CIPSTART/r/n");
  21. while(ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT"))
  22. delay_ms(500);
  23. UsartPrintf(USART1, "6. ESP8266 Init OK/r/n");}

更改esp8266.c中的wifi账号密码、ip、端口号
代码如下:

</>复制代码

  1. #define ESP8266_WIFI_INFO
  2. "AT+CWJAP=/"wifi名/",/"密码/"/r/n"#define ESP8266_ONENET_INFO
  3. "AT+CIPSTART=/"TCP/",/"183.230.40.39/",6002/r/n"

更改onenet.c中的产品ID 、鉴权信息、设备ID

代码如下:

</>复制代码

  1. #define PROID
  2. "77247"#define AUTH_INFO
  3. "test"#define DEVID
  4. "5616839"

3.主函数编写

代码如下:

</>复制代码

  1. int main(void){
  2. const char *devSubTopic[] = {"/mysmarthome/sub"};
  3. const char devPubTopic[]="/mysmarthome/pub";
  4. unsigned short timeCount = 0;
  5. //发送间隔变量
  6. unsigned char *dataPtr = NULL;
  7. delay_init();
  8. //延时函数初始化
  9. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  10. //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  11. uart_init(115200);
  12. //串口初始化为115200
  13. UsartPrintf(USART1,"/n/rbegin /n/r");
  14. usart3_init(115200);
  15. //串口初始化为115200
  16. ESP8266_Init();
  17. while(OneNet_DevLink())
  18. //接入OneNET
  19. delay_ms(500);
  20. while (1) {
  21. if(++timeCount >= 500)
  22. //发送间隔5s
  23. {
  24. UsartPrintf(USART1, "OneNet_Publish/r/n");
  25. OneNet_Publish(devPubTopic, "MQTT Publish Test");
  26. timeCount = 0;
  27. ESP8266_Clear();
  28. }
  29. dataPtr = ESP8266_GetIPD(3);
  30. if(dataPtr != NULL)
  31. OneNet_RevPro(dataPtr);
  32. delay_ms(10); }}

附上源码

stm32f373通过esp8266连接onenet平台

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/123009.html

相关文章

  • 基于STM32的ESP8266 WIFI与ONENET通信连接(2),云平台以及手机APP数据显示

    摘要:基于的与通信连接,实现温湿度数据互传,控制第一步,在实现将传感器数据采集之后,并且完成配网步骤,可以正常通过模块正常将数据发送到云平台之后进行以下阅读,上述内容可以跳转到以下链接进行查看具体操作。 ...

    antz 评论0 收藏0
  • 基于STM32平台的数字温度显示器系统设计

    摘要:带中文字库的是一种具有位位并行线或线串行多种接口方式,内部含有国标一级二级简体中文字库的点阵图形液晶显示模块其显示分辨率为。贴片按键模块支持标准的协议,完整的协议栈。以最低成本提供最大实用性,为功能嵌入其他系统提供无限可能。 项目简介 开发环境: Keil5.14,CubeMX6.0.1,主...

    villainhr 评论0 收藏0
  • TPYBoard开发板带你轻松玩转MicroPython

    摘要:实践证明,加上稳定可靠的外围电路和抗干扰电源,以为核心的产品能成功应用于苛刻的工业环境,使开源硬件和开发平台得到更广泛的应用,产品多样性远远高于官方开发板,是学习的首选。 说到MicroPython,也许有人会感到陌生。而说到和它密切相关的Python,是否会恍然大悟呢?Python属于解释型语言,1989年才开发完成的Python显然非常年轻。然而经过数十年的磨砺,如今Python已...

    z2xy 评论0 收藏0
  • 2021-09-04

    摘要:使用实现连网实现巴法云物联网使用硬件程序思路基于正点原子的测试程序在巴法云物联网创建的主题初始化代码比较简陋主函数代码如果想用串口助手调试,接线方法如下使用硬件我这里使用的是正点原子家的开发板精英版和模块。 ...

    Zack 评论0 收藏0
  • 宿舍智能门锁设计

    摘要:宿舍智能门锁设计采用作为主控芯片,作为与摄像监控,液晶显示屏作为显示,指纹识别模块继电器模块具有三种解锁方式指纹解锁密码解锁解锁解锁时密码或者指纹错误液晶显示屏会提示出错,次错误就会锁定,需要等待分钟才会解锁。 ...

    付永刚 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<