はじめに
Zephyrプロジェクトをビルドし実際のターゲット(ESP32)での動作を試しました。
ChatGPT 5 (Thinking)からの出力を試してまとめたものです。
結果的に、Setupの部分は https://docs.zephyrproject.org/latest/develop/getting_started/index.html の内容と同じでした。
ハードウェア
- ESP32-DevKitC-VE ESP32-WROVER-E開発ボード 8MB (https://akizukidenshi.com/catalog/g/g115674/)
- 0.96インチ 128×64ドット有機ELディスプレイ(OLED) 白色 (https://akizukidenshi.com/catalog/g/g112031/)
SCL は PIN22, SDA は PIN23 への接続です。
Setup
依存パッケージ(for Ubuntu 22.04 or later)
sudo apt update sudo apt install --no-install-recommends git cmake ninja-build gperf \ ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \ xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1
作業用ディレクトリと Python 仮想環境
python3 -m venv ~/zephyrproject/.venv
source ~/zephyrproject/.venv/bin/activate
west を入れて Zephyr 取得
pip install west
west init ~/zephyrproject
cd ~/zephyrproject
west update
Zephyr CMake パッケージの Export
west zephyr-export
追加の Python 依存を一括インストール
west packages pip --install
SDK を west 経由でインストール
cd ~/zephyrproject/zephyr
west sdk install
ESP32向け、Espressif のバイナリ BLOB の取得
cd ~/zephyrproject/zephyr
west blobs fetch hal_espressif
Configuration
overlay
$HOME/zephyrproject/overlays/ssd1306_esp32.overlay
#include <dt-bindings/i2c/i2c.h> #include <dt-bindings/pinctrl/esp32-pinctrl.h> &pinctrl { i2c0_default: i2c0_default { group1 { pinmux = <I2C0_SCL_GPIO22>, <I2C0_SDA_GPIO23>; drive-open-drain; bias-pull-up; output-high; }; }; }; &i2c0 { status = "okay"; /* clock-frequency = <I2C_BITRATE_STANDARD>; */ /* 100 kHz */ clock-frequency = <I2C_BITRATE_FAST>; /* 400kHz */ pinctrl-0 = <&i2c0_default>; pinctrl-names = "default"; oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; /* -i2c なし */ reg = <0x3c>; width = <128>; height = <64>; segment-offset = <0>; page-offset = <0>; display-offset = <0>; multiplex-ratio = <63>; prechargep = <0x22>; /* 必要なら向き補正: * segment-remap; * com-invdir; */ segment-remap; com-invdir; status = "okay"; }; }; /* アプリが使う表示デバイスを選ぶ */ / { chosen { zephyr,display = &oled; }; };
ssd1306.conf
cat >/tmp/ssd1306.conf <<'EOF' CONFIG_I2C=y CONFIG_DISPLAY=y CONFIG_SSD1306=y EOF
サンプルのビルドと実行
displayのチェック (samples/drivers/display)
rm -rf build west build -p always \ -b esp32_devkitc/esp32/procpu \ $HOME/zephyrproject/zephyr/samples/drivers/display \ -- -DDTC_OVERLAY_FILE=$HOME/zephyrproject/overlays/ssd1306_esp32.overlay \ -DOVERLAY_CONFIG=/tmp/ssd1306.conf west flash west espressif monitor
文字を出力 (samples/subsys/display/cfb)
rm -rf build west build -p always \ -b esp32_devkitc/esp32/procpu \ $HOME/zephyrproject/zephyr/samples/subsys/display/cfb \ -- -DDTC_OVERLAY_FILE=$HOME/zephyrproject/overlays/ssd1306_esp32.overlay \ -DOVERLAY_CONFIG=/tmp/ssd1306.conf west flash west espressif monitor