有個 HMI OS 的構想, 買了一片 ESP32-S2-Kaluga-1 Kit 來用, 這片是 ESP32-S2, ES_IDF 預設是 ESP32, 如果沒有設定 target, 編譯後無法上傳. 紀錄一下設定/編譯/燒錄的指令:ESP
進入 example project 目錄後 (例如 C:\Espressif\frameworks\esp-idf-v4.4.1\examples\get-started\blink) :
有個 HMI OS 的構想, 買了一片 ESP32-S2-Kaluga-1 Kit 來用, 這片是 ESP32-S2, ES_IDF 預設是 ESP32, 如果沒有設定 target, 編譯後無法上傳. 紀錄一下設定/編譯/燒錄的指令:ESP
進入 example project 目錄後 (例如 C:\Espressif\frameworks\esp-idf-v4.4.1\examples\get-started\blink) :
今天有人問題一個問題, 覺得有點意思, 所以動手做了一下, 如何在ESP32上同時使用RFID跟SD卡. 兩個介面都是使用 SPI 通訊, 所以重點是在於如何切換 CS 腳. 以前的經驗是, SD 會跟 W5100 網卡衝突, 要自行切換 CS 腳, 不過新版的 SD 驅動已經沒有這個問題了.
使用 arduino 的 SD 範例 ReadWrite 測試, 發現原本在 UNO 可用, 在 ESP32 即使配合更改 CS 接腳, 也是無法使用, 查看編譯過程, 可以看到以下訊息:
ESP8266 的範例 (程式庫) 提供一個 WebServer 類別,可以在 web client 連線時分析其 request 字串,取出 url 以及 key-value 參數,ESP32 至目前為止並無提供此函數。
本專案改寫自 ESP8266 的程式庫,因 ESP8266 有提供 SPIFF 的檔案系統,ESP32 的檔案系統則是在 SD 卡上,原來的 ESP8266 的程式庫版本有使用 FS 直接將檔案內容作為回應的 method ,因為我實驗用的 ESP32 devkit 板沒有 SD 卡插槽,因此目前這個改寫的版本沒有 FS 的功能。
idf 環境, 原廠設定的說明文件: https://esp-idf.readthedocs.io/en/latest/get-started/index.html#setup-toolchain , 有以下要修正與注意的地方:
環境變數設定在 ~/.profile
, 應為 ~/.bash_profile 才對arduino 環境, 原廠設定的說明文件: https://github.com/espressif/arduino-esp32#instructions-for-mac , 如果重新啟動 arduino 後找不到 esp32, 要到 Preference 裡面去修改 Sketchbook location 的設定 (因為預設的 /Documents 會自動備份到 iCloud Drive, 不是自己做的東西沒必要佔空間, 所以我改了地方放)
經測試發現,原本ESP32有16CH的ADC,當WiFI啟動後, 只剩下GPIO 36、39、34、35、 32、33等6隻腳可以用,esp-idf 環境尚未測試,所以規劃時可以將這6隻腳對應到原本 arduino 的A0~A5 。
測試程式如下:
ESP32 晶片原本有 2 組 I2C 介面, 它的 Arduino Core 預設支援一組I2C, IO21為SDA, IO22為SCL, 要注意的是:
以下為主程式:
最近在測試ESP32,他的SimepleWiFiServer範例直接使用WiFiServer類別建立server,ESP8266則直接提供WebServer類別,server.on()函數可以根據url後面的字串自動呼叫處理函數,這功能在ESP32目前尚無法使用,因此撰寫了 HttpRequestString 類別,用來支援參數分析,只要將GET後面的字串帶入,就可得到 Uri與參數的Name-Value。該類別使用了 String 類別,WString.h是ESP32提供的,如果用於其他Core須自行修改,例如 #include <String.h>。
以下getClientRequest(),是參考ESP32的DNS_Web_Server的範例,當 client連線時,取的GET後面的request字串: