我的ESP32實做書籍:我出書了 ESP32 物聯網專題
博客來網址:https://www.books.com.tw/products/0010901195
經常有朋友跟我抱怨ESP32的WiFi效果不好,經常斷線之類,雖然WiFi已經是IoT的主流了,但是如果有一些服務希望能更加穩定,那還是得回到有線網路。
應廠商的需求開始尋找帶RJ45網路口的,價格也希望不要太貴
找到這款:WT32-ETH01,內建乙太網路接口(露天拍賣:https://www.ruten.com.tw/item/show?22118190035901)
核心是ESP32,除了乙太網路之外,WiFi、BLE還是有內建,Arduino的開發環境請參考:第一篇 ESP32 Arduino開發環境架設(取代Arduino UNO及ESP8266首選)
不過程式上傳到是有點麻煩,由於沒有usb接口,所以需要usbttl線上傳,且這款沒有一鍵上傳,也沒有RTS按鈕,所以上傳程式比ESP32CAM還複雜,ESP32CAM至少還有RTS按鈕
先將CP2102接上,可參考下圖
IO0+GND(藍色)是模式切換用
EN+GND(棕色)是當作RTS用
程式上傳時,請依照以下步驟
- IO0+GND(上圖藍色)對接
- 將EN+GND(上圖棕色)對接,然後斷開(重開機)
- 檢查序列視窗:Waiting for download
- 按Arduino上傳按鈕
- 等候程式上傳完畢後
- 將IO0+GND(上圖藍色)斷開
- 將EN+GND(上圖棕色)對接,然後斷開(重開機)
程式部份的差異則是在於宣告乙太網路,並啟動連線,一旦連線成功,就與原本的WiFi無差別,例如HttpClient、WiFiClient等等的,宣告部份主要是腳位設定
#define ETH_ADDR 1
#define ETH_POWER_PIN 16
#define ETH_MDC_PIN 23
#define ETH_MDIO_PIN 18
#define ETH_TYPE ETH_PHY_LAN8720
#define ETH_CLK_MODE ETH_CLOCK_GPIO0_IN
老實講,這個我搜尋+測試一整個晚上才找到正確的數值,其實也是很辛苦的
下面這個程式則是下載環保署的空氣品質網站,讀者可以發現讀取的方式與WiFi環境是完全相同。
#include <ETH.h> //引用ETH
#include <HTTPClient.h>
#define ETH_ADDR 1
#define ETH_POWER_PIN 16
#define ETH_MDC_PIN 23
#define ETH_MDIO_PIN 18
#define ETH_TYPE ETH_PHY_LAN8720
#define ETH_CLK_MODE ETH_CLOCK_GPIO0_IN
char url[] = "http://opendata2.epa.gov.tw/AQI.json"; //PM2.5的網址
void setup()
{
Serial.begin(115200);
Serial.println();
ETH.begin(ETH_ADDR, ETH_POWER_PIN, ETH_MDC_PIN, ETH_MDIO_PIN, ETH_TYPE, ETH_CLK_MODE); //啟用網路
while (!((uint32_t)ETH.localIP())) //等候DHCP取得IP
{
Serial.print(".");
delay(500);
}
Serial.println("Connected");
Serial.print("IP Address:");
Serial.println(ETH.localIP());
}
void loop()
{
HTTPClient http;
http.begin(url);
int httpCode = http.GET();
Serial.print("httpCode=");
Serial.println(httpCode);
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.print("payload=");
Serial.println(payload);
}
http.end();
delay(10000);
}