实验:STM32-ARDUINO-ESP01采用AT指令,通过MQTT连接上ONENET

2023-03-08,,

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等芯片。

实验:STM32-ARDUINO-ESP01采用AT指令,通过MQTT连接上ONENET的相关教程结束。

《实验:STM32-ARDUINO-ESP01采用AT指令,通过MQTT连接上ONENET.doc》

下载本文的Word格式文档,以方便收藏与打印。