メインコンテンツまでスキップ

プロジェクト概要

このwikiは更新されました: https://wiki.seeedstudio.com/xiao_esp32s3_with_micropython/

CircuitPython は、物理コンピューティングプロジェクトを簡素化するため、XIAO ESP32S3 にとって理想的なプログラミング言語です。Python をベースとしており、初心者にやさしい構文を持ち、センサーやディスプレイなどのハードウェアにアクセスするためのモジュールが含まれています。CircuitPython はすでに ESP32S3 チップをサポートしているため、このプロジェクトでは Seeed Studio XIAO ESP32S3 ボード上で CircuitPython をコンパイルすることを試みます。

XIAO ESP32S3 と OLED ディスプレイ​

ハードウェアの準備​

ここでは、Seeed Studio XIAO ESPS3 と 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 ファームウェアのダウンロード​

XIAO ESP32S3 Sense用 Circuitpython ファームウェア 9.1.1 および 9.20 Alpha

XIAO ESP32S3 ボードをBootLoaderモードでPCに接続​

具体的な方法は以下の通りです:

  • ステップ 1. XIAO ESP32S3のBOOTボタンを離さずに押し続けます。

  • ステップ 2. BOOTボタンを押し続けたまま、データケーブルでコンピューターに接続します。コンピューターに接続した後、BOOTボタンを離します。

  • ステップ 3. Blinkプログラムをアップロードして、XIAO ESP32S3の動作を確認します。

Thonnyを開いてオプションを設定​

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

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

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

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

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

注記

「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) # Initialize I2C communication using IO6 and IO5 pins

# Create a display object with 128x64 resolution and an I2C address of 0x3C
display = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)

# Clear the display
display.fill(0)
display.show()

# Write text on the display
display.text('SeeedStudio ESP32S3', 0, 0 , 1)
display.text('Code by CircuitPython!', 0, 20 , 2)
display.show()
  1. 「Run」ボタンをクリックしてコードをアップロードします
  1. 最終結果

XIAO ESP32S3 Sense と XIAO Round Display を Sense Camera と組み合わせて使用する​

ハードウェアの準備​

Seeed Studio XIAO ESP32S3 SenseRound Display for XIAO

ソフトウェア準備​

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

Adafruit の circup ツールを使用して、CircuitPython ライブラリをいつでもインストールできます。インストール後、任意のライブラリをインストールするために入力するだけです。

# install circup
pip install setuptools
pip install circup
pip install --upgrade circup
# install module to library
circup install gc9a01 adafruit_ticks

はじめに​

必要なライブラリをすべてインストールした後、以下のコードをcode.pyまたはmain.pyにCIRCUITPYに入力するだけで、Round DisplayでCamera Frameを確認できます。

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)

# Appears that this example does not use Displayio at all
# print frame directly on display_bus to be faster
# so, rotation setting not works...

main = displayio.Group()
display.root_group = main

# Camera Init
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)

# Sending init bytes to 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") # typically runs at about 25fps
t0 = t1

さらに詳しく​

✨ コントリビュータープロジェクト​

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

私たちの製品をお選びいただき、ありがとうございます!私たちは、お客様の製品体験が可能な限りスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、複数のコミュニケーションチャンネルを提供しています。

Loading Comments...