早前曾經使用 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















































沒有留言 :
張貼留言