总结:利用硬件程序思路在Baffa Cloud中实现物联网。 准时的基于原子的测试程序。 使用巴法云物联网创建的主题的初始化代码相对简单。 主要功能代码。 如何使用串口助手接线进行调试硬件使用如下: 我用的是正电原子之家的精英版开发板和模块。
使用 ESP8266 实现 STM32 联网(USART 实现)(巴法云 IoT) 1、在巴法云中使用硬件程序思路(基于正点原子的测试程序)创建 IoT 主题 ESP8266 初始化代码(比较简单) 主要功能代码 如果想使用串口助手进行调试,接线方法如下:
1.使用硬件
我使用的是正电原子之家(精英版)的STM32开发板和ESP8266模块。 我原本打算创建一个 LORA 网关,但由于竞争激烈而决定放弃。 于是我开始研究LORA的通讯和WIFI云(八发云物联网)的代码。
正电原子之家STM32开发板(精英版)
ESP8266模块
程序思路(基于准时原子的测试程序)
第一步:配置两个stm32单片机串口(USART1和USART3)。 USART1 主要由微控制器用来将数据发送到计算机的串行端口,以便于调试。 USART3主要用于与WIFI模块连接通信。
第二步:通过USART3串口配置ESP8266模块。
第三步:接收云平台信息并发送心跳包
单片机订阅云平台上的主题:cmd=1&uid=005dd80adf61d7df35bb4e2cbbf1bf9f&topic=chishi 单片机会将消息推送到云端平台:cmd=2&uid=005dd80adf61d7df35bb4e2cbbf1bf9f&topic=chishi&msg=RELAY1_OPEN 单片机心跳包(必须在 60 秒内发送一次,否则单片机会下线): cmd=0&msg=ping Created with Baffa Cloud IoT Topic
ESP8266 初始化代码(对比简单) #include "esp8266.h"#include "common.h"#include "stdlib.h"#include "led.h" u8 atk_8266_apsta_test(void) {atk_8266_send_cmd("AT","OK",50) ; atk_8266_send_cmd("AT+CWMODE=3","OK",50);atk_8266_send_cmd("AT+CWJAP=/"周勇/",/"23456789/"","WIFI获取IP",1000);lay_ms(1000) ); //这里的延时是等待模块重启。 具体延迟时间取决于模块重启时间。 ;atk_8266_send_cmd("AT+CIPSTART=/"TCP/",/"bemfa.com/",8340","确定",200);atk_8266_send_cmd("AT+CIPSEND","确定",200);atk_8266_send_cmd(" cmd=1&uid=005dd80adf61d7df35bb4e2cbbf1bf9f&topic=chishi","cmd=1&res=1",200);atk_8266_send_cmd("cmd=0&msg=ping","cmd=0&res=1",200);//atk_8266_send_cmd函数第一个参数是要发送的消息 //第二个参数是要返回的消息 //第三个参数是等待时间}
atk_8266_send_cmd函数代码
//向 ATK-ESP8266 发送命令 //cmd:发送命令字符串 //ack:如果预期响应结果为空,则无需等待响应。 //waittime:等待时间(单位:10ms) //返回。 value: 0, 发送成功(响应结果符合预期) // 1, 发送失败 u8 atk_8266_send_cmd(u8 *cmd, u8 *ack,u16 time){u8 res=0 ;u3_printf("%s/r/n" ,cmd);//发送命令 if(ack&&time)//需要等待响应 {while([ k4]-time)//等待倒计时 {lay_ms( 10);if (USART3_RX_STA&0X8000)//收到预期响应result {if(atk_8266_check_cmd(ack)){printf("ack:%s/r /n",(u8*)ack);break;//获取有效数据 }USART3_RX_STA= 0;} }if(waittime==0 )res=1; }return res;} 主函数代码 #include "stm32f10x .h"#include "sys.h"#include "lay.h"#include " usart.h " #include "led.h" #include "esp8266.h" #include "key.h" #include "string.h" #include "usart3.h" #include "common.h" int main(void ) {u16 rlen=0;//保存接收到的数据长度 char data_tiqu[100];//将接收到的数据保存在数组中 char data[10];//保存最后提取的数据 int k=0,s=0;//保存cmd2的开头data下标 of int i=0,j=0; char cmd[]="msg"; int flag=1;//接收到的数据标志位,默认1,u8 timex=0;//每200个发送标志位心跳包late_init(); //初始化延时函数 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级为组2:2位抢占优先级,2位响应优先级 uart_init(115200); 115200usart3_init(115200);LED_Init();relay_Init();//初始化中继口 KEY_Init();atk_8266_apsta_test();//初始化esp8266 atk_8266_send_cmd(" cmd=0&msg=ping","cmd) =0&res= 1",200 );while(1){timex++;//atk_8266_send_cmd("cmd=0&msg=ping",NULL,200);//心跳包// u3_printf("%s/r/n", "cmd= 2&uid=005dd80adf61d7df35bb4e2cbbf1bf9f&topic= chishi&msg=RELAY1_OPEN");//推送消息到云平台//atk_8266_at_response(1);if(USART3_RX_STA&0X8000)//数据一次接收到 { //USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;rlen=USART3_RX_STA&0X7FFF;//获取本次接收到的数据长度 USART3_RX_BUF[rlen]=0;//添加结束符 printf("%s",USART3_RX_BUF);//将数据提取发送到串口端口 if ( strncmp(USART3_RX_BUF,"cmd=2",5)==0){for(i=0;i
评论前必须登录!
注册