花了好多時間,想要知道如何將程式寫到 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






張貼留言