早前曾經使用 Mini D1 ESP32 製作藍牙鍵盤
但 Mini D1 ESP32 開發板的價錢比較貴,而且引腳佈局亦不適合在麵包板上使用
因此在下希望尋找一些價錢可以便宜一點的開發板降低成本 及 方便在麵包板上測試 的 開發板
但 Mini D1 ESP32 開發板的價錢比較貴,而且引腳佈局亦不適合在麵包板上使用
因此在下希望尋找一些價錢可以便宜一點的開發板降低成本 及 方便在麵包板上測試 的 開發板
LuatOS ESP32-C3
LuatOS 使用 ESP32-C3晶片,是一種具備 Wifi 及 藍牙 功能的微控制器開發板
外觀
LuatOS ESP32-C3 正面
LuatOS ESP32-C3 背面
背面印有 LuatOS 的官方網址 及 引腳的功能
背面印有 LuatOS 的官方網址 及 引腳的功能
使用 USB Type-C 作為資料傳輸的連接埠
非常適合現在的電腦連接用途
非常適合現在的電腦連接用途
Expressif 的 ESP32-C3晶片,是一種整合 WiFi模組 及 藍牙模組 的 微控制器晶片
WCH 的 343PC41 USB轉TTL晶片
PUYA 的 PY25Q32HB 提供 32Mb快閃記憶體的 晶片
BOOT按鈕,與 GP9引腳 相連,閒置時為高電壓
按下時接地讓 ESP32-C3 進入 起動模式(Boot Mode),用來更新韌體
按下時接地讓 ESP32-C3 進入 起動模式(Boot Mode),用來更新韌體
RST按鈕,與 RST引腳 相連,閒置時為懸空, 按下時接地並重新啟動
D4 LED ,與 GP12引腳 相連
閒置時為低電壓時關閉,高電壓時亮著
閒置時為低電壓時關閉,高電壓時亮著
D5 LED ,與 GP13引腳 相連
閒置時為低電壓時關閉,高電壓時亮著
閒置時為低電壓時關閉,高電壓時亮著
引腳
編號 | 引腳 | 方向 | 功能 |
---|---|---|---|
1 | GND | 接地 | |
2 | 5V | 提供 5V | |
3 | GP9 | 輸入 | 第9數碼引腳,與 BOOT按鈕 相連 |
4 | GP8~ | 輸入/輸出 | 第8數碼引腳,10位元PWM訊號 |
5 | GP4 | 輸入/輸出 | 第4數碼引腳,12位元類比訊號,I2C SDA引腳 |
6 | GP5 | 輸入/輸出 | 第5數碼引腳,I2C SCL引腳 |
7 | 3V3 | 提供 3.3V | |
8 | GND | 接地 | |
9 | GP11 | 輸入/輸出 | 第11數碼引腳 |
10 | GP7 | 輸入/輸出 | 第7數碼引腳,SPI SS引腳 |
11 | GP6~ | 輸入/輸出 | 第6數碼引腳,10位元PWM訊號 |
12 | GP10~ | 輸入/輸出 | 第10數碼引腳,10位元PWM訊號,SPI MISO引腳 |
13 | GP3 | 輸入/輸出 | 第3數碼引腳,SPI MOSI引腳 |
14 | GP2~ | 輸入/輸出 | 第2數碼引腳,10位元PWM訊號,SPI SCK引腳 |
15 | 3V3 | 提供 3.3V | |
16 | GND | 接地 | |
17 | GND | 接地 | |
18 | GP0 | 輸入/輸出 | 第0數碼引腳,12位元類比訊號,UART1 TX引腳 |
19 | GP1 | 輸入/輸出 | 第1數碼引腳,12位元類比訊號,UART1 RX引腳 |
20 | GP12 | 輸入/輸出 | 第12數碼引腳;與 D4 LED 相連,高電壓亮著 |
21 | GP18 | 輸入/輸出 | 第18數碼引腳 |
22 | GP19 | 輸入/輸出 | 第19數碼引腳 |
23 | GND | 接地 | |
24 | RX | 輸入 | UART0 RX引腳 |
25 | TX | 輸出 | UART0 TX引腳 |
26 | GP13 | 輸入/輸出 | 第13數碼引腳;與 D5 LED 相連,高電壓亮著 |
27 | NC | 空引腳 | |
28 | RST | 低電壓時重置裝置 | |
29 | 3V3 | 提供 3.3V | |
30 | GND | 接地 | |
31 | PWB | ||
32 | VCC |
測試電路
只是將 LuatOS ESP32-C3 上的 LED 閃動
在下使用 Arduino IDE 編寫程式
在下使用 Arduino IDE 編寫程式
在 Additional Boards Manager URLs: 加入
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
並在 Boards Manager: 尋找、下載、安裝 esp32
安裝 ESP32 後,選擇 ESP32 Arduino > ESP32C3 Dev Module
在 Flash Mode 選擇 DIO
在 Programmer 選擇 Esptool
編寫 Sketch 測試
const byte D4_LED = 12; const byte D5_LED = 13; const unsigned int DELAY = 500; void setup() { pinMode(D4_LED, OUTPUT); pinMode(D5_LED, OUTPUT); } void loop() { digitalWrite(D4_LED, HIGH); digitalWrite(D5_LED, LOW); delay(DELAY); digitalWrite(D4_LED, LOW); digitalWrite(D5_LED, HIGH); delay(DELAY); }
實際效果
D4 LED 及 D5 LED 閃動
由於 D4 及 D5 分別由 GP12 及 GP13 控制,因此將輸出裝置 LED 連接到 GP12 及 GP13 亦會有相同效果
由於 D4 及 D5 分別由 GP12 及 GP13 控制,因此將輸出裝置 LED 連接到 GP12 及 GP13 亦會有相同效果
WS2812B 通孔 LED
即是之前 使用 RP2040微控制器 控制 NeoPixel 介紹的 WS2812B SMD LED
但 WS2812B SMD LED 焊接及測試上比較困難,不過原來 WS2812B 有 通孔的版本
但 WS2812B SMD LED 焊接及測試上比較困難,不過原來 WS2812B 有 通孔的版本
外觀
連接電源及接地,並以訊號引腳來控制顏色及光度
與 WS2812B SMD LED 完全相同
與 WS2812B SMD LED 完全相同
引腳
與 WS2812B SMD 相同,在細小空間中包含非常細小的控制晶片及LED
與一般通孔LED相同,LED外殼其中一面被 削平 ,即使引腳被裁短仍有方法判斷引腳的功能
編號(削平為1) | 描述 | 引腳 | 方向 | 功能 |
---|---|---|---|---|
1 | VCC旁引腳 | DO | 輸出 | 將控制訊號傳送給下一個地址 |
2 | 第二長引腳 | VCC | 電源 | |
3 | 最長引腳 | GND | 接地 | |
4 | GND旁引腳 | DI | 輸入 | 接收控制訊號 |
但不同生產商削平的方向可能會不同,因此還是需要檢查資料表
測試電路
接駁 WS2812B 測試
實際效果
實際效果與之前相同
測試電路2
以串聯方式接駁 WS2812B 測試
實際效果2
同樣相同效果
測試電路3
由於 BOOT按鈕 與 GP9引腳相連,因此可以將 BOOT按鈕 當作 GP9的按鈕操作
BOOT按鈕連接到到上拉電阻,並保持高電壓狀態,BOOT按鈕按下後會連接到 GND
因此 BOOT按鈕按下的狀態 是 LOW 而不是 HIGH ,而且亦要考慮按下及沒有按下的狀態
避免因為 BOOT按鈕按下時 ,資料不斷變化
BOOT按鈕連接到到上拉電阻,並保持高電壓狀態,BOOT按鈕按下後會連接到 GND
因此 BOOT按鈕按下的狀態 是 LOW 而不是 HIGH ,而且亦要考慮按下及沒有按下的狀態
避免因為 BOOT按鈕按下時 ,資料不斷變化
#include <Adafruit_NeoPixel.h> const byte LEVEL = 0x10; const byte CLEAR = 0x00; const unsigned long COLOR[] = { (0UL + CLEAR) << 16 | (0UL + CLEAR) << 8 | CLEAR, // NONE (0UL + LEVEL) << 16 | (0UL + CLEAR) << 8 | CLEAR, // RED (0UL + CLEAR) << 16 | (0UL + LEVEL) << 8 | CLEAR, // GREEN (0UL + CLEAR) << 16 | (0UL + CLEAR) << 8 | LEVEL, // BLUE (0UL + LEVEL) << 16 | (0UL + LEVEL) << 8 | CLEAR, // YELLOW (0UL + LEVEL) << 16 | (0UL + CLEAR) << 8 | LEVEL, // CYAN (0UL + CLEAR) << 16 | (0UL + LEVEL) << 8 | LEVEL, // MAGENTA (0UL + LEVEL) << 16 | (0UL + LEVEL) << 8 | LEVEL, // WHITE }; const unsigned int NUM = 1; const byte PIN = 2; const byte CONTROL = 9; byte i = 0; bool pressed = false; Adafruit_NeoPixel rgb = Adafruit_NeoPixel(NUM, PIN); void setup() { rgb.begin(); pinMode(PIN, INPUT_PULLUP); } void loop() { if (digitalRead(CONTROL) == LOW && !pressed) { pressed = true; i++; i = i % (sizeof(COLOR) / sizeof(unsigned long)); } else if (digitalRead(CONTROL) == HIGH && pressed) { pressed = false; } for (unsigned int j = 0; j < NUM; j++) { rgb.setPixelColor(j, COLOR[i]); rgb.show(); } delay(1); }
實際效果3
可以使用 Boot按鈕 作為互動操作
使用 MicroPython
與 Raspberry Pi Pico 相同,除了能夠使用 Arduino 編寫及製作 Sketch 外
亦可以使用 Thonny 以 MicroPython 編寫及製作程式
亦可以使用 Thonny 以 MicroPython 編寫及製作程式
使用 Thonny ,到 Run > Configure Interpreter...
- Which kind of interpreter should Thonny use for running your code? 選擇 MicroPython (ESP32)
- Port or WebREPL 選擇對應 LuatOS ESP32-C3 的 連接埠
先到更多選擇的圖示,按 Show install options
然後將:
- Target Port 選擇 LuatOS ESP32-C3 的連接埠
- MicroPython family 選擇 ESP32-C3
- variant 選擇 Espressif . ESP32-C3
- version 按需要選擇版本,在下使用當時最新穩定版本
- Target address 選擇 0x0 (for MicroPython on ESP8266, ESP32-S3 and ESP32-C3)
- Install speed 選擇 460800 (supported by some board) 如果不支援,請改用 115200 (default)
- Flash mode 選擇 dio (next to try if 'keep' doesn't give working result)
- Flash size 根據裝置的快閃記憶體而選擇
由於在下的 LuatOS ESP32-C3 使用 32Mb快閃記憶體 ,即是 4MB ,因此選擇 4MB
在下亦製作指令安裝方法
#!/bin/bash ESPTOOL="/path/of/esptool.py" # change to your esptool path PORT="/dev/ttyACM0" # change to your ESP32-C3 board port CHIP="esp32c3" BUAD="115200" # default speed, your can change to 230400, 460800 BEFORE="default_reset" AFTER="hard_reset" MODE="dio" SIZE="4MB" # change to your ESP32-C3 size OFFSET="0x0" FILE="/tmp/firmware" # uncomment if the same #ESPTOOL="${HOME}/.arduino*/packages/esp32/tools/esptool_py/*/esptool.py" wget `curl -sL --request "GET" "https://micropython.org/download/esp32c3/" | grep 'v\([0-9]\+\.\)\+bin"' | sed -r 's/.*"([^"]+)".*/https:\/\/micropython\.org\/\1/g' | sort | tail -1` -O "${FILE}" python3 $ESPTOOL --port "${PORT}" --chip "${CHIP}" --baud "${BUAD}" --before "${BEFORE}" --after "${AFTER}" write_flash --flash_mode "${MODE}" --flash_size "${SIZE}" --erase-all "${OFFSET}" "${FILE}" rm "${FILE}"
要使用 esptool 除了到官方下陣或安裝由 Linux發行版 提供版本外
亦可以使用從 Arduino 的 Boards Manager 中安裝亦可
通常路徑是 ${HOME}/.arduino<arduino version>/packages/esp32/tools/esptool_py/<esptool version>/esptool.py
亦可以使用從 Arduino 的 Boards Manager 中安裝亦可
通常路徑是 ${HOME}/.arduino<arduino version>/packages/esp32/tools/esptool_py/<esptool version>/esptool.py
Thonny 會自動下載及安裝 MicroPython 到
安裝後按 Close 關閉安裝頁面
當 MicroPython 安裝到 LuatOS ESP32-C3 後, Thonny 的終端會顯示可以輸入指令
使用方法與 Raspberry Pi Pico 運行 MicroPython 完全相同
在下曾經在 Raspberry Pi Pico W 使用 Arduino 建立網頁伺服器
但在下今次改以 MicroPython 建立網頁達至相同效果
但在下今次改以 MicroPython 建立網頁達至相同效果
import machine, time, socket, network, wifi_config # connect wifi wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.disconnect() wlan.connect(wifi_config.ssid, wifi_config.password) while not wlan.isconnected(): time.sleep(0.1) print(wlan.ifconfig()) # create http server server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(("0.0.0.0", 80)) server.listen(1) # waiting client while True: client, address = server.accept() print(address) request = client.recv(4096).decode("UTF-8") print(request) response = "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nhello, world" client.send(response.encode("UTF-8")) client.close()
網頁伺服器運作後,會顯示 4組 的資料,分別是:
- IP地址
- 網絡遮罩
- 廣播地址
- DNS地址
能夠連接到 LautOS ESP32-C3 的網頁伺服器
test
使用 CircuitPython
既然能夠使用 MicroPython , CircuitPython 都可行
Thonny 同樣有提供安裝 CircuitPython 的程序,但沒有區分不同微控制器的類型
因此選擇 CircuitPython (generic) ,然後按 (esptool)
因此選擇 CircuitPython (generic) ,然後按 (esptool)
然後將:
- Target Port 選擇 LuatOS ESP32-C3 的連接埠
- CircuitPython family 選擇 ESP32-C3
- variant 選擇 LuatOS . Core ESP32C3
- version 按需要選擇版本,在下使用當時最近版本,即是 8.2.2
- Target address 選擇 與 MicroPython 的項目即可
- Install speed 選擇 與 MicroPython 的項目即可
- Flash mode 選擇 與 MicroPython 的項目即可
- Flash size 選擇 與 MicroPython 的項目即可
等待下載及安裝 CircuitPython 到 LuatOS ESP32-C3
但安裝後卻無法正確運作
在下懷疑是 CircuitPython 的版本太新導致無法正確運作,因此尋找舊版本的 CircuitPython
在 Adafruit 官方網站的 Amazon Web Services 頁面,找到 LuatOS ESP32-C3 另一個版本的 CircuitPython
先前介紹 LautOS ESP32-C3 的外觀時,有一粒 CH343晶片 ,因此在下嘗試安裝 LuatOS ESP32-C3 的 CH343版本
在 Adafruit 官方網站的 Amazon Web Services 頁面,找到 LuatOS ESP32-C3 另一個版本的 CircuitPython
先前介紹 LautOS ESP32-C3 的外觀時,有一粒 CH343晶片 ,因此在下嘗試安裝 LuatOS ESP32-C3 的 CH343版本
在更多選項中,按 Select local MicroPython image ...
選擇支援 CH343 的 LuatOS ESP32-C3 的 CircuitPython
與之前的設定相同,並等待安裝
完成後,終於能夠在 LuatOS ESP32-C3 使用 CircuitPython
為了方便更新,在下亦製作自動下載及寫入的腳本
#!/bin/bash ESPTOOL="/path/of/esptool.py" # change to your esptool path PORT="/dev/ttyACM0" # change to your ESP32-C3 board port CHIP="esp32c3" BUAD="115200" # default speed, your can change to 230400, 460800 BEFORE="default_reset" AFTER="hard_reset" MODE="dio" SIZE="4MB" # change to your ESP32-C3 size OFFSET="0x0" FILE="/tmp/firmware" # uncomment if the same #ESPTOOL="${HOME}/.arduino*/packages/esp32/tools/esptool_py/*/esptool.py" wget `curl -sL --request "GET" "https://adafruit-circuit-python.s3.amazonaws.com/?delimiter=/&prefix=bin/luatos_core_esp32c3_ch343/en_US/" | grep '\.bin<' | sed -r 's/<\/?Key>/\nhttps:\/\/adafruit-circuit-python\.s3\.amazonaws\.com\//g' | grep '\.bin' | sort | tail -1` -O "${FILE}" python3 $ESPTOOL --port "${PORT}" --chip "${CHIP}" --baud "${BUAD}" --before "${BEFORE}" --after "${AFTER}" write_flash --flash_mode "${MODE}" --flash_size "${SIZE}" --erase-all "${OFFSET}" "${FILE}" rm "${FILE}"
安裝正確版本的 CircuitPython 到 LuatOS ESP32-C3 ,再使用 Thonny 選擇 CircuitPython (generic) 執行後
終於能夠終端顯示正確資訊
終於能夠終端顯示正確資訊
同樣地,使用方法與 Raspberry Pi Pico 運行 CircuitPython 完全相同
(只是引腳名稱稍有不同)
(只是引腳名稱稍有不同)
但 LuatOS ESP32-C3 運作 CircuitPython 時,仍然需要使用與 Thonny 等於 整合開發環境 來編寫及執行程式
不能像 Raspberry Pi Pico 一般可以直接在 檔案管理員 直接編寫檔案及存取來變更效果
不能像 Raspberry Pi Pico 一般可以直接在 檔案管理員 直接編寫檔案及存取來變更效果
補充資料
在下使用 GP* 的引腳名稱時並出現
AttributeError: 'module' object has no attribute 'GP2'
的錯誤
因此在 Thonny 的終端輸入
import board print(dir(board))
來檢視 board 的屬性資料,結果傳回
['__class__', '__name__', 'BOOT0', 'BUTTON', 'IO0', 'IO1', 'IO10', 'IO12', 'IO13', 'IO18', 'IO19', 'IO2', 'IO3', 'IO4', 'IO5', 'IO6', 'IO7', 'IO8', 'IO9', 'LED', 'LED2', 'UART', 'board_id']
顯示有一堆 IO* 的引腳名稱卻沒有 GP* ,因此在下改用 IO* ,結果正確
另外還有提供:
另外還有提供:
- BOOT按鈕 的 BOOT0 及 BUTTON
- D4 LED 的 LED
- D5 LED 的 LED2
總結
由於 ESP32C3 與之前的 使用 Arduino IDE 編寫 ESP8266 NodeMCU 程式 的WiFi功能
及 Mini D1 ESP32 製作 藍牙HID鍵盤 的藍牙功能非常相似
只需要使用相同的方法,便可以做到效果
但在下尋找很多資料都無法以 MicroPython 及 CircuitPython 製作 藍牙HID ,因此唯有暫時放棄
稍後再嘗試
及 Mini D1 ESP32 製作 藍牙HID鍵盤 的藍牙功能非常相似
只需要使用相同的方法,便可以做到效果
但在下尋找很多資料都無法以 MicroPython 及 CircuitPython 製作 藍牙HID ,因此唯有暫時放棄
稍後再嘗試
單純比較價錢 LuatOS ESP32C3 是非常便宜,只需要2美金便具備WiFi及藍牙HID功能
而且屬於雙列直插的引腳排列,可以安裝到麵包板上測試
另外 LuatOS ESP32C3 還有一粒內置 GP9按鈕 及 重設按鈕 使用
而且屬於雙列直插的引腳排列,可以安裝到麵包板上測試
另外 LuatOS ESP32C3 還有一粒內置 GP9按鈕 及 重設按鈕 使用
WS2812B通孔LED 亦是非常方便使用的 LED ,可以在麵包板上使用
由於在下經常忘記引腳的功能,與電源引腳及接地引腳接駁錯誤後
WS2812B 便立即燒毀,總共燒毀了3粒 WS2812B通孔LED
由於在下經常忘記引腳的功能,與電源引腳及接地引腳接駁錯誤後
WS2812B 便立即燒毀,總共燒毀了3粒 WS2812B通孔LED
沒有留言 :
張貼留言