# ESP32學習 --- > 1.IO例題 > 2.LCD模組 > 3.ESP32連上WIFI > 4.抓取網路資料至ESP32 設定額外開發管理員: https://github.com/espressif/arduino-esp32/releases/download/2.0.4/package_esp32_dev_index.json ![](https://i.imgur.com/v8VmdBh.png =80%x) PIO 34,35,36,39:Input only(不能作為輸出腳位) GPIO 0,6,7,8,9,10,11:系統用,勿使用(淺灰色標示) GPIO 18:重開機 1. DHT11不可以用GPIO 5、26 2. GPIO 12, 2燒錄時不可接任何裝置,請空接,燒錄完成後,再接回,否則會上傳失敗。 3.WiFi啟動後,2,4,12,13,14,15,25,26,27僅能數位讀取,不可類比 ### IO例題: 簡單控制RGB LED模組。 ```cpp= const byte Red = 4; const byte Green = 16; const byte Blue = 17; //const 確保往後程式不會修改到 char data; //擷取資料 void setup() { pinMode(Red,OUTPUT); pinMode(Green,OUTPUT); pinMode(Blue,OUTPUT); Serial.begin(9600); } void loop() { if(Serial.available()){ data = Serial.read(); if(data == '1'){ digitalWrite(Blue,LOW); digitalWrite(Red,HIGH); delay(500); digitalWrite(Red,LOW); digitalWrite(Green,HIGH); delay(500); digitalWrite(Green,LOW); digitalWrite(Blue,HIGH); delay(500); } else { digitalWrite(Blue,LOW); digitalWrite(Green,LOW); digitalWrite(Red,LOW); } } } ``` *結果:* ![](https://i.imgur.com/WEC2G4v.jpg =60%x) --- ### LCD模組: 使用電腦發送訊號啟動LED,並結合LED狀態顯示當下Red、Green、Blue的狀態。 ```cpp= #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); //LCD接腳SDA SCL const byte Red = 4; const byte Green = 16; const byte Blue = 17; //const 確保往後程式不會修改到 char data; //擷取資料 void setup() { lcd.init(); // initialize the lcd // Print a message to the LCD. lcd.setCursor(0,0);//第一字元開始位置 lcd.print("waiting....."); lcd.backlight(); pinMode(Red,OUTPUT); pinMode(Green,OUTPUT); pinMode(Blue,OUTPUT); Serial.begin(9600); } void loop() { if(Serial.available()){ data = Serial.read(); if(data == '1'){ lcd.setCursor(0,0);//第一字元開始位置 lcd.clear(); Serial.println("紅"); digitalWrite(Blue,LOW); digitalWrite(Red,HIGH); lcd.setCursor(0,0);//第一字元開始位置 lcd.print("Red open"); delay(600); Serial.println("綠"); digitalWrite(Red,LOW); digitalWrite(Green,HIGH); lcd.setCursor(0,0);//第一字元開始位置 lcd.print("Green open"); delay(600); Serial.println("藍"); digitalWrite(Green,LOW); digitalWrite(Blue,HIGH); lcd.setCursor(0,0);//第一字元開始位置 lcd.print("Blue open"); delay(600); Serial.println("空"); digitalWrite(Blue,LOW); digitalWrite(Green,LOW); digitalWrite(Red,LOW); lcd.setCursor(0,0);//第一字元開始位置 lcd.print("waiting....."); } else { digitalWrite(Blue,LOW); digitalWrite(Green,LOW); digitalWrite(Red,LOW); lcd.setCursor(0,0);//第一字元開始位置 lcd.print("waiting....."); } } } ``` *結果:* ![](https://i.imgur.com/Ki2tnEk.jpg =60%x) --- ### ESP32連上WIFI: 學習網址:https://crazymaker.com.tw/esp32-connect-to-wifi-network/ | <font color="#f00">語法</font> | <font color="#f00">WIFI模式</font> | <font color="#f00">功能</font> | |:------------------------------:| :-----------------: | :---------------------------------------------------------------------------------: | | <font color="#090">WiFi.mode(WIFI_AP)</font> | Access Point (AP) | ESP32可以讓其他設備透過wifi接入(就像家裡的wifi基地台,可供手機連線)。 | | <font color="#090">WiFi.mode(WIFI_STA)</font> | Station(STA) | 無線終端模式,也就是讓ESP32可以連接上其他的熱點(就像手機一樣,可以連上家裡wifi)。 | | <font color="#090">WiFi.mode(WIFI_AP_STA)</font> | AP+STA | 將ESP32設置成兩個模式並存。 | <font color="#090">WiFi.mode(WIFI_OFF)</font>;|OFF|關閉wifi| 檔案資料夾:WIFI_ESP32。 ```cpp= #include<WiFi.h> const char ssid[]="Ray's Galaxy A52s 5G"; //修改為你家的WiFi網路名稱 const char pwd[]="xadr7782"; //修改為你家的WiFi密碼 void setup() { Serial.begin(115200); WiFi.mode(WIFI_STA); //設置WiFi模式 WiFi.begin(ssid,pwd); Serial.print("WiFi connecting"); //當WiFi連線時會回傳WL_CONNECTED,因此跳出迴圈時代表已成功連線 while(WiFi.status()!=WL_CONNECTED){ Serial.print("."); delay(500); } Serial.println(""); Serial.print("IP位址:"); Serial.println(WiFi.localIP()); //讀取IP位址 Serial.print("WiFi RSSI:"); Serial.println(WiFi.RSSI()); //讀取WiFi強度 } void loop() { } ``` *結果:* ![](https://i.imgur.com/jZRFJm1.png) --- # ESP32與NODE-RED結合 利用NODE-RED的Dashboard做出一個有按鈕的頁面,透過按紐我們可以啟動LED並在'LED'狀態欄裡顯示當下狀態。 *Dashboard頁面:* ![](https://i.imgur.com/IMdrbGb.png =80%x) *按下後 STM32與LCD:* ![](https://i.imgur.com/HQ3rHld.jpg =60%x) --- ---