找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3597|回复: 2
收起左侧

STM32F103C8 ESP8266 MQTT TEST源程序

  [复制链接]
ID:585455 发表于 2019-9-2 17:04 | 显示全部楼层 |阅读模式
首先說明,本人非原創。
程式是上網找到的,
不能設定MQTT帳號密碼,
本人僅稍微修改後,
可以設定MQTT帳號密碼。
-------------------------
測試方法,
ESP01 接USART2
TXD    ---  PA3/USART2_RX
RXD    ---  PA2/USART2_TX

RST    ---  PA0
EN     ---  PA1

VCC    ---  3.3V
GND    ---  GND

--------------------------
USART1 外接Realterm 或任何能調試com之軟件
TXD    ---  PA9/USART2_RX
RXD    ---  PA10/USART2_TX
MQTT.png

--------------------------
從USART1串口調試 發送help 可以看一些輸入方式
例如加入AP 請發送ssid=xxxx&pwd=xxxx
--------------------------
broker 伺服器需設定
ESP_StartMux(TCP,(char *)"192.xxx.xxx.xxx",1883,300)

MQTT帳號密碼在此設定
mqtt_connect_message(mqtt_msg,"123456","username","password")

MQTT連接成功後
手機下載MQTT免費appㄧ可測式
(我就是用MQTT Terminal測式)

appadvice点com/game/app/mqtt-terminal/1404331673

MQTT Terminal.png
----main.c----------------
  1. #include "bsp.h"
  2. #include "timer.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "esp8266.h"
  6. #include "connect.h"
  7. #include "md5.h"
  8. #include "MQTTPacket.h"

  9. u8 mqtt_msg[200]={0};
  10. u16 len;
  11. u8 *my_strstr(const u8 *s1,u16 n1,const u8 *s2,u16 n2);
  12.         
  13. void USART1_RecvData(void);

  14. unsigned char GetDataFixedHead(unsigned char MesType,unsigned char DupFlag,unsigned char QosLevel,unsigned char Retain)
  15. {
  16.         unsigned char dat = 0;
  17.         dat = (MesType & 0x0f) << 4;
  18.         dat |= (DupFlag & 0x01) << 3;
  19.         dat |= (QosLevel & 0x03) << 1;
  20.         dat |= (Retain & 0x01);
  21.         return dat;
  22. }


  23. u16 mqtt_connect_message(u8 *mqtt_message,char *client_id,char *username,char *password)
  24. {
  25.         u16 client_id_length = strlen(client_id);
  26.         u16 username_length = strlen(username);
  27.         u16 password_length = strlen(password);
  28.         u16 packetLen;
  29.         u16 i,baseIndex;
  30.         
  31.         packetLen = 12 + 2 + client_id_length;
  32.         if(username_length > 0)
  33.                 packetLen = packetLen + 2 + username_length;
  34.         if(password_length > 0)
  35.                 packetLen = packetLen+ 2 + password_length;
  36.         
  37.         mqtt_message[0] = GetDataFixedHead(1,0,0,0);                                //MQTT Message Type CONNECT
  38.         mqtt_message[1] = packetLen - 2;        
  39.         baseIndex = 2;
  40.         if(packetLen > 127)
  41.         {
  42.                 mqtt_message[2] = 1;                        //packetLen/127;   
  43.                 baseIndex = 3;
  44.         }
  45.         mqtt_message[baseIndex++] = 0;                // Protocol Name Length MSB   
  46.         mqtt_message[baseIndex++] = 4;                // Protocol Name Length LSB   
  47.         mqtt_message[baseIndex++] = 77;                // ASCII Code for M   
  48.         mqtt_message[baseIndex++] = 81;                // ASCII Code for Q   
  49.         mqtt_message[baseIndex++] = 84;                // ASCII Code for T   
  50.         mqtt_message[baseIndex++] = 84;                // ASCII Code for T   
  51.         mqtt_message[baseIndex++] = 4;                // MQTT Protocol version = 4   
  52.         mqtt_message[baseIndex++] = 0 | (0 << 1) | (0 << 1) | (0 << 3) | (0 << 5) | (1 << 6) |(1 << 7);                // conn flags
  53.         mqtt_message[baseIndex++] = 0;                // Keep-alive Time Length MSB   
  54.         mqtt_message[baseIndex++] = 60;                // Keep-alive Time Length LSB   
  55.         mqtt_message[baseIndex++] = (0xff00&client_id_length)>>8;// Client ID length MSB   
  56.         mqtt_message[baseIndex++] = 0xff&client_id_length;        // Client ID length LSB   
  57.         
  58.         // Client ID
  59.         for(i = 0; i < client_id_length; i++)
  60.         {
  61.                 mqtt_message[baseIndex + i] = client_id[i];   
  62.         }
  63.         baseIndex = baseIndex+client_id_length;
  64.                
  65.         if(username_length > 0)
  66.         {
  67.                 //username   
  68.                 mqtt_message[baseIndex++] = (0xff00&username_length)>>8;//username length MSB   
  69.                 mqtt_message[baseIndex++] = 0xff&username_length;        //username length LSB   
  70.                 for(i = 0; i < username_length ; i++)
  71.                 {
  72.                         mqtt_message[baseIndex + i] = username[i];   
  73.                 }
  74.                 baseIndex = baseIndex + username_length;
  75.         }
  76.                
  77.         if(password_length > 0)
  78.         {
  79.                 //password   
  80.                 mqtt_message[baseIndex++] = (0xff00&password_length)>>8;//password length MSB   
  81.                 mqtt_message[baseIndex++] = 0xff&password_length;        //password length LSB   
  82.                 for(i = 0; i < password_length ; i++)
  83.                 {
  84.                         mqtt_message[baseIndex + i] = password[i];   
  85.                 }
  86.                 baseIndex += password_length;
  87.         }        
  88.         
  89.         return baseIndex;   
  90. }

  91. //MQTT Publish
  92. u16 mqtt_publish_message(u8 *mqtt_message, char * topic, char * message, u8 qos)
  93. {  
  94.         u16 topic_length = strlen(topic);   
  95.         u16 message_length = strlen(message);  
  96.         u16 i,index=0;        
  97.         static u16 id=0;
  98.         
  99.         mqtt_message[index++] = 48;        //0x30 // MQTT Message Type PUBLISH   
  100.         if(qos)
  101.                 mqtt_message[index++] = 2 + topic_length + 2 + message_length;
  102.         else
  103.                 mqtt_message[index++] = 2 + topic_length + message_length;   // Remaining length   
  104.         mqtt_message[index++] = (0xff00&topic_length)>>8;
  105.         mqtt_message[index++] = 0xff&topic_length;
  106.                
  107.         // Topic   
  108.         for(i = 0; i < topic_length; i++)
  109.         {
  110.                 mqtt_message[index + i] = topic[i];
  111.         }
  112.         index += topic_length;
  113.                
  114.         if(qos)
  115.         {
  116.                 mqtt_message[index++] = (0xff00&id)>>8;
  117.                 mqtt_message[index++] = 0xff&id;
  118.                 id++;
  119.         }
  120.         
  121.         // Message
  122.         for(i = 0; i < message_length; i++)
  123.         {
  124.                 mqtt_message[index + i] = message[i];
  125.         }
  126.         index += message_length;
  127.                
  128.         return index;
  129.         
  130.         
  131. }


  132. u8 mqtt_puback_message(u8 *mqtt_message)
  133. {
  134.         static u16 id=0;
  135.         
  136.         mqtt_message[0] = 64;                                //0x40 //PUBACK
  137.         mqtt_message[1] = 2;
  138.         mqtt_message[2] = (0xff00&id)>>8;
  139.         mqtt_message[3] = 0xff&id;
  140.         id++;
  141.         
  142.         return 4;
  143. }


  144. u16 mqtt_subscribe_message(u8 *mqtt_message,char *topic,u8 qos,u8 whether)
  145. {
  146.         u16 topic_len = strlen(topic);
  147.         u16 i,index = 0;
  148.         static u16 id=0;
  149.         
  150.         id++;
  151.         if(whether)
  152.         {mqtt_message[index++] = 0x82;}                                //0x82 SUBSCRIBE
  153.         else
  154.         {mqtt_message[index++] = 162;        }                        //0xA2
  155.         mqtt_message[index++] = topic_len + 5;
  156.         mqtt_message[index++] = (0xff00&id)>>8;
  157.         mqtt_message[index++] = 0xff&id;
  158.         mqtt_message[index++] = (0xff00&topic_len)>>8;
  159.         mqtt_message[index++] = 0xff&topic_len;
  160.         
  161.         for (i = 0;i < topic_len; i++)
  162.         {
  163.                 mqtt_message[index + i] = topic[i];
  164.         }
  165.         index += topic_len;
  166.         
  167.         if(whether)
  168.         {
  169.                 mqtt_message[index] = qos;//QoS
  170.                 index++;
  171.         }
  172.         
  173.         return index;
  174.         
  175. }


  176. //MQTT PING
  177. u8 mqtt_ping_message(u8 *mqtt_message)
  178. {
  179.         mqtt_message[0] = 192;        //0xC0 PING
  180.         mqtt_message[1] = 0;
  181.         
  182.         return 2;
  183. }

  184. u8 mqtt_disconnect_message(u8 *mqtt_message)
  185. {
  186.         mqtt_message[0] = 224;        //0xE0 DISCONNECT
  187.         mqtt_message[1] = 0;
  188.         
  189.         return 2;
  190. }

  191. int main(void)
  192. {
  193.         u16 len;
  194.         u8 state=0,link=0;
  195.         BspInit();
  196.         printf("\r\ninitialize finish\r\n\r\n");
  197.          while(1)
  198.         {
  199.                 if(esp8266.state==254)//ESP8266
  200.                 {
  201.                         switch(state)
  202.                         {        
  203.                                 case 0:
  204.                                         if(ESP_StartMux(TCP,(char *)"xxx.xxx.xxx.xxx",1883,300))
  205.                                         {
  206.                                                 link=1;
  207.                                                 Delay10Ms(100);//1000ms
  208.                                                 //MQTT Connect
  209.                                                 len=mqtt_connect_message(mqtt_msg,"123456","","");//id=123456,username,password
  210.                                                 //for(i=0;i<len;i++)
  211.                                                 //{
  212.                                                 //        printf("%02X ",mqtt_msg[i]);
  213.                                                 //}
  214.                                                 if(ESP_SendTcpUdp(mqtt_msg,len,200))
  215.                                                 {
  216.                                                         
  217.                                                         printf("\r\nMQTT_Connect ...\r\n");
  218.                                                         Delay10Ms(100);//1000ms                                                
  219.                                                         //MQTT subscribe
  220.                                                         len=mqtt_subscribe_message(mqtt_msg,"test",1,1);//SUB Topic Qos1 1:ó†é†
  221.                                                         //PrintHex(mqtt_msg,len);
  222.                                                         if(ESP_SendTcpUdp(mqtt_msg,len,200))
  223.                                                         {
  224.                                                                 state=1;
  225.                                                                 printf("\r\nMQTT_Subscribe ...\r\n");
  226.                                                         }
  227.                                                 }
  228.                                                 
  229.                                         }
  230.                                         Delay10Ms(500);//5000ms
  231.                                 break;
  232.                                 case 1:
  233.                                         if(IS_TIMEOUT_10MS(eTim4, 6000))//60000ms
  234.                                         {
  235.                                                 if(link)
  236.                                                 {
  237.                                                         u8 ping[2];                                                
  238.                                                         ping[0]=0xc0;
  239.                                                         ping[1]=0x00;
  240.                                                         if(ESP_SendTcpUdp(ping,2,200))//PINGREQ
  241.                                                         {
  242.                                                                 printf("\r\nMQTT_Ping ...\r\n");
  243.                                                         }
  244.                                                         
  245.                                                         else
  246.                                                         {
  247.                                                                 link=0;
  248.                                                                 state=0;
  249.                                                                 printf("\r\nMQTT_Ping Fail\r\n");
  250.                                                         }
  251.                                                 }
  252.                                         }
  253.                                         break;
  254.                         }
  255.                         if(ESP_Recv_Len>0)
  256.                         {
  257.                                 char* position=NULL;
  258.                                 u8 data_len;
  259.                                 
  260.                                 printf("ESP_Recv=%s\r\n",ESP_Recv_Buff);
  261.                                 //PrintHex(ESP_Recv_Buff,ESP_Recv_Len);
  262.                                 ESP_Recv_Len=0;
  263.                                 if(strstr((char *)ESP_Recv_Buff,"CLOSED"))
  264.                                 {
  265.                                         link=0;
  266.                                         state=0;
  267.                                 }
  268.                                 
  269.                                 position=strstr((char *)ESP_Recv_Buff,"+IPD");
  270.                                 data_len=GetValue(position,",");
  271.                                 if(data_len>0)
  272.                                 {
  273.                                         printf("Recv_Data_Len=%d\r\n",data_len);
  274.                                         position=strstr((char *)ESP_Recv_Buff,":");
  275.                                         if(position!=0)
  276.                                         {
  277.                                                 memcpy(mqtt_msg,position+1,data_len);
  278.                                         }
  279.                                         //PrintHex(mqtt_msg,data_len);
  280.                                         if(mqtt_msg[0]==50||mqtt_msg[0]==58)
  281.                                         {
  282.                                                 /*
  283.                                                 if(strstr((char *)mqtt_msg,"ON"))
  284.                                                 {
  285.                                                         CONTROL_LED=1;
  286.                                                         printf("CONTROL_LED=ON\r\n");
  287.                                                 }
  288.                                                 */
  289.                                                 if(my_strstr(mqtt_msg,data_len,(u8 *)"ON",2))
  290.                                                 {
  291.                                                         CONTROL_LED=1;
  292.                                                         printf("CONTROL_LED=ON\r\n");
  293.                                                 }
  294.                                                 else
  295.                                                 {
  296.                                                         printf("Not Found ON\r\n");
  297.                                                 }
  298.                                                 if(my_strstr(mqtt_msg,data_len,(u8 *)"OFF",3))
  299.                                                 {
  300.                                                         CONTROL_LED=0;
  301.                                                         printf("CONTROL_LED=OFF\r\n");
  302.                                                 }
  303.                                                 else
  304.                                                 {
  305.                                                         printf("Not Found OFF\r\n");
  306.                                                 }

  307.                                                 len=mqtt_puback_message(mqtt_msg);
  308.                                                 //PrintHex(mqtt_msg,len);
  309.                                                 if(ESP_SendTcpUdp(mqtt_msg,len,200))
  310.                                                 {
  311.                                                         printf("\r\nMQTT_PUBACK ...\r\n");
  312.                                                 }
  313.                                         }
  314.                                         //PrintHex(mqtt_msg,data_len);
  315.                                 }
  316.                                 
  317.                         }
  318.                 }
  319.                 //ESP_RecvData();
  320.                 ESP_Connect();
  321.                 Idle();
  322.         }         
  323. }

  324. void USART1_RecvData(void)
  325. {
  326.         if(USART1_Recv_Flag)
  327.         {
  328.                 u16 value;
  329.                 u8 buf[PAYLOAD_DATA_LEN]={0};
  330.         
  331.                 USART1_Recv_Flag=0;
  332.                 value=GetValue((char *)USART1_Recv_Buff," ");
  333.                 CopyString((char *)buf,(char *)USART1_Recv_Buff," ");
  334.                 printf("buffer=%s value=%d\r\n",buf,value);
  335.                 if(strstr((char *)buf,"help"))
  336.                 {
  337.                         printf("\r\n========== Help Menu ==========\r\n\r\n");
  338.                         printf("var? (variable)\r\n");
  339.                         printf("rst-h (esp8266 hard reset)\r\n");
  340.                         printf("rst-s (esp8266 soft reset)\r\n");
  341.                         printf("state val (esp8266 state)\r\n");
  342.                         printf("ssid=xxx&pwd=xxx (set ssid or pwd)\r\n");
  343.                         printf("\r\n===============================\r\n");
  344.                 }
  345.                 else if(strstr((char *)USART1_Recv_Buff,"BubbleSort"))
  346.                 {
  347.                         u8 arr[5] = { 1,2,3,4,5 };
  348.                         u8 i;
  349.                         printf("\r\nFirst:\r\n");
  350.                         for(i = 0; i < 5; i++)  
  351.                         {  
  352.                                 printf("%d",arr[i]);  
  353.                         }  

  354.                         BubbleSort(arr, 5);//
  355.                         printf("\r\nBubble:\r\n");

  356.                         for(i = 0; i < 5; i++)  
  357.                         {  
  358.                                 printf("%d",arr[i]);  
  359.                         }
  360.                 }
  361.                 else if(strstr((char *)USART1_Recv_Buff,"MY-STRSTR"))
  362.                 {
  363.                         u8 *p=my_strstr(buf,strlen((char *)buf),(u8 *)"ON",2);
  364.                         if(p)
  365.                         {
  366.                                 printf("my_strstr=%s\r\n",p);
  367.                         }
  368.                         else
  369.                         {
  370.                                 printf("Not Found ON\r\n");
  371.                         }
  372.                 }
  373.                 else if(strstr((char *)USART1_Recv_Buff,"LINK"))
  374.                 {
  375.                         ESP_StartMux(TCP,(char *)"xxx.xxx.xxx.xxx",1883,300);
  376.                 }
  377.                 else if(strstr((char *)USART1_Recv_Buff,"COMM"))
  378.                 {
  379.                         len=mqtt_connect_message(mqtt_msg,"123456","","");
  380.                         PrintHex(mqtt_msg,len);
  381.                         if(ESP_SendTcpUdp(mqtt_msg,len,200))
  382.                         {
  383.                                 printf("\r\nMQTT_Connect ...\r\n");
  384.                         }
  385.                 }
  386.                 else if(strstr((char *)USART1_Recv_Buff,"PING"))
  387.                 {
  388.                         u8 ping[2];
  389.                                                 
  390.                         ping[0]=0xc0;
  391.                         ping[1]=0x00;
  392.                         if(ESP_SendTcpUdp(ping,2,200))
  393.                         {
  394.                                 printf("\r\nMQTT_Ping ...\r\n");
  395.                         }
  396.                 }
  397.                 else if(strstr((char *)USART1_Recv_Buff,"PUB"))
  398.                 {
  399.                         MQTTString topicString = MQTTString_initializer;
  400.         
  401.                         topicString.cstring = "test1";
  402.                         len = MQTTSerialize_publish(mqtt_msg, 200, 0, 0, 0, 0, topicString, (u8 *)"123456", 6); /* 2 */

  403.                         //len=mqtt_publish_message(mqtt_msg, "TEST", "OFF");
  404.                         PrintHex(mqtt_msg,len);
  405.                         if(ESP_SendTcpUdp(mqtt_msg,len,200))
  406.                         {
  407.                                 printf("\r\nMQTT_Publish ...\r\n");
  408.                         }
  409.                 }
  410.                 else if(strstr((char *)USART1_Recv_Buff,"SUB"))
  411.                 {
  412.                         len=mqtt_subscribe_message(mqtt_msg,"$DATETIME/",0,1);
  413.                         PrintHex(mqtt_msg,len);
  414.                         if(ESP_SendTcpUdp(mqtt_msg,len,200))
  415.                         {
  416.                                 printf("\r\nMQTT_Subscribe ...\r\n");
  417.                         }
  418.                 }
  419.                 else if(strstr((char *)USART1_Recv_Buff,"MD5-TEST"))
  420.                 {
  421.                         unsigned char dst[16];

  422.                         MD5_String(dst,(char *)buf);
  423.                         PrintHex((u8 *)dst,sizeof(dst));
  424.                 }

  425.                 else if(strstr((char *)USART1_Recv_Buff,"ssid"))
  426.                 {
  427.                         char *srcstr=USART1_Recv_Buff;
  428.                         char *ssid=(char *)Store_Data.ssid;
  429.                         char *pwd=(char *)Store_Data.pwd;
  430.                         u8 ssid_len=0,pwd_len=0;

  431.                         printf("ssid_len=%d\r\n",sizeof(Store_Data.ssid));
  432.                         printf("pwd_len=%d\r\n",sizeof(Store_Data.pwd));
  433.                         while(1)
  434.                         {                                                                                   
  435.                                 if(*srcstr=='=')
  436.                                 {
  437.                                         break;
  438.                                 }
  439.                                 if(*srcstr=='\0'||*srcstr=='\r'||*srcstr=='\n')
  440.                                 {
  441.                                         printf("ERROR\r\n");
  442.                                         return;
  443.                                 }
  444.                                 srcstr++;
  445.                         }
  446.                         srcstr++;
  447.                         while(1)
  448.                         {                                                                                   
  449.                                 if(*srcstr=='&')
  450.                                 {
  451.                                         *ssid='\0';
  452.                                         break;
  453.                                 }
  454.                                 if(*srcstr=='\0'||*srcstr=='\r'||*srcstr=='\n'||ssid_len>=sizeof(Store_Data.ssid))
  455.                                 {
  456.                                         printf("ERROR\r\n");
  457.                                         return;
  458.                                 }
  459.                                 *ssid=*srcstr;
  460.                                 srcstr++;
  461.                                 ssid++;
  462.                                 ssid_len++;
  463.                         }
  464.                         while(1)
  465.                         {                                                                                   
  466.                                 if(*srcstr=='=')
  467.                                 {
  468.                                         break;
  469.                                 }
  470.                                 if(*srcstr=='\0'||*srcstr=='\r'||*srcstr=='\n')
  471.                                 {
  472.                                         printf("ERROR\r\n");
  473.                                         return;
  474.                                 }
  475.                                 srcstr++;
  476.                         }
  477.                         srcstr++;
  478.                         MemSet((BYTE *)&Store_Data.pwd,0,sizeof(Store_Data.pwd));
  479.                         while(1)
  480.                         {                                                                                   
  481.                                 if(*srcstr=='\0'||*srcstr=='\r'||*srcstr=='\n'||pwd_len>=sizeof(Store_Data.pwd))
  482.                                 {
  483.                                         *pwd='\0';
  484.                                         break;
  485.                                 }
  486.                                 *pwd=*srcstr;
  487.                                 srcstr++;
  488.                                 pwd++;
  489.                                 pwd_len++;
  490.                         }
  491.                         if(pwd_len<8)
  492.                         {
  493.                                 u8 i;
  494.                                 
  495.                                 for(i=pwd_len;i<8;i++)
  496.                                 {
  497.                                         *pwd='*';
  498.                                         pwd++;
  499.                                 }
  500.                         }
  501.                         printf("ssid=%s\r\npwd=%s\r\n",Store_Data.ssid,Store_Data.pwd);
  502.                 }
  503.                 else if(strstr((char *)USART1_Recv_Buff,"apiKey"))
  504.                 {
  505.                         char *srcstr=USART1_Recv_Buff;
  506.                         char *apiKey=(char *)Store_Data.apiKey;
  507.                         u8 key_len=0;

  508.                         while(1)
  509.                         {                                                                                   
  510.                                 if(*srcstr=='=')
  511.                                 {
  512.                                         break;
  513.                                 }
  514.                                 if(*srcstr=='\0'||*srcstr=='\r'||*srcstr=='\n')
  515.                                 {
  516.                                         printf("ERROR\r\n");
  517.                                         return;
  518.                                 }
  519.                                 srcstr++;
  520.                         }
  521.                         srcstr++;
  522.                         while(1)
  523.                         {                                                                                   
  524.                                 if(*srcstr=='\0'||*srcstr=='\r'||*srcstr=='\n'||key_len>=16)
  525.                                 {
  526.                                         *apiKey='\0';
  527.                                         break;
  528.                                 }
  529.                                 *apiKey=*srcstr;
  530.                                 srcstr++;
  531.                                 apiKey++;
  532.                                 key_len++;
  533.                         }
  534.                         if(key_len<16)
  535.                         {
  536.                                 u8 i;
  537.                                 
  538.                                 for(i=key_len;i<16;i++)
  539.                                 {
  540.                                         *apiKey='*';
  541.                                         apiKey++;
  542.                                 }
  543.                         }
  544.                         printf("apiKey=%s\r\n",Store_Data.apiKey);
  545.                 }
  546.                 else if(strstr((char *)USART1_Recv_Buff,"server"))
  547.                 {
  548.                         char *srcstr=USART1_Recv_Buff;
  549.                         char *server=(char *)Store_Data.server;
  550.                         u8 server_len=0;

  551.                         while(1)
  552.                         {                                                                                   
  553.                                 if(*srcstr=='=')
  554.                                 {
  555.                                         break;
  556.                                 }
  557.                                 if(*srcstr=='\0'||*srcstr=='\r'||*srcstr=='\n')
  558.                                 {
  559.                                         printf("ERROR\r\n");
  560.                                         return;
  561.                                 }
  562.                                 srcstr++;
  563.                         }
  564.                         srcstr++;
  565.                         while(1)
  566.                         {
  567.                                 if(*srcstr=='\0'||*srcstr=='\r'||*srcstr=='\n'||server_len>=sizeof(Store_Data.server))
  568.                                 {
  569.                                         *server='\0';
  570.                                         break;
  571.                                 }
  572.                                 *server=*srcstr;
  573.                                 srcstr++;
  574.                                 server++;
  575.                                 server_len++;
  576.                         }
  577.                         printf("server=%s\r\n",Store_Data.server);
  578.                 }
  579.                 else if(strstr((char *)buf,"rst-h"))
  580.                 {
  581.                         ESP_HardReset();
  582.                 }
  583.                 else if(strstr((char *)buf,"rst-s"))
  584.                 {
  585.                         ESP_SoftReset();
  586.                 }
  587.                 else if(strstr((char *)buf,"state"))
  588.                 {
  589.                         esp8266.state=GetValue(USART1_Recv_Buff," ");
  590.                 }
  591.                 else if(strstr((char *)buf,"port"))
  592.                 {
  593.                         esp8266.port=GetValue(USART1_Recv_Buff," ");
  594.                 }
  595.                 else if(strstr((char *)buf,"mode"))
  596.                 {
  597.                         esp8266.mode=GetValue(USART1_Recv_Buff," ");
  598.                         if(esp8266.mode)
  599.                         {
  600.                                 if(ESP_StartServer(esp8266.port))
  601.                                 {
  602.                                         esp8266.login=FALSE;
  603.                                         esp8266.connect=FALSE;
  604.                                         esp8266.bind=FALSE;
  605.                                         esp8266.state=SERVER;
  606.                                         esp8266.ser_time=Get_RunTime();
  607.                                         SetLed(0xff,100,100);
  608.                                 }
  609.                         }
  610.                         if(!esp8266.mode)
  611.                         {
  612.                                 if(ESP_CloseServer())
  613.                                 {
  614.                                         esp8266.mode=ESP_CLIENT;
  615.                                         if(!esp8266.login)
  616.                                                 esp8266.state=WAIT_LOGIN;
  617.                                         else if(!esp8266.connect||!esp8266.bind)
  618.                                                 esp8266.state=SATRT_CONNECT;
  619.                                         else
  620.                                         {
  621.                                                 esp8266.state=LIVE;
  622.                                                 SetLed(0xff,10,500);
  623.                                         }
  624.                                 }
  625.                         }
  626.                 }

  627.                 else if(strstr((char *)buf,"add_routr_table"))
  628.                 {
  629.                         Payload tmp;
  630.                         u8 i,k,n;
  631.                         
  632.                         n=value;
  633.                         for(k=0; k<10; k++)//
  634.                         {
  635.                                 value=n;
  636.                                 MemSet((BYTE *)&tmp,0,sizeof(Payload));
  637.                                 tmp.header.the_addr=value+k;
  638.                                 tmp.header.hop_addr=(value+20)+k;
  639.                                 for(i=0; i<k; i++)
  640.                                 {
  641.                                         tmp.buf[i]=(value+10)+i;
  642.                                 }
  643.                         }
  644.                 }
  645.                 else if(strstr((char *)buf,"var?"))
  646.                 {
  647.                         printf("\r\n=========variable=========\r\n\r\n");
  648.                         printf("apiKey=%s\r\nserver=%s\r\n",Store_Data.apiKey,Store_Data.server);
  649.                         printf("ssid=%s\r\npwd=%s\r\n",Store_Data.ssid,Store_Data.pwd);
  650.                         printf("esp8266_state=%d\r\n",esp8266.state);
  651.                         printf("esp8266_mode=%d\r\n",esp8266.mode);
  652.                         printf("connect_port=%d\r\n",esp8266.port);
  653.                         printf("Run Day:%d Time:%02d:%02d:%02d\r\n",
  654.                                         run_time.date,run_time.hour,run_time.min,run_time.sec);
  655.                         printf("\r\n==========================\r\n");
  656.                 }

  657.                 else
  658.                 {
  659.                         ESP_SendString((u8 *)USART1_Recv_Buff,USART1_ReceDatalen);
  660.                 }
  661.         }
  662. }


  663. u8 *my_strstr(const u8 *s1,u16 n1,const u8 *s2,u16 n2)  
  664. {  
  665.     int n,x=0,y=0;  
  666.     if (*s2)         
  667.     {
  668.         while(1)                 
  669.         {
  670.                         if(*s1==*s2)
  671.                         {
  672.                                 for (n=0;n<n2;n++)  
  673.                                 {
  674.                                         if (*(s1+n)==*(s2+n))
  675.                                         {
  676.                                                 y++;
  677.                                                 if (y>=n2)
  678.                                                 //if (!*(s2+n+1))
  679.                                                 {  
  680.                                                         return (u8 *)s1;  
  681.                                                 }
  682.                                                 if (x+n>=n1-1)
  683.                                                 {  
  684.                                                         return NULL;  
  685.                                                 }
  686.                                                 if (*(s1+n+1)!=*(s2+n+1))
  687.                                                 {
  688.                                                         break;
  689.                                                 }
  690.                                         }
  691.                                         else
  692.                                         {  
  693.                                                 break;
  694.                                         }
  695.                                 }  
  696.                         }
  697.                         s1++;
  698.                         x++;
  699.                         if(x>=n1)
  700.                         {
  701.                                 break;
  702.                         }
  703.         }  
  704.         return NULL;  
  705.     }  
  706.     else  
  707.     {  
  708.         return (u8*)s1;  
  709.     }  
  710. }

复制代码

----------------------------
以下程式碼壓縮後打包上傳。

全部资料51hei下载地址:
stm32_mqtt_test.7z (252.57 KB, 下载次数: 121)

评分

参与人数 2黑币 +62 收起 理由
muzhi + 12 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:376018 发表于 2020-2-22 08:28 | 显示全部楼层
谢谢分享,正好要用上
回复

使用道具 举报

ID:881442 发表于 2021-3-9 16:50 | 显示全部楼层
謝謝分享,最近有需求,先載來測試看看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表