はじめに
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
