├── README.md ├── DHT11 ├── wifi.c └── mqtt /README.md: -------------------------------------------------------------------------------- 1 | # -STM32-esp8266- 2 | 使用esp8266-01swifi模块,stm32c8t6最小系统板,利用mqtt通信协议,和WiFi通信协议,通过搭建OneNet平台的温度显示应用,在移动端实时远程显示大棚温湿度数据,实现智慧农业,提高监控效率。 3 | -------------------------------------------------------------------------------- /DHT11: -------------------------------------------------------------------------------- 1 | 2 | /*-------------------------------------------------*/ 3 | /* */ 4 | /* DHT11²É¼¯ÎÂʪ¶È */ 5 | /* */ 6 | /*-------------------------------------------------*/ 7 | 8 | // Ó²¼þÁ¬½Ó£º 9 | // DATA£ºPA6 10 | 11 | #include "stm32f10x.h" //°üº¬ÐèÒªµÄÍ·Îļþ 12 | #include "dht11.h" //°üº¬ÐèÒªµÄÍ·Îļþ 13 | #include "delay.h" //°üº¬ÐèÒªµÄÍ·Îļþ 14 | #include "usart1.h" //°üº¬ÐèÒªµÄÍ·Îļþ 15 | 16 | /*-------------------------------------------------*/ 17 | /*º¯ÊýÃû£º¸´Î»DHT11 */ 18 | /*²Î Êý£ºÎÞ */ 19 | /*·µ»ØÖµ£ºÎÞ */ 20 | /*-------------------------------------------------*/ 21 | void DHT11_Rst(void) 22 | { 23 | DHT11_IO_OUT(); //ÉèÖÃIOÊä³öģʽ 24 | DHT11_OUT(0); //À­µÍIO 25 | delay_ms(30); //À­µÍÖÁÉÙ18ms£¬ÎÒÃÇÀ­µÍ30 26 | DHT11_OUT(1); //À­¸ßIO 27 | delay_us(30); //Ö÷»úÀ­¸ß20~40us£¬ÎÒÃÇÀ­¸ß30us 28 | } 29 | 30 | /*-------------------------------------------------*/ 31 | /*º¯ÊýÃû£ºµÈ´ýDHT11µÄ»ØÓ¦ */ 32 | /*²Î Êý£ºÎÞ */ 33 | /*·µ»ØÖµ£º1´íÎó 0ÕýÈ· */ 34 | /*-------------------------------------------------*/ 35 | char DHT11_Check(void) 36 | { 37 | char timeout; //¶¨ÒåÒ»¸ö±äÁ¿ÓÃÓÚ³¬Ê±ÅÐ¶Ï 38 | 39 | timeout = 0; //³¬Ê±±äÁ¿ÇåÁã 40 | DHT11_IO_IN(); //IOÉèÖÃÊäÈëģʽ 41 | while((DHT11_DQ_IN == 1) && (timeout < 70))//DHT11»áÀ­µÍ40~50us,ÎÒÃǵȴý70us³¬Ê±Ê±¼ä 42 | { 43 | timeout++; //³¬Ê±±äÁ¿+1 44 | delay_us(1); //ÑÓʱ1us 45 | } 46 | if(timeout >= 70)return 1; //Èç¹ûtimeout>=70,˵Ã÷ÊÇÒòΪ³¬Ê±Í˳öµÄwhileÑ­»·£¬·µ»Ø1±íʾ´íÎó 47 | else timeout = 0; //·´Ö®£¬ËµÃ÷ÊÇÒòΪµÈµ½ÁËDHT11À­µÍIO£¬Í˳öµÄwhileÑ­»·£¬ÕýÈ·²¢ÇåÁãtimeout 48 | while((DHT11_DQ_IN == 0) && (timeout < 70))//DHT11À­µÍºó»áÔÙ´ÎÀ­¸ß40~50us,,ÎÒÃǵȴý70us³¬Ê±Ê±¼ä 49 | { 50 | timeout++; //³¬Ê±±äÁ¿+1 51 | delay_us(1); //ÑÓʱ1us 52 | } 53 | if(timeout >= 70)return 2; //Èç¹ûtimeout>=70,˵Ã÷ÊÇÒòΪ³¬Ê±Í˳öµÄwhileÑ­»·£¬·µ»Ø2±íʾ´íÎó 54 | return 0; //·´Ö®ÕýÈ·£¬·µ»Ø0 55 | } 56 | /*-------------------------------------------------*/ 57 | /*º¯ÊýÃû£º¶Áȡһ¸öλ */ 58 | /*²Î Êý£ºÎÞ */ 59 | /*·µ»ØÖµ£º1»ò0 */ 60 | /*-------------------------------------------------*/ 61 | char DHT11_Read_Bit(void) 62 | { 63 | char timeout; //¶¨ÒåÒ»¸ö±äÁ¿ÓÃÓÚ³¬Ê±ÅÐ¶Ï 64 | 65 | timeout = 0; //ÇåÁãtimeout 66 | while((DHT11_DQ_IN == 1) && (timeout < 40))//ÿһλÊý¾Ý¿ªÊ¼£¬ÊÇ12~14usµÄµÍµçƽ£¬ÎÒÃǵÈ40us 67 | { 68 | timeout++; //³¬Ê±±äÁ¿+1 69 | delay_us(1); //ÑÓʱ1us 70 | } 71 | timeout = 0; //ÇåÁãtimeout 72 | while((DHT11_DQ_IN == 0) && (timeout < 60))//½ÓÏÂÀ´£¬DHT11»áÀ­¸ßIO£¬¸ù¾ÝÀ­¸ßµÄʱ¼äÅжÏÊÇ0»ò1£¬ÎÒÃǵÈ60us 73 | { 74 | timeout++; //³¬Ê±±äÁ¿+1 75 | delay_us(1); //ÑÓʱ1us 76 | } 77 | delay_us(35); //ÑÓʱ35us 78 | if(DHT11_DQ_IN)return 1; //Èç¹ûÑÓʱºó£¬ÊÇ¸ßµçÆ½£¬ÄÇô±¾Î»½ÓÊÕµÄÊÇ1£¬·µ»Ø1 79 | else return 0; //·´Ö®ÑÓʱºó£¬ÊÇµÍµçÆ½£¬ÄÇô±¾Î»½ÓÊÕµÄÊÇ0£¬·µ»Ø0 80 | } 81 | 82 | /*-------------------------------------------------*/ 83 | /*º¯ÊýÃû£º¶Áȡһ¸ö×Ö½Ú */ 84 | /*²Î Êý£ºÎÞ */ 85 | /*·µ»ØÖµ£ºÊý¾Ý */ 86 | /*-------------------------------------------------*/ 87 | char DHT11_Read_Byte(void) 88 | { 89 | char i; //¶¨ÒåÒ»¸ö±äÁ¿ÓÃÓÚforÑ­»· 90 | char dat; //¶¨ÒåÒ»¸ö±äÁ¿ÓÃÓÚ±£´æÊý¾Ý 91 | dat = 0; //Çå³ý±£´æÊý¾ÝµÄ±äÁ¿ 92 | for (i = 0; i < 8; i++){ //Ò»¸ö×Ö½Ú8λ£¬Ñ­»·8´Î 93 | dat <<= 1; //×óÒÆÒ»Î»£¬ÌÚ³ö¿Õλ 94 | dat |= DHT11_Read_Bit(); //¶ÁȡһλÊý¾Ý 95 | } 96 | return dat; //·µ»ØÒ»¸ö×Ö½ÚµÄÊý¾Ý 97 | } 98 | 99 | /*-------------------------------------------------*/ 100 | /*º¯ÊýÃû£º¶Áȡһ´ÎÊý¾ÝÎÂʪ¶È */ 101 | /*²Î Êý£ºtemp:ζÈÖµ */ 102 | /*²Î Êý£ºhumi:ʪ¶ÈÖµ */ 103 | /*·µ»ØÖµ£º1´íÎó 0ÕýÈ· */ 104 | /*-------------------------------------------------*/ 105 | char DHT11_Read_Data(char *temp, char *humi) 106 | { 107 | char buf[5]; //Ò»´ÎÍêÕûµÄÊý¾ÝÓÐ5¸ö×Ö½Ú£¬¶¨ÒåÒ»¸ö»º³åÇø 108 | 109 | char i; //¶¨ÒåÒ»¸ö±äÁ¿ÓÃÓÚforÑ­»· 110 | DHT11_Rst(); //¸´Î»DHT11 111 | if(DHT11_Check() == 0) //ÅжÏDHT11»Ø¸´×´Ì¬=0µÄ»°£¬±íʾÕýÈ·£¬½øÈëif 112 | { 113 | for(i = 0; i < 5; i++){ //Ò»´ÎÍêÕûµÄÊý¾ÝÓÐ5¸ö×Ö½Ú£¬Ñ­»·5´Î 114 | buf[i] = DHT11_Read_Byte(); //ÿ´Î¶Áȡһ¸ö×Ö½Ú 115 | } 116 | if((buf[0] + buf[1] + buf[2] + buf[3]) == buf[4])//ÅжÏÊý¾ÝУÑ飬ǰ4¸ö×Ö½ÚÏà¼ÓÓ¦¸ÃµÈÓÚµÚ5¸ö×Ö½Ú£¬ÕýÈ·µÄ»°£¬½øÈëif 117 | { 118 | u1_printf("%d\r\n",buf[0]); //ζÈÊý¾Ý 119 | u1_printf("%d\r\n",buf[1]); 120 | u1_printf("%d\r\n",buf[2]); //ʪ¶ÈÊý¾Ý 121 | u1_printf("%d\r\n",buf[3]); 122 | u1_printf("%d\r\n",buf[4]); 123 | *humi = buf[0]; //ʪ¶ÈÊý¾Ý£¬±£´æÔÚhumiÖ¸ÕëÖ¸ÏòµÄµØÖ·±äÁ¿ÖÐ 124 | *temp = buf[2]; //ζÈÊý¾Ý£¬±£´æÔÚtempÖ¸ÕëÖ¸ÏòµÄµØÖ·±äÁ¿ÖÐ 125 | }else return 1; //·´Ö®£¬Êý¾ÝУÑé´íÎó£¬Ö±½Ó·µ»Ø1 126 | }else return 2; //·´Ö®£¬Èç¹ûDHT11»Ø¸´×´Ì¬=1µÄ»°£¬±íʾ´íÎ󣬽øÈëelse£¬Ö±½Ó·µ»Ø2 127 | 128 | return 0; //¶ÁÈ¡ÕýÈ··µ»Ø0 129 | } 130 | 131 | /*-------------------------------------------------*/ 132 | /*º¯ÊýÃû£º³õʼ»¯DHT11 */ 133 | /*²Î Êý£ºÎÞ */ 134 | /*·µ»ØÖµ£º1´íÎó 0ÕýÈ· */ 135 | /*-------------------------------------------------*/ 136 | char DHT11_Init(void) 137 | { 138 | GPIO_InitTypeDef GPIO_InitStructure; //¶¨ÒåÒ»¸öIO¶Ë¿Ú²ÎÊý½á¹¹Ìå 139 | 140 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //ʹÄÜPA¶Ë¿ÚʱÖÓ 141 | 142 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //×¼±¸ÉèÖÃPA8 143 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //ËÙÂÊ50Mhz 144 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //ÍÆÃâÊä³ö·½Ê½ 145 | GPIO_Init(GPIOA, &GPIO_InitStructure); //ÉèÖÃPA8 146 | DHT11_Rst(); //¸´Î»DHT11 147 | return DHT11_Check(); //·µ»ØDHT11µÄ»Ø¸´×´Ì¬ 148 | } 149 | 150 | 151 | 152 | 153 | 154 | -------------------------------------------------------------------------------- /wifi.c: -------------------------------------------------------------------------------- 1 | 2 | /*-------------------------------------------------*/ 3 | /* */ 4 | /* WIFI£¨ESP8266£©Ô´Îļþ */ 5 | /* */ 6 | /*-------------------------------------------------*/ 7 | 8 | // Ó²¼þÁ¬½Ó£º 9 | // PA2 RX 10 | // PA3 TX 11 | // PA4 ¸´Î» 12 | 13 | #include "stm32f10x.h" //°üº¬ÐèÒªµÄÍ·Îļþ 14 | #include "wifi.h" //°üº¬ÐèÒªµÄÍ·Îļþ 15 | #include "delay.h" //°üº¬ÐèÒªµÄÍ·Îļþ 16 | #include "usart1.h" //°üº¬ÐèÒªµÄÍ·Îļþ 17 | 18 | char wifi_mode = 0; //ÁªÍøÄ£Ê½ 0£ºSSIDºÍÃÜÂëдÔÚ³ÌÐòÀï 1£ºSmartconfig·½Ê½ÓÃAPP·¢ËÍ 19 | 20 | /*-------------------------------------------------*/ 21 | /*º¯ÊýÃû£º³õʼ»¯WiFiµÄ¸´Î»IO */ 22 | /*²Î Êý£ºÎÞ */ 23 | /*·µ»ØÖµ£ºÎÞ */ 24 | /*-------------------------------------------------*/ 25 | void WiFi_ResetIO_Init(void) 26 | { 27 | GPIO_InitTypeDef GPIO_InitStructure; //¶¨ÒåÒ»¸öÉèÖÃIO¶Ë¿Ú²ÎÊýµÄ½á¹¹Ìå 28 | RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA , ENABLE); //ʹÄÜPA¶Ë¿ÚʱÖÓ 29 | 30 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //×¼±¸ÉèÖÃPA4 31 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //ËÙÂÊ50Mhz 32 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //ÍÆÃâÊä³ö·½Ê½ 33 | GPIO_Init(GPIOA, &GPIO_InitStructure); //ÉèÖÃPA4 34 | RESET_IO(1); //¸´Î»IOÀ­¸ßµçƽ 35 | } 36 | /*-------------------------------------------------*/ 37 | /*º¯ÊýÃû£ºWiFi·¢ËÍÉèÖÃÖ¸Áî */ 38 | /*²Î Êý£ºcmd£ºÖ¸Áî */ 39 | /*²Î Êý£ºtimeout£º³¬Ê±Ê±¼ä£¨100msµÄ±¶Êý£© */ 40 | /*·µ»ØÖµ£º0£ºÕýÈ· ÆäËû£º´íÎó */ 41 | /*-------------------------------------------------*/ 42 | char WiFi_SendCmd(char *cmd, int timeout) 43 | { 44 | WiFi_RxCounter = 0; //WiFi½ÓÊÕÊý¾ÝÁ¿±äÁ¿ÇåÁã 45 | memset(WiFi_RX_BUF, 0, WiFi_RXBUFF_SIZE); //Çå¿ÕWiFi½ÓÊÕ»º³åÇø 46 | WiFi_printf("%s\r\n", cmd); //·¢ËÍÖ¸Áî 47 | while(timeout--) //µÈ´ý³¬Ê±Ê±¼äµ½0 48 | { 49 | delay_ms(100); //ÑÓʱ100ms 50 | if(strstr(WiFi_RX_BUF, "OK")) //Èç¹û½ÓÊÕµ½OK±íʾָÁî³É¹¦ 51 | break; //Ö÷¶¯Ìø³öwhileÑ­»· 52 | u1_printf("%d ", timeout); //´®¿ÚÊä³öÏÖÔڵij¬Ê±Ê±¼ä 53 | } 54 | u1_printf("\r\n"); //´®¿ÚÊä³öÐÅÏ¢ 55 | if(timeout <= 0)return 1; //Èç¹ûtimeout<=0£¬ËµÃ÷³¬Ê±Ê±¼äµ½ÁË£¬Ò²Ã»ÄÜÊÕµ½OK£¬·µ»Ø1 56 | else return 0; //·´Ö®£¬±íʾÕýÈ·£¬ËµÃ÷ÊÕµ½OK£¬Í¨¹ýbreakÖ÷¶¯Ìø³öwhile 57 | } 58 | /*-------------------------------------------------*/ 59 | /*º¯ÊýÃû£ºWiFi¸´Î» */ 60 | /*²Î Êý£ºtimeout£º³¬Ê±Ê±¼ä£¨100msµÄ±¶Êý£© */ 61 | /*·µ»ØÖµ£º0£ºÕýÈ· ÆäËû£º´íÎó */ 62 | /*-------------------------------------------------*/ 63 | char WiFi_Reset(int timeout) 64 | { 65 | RESET_IO(0); //¸´Î»IOÀ­µÍµçƽ 66 | delay_ms(500); //ÑÓʱ500ms 67 | RESET_IO(1); //¸´Î»IOÀ­¸ßµçƽ 68 | while(timeout--) //µÈ´ý³¬Ê±Ê±¼äµ½0 69 | { 70 | delay_ms(100); //ÑÓʱ100ms 71 | if(strstr(WiFi_RX_BUF, "ready")) //Èç¹û½ÓÊÕµ½ready±íʾ¸´Î»³É¹¦ 72 | break; //Ö÷¶¯Ìø³öwhileÑ­»· 73 | u1_printf("%d ", timeout); //´®¿ÚÊä³öÏÖÔڵij¬Ê±Ê±¼ä 74 | } 75 | u1_printf("\r\n"); //´®¿ÚÊä³öÐÅÏ¢ 76 | if(timeout <= 0)return 1; //Èç¹ûtimeout<=0£¬ËµÃ÷³¬Ê±Ê±¼äµ½ÁË£¬Ò²Ã»ÄÜÊÕµ½ready£¬·µ»Ø1 77 | else return 0; //·´Ö®£¬±íʾÕýÈ·£¬ËµÃ÷ÊÕµ½ready£¬Í¨¹ýbreakÖ÷¶¯Ìø³öwhile 78 | } 79 | /*-------------------------------------------------*/ 80 | /*º¯ÊýÃû£ºWiFi¼ÓÈë·ÓÉÆ÷Ö¸Áî */ 81 | /*²Î Êý£ºtimeout£º³¬Ê±Ê±¼ä£¨1sµÄ±¶Êý£© */ 82 | /*·µ»ØÖµ£º0£ºÕýÈ· ÆäËû£º´íÎó */ 83 | /*-------------------------------------------------*/ 84 | char WiFi_JoinAP(int timeout) 85 | { 86 | WiFi_RxCounter = 0; //WiFi½ÓÊÕÊý¾ÝÁ¿±äÁ¿ÇåÁã 87 | memset(WiFi_RX_BUF, 0, WiFi_RXBUFF_SIZE); //Çå¿ÕWiFi½ÓÊÕ»º³åÇø 88 | WiFi_printf("AT+CWJAP=\"%s\",\"%s\"\r\n", SSID, PASS); //·¢ËÍÖ¸Áî 89 | while(timeout--) //µÈ´ý³¬Ê±Ê±¼äµ½0 90 | { 91 | delay_ms(1000); //ÑÓʱ1s 92 | if(strstr(WiFi_RX_BUF, "OK")) //Èç¹û½ÓÊÕµ½WIFI GOT IP±íʾ³É¹¦ 93 | break; //Ö÷¶¯Ìø³öwhileÑ­»· 94 | u1_printf("%d ", timeout); //´®¿ÚÊä³öÏÖÔڵij¬Ê±Ê±¼ä 95 | } 96 | u1_printf("\r\n%s\r\n", WiFi_RX_BUF); 97 | u1_printf("\r\n"); //´®¿ÚÊä³öÐÅÏ¢ 98 | if(timeout <= 0)return 1; //Èç¹ûtimeout<=0£¬ËµÃ÷³¬Ê±Ê±¼äµ½ÁË£¬Ò²Ã»ÄÜÊÕµ½WIFI GOT IP£¬·µ»Ø1 99 | return 0; //ÕýÈ·£¬·µ»Ø0 100 | } 101 | /*-------------------------------------------------*/ 102 | /*º¯ÊýÃû£ºÁ¬½ÓTCP·þÎñÆ÷£¬²¢½øÈë͸´«Ä£Ê½ */ 103 | /*²Î Êý£ºtimeout£º ³¬Ê±Ê±¼ä£¨100msµÄ±¶Êý£© */ 104 | /*·µ»ØÖµ£º0£ºÕýÈ· ÆäËû£º´íÎó */ 105 | /*-------------------------------------------------*/ 106 | char WiFi_Connect_Server(int timeout) 107 | { 108 | WiFi_RxCounter=0; //WiFi½ÓÊÕÊý¾ÝÁ¿±äÁ¿ÇåÁã 109 | memset(WiFi_RX_BUF,0,WiFi_RXBUFF_SIZE); //Çå¿ÕWiFi½ÓÊÕ»º³åÇø 110 | WiFi_printf("AT+CIPSTART=\"TCP\",\"%s\",%d\r\n", ServerIP, ServerPort);//·¢ËÍÁ¬½Ó·þÎñÆ÷Ö¸Áî 111 | while(timeout--) //µÈ´ý³¬Ê±Óë·ñ 112 | { 113 | delay_ms(100); //ÑÓʱ100ms 114 | if(strstr(WiFi_RX_BUF, "CONNECT")) //Èç¹û½ÓÊܵ½CONNECT±íʾÁ¬½Ó³É¹¦ 115 | break; //Ìø³öwhileÑ­»· 116 | if(strstr(WiFi_RX_BUF, "CLOSED")) //Èç¹û½ÓÊܵ½CLOSED±íʾ·þÎñÆ÷먦Æô 117 | return 1; //·þÎñÆ÷먦Æô·µ»Ø1 118 | if(strstr(WiFi_RX_BUF, "ALREADY CONNECTED"))//Èç¹û½ÓÊܵ½ALREADY CONNECTEDÒѾ­½¨Á¢Á¬½Ó 119 | return 2; //ÒѾ­½¨Á¢Á¬½Ó·µ»Ø2 120 | u1_printf("%d ", timeout); //´®¿ÚÊä³öÏÖÔڵij¬Ê±Ê±¼ä 121 | } 122 | u1_printf("\r\n"); //´®¿ÚÊä³öÐÅÏ¢ 123 | if(timeout <= 0)return 3; //³¬Ê±´íÎ󣬷µ»Ø3 124 | else //Á¬½Ó³É¹¦£¬×¼±¸½øÈë͸´« 125 | { 126 | u1_printf("Á¬½Ó·þÎñÆ÷³É¹¦£¬×¼±¸½øÈë͸´«\r\n"); //´®¿ÚÏÔʾÐÅÏ¢ 127 | WiFi_RxCounter = 0; //WiFi½ÓÊÕÊý¾ÝÁ¿±äÁ¿ÇåÁã 128 | memset(WiFi_RX_BUF, 0, WiFi_RXBUFF_SIZE); //Çå¿ÕWiFi½ÓÊÕ»º³åÇø 129 | WiFi_printf("AT+CIPSEND\r\n"); //·¢ËͽøÈë͸´«Ö¸Áî 130 | while(timeout--) //µÈ´ý³¬Ê±Óë·ñ 131 | { 132 | delay_ms(100); //ÑÓʱ100ms 133 | if(strstr(WiFi_RX_BUF, "\r\nOK\r\n\r\n>"))//Èç¹û³ÉÁ¢±íʾ½øÈë͸´«³É¹¦ 134 | break; //Ìø³öwhileÑ­»· 135 | u1_printf("%d ", timeout); //´®¿ÚÊä³öÏÖÔڵij¬Ê±Ê±¼ä 136 | } 137 | if(timeout <= 0)return 4; //͸´«³¬Ê±´íÎ󣬷µ»Ø4 138 | } 139 | return 0; //³É¹¦·µ»Ø0 140 | } 141 | /*-------------------------------------------------*/ 142 | /*º¯ÊýÃû£ºWiFi_Smartconfig */ 143 | /*²Î Êý£ºtimeout£º³¬Ê±Ê±¼ä£¨1sµÄ±¶Êý£© */ 144 | /*·µ»ØÖµ£º0£ºÕýÈ· ÆäËû£º´íÎó */ 145 | /*-------------------------------------------------*/ 146 | char WiFi_Smartconfig(int timeout) 147 | { 148 | 149 | WiFi_RxCounter=0; //WiFi½ÓÊÕÊý¾ÝÁ¿±äÁ¿ÇåÁã 150 | memset(WiFi_RX_BUF,0,WiFi_RXBUFF_SIZE); //Çå¿ÕWiFi½ÓÊÕ»º³åÇø 151 | while(timeout--) //µÈ´ý³¬Ê±Ê±¼äµ½0 152 | { 153 | delay_ms(1000); //ÑÓʱ1s 154 | if(strstr(WiFi_RX_BUF, "connected")) //Èç¹û´®¿Ú½ÓÊܵ½connected±íʾ³É¹¦ 155 | break; //Ìø³öwhileÑ­»· 156 | u1_printf("%d ", timeout); //´®¿ÚÊä³öÏÖÔڵij¬Ê±Ê±¼ä 157 | } 158 | u1_printf("\r\n"); //´®¿ÚÊä³öÐÅÏ¢ 159 | if(timeout <= 0)return 1; //³¬Ê±´íÎ󣬷µ»Ø1 160 | return 0; //ÕýÈ··µ»Ø0 161 | } 162 | /*-------------------------------------------------*/ 163 | /*º¯ÊýÃû£ºµÈ´ý¼ÓÈë·ÓÉÆ÷ */ 164 | /*²Î Êý£ºtimeout£º³¬Ê±Ê±¼ä£¨1sµÄ±¶Êý£© */ 165 | /*·µ»ØÖµ£º0£ºÕýÈ· ÆäËû£º´íÎó */ 166 | /*-------------------------------------------------*/ 167 | char WiFi_WaitAP(int timeout) 168 | { 169 | while(timeout--){ //µÈ´ý³¬Ê±Ê±¼äµ½0 170 | delay_ms(1000); //ÑÓʱ1s 171 | if(strstr(WiFi_RX_BUF, "WIFI GOT IP")) //Èç¹û½ÓÊÕµ½WIFI GOT IP±íʾ³É¹¦ 172 | break; //Ö÷¶¯Ìø³öwhileÑ­»· 173 | u1_printf("%d ", timeout); //´®¿ÚÊä³öÏÖÔڵij¬Ê±Ê±¼ä 174 | } 175 | u1_printf("\r\n"); //´®¿ÚÊä³öÐÅÏ¢ 176 | if(timeout <= 0)return 1; //Èç¹ûtimeout<=0£¬ËµÃ÷³¬Ê±Ê±¼äµ½ÁË£¬Ò²Ã»ÄÜÊÕµ½WIFI GOT IP£¬·µ»Ø1 177 | return 0; //ÕýÈ·£¬·µ»Ø0 178 | } 179 | /*-------------------------------------------------*/ 180 | /*º¯ÊýÃû£ºWiFiÁ¬½Ó·þÎñÆ÷ */ 181 | /*²Î Êý£ºÎÞ */ 182 | /*·µ»ØÖµ£º0£ºÕýÈ· ÆäËû£º´íÎó */ 183 | /*-------------------------------------------------*/ 184 | char WiFi_Connect_IoTServer(void) 185 | { 186 | u1_printf("×¼±¸¸´Î»Ä£¿é\r\n"); //´®¿ÚÌáʾÊý¾Ý 187 | if(WiFi_Reset(50)) //¸´Î»£¬100ms³¬Ê±µ¥Î»£¬×ܼÆ5s³¬Ê±Ê±¼ä 188 | { 189 | u1_printf("¸´Î»Ê§°Ü£¬×¼±¸ÖØÆô\r\n"); //·µ»Ø·Ç0Öµ£¬½øÈëif£¬´®¿ÚÌáʾÊý¾Ý 190 | return 1; //·µ»Ø1 191 | }else u1_printf("¸´Î»³É¹¦\r\n"); //´®¿ÚÌáʾÊý¾Ý 192 | 193 | u1_printf("×¼±¸ÉèÖÃSTAģʽ\r\n"); //´®¿ÚÌáʾÊý¾Ý 194 | if(WiFi_SendCmd("AT+CWMODE=1",50))//ÉèÖÃSTAģʽ£¬100ms³¬Ê±µ¥Î»£¬×ܼÆ5s³¬Ê±Ê±¼ä 195 | { 196 | u1_printf("ÉèÖÃSTAģʽʧ°Ü£¬×¼±¸ÖØÆô\r\n"); //·µ»Ø·Ç0Öµ£¬½øÈëif£¬´®¿ÚÌáʾÊý¾Ý 197 | return 2; //·µ»Ø2 198 | }else u1_printf("ÉèÖÃSTAģʽ³É¹¦\r\n"); //´®¿ÚÌáʾÊý¾Ý 199 | 200 | if(wifi_mode==0) //Èç¹ûÁªÍøÄ£Ê½=0£ºSSIDºÍÃÜÂëдÔÚ³ÌÐòÀï 201 | { 202 | u1_printf("×¼±¸È¡Ïû×Ô¶¯Á¬½Ó\r\n"); //´®¿ÚÌáʾÊý¾Ý 203 | if(WiFi_SendCmd("AT+CWAUTOCONN=0",50)) //È¡Ïû×Ô¶¯Á¬½Ó£¬100ms³¬Ê±µ¥Î»£¬×ܼÆ5s³¬Ê±Ê±¼ä 204 | { 205 | u1_printf("È¡Ïû×Ô¶¯Á¬½Óʧ°Ü£¬×¼±¸ÖØÆô\r\n"); //·µ»Ø·Ç0Öµ£¬½øÈëif£¬´®¿ÚÌáʾÊý¾Ý 206 | return 3; //·µ»Ø3 207 | }else u1_printf("È¡Ïû×Ô¶¯Á¬½Ó³É¹¦\r\n"); //´®¿ÚÌáʾÊý¾Ý 208 | 209 | u1_printf("×¼±¸Á¬½Ó·ÓÉÆ÷\r\n"); //´®¿ÚÌáʾÊý¾Ý 210 | if(WiFi_JoinAP(30))//Á¬½Ó·ÓÉÆ÷,1s³¬Ê±µ¥Î»£¬×ܼÆ30s³¬Ê±Ê±¼ä 211 | { 212 | u1_printf("Á¬½Ó·ÓÉÆ÷ʧ°Ü£¬×¼±¸ÖØÆô\r\n"); //·µ»Ø·Ç0Öµ£¬½øÈëif£¬´®¿ÚÌáʾÊý¾Ý 213 | return 4; //·µ»Ø4 214 | }else u1_printf("Á¬½Ó·ÓÉÆ÷³É¹¦\r\n"); //´®¿ÚÌáʾÊý¾Ý 215 | } 216 | 217 | u1_printf("×¼±¸ÉèÖÃ͸´«\r\n"); //´®¿ÚÌáʾÊý¾Ý 218 | if(WiFi_SendCmd("AT+CIPMODE=1",50)) //ÉèÖÃ͸´«£¬100ms³¬Ê±µ¥Î»£¬×ܼÆ5s³¬Ê±Ê±¼ä 219 | { 220 | u1_printf("ÉèÖÃ͸´«Ê§°Ü£¬×¼±¸ÖØÆô\r\n"); //·µ»Ø·Ç0Öµ£¬½øÈëif£¬´®¿ÚÌáʾÊý¾Ý 221 | return 8; //·µ»Ø8 222 | }else u1_printf("ÉèÖÃ͸´«³É¹¦\r\n"); //´®¿ÚÌáʾÊý¾Ý 223 | 224 | u1_printf("×¼±¸¹Ø±Õ¶à·Á¬½Ó\r\n"); //´®¿ÚÌáʾÊý¾Ý 225 | if(WiFi_SendCmd("AT+CIPMUX=0",50)) //¹Ø±Õ¶à·Á¬½Ó£¬100ms³¬Ê±µ¥Î»£¬×ܼÆ5s³¬Ê±Ê±¼ä 226 | { 227 | u1_printf("¹Ø±Õ¶à·Á¬½Óʧ°Ü£¬×¼±¸ÖØÆô\r\n"); //·µ»Ø·Ç0Öµ£¬½øÈëif£¬´®¿ÚÌáʾÊý¾Ý 228 | return 9; //·µ»Ø9 229 | }else u1_printf("¹Ø±Õ¶à·Á¬½Ó³É¹¦\r\n"); //´®¿ÚÌáʾÊý¾Ý 230 | 231 | u1_printf("×¼±¸Á¬½Ó·þÎñÆ÷\r\n"); //´®¿ÚÌáʾÊý¾Ý 232 | if(WiFi_Connect_Server(100)) //Á¬½Ó·þÎñÆ÷£¬100ms³¬Ê±µ¥Î»£¬×ܼÆ10s³¬Ê±Ê±¼ä 233 | { 234 | u1_printf("Á¬½Ó·þÎñÆ÷ʧ°Ü£¬×¼±¸ÖØÆô\r\n"); //·µ»Ø·Ç0Öµ£¬½øÈëif£¬´®¿ÚÌáʾÊý¾Ý 235 | return 10; //·µ»Ø10 236 | }else u1_printf("Á¬½Ó·þÎñÆ÷³É¹¦\r\n"); //´®¿ÚÌáʾÊý¾Ý 237 | return 0; //ÕýÈ··µ»Ø0 238 | } 239 | 240 | 241 | -------------------------------------------------------------------------------- /mqtt: -------------------------------------------------------------------------------- 1 | #include "stm32f10x.h" //°üº¬ÐèÒªµÄÍ·Îļþ 2 | #include "mqtt.h" //°üº¬ÐèÒªµÄÍ·Îļþ 3 | #include "string.h" //°üº¬ÐèÒªµÄÍ·Îļþ 4 | #include "stdio.h" //°üº¬ÐèÒªµÄÍ·Îļþ 5 | #include "usart1.h" //°üº¬ÐèÒªµÄÍ·Îļþ 6 | #include "wifi.h" //°üº¬ÐèÒªµÄÍ·Îļþ 7 | 8 | unsigned char MQTT_RxDataBuf[R_NUM][RBUFF_UNIT]; //Êý¾ÝµÄ½ÓÊÕ»º³åÇø,ËùÓзþÎñÆ÷·¢À´µÄÊý¾Ý£¬´æ·ÅÔڸûº³åÇø,»º³åÇøµÚÒ»¸ö×Ö½Ú´æ·ÅÊý¾Ý³¤¶È 9 | unsigned char *MQTT_RxDataInPtr; //Ö¸Ïò½ÓÊÕ»º³åÇø´æ·ÅÊý¾ÝµÄλÖà 10 | unsigned char *MQTT_RxDataOutPtr; //Ö¸Ïò½ÓÊÕ»º³åÇø¶ÁÈ¡Êý¾ÝµÄλÖà 11 | unsigned char *MQTT_RxDataEndPtr; //Ö¸Ïò½ÓÊÕ»º³åÇø½áÊøµÄλÖà 12 | 13 | unsigned char MQTT_TxDataBuf[T_NUM][TBUFF_UNIT]; //Êý¾ÝµÄ·¢ËÍ»º³åÇø,ËùÓз¢Íù·þÎñÆ÷µÄÊý¾Ý£¬´æ·ÅÔڸûº³åÇø,»º³åÇøµÚÒ»¸ö×Ö½Ú´æ·ÅÊý¾Ý³¤¶È 14 | unsigned char *MQTT_TxDataInPtr; //Ö¸Ïò·¢ËÍ»º³åÇø´æ·ÅÊý¾ÝµÄλÖà 15 | unsigned char *MQTT_TxDataOutPtr; //Ö¸Ïò·¢ËÍ»º³åÇø¶ÁÈ¡Êý¾ÝµÄλÖà 16 | unsigned char *MQTT_TxDataEndPtr; //Ö¸Ïò·¢ËÍ»º³åÇø½áÊøµÄλÖà 17 | 18 | unsigned char MQTT_CMDBuf[C_NUM][CBUFF_UNIT]; //ÃüÁîÊý¾ÝµÄ½ÓÊÕ»º³åÇø 19 | unsigned char *MQTT_CMDInPtr; //Ö¸ÏòÃüÁ³åÇø´æ·ÅÊý¾ÝµÄλÖà 20 | unsigned char *MQTT_CMDOutPtr; //Ö¸ÏòÃüÁ³åÇø¶ÁÈ¡Êý¾ÝµÄλÖà 21 | unsigned char *MQTT_CMDEndPtr; //Ö¸ÏòÃüÁ³åÇø½áÊøµÄλÖà 22 | 23 | char ClientID[128]; //´æ·Å¿Í»§¶ËIDµÄ»º³åÇø 24 | int ClientID_len; //´æ·Å¿Í»§¶ËIDµÄ³¤¶È 25 | 26 | char Username[128]; //´æ·ÅÓû§ÃûµÄ»º³åÇø 27 | int Username_len; //´æ·ÅÓû§ÃûµÄ³¤¶È 28 | 29 | char Passward[128]; //´æ·ÅÃÜÂëµÄ»º³åÇø 30 | int Passward_len; //´æ·ÅÃÜÂëµÄ³¤¶È 31 | 32 | char ServerIP[128]; //´æ·Å·þÎñÆ÷IP»òÊÇÓòÃû 33 | int ServerPort; //´æ·Å·þÎñÆ÷µÄ¶Ë¿ÚºÅ 34 | 35 | int Fixed_len; //¹Ì¶¨±¨Í·³¤¶È 36 | int Variable_len; //¿É±ä±¨Í·³¤¶È 37 | int Payload_len; //ÓÐЧ¸ººÉ³¤¶È 38 | unsigned char temp_buff[TBUFF_UNIT]; //ÁÙʱ»º³åÇø£¬¹¹½¨±¨ÎÄÓà 39 | 40 | char pingFlag; //ping±¨ÎÄ״̬ 0£ºÕý³£×´Ì¬£¬µÈ´ý¼ÆÊ±Ê±¼äµ½£¬·¢ËÍPing±¨ÎÄ 41 | //ping±¨ÎÄ״̬ 1£ºPing±¨ÎÄÒÑ·¢ËÍ£¬µ±ÊÕµ½ ·þÎñÆ÷»Ø¸´±¨ÎÄµÄºó ½«1ÖÃΪ0 42 | char connectFlag; //ͬ·þÎñÆ÷Á¬½Ó״̬ 0£º»¹Ã»ÓÐÁ¬½Ó·þÎñÆ÷ 1£ºÁ¬½ÓÉÏ·þÎñÆ÷ÁË 43 | char connectPackFlag; //CONNECT±¨ÎÄ״̬ 1£ºCONNECT±¨Îijɹ¦ 44 | char subcribePackFlag; //¶©Ôı¨ÎÄ״̬ 1£º¶©Ôı¨Îijɹ¦ 45 | 46 | /*----------------------------------------------------------*/ 47 | /*º¯ÊýÃû£º³õʼ»¯½ÓÊÕ,·¢ËÍ,ÃüÁîÊý¾ÝµÄ »º³åÇø ÒÔ¼°¸÷״̬²ÎÊý */ 48 | /*²Î Êý£ºÎÞ */ 49 | /*·µ»ØÖµ£ºÎÞ */ 50 | /*----------------------------------------------------------*/ 51 | void MQTT_Buff_Init(void) 52 | { 53 | MQTT_RxDataInPtr=MQTT_RxDataBuf[0]; //Ö¸Ïò·¢ËÍ»º³åÇø´æ·ÅÊý¾ÝµÄÖ¸Õë¹éλ 54 | MQTT_RxDataOutPtr=MQTT_RxDataInPtr; //Ö¸Ïò·¢ËÍ»º³åÇø¶ÁÈ¡Êý¾ÝµÄÖ¸Õë¹éλ 55 | MQTT_RxDataEndPtr=MQTT_RxDataBuf[R_NUM-1]; //Ö¸Ïò·¢ËÍ»º³åÇø½áÊøµÄÖ¸Õë¹éλ 56 | 57 | MQTT_TxDataInPtr=MQTT_TxDataBuf[0]; //Ö¸Ïò·¢ËÍ»º³åÇø´æ·ÅÊý¾ÝµÄÖ¸Õë¹éλ 58 | MQTT_TxDataOutPtr=MQTT_TxDataInPtr; //Ö¸Ïò·¢ËÍ»º³åÇø¶ÁÈ¡Êý¾ÝµÄÖ¸Õë¹éλ 59 | MQTT_TxDataEndPtr=MQTT_TxDataBuf[T_NUM-1]; //Ö¸Ïò·¢ËÍ»º³åÇø½áÊøµÄÖ¸Õë¹éλ 60 | 61 | MQTT_CMDInPtr=MQTT_CMDBuf[0]; //Ö¸ÏòÃüÁ³åÇø´æ·ÅÊý¾ÝµÄÖ¸Õë¹éλ 62 | MQTT_CMDOutPtr=MQTT_CMDInPtr; //Ö¸ÏòÃüÁ³åÇø¶ÁÈ¡Êý¾ÝµÄÖ¸Õë¹éλ 63 | MQTT_CMDEndPtr=MQTT_CMDBuf[C_NUM-1]; //Ö¸ÏòÃüÁ³åÇø½áÊøµÄÖ¸Õë¹éλ 64 | 65 | MQTT_ConectPack(); //·¢ËÍ»º³åÇøÌí¼ÓÁ¬½Ó±¨ÎÄ 66 | MQTT_Subscribe(S_TOPIC_NAME,0); //·¢ËÍ»º³åÇøÌí¼Ó¶©ÔÄtopic£¬µÈ¼¶0 67 | 68 | pingFlag = connectPackFlag = subcribePackFlag = 0; //¸÷¸ö²ÎÊýÇåÁã 69 | } 70 | 71 | /*----------------------------------------------------------*/ 72 | /*º¯ÊýÃû£ºÔƳõʼ»¯²ÎÊý£¬µÃµ½¿Í»§¶ËID£¬Óû§ÃûºÍÃÜÂë */ 73 | /*²Î Êý£ºÎÞ */ 74 | /*·µ»ØÖµ£ºÎÞ */ 75 | /*----------------------------------------------------------*/ 76 | void IoT_Parameter_Init(void) 77 | { 78 | memset(ClientID,0,128); //¿Í»§¶ËIDµÄ»º³åÇøÈ«²¿ÇåÁã 79 | sprintf(ClientID,"%s",DEVICEID); //¹¹½¨¿Í»§¶ËID£¬²¢´æÈ뻺³åÇø 80 | ClientID_len = strlen(ClientID); //¼ÆËã¿Í»§¶ËIDµÄ³¤¶È 81 | 82 | memset(Username,0,128); //Óû§ÃûµÄ»º³åÇøÈ«²¿ÇåÁã 83 | sprintf(Username,"%s",PRODUCTID); //¹¹½¨Óû§Ãû£¬²¢´æÈ뻺³åÇø 84 | Username_len = strlen(Username); //¼ÆËãÓû§ÃûµÄ³¤¶È 85 | 86 | memset(Passward,0,128); //Óû§ÃûµÄ»º³åÇøÈ«²¿ÇåÁã 87 | sprintf(Passward,"%s",AUTHENTICATION); //¹¹½¨ÃÜÂ룬²¢´æÈ뻺³åÇø 88 | Passward_len = strlen(Passward); //¼ÆËãÃÜÂëµÄ³¤¶È 89 | 90 | memset(ServerIP,0,128); 91 | sprintf(ServerIP,"%s","183.230.40.39"); //¹¹½¨·þÎñÆ÷ÓòÃû 92 | ServerPort = 6002; //·þÎñÆ÷¶Ë¿ÚºÅ6002 93 | 94 | u1_printf("·þ Îñ Æ÷£º%s:%d\r\n",ServerIP,ServerPort); //´®¿ÚÊä³öµ÷ÊÔÐÅÏ¢ 95 | u1_printf("¿Í»§¶ËID£º%s\r\n",ClientID); //´®¿ÚÊä³öµ÷ÊÔÐÅÏ¢ 96 | u1_printf("Óà »§ Ãû£º%s\r\n",Username); //´®¿ÚÊä³öµ÷ÊÔÐÅÏ¢ 97 | u1_printf("ÃÜ Â룺%s\r\n",Passward); //´®¿ÚÊä³öµ÷ÊÔÐÅÏ¢ 98 | } 99 | 100 | /*----------------------------------------------------------*/ 101 | /*º¯ÊýÃû£ºÁ¬½Ó·þÎñÆ÷±¨ÎÄ */ 102 | /*²Î Êý£ºÎÞ */ 103 | /*·µ»ØÖµ£ºÎÞ */ 104 | /*----------------------------------------------------------*/ 105 | void MQTT_ConectPack(void) 106 | { 107 | int temp,Remaining_len; 108 | 109 | Fixed_len = 1; //Á¬½Ó±¨ÎÄÖУ¬¹Ì¶¨±¨Í·³¤¶ÈÔÝʱÏÈ=1 110 | Variable_len = 10; //Á¬½Ó±¨ÎÄÖУ¬¿É±ä±¨Í·³¤¶È=10 111 | Payload_len = 2 + ClientID_len + 2 + Username_len + 2 + Passward_len; //Á¬½Ó±¨ÎÄÖУ¬¸ºÔس¤¶È 112 | Remaining_len = Variable_len + Payload_len; //Ê£Ó೤¶È=¿É±ä±¨Í·³¤¶È+¸ºÔس¤¶È 113 | 114 | temp_buff[0]=0x10; //¹Ì¶¨±¨Í·µÚ1¸ö×Ö½Ú £º¹Ì¶¨0x01 115 | do{ //Ñ­»·´¦Àí¹Ì¶¨±¨Í·ÖеÄÊ£Ó೤¶È×Ö½Ú£¬×Ö½ÚÁ¿¸ù¾ÝÊ£Óà×Ö½ÚµÄÕæÊµ³¤¶È±ä»¯ 116 | temp = Remaining_len%128; //Ê£Ó೤¶ÈÈ¡Óà128 117 | Remaining_len = Remaining_len/128; //Ê£Ó೤¶ÈÈ¡Õû128 118 | if(Remaining_len>0) 119 | temp |= 0x80; //°´Ð­ÒéÒªÇóλ7ÖÃλ 120 | temp_buff[Fixed_len] = temp; //Ê£Ó೤¶È×ֽڼǼһ¸öÊý¾Ý 121 | Fixed_len++; //¹Ì¶¨±¨Í·×ܳ¤¶È+1 122 | }while(Remaining_len > 0); //Èç¹ûRemaining_len>0µÄ»°£¬ÔٴνøÈëÑ­»· 123 | 124 | temp_buff[Fixed_len + 0] = 0x00; //¿É±ä±¨Í·µÚ1¸ö×Ö½Ú £º¹Ì¶¨0x00 125 | temp_buff[Fixed_len + 1] = 0x04; //¿É±ä±¨Í·µÚ2¸ö×Ö½Ú £º¹Ì¶¨0x04 126 | temp_buff[Fixed_len + 2] = 0x4D; //¿É±ä±¨Í·µÚ3¸ö×Ö½Ú £º¹Ì¶¨0x4D 127 | temp_buff[Fixed_len + 3] = 0x51; //¿É±ä±¨Í·µÚ4¸ö×Ö½Ú £º¹Ì¶¨0x51 128 | temp_buff[Fixed_len + 4] = 0x54; //¿É±ä±¨Í·µÚ5¸ö×Ö½Ú £º¹Ì¶¨0x54 129 | temp_buff[Fixed_len + 5] = 0x54; //¿É±ä±¨Í·µÚ6¸ö×Ö½Ú £º¹Ì¶¨0x54 130 | temp_buff[Fixed_len + 6] = 0x04; //¿É±ä±¨Í·µÚ7¸ö×Ö½Ú £º¹Ì¶¨0x04 131 | temp_buff[Fixed_len + 7] = 0xC2; //¿É±ä±¨Í·µÚ8¸ö×Ö½Ú £ºÊ¹ÄÜÓû§ÃûºÍÃÜÂëУÑ飬²»Ê¹ÓÃÒÅÖö£¬²»±£Áô»á»° 132 | temp_buff[Fixed_len + 8] = 0x00; //¿É±ä±¨Í·µÚ9¸ö×Ö½Ú £º±£»îʱ¼ä¸ß×Ö½Ú 0x00 133 | temp_buff[Fixed_len + 9] = 0x64; //¿É±ä±¨Í·µÚ10¸ö×Ö½Ú£º±£»îʱ¼ä¸ß×Ö½Ú 0x64 100s 134 | 135 | /* CLIENT_ID */ 136 | temp_buff[Fixed_len+10] = ClientID_len/256; //¿Í»§¶ËID³¤¶È¸ß×Ö½Ú 137 | temp_buff[Fixed_len+11] = ClientID_len%256; //¿Í»§¶ËID³¤¶ÈµÍ×Ö½Ú 138 | memcpy(&temp_buff[Fixed_len+12],ClientID,ClientID_len); //¸´ÖƹýÀ´¿Í»§¶ËID×Ö´® 139 | /* Óû§Ãû */ 140 | temp_buff[Fixed_len+12+ClientID_len] = Username_len/256; //Óû§Ãû³¤¶È¸ß×Ö½Ú 141 | temp_buff[Fixed_len+13+ClientID_len] = Username_len%256; //Óû§Ãû³¤¶ÈµÍ×Ö½Ú 142 | memcpy(&temp_buff[Fixed_len+14+ClientID_len],Username,Username_len); //¸´ÖƹýÀ´Óû§Ãû×Ö´® 143 | /* ÃÜÂë */ 144 | temp_buff[Fixed_len+14+ClientID_len+Username_len] = Passward_len/256; //ÃÜÂ볤¶È¸ß×Ö½Ú 145 | temp_buff[Fixed_len+15+ClientID_len+Username_len] = Passward_len%256; //ÃÜÂ볤¶ÈµÍ×Ö½Ú 146 | memcpy(&temp_buff[Fixed_len+16+ClientID_len+Username_len],Passward,Passward_len); //¸´ÖƹýÀ´ÃÜÂë×Ö´® 147 | 148 | TxDataBuf_Deal(temp_buff, Fixed_len + Variable_len + Payload_len); //¼ÓÈë·¢ËÍÊý¾Ý»º³åÇø 149 | } 150 | 151 | /*----------------------------------------------------------*/ 152 | /*º¯ÊýÃû£ºSUBSCRIBE¶©ÔÄtopic±¨ÎÄ */ 153 | /*²Î Êý£ºQoS£º¶©Ôĵȼ¶ */ 154 | /*²Î Êý£ºtopic_name£º¶©ÔÄtopic±¨ÎÄÃû³Æ */ 155 | /*·µ»ØÖµ£ºÎÞ */ 156 | /*----------------------------------------------------------*/ 157 | void MQTT_Subscribe(char *topic_name, int QoS) 158 | { 159 | Fixed_len = 2; //SUBSCRIBE±¨ÎÄÖУ¬¹Ì¶¨±¨Í·³¤¶È=2 160 | Variable_len = 2; //SUBSCRIBE±¨ÎÄÖУ¬¿É±ä±¨Í·³¤¶È=2 161 | Payload_len = 2 + strlen(topic_name) + 1; //¼ÆËãÓÐЧ¸ººÉ³¤¶È = 2×Ö½Ú(topic_name³¤¶È)+ topic_name×Ö·û´®µÄ³¤¶È + 1×Ö½Ú·þÎñµÈ¼¶ 162 | 163 | temp_buff[0] = 0x82; //µÚ1¸ö×Ö½Ú £º¹Ì¶¨0x82 164 | temp_buff[1] = Variable_len + Payload_len; //µÚ2¸ö×Ö½Ú £º¿É±ä±¨Í·+ÓÐЧ¸ººÉµÄ³¤¶È 165 | temp_buff[2] = 0x00; //µÚ3¸ö×Ö½Ú £º±¨Îıêʶ·û¸ß×Ö½Ú£¬¹Ì¶¨Ê¹ÓÃ0x00 166 | temp_buff[3] = 0x01; //µÚ4¸ö×Ö½Ú £º±¨Îıêʶ·ûµÍ×Ö½Ú£¬¹Ì¶¨Ê¹ÓÃ0x01 167 | temp_buff[4] = strlen(topic_name)/256; //µÚ5¸ö×Ö½Ú £ºtopic_name³¤¶È¸ß×Ö½Ú 168 | temp_buff[5] = strlen(topic_name)%256; //µÚ6¸ö×Ö½Ú £ºtopic_name³¤¶ÈµÍ×Ö½Ú 169 | memcpy(&temp_buff[6], topic_name, strlen(topic_name)); //µÚ7¸ö×Ö½Ú¿ªÊ¼ £º¸´ÖƹýÀ´topic_name×Ö´® 170 | temp_buff[6 + strlen(topic_name)] = QoS; //×îºó1¸ö×Ö½Ú£º¶©Ôĵȼ¶ 171 | 172 | TxDataBuf_Deal(temp_buff, Fixed_len + Variable_len + Payload_len); //¼ÓÈë·¢ËÍÊý¾Ý»º³åÇø 173 | } 174 | 175 | /*----------------------------------------------------------*/ 176 | /*º¯ÊýÃû£ºPING±¨ÎÄ£¬ÐÄÌø°ü */ 177 | /*²Î Êý£ºÎÞ */ 178 | /*·µ»ØÖµ£ºÎÞ */ 179 | /*----------------------------------------------------------*/ 180 | void MQTT_PingREQ(void) 181 | { 182 | temp_buff[0] = 0xC0; //µÚ1¸ö×Ö½Ú £º¹Ì¶¨0xC0 183 | temp_buff[1] = 0x00; //µÚ2¸ö×Ö½Ú £º¹Ì¶¨0x00 184 | 185 | TxDataBuf_Deal(temp_buff, 2); //¼ÓÈëÊý¾Ýµ½»º³åÇø 186 | } 187 | 188 | /*----------------------------------------------------------*/ 189 | /*º¯ÊýÃû£ºµÈ¼¶0 ·¢²¼ÏûÏ¢±¨ÎÄ */ 190 | /*²Î Êý£ºtopic_name£ºtopicÃû³Æ */ 191 | /*²Î Êý£ºdata£ºÊý¾Ý */ 192 | /*²Î Êý£ºdata_len£ºÊý¾Ý³¤¶È */ 193 | /*·µ»ØÖµ£ºÎÞ */ 194 | /*----------------------------------------------------------*/ 195 | void MQTT_PublishQs0(char *topic, char *data, int data_len) 196 | { 197 | int temp,Remaining_len; 198 | 199 | Fixed_len = 1; //¹Ì¶¨±¨Í·³¤¶ÈÔÝʱÏȵÈÓÚ£º1×Ö½Ú 200 | Variable_len = 2 + strlen(topic); //¿É±ä±¨Í·³¤¶È£º2×Ö½Ú(topic³¤¶È)+ topic×Ö·û´®µÄ³¤¶È 201 | Payload_len = data_len; //ÓÐЧ¸ººÉ³¤¶È£º¾ÍÊÇdata_len 202 | Remaining_len = Variable_len + Payload_len; //Ê£Ó೤¶È=¿É±ä±¨Í·³¤¶È+¸ºÔس¤¶È 203 | 204 | temp_buff[0] = 0x30; //¹Ì¶¨±¨Í·µÚ1¸ö×Ö½Ú £º¹Ì¶¨0x30 205 | do{ //Ñ­»·´¦Àí¹Ì¶¨±¨Í·ÖеÄÊ£Ó೤¶È×Ö½Ú£¬×Ö½ÚÁ¿¸ù¾ÝÊ£Óà×Ö½ÚµÄÕæÊµ³¤¶È±ä»¯ 206 | temp = Remaining_len%128; //Ê£Ó೤¶ÈÈ¡Óà128 207 | Remaining_len = Remaining_len/128; //Ê£Ó೤¶ÈÈ¡Õû128 208 | if(Remaining_len>0) 209 | temp |= 0x80; //°´Ð­ÒéÒªÇóλ7ÖÃλ 210 | temp_buff[Fixed_len] = temp; //Ê£Ó೤¶È×ֽڼǼһ¸öÊý¾Ý 211 | Fixed_len++; //¹Ì¶¨±¨Í·×ܳ¤¶È+1 212 | }while(Remaining_len>0); //Èç¹ûRemaining_len>0µÄ»°£¬ÔٴνøÈëÑ­»· 213 | 214 | temp_buff[Fixed_len+0] = strlen(topic)/256; //¿É±ä±¨Í·µÚ1¸ö×Ö½Ú £ºtopic³¤¶È¸ß×Ö½Ú 215 | temp_buff[Fixed_len+1] = strlen(topic)%256; //¿É±ä±¨Í·µÚ2¸ö×Ö½Ú £ºtopic³¤¶ÈµÍ×Ö½Ú 216 | memcpy(&temp_buff[Fixed_len+2], topic,strlen(topic)); //¿É±ä±¨Í·µÚ3¸ö×Ö½Ú¿ªÊ¼ £º¿½±´topic×Ö·û´® 217 | memcpy(&temp_buff[Fixed_len + 2 + strlen(topic)], data, data_len);//ÓÐЧ¸ººÉ£º¿½±´dataÊý¾Ý 218 | 219 | TxDataBuf_Deal(temp_buff, Fixed_len + Variable_len + Payload_len);//¼ÓÈë·¢ËÍÊý¾Ý»º³åÇø 220 | } 221 | 222 | /*----------------------------------------------------------*/ 223 | /*º¯ÊýÃû£º´¦Àí·þÎñÆ÷·¢À´µÄµÈ¼¶0µÄÍÆËÍ */ 224 | /*²Î Êý£ºredata£º½ÓÊÕµÄÊý¾Ý */ 225 | /*·µ»ØÖµ£ºÎÞ */ 226 | /*----------------------------------------------------------*/ 227 | void MQTT_DealPushdata_Qs0(unsigned char *redata) 228 | { 229 | int re_len; //¶¨ÒåÒ»¸ö±äÁ¿£¬´æ·Å½ÓÊÕµÄÊý¾Ý×ܳ¤¶È 230 | int pack_num; //¶¨ÒåÒ»¸ö±äÁ¿£¬µ±¶à¸öÍÆËÍÒ»Æð¹ýÀ´Ê±£¬±£´æÍÆË͵ĸöÊý 231 | int temp,temp_len; //¶¨ÒåÒ»¸ö±äÁ¿£¬ÔÝ´æÊý¾Ý 232 | int totle_len; //¶¨ÒåÒ»¸ö±äÁ¿£¬´æ·ÅÒѾ­Í³¼ÆµÄÍÆË͵Ä×ÜÊý¾ÝÁ¿ 233 | int topic_len; //¶¨ÒåÒ»¸ö±äÁ¿£¬´æ·ÅÍÆËÍÖÐÖ÷ÌâµÄ³¤¶È 234 | int cmd_len; //¶¨ÒåÒ»¸ö±äÁ¿£¬´æ·ÅÍÆËÍÖаüº¬µÄÃüÁîÊý¾ÝµÄ³¤¶È 235 | int cmd_loca; //¶¨ÒåÒ»¸ö±äÁ¿£¬´æ·ÅÍÆËÍÖаüº¬µÄÃüÁîµÄÆðʼλÖà 236 | int i; //¶¨ÒåÒ»¸ö±äÁ¿£¬ÓÃÓÚforÑ­»· 237 | int local,multiplier; 238 | unsigned char tempbuff[RBUFF_UNIT]; //ÁÙʱ»º³åÇø 239 | unsigned char *data; //redata¹ýÀ´µÄʱºò£¬µÚÒ»¸ö×Ö½ÚÊÇÊý¾Ý×ÜÁ¿£¬dataÓÃÓÚÖ¸ÏòredataµÄµÚ2¸ö×Ö½Ú£¬ÕæÕýµÄÊý¾Ý¿ªÊ¼µÄµØ·½ 240 | 241 | re_len = redata[0]*256+redata[1]; //»ñÈ¡½ÓÊÕµÄÊý¾Ý×ܳ¤¶È 242 | data = &redata[2]; //dataÖ¸ÏòredataµÄµÚ2¸ö×Ö½Ú£¬ÕæÕýµÄÊý¾Ý¿ªÊ¼µÄ 243 | pack_num = temp_len = totle_len = temp = 0; //¸÷¸ö±äÁ¿ÇåÁã 244 | local = 1; 245 | multiplier = 1; 246 | do{ 247 | pack_num++; //¿ªÊ¼Ñ­»·Í³¼ÆÍÆË͵ĸöÊý£¬Ã¿´ÎÑ­»·ÍÆË͵ĸöÊý+1 248 | do{ 249 | temp = data[totle_len + local]; 250 | temp_len += (temp & 127) * multiplier; 251 | multiplier *= 128; 252 | local++; 253 | }while ((temp & 128) != 0); 254 | totle_len += (temp_len + local); //ÀÛ¼ÆÍ³¼ÆµÄ×ܵÄÍÆË͵ÄÊý¾Ý³¤¶È 255 | re_len -= (temp_len + local) ; //½ÓÊÕµÄÊý¾Ý×ܳ¤¶È ¼õÈ¥ ±¾´Îͳ¼ÆµÄÍÆË͵Ä×ܳ¤¶È 256 | local = 1; 257 | multiplier = 1; 258 | temp_len = 0; 259 | }while(re_len!=0); //Èç¹û½ÓÊÕµÄÊý¾Ý×ܳ¤¶ÈµÈÓÚ0ÁË£¬ËµÃ÷ͳ¼ÆÍê±ÏÁË 260 | u1_printf("±¾´Î½ÓÊÕÁË%d¸öÍÆËÍÊý¾Ý\r\n",pack_num); //´®¿ÚÊä³öÐÅÏ¢ 261 | temp_len = totle_len = 0; //¸÷¸ö±äÁ¿ÇåÁã 262 | local = 1; 263 | multiplier = 1; 264 | for(i = 0; i < pack_num; i++) //ÒѾ­Í³¼Æµ½Á˽ÓÊÕµÄÍÆË͸öÊý£¬¿ªÊ¼forÑ­»·£¬È¡³öÿ¸öÍÆË͵ÄÊý¾Ý 265 | { 266 | do{ 267 | temp = data[totle_len + local]; 268 | temp_len += (temp & 127) * multiplier; 269 | multiplier *= 128; 270 | local++; 271 | }while ((temp & 128) != 0); 272 | topic_len = data[local + totle_len]*256 + data[local + 1 + totle_len] + 2; //¼ÆËã±¾´ÎÍÆËÍÊý¾ÝÖÐÖ÷ÌâÕ¼ÓõÄÊý¾ÝÁ¿ 273 | cmd_len = temp_len - topic_len; //¼ÆËã±¾´ÎÍÆËÍÊý¾ÝÖÐÃüÁîÊý¾ÝÕ¼ÓõÄÊý¾ÝÁ¿ 274 | cmd_loca = totle_len + local + topic_len; //¼ÆËã±¾´ÎÍÆËÍÊý¾ÝÖÐÃüÁîÊý¾Ý¿ªÊ¼µÄλÖà 275 | memcpy(tempbuff, &data[cmd_loca], cmd_len); //ÃüÁîÊý¾Ý¿½±´³öÀ´ 276 | CMDBuf_Deal(tempbuff, cmd_len); //¼ÓÈëÃüÁîµ½»º³åÇø 277 | totle_len += (temp_len + local); //ÀÛ¼ÆÒѾ­Í³¼ÆµÄÍÆË͵ÄÊý¾Ý³¤¶È 278 | local = 1; 279 | multiplier = 1; 280 | temp_len = 0; 281 | } 282 | } 283 | 284 | /*----------------------------------------------------------*/ 285 | /*º¯ÊýÃû£º´¦Àí·¢ËÍ»º³åÇø */ 286 | /*²Î Êý£ºdata£ºÊý¾Ý */ 287 | /*²Î Êý£ºsize£ºÊý¾Ý³¤¶È */ 288 | /*·µ»ØÖµ£ºÎÞ */ 289 | /*----------------------------------------------------------*/ 290 | void TxDataBuf_Deal(unsigned char *data, int size) 291 | { 292 | memcpy(&MQTT_TxDataInPtr[2], data, size); //¿½±´Êý¾Ýµ½·¢ËÍ»º³åÇø 293 | MQTT_TxDataInPtr[0] = size/256; //¼Ç¼Êý¾Ý³¤¶È 294 | MQTT_TxDataInPtr[1] = size%256; //¼Ç¼Êý¾Ý³¤¶È 295 | MQTT_TxDataInPtr += TBUFF_UNIT; //Ö¸ÕëÏÂÒÆ 296 | if(MQTT_TxDataInPtr == MQTT_TxDataEndPtr) //Èç¹ûÖ¸Õëµ½»º³åÇøÎ²²¿ÁË 297 | MQTT_TxDataInPtr = MQTT_TxDataBuf[0]; //Ö¸Õë¹éλµ½»º³åÇø¿ªÍ· 298 | } 299 | 300 | /*----------------------------------------------------------*/ 301 | /*º¯ÊýÃû£º´¦ÀíÃüÁ³åÇø */ 302 | /*²Î Êý£ºdata£ºÊý¾Ý */ 303 | /*²Î Êý£ºsize£ºÊý¾Ý³¤¶È */ 304 | /*·µ»ØÖµ£ºÎÞ */ 305 | /*----------------------------------------------------------*/ 306 | void CMDBuf_Deal(unsigned char *data, int size) 307 | { 308 | memcpy(&MQTT_CMDInPtr[2], data,size); //¿½±´Êý¾Ýµ½ÃüÁ³åÇø 309 | MQTT_CMDInPtr[0] = size/256; //¼Ç¼Êý¾Ý³¤¶È 310 | MQTT_CMDInPtr[1] = size%256; //¼Ç¼Êý¾Ý³¤¶È 311 | MQTT_CMDInPtr[size+2] = '\0'; //¼ÓÈë×Ö·û´®½áÊø·û 312 | MQTT_CMDInPtr += CBUFF_UNIT; //Ö¸ÕëÏÂÒÆ 313 | if(MQTT_CMDInPtr == MQTT_CMDEndPtr) //Èç¹ûÖ¸Õëµ½»º³åÇøÎ²²¿ÁË 314 | MQTT_CMDInPtr = MQTT_CMDBuf[0]; //Ö¸Õë¹éλµ½»º³åÇø¿ªÍ· 315 | } 316 | --------------------------------------------------------------------------------