花了好多時間,想要知道如何將程式寫到 ESP8266-01S的 Flash,可是一直無法成功,接好線路後,不管怎樣上傳程式都無法成功。後來找了很多關於 ESP8266燒錄的資料,才發現我沒將 GPIO0 接地,花了好多時間去找到問題。現在知道如何接線了,將正確的接線方式紀錄起來,免得又花很多時間除錯。
利用一個在拍賣網站購買的溫濕度模組,學習如何將 Arduino 的程式上傳到 ESP8266,並且直接供給電源後,不需連接 Arduino就可以回報溫濕度,而且是透過 Web Server的方式回應當時測得的溫度,以下紀錄一下我實作的過程。
在實作的過程中,很麻煩的是,每次要上傳程式,就要先將 ESP-01S接六條線到 USB to TTL及麵包板,上傳完成後,拔下電線,再將 ESP-01S插到 DHT-11模組,非常麻煩。我預計買一個可以直接插 ESP-01S的 USB to TTL模組,可快速在兩邊測試轉換。
另外,我有看到相關文件,可直接透過無線更新程式,下次研究一下如何操作,這樣會更快速更新程式到 ESP-01S。
• ESP8266 ESP01 無線網路模組
• 連接線 x 5條
• 麵包板 x 1個
• 麵包板電源 x 1個
• DHT-11 無線網路 ESP-01S模組 x 1個
將上圖的接線,插上電腦後,開啟 Arduino IDE,需將開發板設定成:「Generic ESP8266 Module",如下圖:
選好開發板後,按下上傳程式的按鍵 就可以將程式上傳到 ESP8266,上傳完成,會出現以下畫面:
這時若要執行已燒錄好的程式,需將 GPIO0接地的線拿掉。如下圖:
使用瀏覽器,連線至 ESP-01S的 Web 伺服器,可以看到溫濕度呈現在網頁上。
利用一個在拍賣網站購買的溫濕度模組,學習如何將 Arduino 的程式上傳到 ESP8266,並且直接供給電源後,不需連接 Arduino就可以回報溫濕度,而且是透過 Web Server的方式回應當時測得的溫度,以下紀錄一下我實作的過程。
在實作的過程中,很麻煩的是,每次要上傳程式,就要先將 ESP-01S接六條線到 USB to TTL及麵包板,上傳完成後,拔下電線,再將 ESP-01S插到 DHT-11模組,非常麻煩。我預計買一個可以直接插 ESP-01S的 USB to TTL模組,可快速在兩邊測試轉換。
另外,我有看到相關文件,可直接透過無線更新程式,下次研究一下如何操作,這樣會更快速更新程式到 ESP-01S。
[材料]
• USB 轉 UART 模組 (CP2102 晶片)• ESP8266 ESP01 無線網路模組
• 連接線 x 5條
• 麵包板 x 1個
• 麵包板電源 x 1個
• DHT-11 無線網路 ESP-01S模組 x 1個
[線路圖]
上傳程式的連接方式:要將 ESp8266 的 GPIO0接地,如下圖黃色線路。將上圖的接線,插上電腦後,開啟 Arduino IDE,需將開發板設定成:「Generic ESP8266 Module",如下圖:
選好開發板後,按下上傳程式的按鍵 就可以將程式上傳到 ESP8266,上傳完成,會出現以下畫面:
這時若要執行已燒錄好的程式,需將 GPIO0接地的線拿掉。如下圖:
[程式]
/* 修改自 5/3/2014 Version 1.0 Mike Barela for Adafruit Industries 將瀏覽器連線的子目錄呈現方式,改成一連線該 IP 就出現溫濕度,且從華氏換算成攝氏 */ #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <DHT.h> #define DHTTYPE DHT11 #define DHTPIN 2 // 設定無線基地台SSID跟密碼 const char* ssid = "MyHome"; //改成您的SSID const char* password = "12345678"; //改成您的密碼 ESP8266WebServer server(80); DHT dht(DHTPIN, DHTTYPE, 11); // 11 works fine for ESP8266 float humidity, temp_f; // 從 DHT-11 讀取的值 String webString=""; // 顯示的字串 unsigned long previousMillis = 0; // will store last temp was read const long interval = 2000; // interval at which to read sensor void setup(void) { Serial.begin(115200); // 設定速率 感測器 dht.begin(); // 初始化 // 連接無線基地台 WiFi.begin(ssid, password); Serial.print("\n\r \n\rWorking to connect"); // 等待連線,並從 Console顯示 IP while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("DHT Weather Reading Server"); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); // server.on("/", handle_root); server.on("/", [](){ gettemperature(); // 讀取感測器資料 webString="Temperature: "+String((int)(temp_f-32)*5/9)+" C, "+" Humidity: "+String((int)humidity)+"%"; // Arduino has a hard time with float to string server.send(200, "text/plain", webString); // 回應瀏覽器詢問的 }); server.begin(); Serial.println("HTTP server started"); } void loop(void) { server.handleClient(); } void gettemperature() { // 量測間等待至少 2 秒 unsigned long currentMillis = millis(); if(currentMillis - previousMillis >= interval) { // 將最後讀取感測值的時間紀錄下來 previousMillis = currentMillis; // 讀取溫度大約 250 微秒! humidity = dht.readHumidity(); // 讀取濕度(百分比) temp_f = dht.readTemperature(true); // 讀取溫度(華氏) // 檢查兩個值是否為空值 if (isnan(humidity) || isnan(temp_f)) { Serial.println("Failed to read from DHT sensor!"); return; } } }
[執行結果]
程式燒錄完成後,可拔掉ESP-01S上 GPIO0那條線,重新插入 USB,打開 Console,可以知道目前 ESP-01S這個無線裝置的 IP。使用瀏覽器,連線至 ESP-01S的 Web 伺服器,可以看到溫濕度呈現在網頁上。
[參考資料]
- Do it your self hobby: Flash Program ESP-01 using USB Serial Adapter.
- Github IOT-MCU: ESP-01S-DHT11-v1.0
張貼留言