XIAO ESP32S3 プロジェクト CircuitPython
この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues
プロジェクト概要
このWikiは更新されました: https://wiki.seeedstudio.com/ja/xiao_esp32s3_with_micropython/
CircuitPythonは、物理コンピューティングプロジェクトを簡素化するため、XIAO ESP32S3に最適なプログラミング言語です。Pythonに基づいており、初心者に優しい構文を持ち、センサーやディスプレイなどのハードウェアにアクセスするためのモジュールが含まれています。CircuitPythonはすでにESP32S3チップをサポートしているため、このプロジェクトではSeeed Studio XIAO ESP32S3ボード上でCircuitPythonをコンパイルすることを試みます。
OLEDディスプレイ付きXIAO ESP32S3

ハードウェア準備
ここでは、Seeed Studio XIAO ESP32S3とSeeed Studio Grove OLED Display 0.96を使用しています。
ソフトウェア準備
ここでは、Thonny IDEソフトウェア(Windows)と関連するライブラリやファイルを使用します。

はじめに
XIAO ESP32S3 CircuitPythonファームウェアのダウンロード
CircuitPythonファームウェア 9.1.1 および 9.20 Alpha for XIAO ESP32S3 Sense
XIAO ESP32S3ボードをブートローダーモードでPCに接続
具体的な方法は以下の通りです:
ステップ1. XIAO ESP32S3のBOOTボタンを押し続けます。
ステップ2. BOOTボタンを押したまま、データケーブルを使用してコンピュータに接続します。接続後にBOOTボタンを離します。
ステップ3. Blinkプログラムをアップロードして、XIAO ESP32S3の動作を確認します。

Thonnyを開いてオプションを設定
- Thonnyを起動した後、「Tools -> Options」に移動し、「Options」を選択します。

- 「Interpreter」オプションを選択し、「CircuitPython (generic)」を選択します。

CircuitPythonファームウェアをXIAO ESP32S3ボードにフラッシュ
- Thonnyで「(esptool)」をクリックします。これにより、最新のCircuitPythonファームウェアをダウンロードしてボードにフラッシュするよう促されます。

- Thonnyの「(esptool)」画面で、まず正しい「Target port」を選択します。

- CircuitPythonファミリーを「ESP32-S3」として選択し、インストールボタンの横にある三本線のアイコンをクリックして、ダウンロードしたファームウェアを含めます。 例: (seeed_xiao_esp32s3_911.bin または seeed_xiao_esp32s3_920.bin)

- Thonnyがリセットを行った後、「Install」をクリックします。

- 「Done」と表示されたら、ウィンドウを閉じることができます。

- PC上に「CIRCUITPY」ドライバが表示され、ボードが正常にフラッシュされたことを示します。

関連ファイル(ライブラリ)を「CIRCUITPY」ドライバに追加する
関連ファイル(ライブラリ)のすべてのファイルを「CIRCUITPY」ドライバにコピーします。

「adafruit_ssd1306.mpy」ファイルと「adafruit_framebuf.mpy」ファイルは、「Seeed Studio Grove OLED Display 0.96」を使用する際に必要です。
adafruit_framebufライブラリは、テキストをレンダリングするためにfont5x8.binというフォントファイルを使用します。このファイルは、コードが実行される環境内でアクセス可能である必要があります。
コード(IIC)を書いてアップロードし、OLEDディスプレイを実現する
- ファイルを追加した後、
import adafruit_ssd1306
コマンドを使用してコード内でadafruit_ssd1306ライブラリをインポートできるようになり、OLEDディスプレイを駆動する環境が構成されます。以下にコードを示します:
from board import *
from busio import I2C
import busio
import adafruit_ssd1306
i2c = I2C(IO6, IO5) # IO6とIO5ピンを使用してI2C通信を初期化
# 128x64解像度とI2Cアドレス0x3Cを持つディスプレイオブジェクトを作成
display = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)
# ディスプレイをクリア
display.fill(0)
display.show()
# ディスプレイにテキストを表示
display.text('SeeedStudio ESP32S3', 0, 0, 1)
display.text('Code by CircuitPython!', 0, 20, 2)
display.show()
- 「Run」ボタンをクリックしてコードをアップロードします。

- 最終結果

XIAO ESP32S3 SenseとXIAOラウンドディスプレイおよびSenseカメラの使用
ハードウェア準備
ソフトウェア準備
- XIAO ESP32S3 Senseにファームウェアをインストールします。
ファームウェア |
---|
- 必要なモジュールと依存関係をインストールします。
Adafruitのツールcircupを使用して、CircuitPythonライブラリをインストールできます。インストール後、以下のコマンドでライブラリをインストールします。
# circupをインストール
pip install setuptools
pip install circup
pip install --upgrade circup
# ライブラリにモジュールをインストール
circup install gc9a01 adafruit_ticks
はじめに
すべてのライブラリをインストールした後、以下のコードをcode.py
またはmain.py
としてCIRCUITPYに入力し、ラウンドディスプレイでカメラフレームを表示します。
import board
import busio
import displayio
import espcamera
import adafruit_ticks
import gc9a01
import struct
i2c = busio.I2C(board.SCL, board.SDA)
spi = busio.SPI(clock=board.SCK, MOSI=board.MOSI)
cam_i2c = busio.I2C(board.CAM_SCL, board.CAM_SDA)
tft_dc = board.D3
tft_cs = board.D1
tft_bl = board.D6
display_bus = displayio.FourWire(spi, command=tft_dc, chip_select=tft_cs)
display = gc9a01.GC9A01(display_bus, width=240, height=240, rotation=0)
# この例ではDisplayioを使用せず、display_busに直接フレームを出力して高速化
# そのため、回転設定は機能しません...
main = displayio.Group()
display.root_group = main
# カメラの初期化
cam = espcamera.Camera(
data_pins=board.CAM_DATA,
external_clock_pin=board.CAM_XCLK,
pixel_clock_pin=board.CAM_PCLK,
vsync_pin=board.CAM_VSYNC,
href_pin=board.CAM_HREF,
pixel_format=espcamera.PixelFormat.RGB565,
frame_size=espcamera.FrameSize.R240X240,
i2c=cam_i2c,
external_clock_frequency=20_000_000,
framebuffer_count=2,
grab_mode=espcamera.GrabMode.WHEN_EMPTY)
# display_busに初期化バイトを送信
display_bus.send(36, struct.pack(">hh", 0, 239))
display_bus.send(42, struct.pack(">hh", 0, 239))
display_bus.send(43, struct.pack(">hh", 0, 80+239))
display.auto_refresh = False
t0 = adafruit_ticks.ticks_ms()
while True:
frame = cam.take(1)
if isinstance(frame, displayio.Bitmap):
display_bus.send(44, frame)
t1 = adafruit_ticks.ticks_ms()
fps = 1000 / adafruit_ticks.ticks_diff(t1, t0)
print(f"{fps:3.1f}fps") # 通常約25fpsで動作
t0 = t1
その他
- 関連ファイルはすべて、組み立て済みの Adafruit CircuitPython ライブラリバンドル から取得したもので、https://circuitpython.org/libraries からダウンロードできます。CircuitPython を使用してサポートされているすべてのハードウェアファイルを見つけることができます。
- "font5x8.bin" ファイルは こちら から取得できます。
- ラウンドディスプレイとカメラ用の ファームウェア。
✨ 貢献者プロジェクト
- このプロジェクトは Seeed Studio の Contributor Project によってサポートされています。
- Isaac の尽力 に感謝します。あなたの作業は 展示されます。
- また、Djair Guilherme にも感謝します。
技術サポート & 製品ディスカッション
私たちの製品を選んでいただきありがとうございます!製品の使用体験がスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、いくつかのコミュニケーションチャネルを用意しています。