STM32 IMX6ULL STM32 IMX6ULL - 19-1 201908010117 2022.07.01 1 STM32 IMX6ULL % / % 1/ / / 30 / 30 2// / / 10 20 30 3/ / 10 / 10 20 4/ 11.1 5/ 11.2 / / 10 / 10 10 / / / 10 10 10 50 30 100 % % / 1/ 2// 3/ / / / 4/ 11.1 5/ 11.2 / / / / / / / / / / 2 STM32 IMX6ULL STM32 IMX6ULL STM32F407 IMX6ULL IMX6ULL WIFI QT STM32WIFIIMX6ULL 3 STM32 IMX6ULL SMART HOME SYSTEM BASED ON STM32 AND IMX6ULL ABSTRACT With the advent of the era of knowledge economy and network economy, intelligent housing has become the fundamental guarantee for a new way of life in the new century. Today, with the rapid development of social informatization, people's attention to housing is no longer limited to the living area, surrounding environment, transportation and other aspects, but more attention is paid to information services and housing safety. Therefore, smart home came into being, Smart home system is one of the hot words in recent years. The implementation of smart home system can greatly facilitate people's daily home life and ensure home safety. Under the background of current smart home development upsurge, this system has designed a set of home system based on stm32f407 development platform and imx6ull development platform, which can control the opening and closing of curtains and small lights, detect room temperature and humidity and smoke alarm functions through ultrasonic induction of human distance. At the same time, the user can also control the home through the WiFi module through the imx6ull terminal, and query the temperature and humidity in the room through the QT interface. Key words: Smart home; STM32; WIFIIMX6ULLHuman body sensing module; Smoke alarm 4 STM32 IMX6ULL ...................................................................................................................................... 5 1. ....................................................................................................................................... 7 1.1 .................................................................................................................. 7 1.1.1 ............................................................................................ 7 1.1.2 ............................................................................................ 8 1.2 ...................................................................................................... 9 1.2.1 ..................................................................................................... 9 1.2.2 ..................................................................................................... 9 1.3 ......................................................................................................11 2. ....................................................................................................................... 12 2.1 ................................................................................................................ 12 2.2 .................................................................................................... 13 2.2.1 STM32F407 ................................................................................. 13 2.2.2 IMX6ULL ............................................................................ 14 2.2.3 42 .......................................................................................... 14 2.2.4 HC-SRO4 ................................................................. 16 2.2.5 MQ2 ............................................................................. 17 2.2.6 ESP8266 RTL8189WIFI ..................................................... 18 2.2.7 DHT11 .................................................................................. 19 2.2.8 QT ................................................................................................. 20 2.3 ...................................................................................................... 21 3. ................................................................................................................... 22 3.1 ............................................................................................ 22 3.2 ..................................................................................................... 24 4. ..................................................................................................................... 25 4.1 ................................................................................................ 25 5 STM32 IMX6ULL 4.1.1 .................................................................................. 25 4.1.2 ...................................................................................... 27 4.1.3 .............................................................................................. 29 4.2 HC-SR04 ............................................................................................. 33 4.2.1 HC-SR04 .................................................................. 33 4.2.2 .......................................................................................... 34 4.3 MQ2 ................................................................................................ 37 4.3.1 MQ2 ............................................................................. 37 4.3.2 MQ2 ............................................................................................. 38 4.4 DHT11 ......................................................................................... 39 4.4.1 DHT11 .................................................................. 39 4.4.2 DHT11 .................................................................................. 40 4.5 QT .................................................................................................................... 42 4.5.1 ...................................................................................................... 42 4.5.2 socket .................................................................................................... 42 4.5.3 .............................................................................................. 43 4.5.4 Socet ......................................................................... 45 4.6 WIFI IMX6ULL......................................................................................... 46 5 .......................................................................................................................... 48 6. ............................................................................................................... 53 ................................................................................................................................ 55 ........................................................................................................................................ 56 A ..................................................................................................... 56 B ..................................................................................................... 60 6 STM32 IMX6ULL 1. 1.1 "+" 1.1.1 1984 20 80 7 STM32 IMX6ULL 1.1.2 1995 7000 0.3% 2016 97 30 9912 5.3% 2020 17.23% 4 1994--1999 2000--2005 2006--2010 2014 U-HOME 8 STM32 IMX6ULL 1.2 1.2.1 , , STM32 IMX6ULL 1.2.2 "" QT , ,"": ,, ,,"", 9 STM32 IMX6ULL "" 1500ppm 10 STM32 IMX6ULL 1.3 STM32F407 IMX6ULL HCSR04 STM32F407 <50cm PWM 42 LED LED DHT11 MQ2 MQ-2 , , STM32F407 WIFI STM32 ESP8266,IMX6ULL RTL8189 IMX6ULL QT QT 11 STM32 IMX6ULL 2. 2.1 " STM32F407 IMX6ULL " STM32F407 IMX6ULL HCSR04 MQ2 ESP8266WIFI 1 STM32F407 PWM 42 2 HCSR04 3 MQ2 1500ppm 4 ESP8266 RTL8189 WIFI STM32F407 IMX6ULL 5 QT IMX6ULL LED 6 DHT11 12 STM32 IMX6ULL 2.2 2.2.1 STM32F407 ALIENTEK STM32F4 STM32F407 STM32F407 121mm*160mm ALIENTEK STM32 5 V2.2 ALIENTEK STM32F4 1 2 IO IO B0B1 1 USB STM32 3 1M FLASH STM32F407ZGT6 1M SRAM 16M FLASH 4 2.1 STM32F407 STM32F407 PWM 13 STM32 IMX6ULL WIFI LCD STM32F407 WIFI WIFI STM32F407 GPIO 144 2.2.2 IMX6ULL imx6ull 2019 10 Linux imx6ull EMMC BTB 6 CPU MCIMX6Y2CVM08AB 800MHz( 792MHz) BGA289 ddr3L NT5CC256M16EP-EK256MB NAND FLASH MCIMX6Y2CVM08AB8GB EMMC 2.2 IMX6ULL Linux QT QT IMX6ULL 2.2.3 42 42 14 STM32 IMX6ULL , 42 42 42mm 0.5NM;57 57mm 3.0NM 2.3 42 15 STM32 IMX6ULL 2.4 42 2.2.4 HC-SRO4 "" STM32 HC-SR04 HC-SR04 2cm-400cm 3mm 2.5 HC-SR04 16 STM32 IMX6ULL (1) IO TRIG 10us (2) 8 40khz (3) IO ECHO =(*(340M/S))/2; 2-1 HC-SR04 HC-SR04 DC 5V 15mA 40kHz 4m 2cm 15 10uS TTL TTL 45*20*15mm 2.2.5 MQ2 MQ2 MQ2 17 STM32 IMX6ULL 2.6 MQ2 2.2.6 ESP8266 RTL8189WIFI STM32 IMX6ULL QT IMX6ULL LINUX STM32 WIFI 2.7 ESP8266WIFI 18 STM32 IMX6ULL ESP8266 Wi-Fi Wi-Fi WIFI socket IMX6ULL WIFI RTL8189WIFI WIFI WIFI 2.8 RTL8189WIFI 2.2.7 DHT11 DHT11 CJSLDHT11 NTC 8 CJSLDHT11 OTP 19 STM32 IMX6ULL 4 2.9 DHT11 2.2.8 QT QT QT 20 STM32 IMX6ULL 2.10 QT 2.11 QT 2.3 21 STM32 IMX6ULL 3. STM32 IMX6ULL QT QT 3.1 32 32 STM32F407 15cm STM32F407 14 PWM DIR 3.1 42 22 STM32 IMX6ULL MQ2 STM32F407 1500ppm STM32F407 3.2 WIFI STM32F407 23 STM32 IMX6ULL 3.3 WIFI 3.2 IMX6ULL Ubuntu Qt Qt Qt Qt 3.4 Qt IMX6ULL QT 24 STM32 IMX6ULL 4. 4.1 4.1.1 PWM 42 4.1 SB SASCSD B 03 14 CD 25 DA SC SBSASD C 14 14 C 03 AB 25 AD ABCD ABCD 25 STM32 IMX6ULL 4.2 STM32F407 IO 5V 4.3 1: NS 2: 26 STM32 IMX6ULL 1.8 200 3(HOLDING TORQUE): 4DETENT TORQUE) : : :( l ×100% 5: 4.1.2 1 4-1 PUL+ PUL- DIR+ DIR- EN+ EN- 2 4-2 A+ A+ A- A- B+ B+ B- B- 3 4-3 VCC"+" GND"-" PUL-DIR-EN- 27 STM32 IMX6ULL PUL+ DIR+ EN+ R 4.4 STM32F407 PWM DIR 4.5 28 STM32 IMX6ULL 4.1.3 STM32F407 PWM CCRX CCRX CCRx 4.6 STM32 PWM PWM OCCM[2:0] 0-2 PWM 4.7 STM32 PWM STM32F407 29 STM32 IMX6ULL A7 14 1 PWM PA7 TIME14 arr 4.8 IO IO PWM PWM 1 TIM_OC1PreloadConfig TIM14 CCR1 4.9 PWM STM32 84M 84M/84=1Mhz 1us 2ms 30 STM32 IMX6ULL 4.10 ARR DIR PE4IO 4.11 DIR 15cm a<15 TIM_SetCompare1(TIM14,led1pwmval), CCR TIM14 PWM CCR 0 flag 1 4.11 31 STM32 IMX6ULL 15cm a>15 TIM_SetCompare1(TIM14,led1pwmval), CCR TIM14 PWM CCR 0 flag 0 DIR DIR 4.11 STlink STM32F407 DIR 32 STM32 IMX6ULL 4.12 STM32 4.2 HC-SR04 4.2.1 HC-SR04 HC-SR04 2cm-400cm 3mm IO TRIG 10us 8 40khz IO ECHO =( * (340M/S))/2 33 STM32 IMX6ULL 4.13 10uS 8 40kHz uS/58= uS/148==*340M/S/2 60ms 4.2.2 4.1.1 GPIO 34 STM32 IMX6ULL 4.14 IO IO IO PB6 PB7 PB6 PB7 4.15 3 35 STM32 IMX6ULL 3 1000 4.16 HC-SR04 4.16 HC-SR04 HC-SR04 TRIG_Send 1 20us 36 STM32 IMX6ULL 0 20us IO GetHCSR04Timer (*(340M/S))/2 4.17 HC-SR04 4.3 MQ2 4.3.1 MQ2 MQ-2 , N 200~300 ,,, ,,, ,, 37 STM32 IMX6ULL ,, 4.18 MQ2 4.3.2 MQ2 MQ2 20 20 4.19 MQ2 38 STM32 IMX6ULL Get_Adc 4.20 MQ2 PPM MQ2 4.4 DHT11 DHT11 DHT11 4.4.1 DHT11 1 CJSLDHT11 5.1k 2 DATA SDHT11 , 40 :8bit +8bit +8bit +8bit +8bit 0 39 STM32 IMX6ULL 3 8bit +8bi +8bit +8bit "8bit 8 4-4 DHT11 (DATA) 200us CJSLDHT11 (), CJSLDHT11 (DATA), 83µs 87µs CJSLDHT11 (DATA) 40-bit , 1 1byte +1byte +1byte +1byte +1byte bit7 0 1 (+++) 8 4.4.2 DHT11 DHT11_Read_Bit() bit DHT11 8 40 STM32 IMX6ULL 4.21 DHT11 DHT11 40 temp humi 4.22 DHT11 STM32F407 4.22 41 STM32 IMX6ULL 4.5 QT QT QT sokcet QT soket WIFI IMX6ULL QT 4.5.1 QT Signal & Slot Qt Qt Qt Signal PushButton clicked() ComboBox CurrentIndexChanged() GUI Slot C++ publicprivate protected Qt connect QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot())); 4.5.2 socket Socket Socket Socket socket 42 STM32 IMX6ULL TCP/IP HTTP Socket TCP/IP IP IP Socket ServerSocket 0 65536 0 1024 (Socket) IP () 4.23 socket 4.5.3 QT LED QT Qt 43 STM32 IMX6ULL 4.24 slotlighton lighton "1" STM32 STM32F407 LED 4.25 connect Qt STM32F407 LED LED 4.26 LED 44 STM32 IMX6ULL 4.5.4 Socet Qt Qt Socket 4.27 slotReadyRead STM32F407 1 0 2 1 2 3 4 LED Qt 45 STM32 IMX6ULL 4.28 Qt 4.6 WIFI IMX6ULL WIFI WIFI Socket IMX6ULL WIFI SDIO WIFI RTL8189, SDIO WIFI TF SDIO WIFI TF SDIO WIFI TF eMMC Nand Flash 4.29 Qt RTL8189 RTL8189 cd /home/root/driver/rtl8189/ 46 STM32 IMX6ULL 4.30 /home/root/ wpa_supplicant.conf WIFI WIFI WIFI ssid psk 4.31 WIFI " wlan0:CTRL-EVENT-CONNECTED-Connection to ec:88:8f:77:d6:da completed [id=0 id_str=]""wlan0: WPA: 4-Way Handshake failed - pre-shared key may be incorrect" 4.32 WIFI IP Socket udhcpc -i wlan0 4.33 IP 47 STM32 IMX6ULL 5 5.1 LED 5.1 HC-SR04 48 STM32 IMX6ULL 5.2 DHT11 5.3 49 STM32 IMX6ULL 5.4 DIR 5.5 50 STM32 IMX6ULL 5.5 WIFI Qt LED Qt 51 STM32 IMX6ULL 5.5 led 5.5 52 STM32 IMX6ULL 6. STM32F407 IMX6ULL Qt C++Qt Qt Qt Qt IMX6ULL LINUX WIFI 53 STM32 IMX6ULL "" QT Qt "" 54 STM32 IMX6ULL [1] .[J].,2022(05):133-134. [2] .[J].,2022(13):32-35. [3],. STM32 [J].,2021(24):81-83. [4],,. STM32 [J]. ,2019(35):29-30. [5] , , . STM32 [J]. ,2017(05):104-107. [6]. Qt [J].,2018,27(08):59-62. [7] , . [J]. ,2022(05):37-39. 55 STM32 IMX6ULL A A1 STM32F407 56 STM32 IMX6ULL A2 IMX6ULL A3 IMX6ULL 57 STM32 IMX6ULL A4 HC-SR04 A5 MQ2 58 STM32 IMX6ULL A6 DHT11 59 STM32 IMX6ULL B Main.c #include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "lcd.h" #include "key.h" #include "usmart.h" #include "sram.h" #include "malloc.h" #include "w25qxx.h" #include "sdio_sdcard.h" #include "ff.h" #include "exfuns.h" #include "fontupd.h" #include "text.h" #include "usmart.h" #include "touch.h" #include "usart3.h" #include "common.h" #include "stm32f4xx.h" #include "beep.h" #include "pwm.h" #include "HCSR04.h" #include "dht11.h" #include "MQ2.h" #include "math.h" //ALIENTEK STM32F407 5 //ATK-RM04 WIFI - //www.openedv.com //http://eboard.taobao.com // // @ALIENTEK void Initialization(){ // BEEP_Init(); HCSR04Init(); DHT11_Init(); Adc_Init(); } 60 STM32 IMX6ULL int main(void) { u8 key,fontok=0; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 2 delay_init(168); // uart_init(115200); // 115200 usart3_init(115200); // 3 115200 Initialization(); LED_Init(); // LED LCD_Init(); //LCD KEY_Init(); // W25QXX_Init(); // W25Q128 tp_dev.init(); // usmart_dev.init(168); // USMART my_mem_init(SRAMIN); // my_mem_init(SRAMCCM); // CCM exfuns_init(); // fatfs f_mount(fs[0],"0:",1); // SD f_mount(fs[1],"1:",1); // FLASH. key=KEY_Scan(0); if(key==KEY0_PRES) // { LCD_Clear(WHITE); // TP_Adjust(); // TP_Save_Adjdata(); LCD_Clear(WHITE); // } fontok=font_init(); // OK if(fontok||key==KEY1_PRES)// { LCD_Clear(WHITE); // POINT_COLOR=RED; // LCD_ShowString(60,50,200,16,16,"ALIENTEK STM32"); while(SD_Init()) // SD { LCD_ShowString(60,70,200,16,16,"SD Card Failed!"); delay_ms(200); LCD_Fill(60,70,200+60,70+16,WHITE); delay_ms(200); } LCD_ShowString(60,70,200,16,16,"SD Card OK"); LCD_ShowString(60,90,200,16,16,"Font Updating..."); key=update_font(20,110,16,"0:");// SD while(key)// 61 STM32 IMX6ULL { LCD_ShowString(60,110,200,16,16,"Font Update Failed!"); delay_ms(200); LCD_Fill(20,110,200+20,110+16,WHITE); delay_ms(200); } LCD_ShowString(60,110,200,16,16,"Font Update Success!"); delay_ms(1500); LCD_Clear(WHITE);// } atk_8266_test(); // ATK_ESP8266 } Common.c: #include "common.h" /////////////////////////////////////////////////////////////////////////////////////////////////////////// // //ALIENTEK STM32 //ATK-ESP8266 WIFI //@ALIENTEK //:www.openedv.com //:2014/4/3 //V1.0 // //Copyright(C) 2009-2019 //All rights reserved /////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////// // //:8086,. const u8* portnum="8086"; //WIFI STA ,,,. const u8* wifista_ssid="REDMIK20"; // SSID const u8* wifista_encryption="wpawpa2_aes"; //wpa/wpa2 aes const u8* wifista_password="12345678"; // //WIFI AP ,,. const u8* wifiap_ssid="ATK-ESP8266"; // SSID const u8* wifiap_encryption="wpawpa2_aes"; //wpa/wpa2 aes const u8* wifiap_password="12345678"; // 62 STM32 IMX6ULL /////////////////////////////////////////////////////////////////////////////////////////////////////////// //4 const u8 *ATK_ESP8266_CWMODE_TBL[3]={"STA ","AP ","AP&STA "}; //ATK-ESP8266,3 ,(ROUTER) //4 const u8 *ATK_ESP8266_WORKMODE_TBL[3]={"TCP ","TCP "," UDP "}; //ATK-ESP8266,4 //5 const u8 *ATK_ESP8266_ECN_TBL[5]={"OPEN","WEP","WPA_PSK","WPA2_PSK","WPA_WAP2_PSK"}; /////////////////////////////////////////////////////////////////////////////////////////////////////////// //usmart // AT //mode:0, USART3_RX_STA; // 1, USART3_RX_STA; void atk_8266_at_response(u8 mode) { // if(USART3_RX_STA&0X8000) { USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;// printf("%s",USART3_RX_BUF); // if(mode)USART3_RX_STA=0; } } //ATK-ESP8266 , //str: //:0, // ,(str ) u8* atk_8266_check_cmd(u8 *str) { char *strx=0; if(USART3_RX_STA&0X8000) // { USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;// strx=strstr((const char*)USART3_RX_BUF,(const char*)str); } return (u8*)strx; } // ATK-ESP8266 //cmd: //ack:,, //waittime:(:10ms) 63 STM32 IMX6ULL //:0,() // 1, u8 atk_8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime) { u8 res=0; USART3_RX_STA=0; u3_printf("%s\r\n",cmd); // if(ack&&waittime) // { while(--waittime) // { delay_ms(10); if(USART3_RX_STA&0X8000)// { if(atk_8266_check_cmd(ack)) { printf("ack:%s\r\n",(u8*)ack); break;// } USART3_RX_STA=0; } } if(waittime==0)res=1; } return res; } // ATK-ESP8266 //data:() //ack:,, //waittime:(:10ms) //:0,()luojian u8 atk_8266_send_data(u8 *data,u8 *ack,u16 waittime) { u8 res=0; USART3_RX_STA=0; u3_printf("%s",data); // if(ack&&waittime) // { while(--waittime) // { delay_ms(10); if(USART3_RX_STA&0X8000)// { if(atk_8266_check_cmd(ack))break;// 64 STM32 IMX6ULL USART3_RX_STA=0; } } if(waittime==0)res=1; } return res; } //ATK-ESP8266 //:0,; // 1, u8 atk_8266_quit_trans(void) { while((USART3->SR&0X40)==0); // USART3->DR='+'; delay_ms(15); //(10ms) while((USART3->SR&0X40)==0); // USART3->DR='+'; delay_ms(15); //(10ms) while((USART3->SR&0X40)==0); // USART3->DR='+'; delay_ms(500); // 500ms return atk_8266_send_cmd("AT","OK",20);//. } // ATK-ESP8266 AP+STA //:0;1, u8 atk_8266_apsta_check(void) { if(atk_8266_quit_trans())return 0; // atk_8266_send_cmd("AT+CIPSTATUS",":",50); // AT+CIPSTATUS , if(atk_8266_check_cmd("+CIPSTATUS:0")&& atk_8266_check_cmd("+CIPSTATUS:1")&& atk_8266_check_cmd("+CIPSTATUS:2")&& atk_8266_check_cmd("+CIPSTATUS:4")) return 0; else return 1; } // ATK-ESP8266 //:0,;1,. u8 atk_8266_consta_check(void) { u8 *p; u8 res; if(atk_8266_quit_trans())return 0; // atk_8266_send_cmd("AT+CIPSTATUS",":",50); // AT+CIPSTATUS , 65 STM32 IMX6ULL p=atk_8266_check_cmd("+CIPSTATUS:"); // res=*p; return res; } // const u8* kbd_tbl[13]={"1","2","3","4","5","6","7","8","9",".","0","#","DEL"}; u8* kbd_fn_tbl[2]; // 240*140 //x,y:320*240 x 0 void atk_8266_load_keyboard(u16 x,u16 y) { u16 i; POINT_COLOR=RED; LCD_Fill(x,y,x+240,y+140,WHITE); LCD_DrawRectangle(x,y,x+240,y+140); LCD_DrawRectangle(x+80,y,x+160,y+140); LCD_DrawRectangle(x,y+28,x+240,y+56); LCD_DrawRectangle(x,y+84,x+240,y+112); POINT_COLOR=BLUE; for(i=0;i<15;i++) { if(i<13)Show_Str_Mid(x+(i%3)*80,y+6+28*(i/3),(u8*)kbd_tbl[i],16,80); else Show_Str_Mid(x+(i%3)*80,y+6+28*(i/3),kbd_fn_tbl[i-13],16,80); } } // //x,y: //key:0~8 //sta:01 void atk_8266_key_staset(u16 x,u16 y,u8 keyx,u8 sta) { u16 i=keyx/3,j=keyx%3; if(keyx>15)return; if(sta)LCD_Fill(x+j*80+1,y+i*28+1,x+j*80+78,y+i*28+26,GREEN); else LCD_Fill(x+j*80+1,y+i*28+1,x+j*80+78,y+i*28+26,WHITE); if(j&&(i>3))Show_Str_Mid(x+j*80,y+6+28*i,(u8*)kbd_fn_tbl[keyx-13],16,80); else Show_Str_Mid(x+j*80,y+6+28*i,(u8*)kbd_tbl[keyx],16,80); } // //x,y: //1~15 0, u8 atk_8266_get_keynum(u16 x,u16 y) { u16 i,j; 66 STM32 IMX6ULL static u8 key_x=0;//0,1~151~15 u8 key=0; tp_dev.scan(0); // if(tp_dev.sta&TP_PRES_DOWN) { for(i=0;i<5;i++) { for(j=0;j<3;j++) { if(tp_dev.x[0]<(x+j*80+80)&&tp_dev.x[0]>(x+j*80)&&tp_dev.y[0]<(y+i*28+28)&&tp_dev.y[0]>(y+i*2 8)) { key=i*3+j+1; break; } } if(key) { if(key_x==key)key=0; else { atk_8266_key_staset(x,y,key_x-1,0); key_x=key; atk_8266_key_staset(x,y,key_x-1,1); } break; } } }else if(key_x) { atk_8266_key_staset(x,y,key_x-1,0); key_x=0; } return key; } // Client ip //ipbuf:ip void atk_8266_get_wanip(u8* ipbuf) { u8 *p,*p1; if(atk_8266_send_cmd("AT+CIFSR","OK",50))// WAN IP { ipbuf[0]=0; 67 STM32 IMX6ULL return; } p=atk_8266_check_cmd("\""); p1=(u8*)strstr((const char*)(p+1),"\""); *p1=0; sprintf((char*)ipbuf,"%s",p+1); } // AP+STA ip //ipbuf:ip void atk_8266_get_ip(u8 x,u8 y) { u8 *p; u8 *p1; u8 *p2; u8 *ipbuf; u8 *buf; p=mymalloc(SRAMIN,32); // 32 p1=mymalloc(SRAMIN,32); // 32 p2=mymalloc(SRAMIN,32); // 32 ipbuf=mymalloc(SRAMIN,32); // 32 buf=mymalloc(SRAMIN,32); // 32 if(atk_8266_send_cmd("AT+CIFSR","OK",50))// WAN IP { *ipbuf=0; } else { p=atk_8266_check_cmd("APIP,\""); p1=(u8*)strstr((const char*)(p+6),"\""); p2=p1; *p1=0; ipbuf=p+6; sprintf((char*)buf,"AP IP:%s :%s",ipbuf,(u8*)portnum); Show_Str(x,y,200,12,buf,12,0); // AP IP p=(u8*)strstr((const char*)(p2+1),"STAIP,\""); p1=(u8*)strstr((const char*)(p+7),"\""); *p1=0; ipbuf=p+7; sprintf((char*)buf,"STA IP:%s :%s",ipbuf,(u8*)portnum); Show_Str(x,y+15,200,12,buf,12,0); // STA IP myfree(SRAMIN,p); // myfree(SRAMIN,p1); // myfree(SRAMIN,p2); // 68 STM32 IMX6ULL myfree(SRAMIN,ipbuf); // myfree(SRAMIN,buf); // } } //ATK-ESP8266 //x,y:. //wanip:0,;1, wanip. void atk_8266_msg_show(u16 x,u16 y,u8 wanip) { u8 *p,*p1,*p2; // 32 p=mymalloc(SRAMIN,32); // 32 p1=mymalloc(SRAMIN,32); // 32 p2=mymalloc(SRAMIN,32); POINT_COLOR=BLUE; atk_8266_send_cmd("AT+CWMODE=2","OK",20); atk_8266_send_cmd("AT+RST","OK",20); delay_ms(1000);// 2s delay_ms(1000);// delay_ms(1000); delay_ms(1000); // AP sprintf((char*)p,"AT+CWSAP=\"%s\",\"%s\",1,4",wifiap_ssid,wifiap_password); atk_8266_send_cmd(p,"OK",1000); if(wanip==0)// { // atk_8266_send_cmd("AT+GMR","OK",20); p=atk_8266_check_cmd("SDK version:"); Show_Str(x,y,240,16,":",16,0);Show_Str(x+72,y,240,16,p,16,0); atk_8266_send_cmd("AT+CWMODE?","+CWMODE:",20); // p=atk_8266_check_cmd(":"); Show_Str(x,y+16,240,16," :",16,0);Show_Str(x+72,y+16,240,16,(u8*)ATK_ESP8266_CWMODE_TBL[*(p+1)-'1'],16,0); atk_8266_send_cmd("AT+CWSAP?","+CWSAP:",20); // wifi p=atk_8266_check_cmd("\""); p1=(u8*)strstr((const char*)(p+1),"\""); p2=p1; *p1=0; Show_Str(x,y+32,240,16,"SSID :",16,0);Show_Str(x+56,y+32,240,16,p+1,16,0); p=(u8*)strstr((const char*)(p2+1),"\""); p1=(u8*)strstr((const char*)(p+1),"\""); p2=p1; *p1=0; Show_Str(x,y+48,240,16,":",16,0);Show_Str(x+40,y+48,240,16,p+1,16,0); 69 STM32 IMX6ULL p=(u8*)strstr((const char*)(p2+1),","); p1=(u8*)strstr((const char*)(p+1),","); *p1=0; Show_Str(x,y+64,240,16,":",16,0);Show_Str(x+56,y+64,240,16,p+1,16,0); Show_Str(x,y+80,240,16," :",16,0);Show_Str(x+72,y+80,240,16,(u8*)ATK_ESP8266_ECN_TBL[*(p1+1)-'0'],16,0); } // myfree(SRAMIN,p); // myfree(SRAMIN,p1); // myfree(SRAMIN,p2); } //ATK-ESP8266 WIFI ( WIFI STA/WIFI AP ) //x,y:. //rmd: //ssid,encryption,password: SSID,, void atk_8266_wificonf_show(u16 x,u16 y,u8* rmd,u8* ssid,u8* encryption,u8* password) { POINT_COLOR=RED; Show_Str(x,y,240,12,rmd,12,0);// Show_Str(x,y+20,240,12,"SSID:",12,0); Show_Str(x,y+36,240,12,":",12,0); Show_Str(x,y+52,240,12,":",12,0); POINT_COLOR=BLUE; Show_Str(x+30,y+20,240,12,ssid,12,0); Show_Str(x+54,y+36,240,12,encryption,12,0); Show_Str(x+30,y+52,240,12,password,12,0); } // //: //0,TCP //1,TCP //2,UDP u8 atk_8266_netpro_sel(u16 x,u16 y,u8* name) { u8 key=0,t=0,*p; u8 netpro=0; LCD_Clear(WHITE); POINT_COLOR=RED; p=mymalloc(SRAMIN,50);// 50 sprintf((char*)p,"%s ",name); Show_Str_Mid(0,y,p,16,240); Show_Str(x,y+30,200,16,"KEY0:",16,0); Show_Str(x,y+50,200,16,"KEY1:",16,0); Show_Str(x,y+70,200,16,"WK_UP:",16,0); 70 STM32 IMX6ULL Show_Str(x,y+100,200,16,":",16,0); POINT_COLOR=BLUE; Show_Str(x+16,y+120,200,16,"TCP ",16,0); Show_Str(x+16,y+140,200,16,"TCP ",16,0); Show_Str(x+16,y+160,200,16,"UDP ",16,0); POINT_COLOR=RED; Show_Str(x,y+120,200,16,"",16,0); while(1) { key=KEY_Scan(0); if(key) { if(key==WKUP_PRES)break; //WK_UP Show_Str(x,y+120+netpro*20,200,16," ",16,0);// if(key==KEY0_PRES)//KEY0 { if(netpro<2)netpro++; else netpro=0; }else if(key==KEY1_PRES)//KEY1 { if(netpro>0)netpro--; else netpro=2; } Show_Str(x,y+120+netpro*20,200,16,"",16,0);// } delay_ms(10); atk_8266_at_response(1); if((t++)==20){t=0;LED0=!LED0;}//LED } myfree(SRAMIN,p); return netpro;// } //STA AP TCPUDP // u8 atk_8266_mode_cofig(u8 netpro) { //u8 netpro; u8 ipbuf[16]; //IP u8 *p; u8 key; p=mymalloc(SRAMIN,32);// 32 PRESTA: netpro|=(atk_8266_netpro_sel(50,30,(u8*)ATK_ESP8266_CWMODE_TBL[1]))<<4; 71 STM32 IMX6ULL if(netpro&0X20) { LCD_Clear(WHITE); if(atk_8266_ip_set("WIFI-AP UDP IP ","UDP ",(u8*)portnum,ipbuf))goto PRESTA;//IP if(netpro&0X03)sprintf((char*)p,"AT+CIPSTART=1,\"UDP\",\"%s\",%s",ipbuf,(u8*)portnum); // UDP , ID STA 0 else sprintf((char*)p,"AT+CIPSTART=0,\"UDP\",\"%s\",%s",ipbuf,(u8*)portnum); // UDP , ID STA 0 delay_ms(200); LCD_Clear(WHITE); atk_8266_send_cmd(p,"OK",200); } //AP TCP Client else if(netpro&0X10) { LCD_Clear(WHITE); POINT_COLOR=RED; Show_Str_Mid(0,30,"ATK-ESP WIFI-STA ",16,240); Show_Str(30,50,200,16," ATK-ESP ,...",12,0); if(atk_8266_ip_set("WIFI-AP IP ","TCP Client",(u8*)portnum,ipbuf))goto PRESTA; //IP if(netpro&0X03)sprintf((char*)p,"AT+CIPSTART=1,\"TCP\",\"%s\",%s",ipbuf,(u8*)portnum); // TCP , ID STA client 1 else sprintf((char*)p,"AT+CIPSTART=0,\"TCP\",\"%s\",%s",ipbuf,(u8*)portnum); // TCP , ID STA server 0 while(atk_8266_send_cmd(p,"OK",200)) { LCD_Clear(WHITE); POINT_COLOR=RED; Show_Str_Mid(0,40,"WK_UP:",16,240); Show_Str(30,80,200,12,"ATK-ESP TCP SERVER ",12,0); // key=KEY_Scan(0); if(key==WKUP_PRES)goto PRESTA; } } else; // myfree(SRAMIN,p); return netpro; } 72 STM32 IMX6ULL //IP //title:ip //mode: //port: //*ip:ip ( IP ) //:0,;1,. u8 atk_8266_ip_set(u8* title,u8* mode,u8* port,u8* ip) { u8 res=0; u8 key; u8 timex=0; u8 iplen=0; //IP LCD_Clear(WHITE); POINT_COLOR=RED; Show_Str_Mid(0,30,title,16,240); // Show_Str(30,90,200,16,":",16,0); // Show_Str(30,110,200,16,"IP :",16,0); //IP Show_Str(30,130,200,16,":",16,0); // kbd_fn_tbl[0]=""; kbd_fn_tbl[1]=""; atk_8266_load_keyboard(0,180); // POINT_COLOR=BLUE; Show_Str(30+72,90,200,16,mode,16,0); // Show_Str(30+40,130,200,16,port,16,0); // ip[0]=0; while(1) { key=atk_8266_get_keynum(0,180); if(key) { if(key<12) { if(iplen<15) { ip[iplen++]=kbd_tbl[key-1][0]; } }else { if(key==13)if(iplen)iplen--; // if(key==14&&iplen)break; // if(key==15){res=1;break;} // } ip[iplen]=0; 73 STM32 IMX6ULL LCD_Fill(30+56,110,239,110+16,WHITE); Show_Str(30+56,110,200,16,ip,16,0); // IP } timex++; if(timex==20) { timex=0; LED0=!LED0; } delay_ms(10); atk_8266_at_response(1);//WIFI , } return res; } // UI void atk_8266_mtest_ui(u16 x,u16 y) { LCD_Clear(WHITE); POINT_COLOR=RED; Show_Str_Mid(0,y,"ATK_ESP8266 WIFI ",16,240); Show_Str(x,y+25,200,16,":",16,0); Show_Str(x,y+45,200,16,"KEY0:WIFI STA+AP",16,0); Show_Str(x,y+65,200,16,"KEY1:WIFI STA",16,0); Show_Str(x,y+85,200,16,"WK_UP:WIFI AP",16,0); atk_8266_msg_show(x,y+125,0); } //ATK-ESP8266 void atk_8266_test(void) { // u16 rlen=0; u8 key; POINT_COLOR=RED; // Show_Str_Mid(0,30,"ATK-ESP8266 WIFI ",16,240); while(atk_8266_send_cmd("AT","OK",20))// WIFI { atk_8266_quit_trans();// atk_8266_send_cmd("AT+CIPMODE=0","OK",200); // 74 STM32 IMX6ULL Show_Str(40,55,200,16,"!!!",16,0); delay_ms(800); LCD_Fill(40,55,200,55+16,WHITE); Show_Str(40,55,200,16,"...",16,0); } while(atk_8266_send_cmd("ATE0","OK",20));// atk_8266_mtest_ui(32,30); while(1) { delay_ms(10); atk_8266_at_response(1);// ATK-ESP8266 , key=KEY_Scan(0); if(key) { LCD_Clear(WHITE); POINT_COLOR=RED; switch(key) { case 1://KEY0 Show_Str_Mid(0,30,"ATK-ESP WIFI-AP+STA ",16,240); Show_Str_Mid(0,50," ATK-ESP8266 ...",12,240); atk_8266_apsta_test(); // break; case 2://KEY1 Show_Str_Mid(0,30,"ATK-ESP WIFI-STA ",16,240); Show_Str_Mid(0,50," ATK-ESP8266 ...",12,240); atk_8266_wifista_test();//WIFI STA break; case 4://WK_UP atk_8266_wifiap_test(); //WIFI AP break; } atk_8266_mtest_ui(32,30); } } Wisita.c: #include "common.h" #include "stdlib.h" #include "beep.h" #include "led.h" #include "key.h" #include "pwm.h" 75 STM32 IMX6ULL #include "delay.h" #include "sys.h" #include "usart.h" #include "HCSR04.h" #include "dht11.h" #include "MQ2.h" #include "math.h" #include "stm32f4xx.h" /////////////////////////////////////////////////////////////////////////////////////////////////////////// // //ALIENTEK STM32 //ATK-ESP8266 WIFI WIFI STA //@ALIENTEK //:www.openedv.com //:2015/4/3 //V1.0 // //Copyright(C) 2009-2019 //All rights reserved /////////////////////////////////////////////////////////////////////////////////////////////////////////// //ATK-ESP8266 WIFI STA // TCP/UDP //:0, // , u8 netpro=0; // u8 atk_8266_wifista_test(void) { //u8 netpro=0; // double length=0; u8 temperature; u8 humidity; u16 adcx; double a=0.0; u8 flag=0; u8 flag2=0; u8 flag1=0; u8 key; u8 ledstate=0; u8 ledstate1=0; u8 timex=0; u8 ipbuf[16]; //IP u8 *p; 76 STM32 IMX6ULL u16 t=999; // u8 res=0; u16 rlen=0; u8 constate=0; // u16 number; u16 num=1000; u16 led1pwmval=1500; //char state; char formerstate='0'; TIM14_PWM_Init(2000-1,84-1); LED0=1; LED1=1; DIR=0; p=mymalloc(SRAMIN,32); // 32 atk_8266_send_cmd("AT+CWMODE=1","OK",50); // WIFI STA atk_8266_send_cmd("AT+RST","OK",20); //DHCP ( AP ) delay_ms(1000); // 3S delay_ms(1000); delay_ms(1000); delay_ms(1000); // WIFI //, !! sprintf((char*)p,"AT+CWJAP=\"%s\",\"%s\"",wifista_ssid,wifista_password);// :ssid, while(atk_8266_send_cmd(p,"WIFI GOT IP",300)); //, IP PRESTA: netpro|=atk_8266_netpro_sel(50,30,(u8*)ATK_ESP8266_CWMODE_TBL[0]); // if(netpro&0X02) //UDP { LCD_Clear(WHITE); POINT_COLOR=RED; Show_Str_Mid(0,30,"ATK-ESP WIFI-STA ",16,240); Show_Str(30,50,200,16," ATK-ESP ,...",12,0); if(atk_8266_ip_set("WIFI-STA UDP IP ",(u8*)ATK_ESP8266_WORKMODE_TBL[netpro],(u8*)portnum,ipbuf))goto PRESTA; //IP sprintf((char*)p,"AT+CIPSTART=\"UDP\",\"%s\",%s",ipbuf,(u8*)portnum); // UDP delay_ms(200); atk_8266_send_cmd("AT+CIPMUX=0","OK",20); // delay_ms(200); 77 STM32 IMX6ULL LCD_Clear(WHITE); while(atk_8266_send_cmd(p,"OK",500)); } else //TCP { if(netpro&0X01) //TCP Client { LCD_Clear(WHITE); POINT_COLOR=RED; Show_Str_Mid(0,30,"ATK-ESP WIFI-STA ",16,240); Show_Str(30,50,200,16," ATK-ESP ,...",12,0); if(atk_8266_ip_set("WIFI-STA IP ",(u8*)ATK_ESP8266_WORKMODE_TBL[netpro],(u8*)portnum,ipbuf))goto PRESTA; //IP atk_8266_send_cmd("AT+CIPMUX=0","OK",20); //01 sprintf((char*)p,"AT+CIPSTART=\"TCP\",\"%s\",%s",ipbuf,(u8*)portnum); // TCP while(atk_8266_send_cmd(p,"OK",200)) { LCD_Clear(WHITE); POINT_COLOR=RED; Show_Str_Mid(0,40,"WK_UP:",16,240); Show_Str(30,80,200,12,"ATK-ESP TCP ",12,0); // key=KEY_Scan(0); if(key==WKUP_PRES)goto PRESTA; } atk_8266_send_cmd("AT+CIPMODE=1","OK",200); // } else //TCP Server { LCD_Clear(WHITE); POINT_COLOR=RED; Show_Str_Mid(0,30,"ATK-ESP WIFI-STA ",16,240); Show_Str(30,50,200,16," ATK-ESP ,...",12,0); atk_8266_send_cmd("AT+CIPMUX=1","OK",20); //01 sprintf((char*)p,"AT+CIPSERVER=1,%s",(u8*)portnum); // Server (01) portnum atk_8266_send_cmd(p,"OK",50); } } LCD_Clear(WHITE); POINT_COLOR=RED; Show_Str_Mid(0,30,"ATK-ESP WIFI-STA ",16,240); 78 STM32 IMX6ULL Show_Str(30,50,200,16," ATK-ESP ,...",12,0); LCD_Fill(30,50,239,50+12,WHITE); // Show_Str(30,50,200,16,"WK_UP: KEY0:",12,0); LCD_Fill(30,80,239,80+12,WHITE); atk_8266_get_wanip(ipbuf);//, WAN IP sprintf((char*)p,"IP :%s :%s",ipbuf,(u8*)portnum); Show_Str(30,65,200,12,p,12,0); // IP Show_Str(30,80,200,12,":",12,0); // Show_Str(120,80,200,12,":",12,0); // Show_Str(30,100,200,12,":",12,0); // Show_Str(30,115,200,12,":",12,0); // atk_8266_wificonf_show(30,180," :",(u8*)wifista_ssid,(u8*)wifista_encryption,(u8*)wifista_password); POINT_COLOR=BLUE; Show_Str(120+30,80,200,12,(u8*)ATK_ESP8266_WORKMODE_TBL[netpro],12,0); // USART3_RX_STA=0; while(1) { // length=GetHCSR04_Distance(); // DHT11_Read_Data(&temperature,&humidity); // adcx=Get_Adc_Average(ADC_Channel_5,20);// 5 20 ledstate=GPIO_ReadOutputDataBit(GPIOF,GPIO_Pin_3); ledstate1=GPIO_ReadOutputDataBit(GPIOF,GPIO_Pin_10); if(adcx >1500) { GPIO_SetBits(GPIOF,GPIO_Pin_8); delay_ms(300); GPIO_ResetBits(GPIOF,GPIO_Pin_8); delay_ms(300); } printf("\n"); a=length; if(flag1==0&&a<15) { while(1){ flag2=0; delay_ms(10); 79 STM32 IMX6ULL LED0=0; LED1=0; delay_ms(num); DIR=1; flag++; number=7000/num; if(flag>=number){ flag1=1; delay_ms(num); TIM_SetCompare1(TIM14,0); break; } else { TIM_SetCompare1(TIM14,led1pwmval); delay_ms(10); } } } if(flag1==1&&a>15) { while(1) { flag=0; delay_ms(1000); LED0=1; LED1=1; DIR=0; flag2++; if(flag2>=7){ flag1=0; TIM_SetCompare1(TIM14,0); break; } else { TIM_SetCompare1(TIM14,led1pwmval); delay_ms(10); } } } key=KEY_Scan(0); 80 STM32 IMX6ULL if(key==WKUP_PRES) //WK_UP { res=0; atk_8266_quit_trans(); // atk_8266_send_cmd("AT+CIPMODE=0","OK",20); // break; } else if(10==t) //TCP Server { sprintf((char*)p,"%02d%02d%04d%1d%1d",temperature,humidity,adcx,ledstate,ledstate1);// Show_Str(30+54,100,200,12,p,12,0); atk_8266_send_cmd("AT+CIPSEND=0,10","OK",200); // delay_ms(200); atk_8266_send_data(p,"OK",100); // timex=50; }else; if(timex)timex--; if(timex==1)LCD_Fill(30+54,100,239,112,WHITE); t++; delay_ms(10); if(USART3_RX_STA&0X8000) // { rlen=USART3_RX_STA&0X7FFF; // USART3_RX_BUF[rlen]=0; //? if('1'==USART3_RX_BUF[rlen-1]) { formerstate='1'; } else if('0'==USART3_RX_BUF[rlen-1]) { formerstate='0'; } else; if(formerstate=='0') { 81 } STM32 IMX6ULL else GPIO_SetBits(GPIOF,GPIO_Pin_10); { GPIO_ResetBits(GPIOF,GPIO_Pin_10); } printf("%s",USART3_RX_BUF); // sprintf((char*)p,"%d ,",rlen);// LCD_Fill(30+54,115,239,130,WHITE); POINT_COLOR=BRED; Show_Str(30+54,115,156,12,p,12,0); // POINT_COLOR=BLUE; LCD_Fill(30,130,239,319,WHITE); Show_Str(30,130,180,190,USART3_RX_BUF,12,0);// USART3_RX_STA=0; if(constate!='+')t=1000; //, else t=0; //,10 } if(t==1000)// 10 ,. { // // LCD_Fill(30+54,125,239,130,WHITE); // LCD_Fill(60,80,120,92,WHITE); constate=atk_8266_consta_check();// if(constate=='+')Show_Str(30+30,80,200,12,"",12,0); // else Show_Str(30+30,80,200,12,"",12,0); t=0; } atk_8266_at_response(1); } // myfree(SRAMIN,p); return res;} 82