实验:STM32-ARDUINO-ESP01采用AT指令,通过MQTT连接上ONENET
1.硬件准备
要求:STM32支持Arduino.
2.程序逻辑结构
3.主流程状态机
4.测试数据抓图
5. 关键程序代码
unsigned char g_ArrTemp[1024]; int AT_SendCmd ( char * atCmd, char * res1,char * res2, int dly ) { int i=0; int num; unsigned long old=millis(); bool flag1=false; bool flag2=false; int status=1; if(res2==NULL)flag2=true; AT_ClearPara(); Serial.print((char *)atCmd); Serial2.print((char *)atCmd); Serial2.flush(); while(1) { if(millis()-old>dly) { break; } if(Serial2.available()) { if(i<1023) { g_ArrTemp[i++]=Serial2.read(); } } if(res1!=NULL) { if(MYstrstr(g_ArrTemp,i,(unsigned char*)res1)==0)flag1=true; } if(res2!=NULL) { if(MYstrstr(g_ArrTemp,i,(unsigned char*)res2)==0)flag2=true; } if(flag1&& flag2) { status=0; break; } } num=i; for(i=0;i<num;i++) { Serial.print((char) g_ArrTemp[i]); } AT_ClearPara(); Serial.println(); return status; } int AT_SendData ( unsigned char *data, unsigned int len ) { int i=0,num; char cmdBuf[400]; unsigned long old=millis(); sprintf( cmdBuf,"AT+CIPSEND=%d\r\n",len); if (AT_SendCmd ( cmdBuf, ">",NULL, 60)==0) { Serial2.write ( data, len ); Serial2.flush(); //等待sendok while(1) { if(millis()-old>7000) { return 1; } if(Serial2.available()) { if(i<1023) { g_ArrTemp[i++]=Serial2.read(); } } if(MYstrstr(g_ArrTemp,i,(unsigned char*)"OK")==0) { break; } } //打印接收到的数据 num=i; for(i=0;i<num;i++) { Serial.print((char) g_ArrTemp[i]); } AT_ClearPara(); return 0; } return 1; }
5.程序代码汇总
1)arduino主程序
#include "main.h" void setup() { System_Init(); } void loop() { System_main(); }
代码下载地址:
链接:https://pan.baidu.com/s/1FaTYcOz_0TQvpW9dGPBFXw
提取码:hbfr
--来自百度网盘超级会员V5的分享
6.拓展开发
修改netapi.cpp就可以支持SIM900, W5500等芯片。