Skip to main content

XIAO ESP32S3 プロジェクト CircuitPython

note

この文書は 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を使用しています。

Seeed Studio XIAO ESP32S3Seeed Studio Grove OLED Display 0.96

ソフトウェア準備

ここでは、Thonny IDEソフトウェア(Windows)と関連するライブラリやファイルを使用します。

Thonny IDE関連ファイル(ライブラリ)

はじめに

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を開いてオプションを設定

  1. Thonnyを起動した後、「Tools -> Options」に移動し、「Options」を選択します。
  1. 「Interpreter」オプションを選択し、「CircuitPython (generic)」を選択します。

CircuitPythonファームウェアをXIAO ESP32S3ボードにフラッシュ

  1. Thonnyで「(esptool)」をクリックします。これにより、最新のCircuitPythonファームウェアをダウンロードしてボードにフラッシュするよう促されます。
  1. Thonnyの「(esptool)」画面で、まず正しい「Target port」を選択します。
  1. CircuitPythonファミリーを「ESP32-S3」として選択し、インストールボタンの横にある三本線のアイコンをクリックして、ダウンロードしたファームウェアを含めます。 例: (seeed_xiao_esp32s3_911.bin または seeed_xiao_esp32s3_920.bin)
  1. Thonnyがリセットを行った後、「Install」をクリックします。
  1. 「Done」と表示されたら、ウィンドウを閉じることができます。
  1. PC上に「CIRCUITPY」ドライバが表示され、ボードが正常にフラッシュされたことを示します。

関連ファイル(ライブラリ)を「CIRCUITPY」ドライバに追加する

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

note

「adafruit_ssd1306.mpy」ファイルと「adafruit_framebuf.mpy」ファイルは、「Seeed Studio Grove OLED Display 0.96」を使用する際に必要です。

adafruit_framebufライブラリは、テキストをレンダリングするためにfont5x8.binというフォントファイルを使用します。このファイルは、コードが実行される環境内でアクセス可能である必要があります。

コード(IIC)を書いてアップロードし、OLEDディスプレイを実現する

  1. ファイルを追加した後、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()
  1. 「Run」ボタンをクリックしてコードをアップロードします。
  1. 最終結果

XIAO ESP32S3 SenseとXIAOラウンドディスプレイおよびSenseカメラの使用

ハードウェア準備

Seeed Studio XIAO ESP32S3 Senseラウンドディスプレイ for XIAO

ソフトウェア準備

  1. XIAO ESP32S3 Senseにファームウェアをインストールします。
ファームウェア
  1. 必要なモジュールと依存関係をインストールします。

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

その他

✨ 貢献者プロジェクト

技術サポート & 製品ディスカッション

私たちの製品を選んでいただきありがとうございます!製品の使用体験がスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、いくつかのコミュニケーションチャネルを用意しています。

Loading Comments...