Zephyrプロジェクト のお試し (SSD1306 I2C)

ハードウェア

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
Copied title and URL