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

posted @ 2022-02-17 16:55  cqmcu_yth  阅读(665)  评论(0编辑  收藏  举报