Moddable SDKでディスプレイのないデバイスにディスプレイを追加するメモ

# はじめに

Moddable SDK 5.2.0でカメラ機能が追加され、AtomS3R Camで動作させる方法を探っている時に、ディスプレイのないデバイスにディスプレイを追加する方法を試した結果を備忘録を兼ねてメモに残しておきます。

# ディスプレイを追加する

ディスプレイを追加するためには、manifest.jsonにscreen定義を追加します。

## SSD1306

AtomS3R Cam の Grove ポートにI2C接続のOLEDディスプレイ(SSD1306)を接続する場合のscreen定義です。

- include
    - SSD1306ドライバー
- config
    - screen定義、format定義 (SSD1306の場合、単色表示のためGray256を指定する必要があります)
- defines
    - ssd1306

```json:manifest.json
{
        "include": [
                "$(MODDABLE)/examples/manifest_base.json",
                "$(MODDABLE)/examples/manifest_piu.json",
                "$(MODDABLE)/modules/drivers/ssd1306/manifest_i2c.json"
        ],
        "modules": {
                "*": "./main"
        },
        "config": {
                "touchCount": 0,
                "screen": "ssd1306",
                "touch": "",
                "format": "Gray256"
        },
        "resources":{
                "*": [
                        "./main",
                        "./balls"
                ]
        },
        "defines": {
                "ls013b4dn04": {
                        "dither": 1,
                        "updateAll": 1
                },
                "ssd1306": {
                        "hz": 400000,
                        "width": 128,
                        "height": 64,
                        "sda_pin": 2,
                        "scl_pin": 1
                }
        }
}
```

サンプルプログラムのpiu/ballsを動かします。

```bash
cd $MODDABLE/examples/piu/balls
UPLOAD_PORT=/dev/cu.usbmodem11101 mcconfig -d -m -p esp32/m5atom_s3r
```

![11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/9efcc366-c5b4-93c5-7dc2-502c2a9670c5.jpeg)


## ST7789

AtomS3R Cam の 背面にSPI接続のIPSディスプレイ(ST7789)を接続する場合の接続配線です。

![https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_72479_84ca0ca8-c773-bb2b-27d2-f712deb8f649.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/250c3259-a1d5-2454-229f-506591f02b9d.png)


screen定義です。

- include
    - ST7789ドライバー
- config
    - screen定義
- defines
    - spi
    - ili9341 (ST7789ドライバーはili9341ドライバーを使用しています)

```json:manifest.json
{
        "include": [
                "$(MODDABLE)/examples/manifest_base.json",
                "$(MODDABLE)/examples/manifest_piu.json",
                "$(MODULES)/drivers/st7789/manifest.json"
        ],
        "modules": {
                "*": "./main"
        },
        "config": {
                "screen": "st7789",
                "touchCount": 0
        },
        "resources":{
                "*": [
                        "./main",
                        "./balls"
                ]
        },
        "defines": {
                "ls013b4dn04": {
                        "dither": 1,
                        "updateAll": 1
                },
                "spi": {
                        "mosi_pin": 6,
                        "miso_pin": -1,
                        "sck_pin": 7
                },
                "ili9341": {
                        "cs_pin": -1,
                        "dc_pin": 5,
                        "rst_pin": 8,
                        "spi_port": "SPI3_HOST",
                        "hz": 20000000,
                        "width": 240,
                        "height": 240
                }
        }
}
```

サンプルプログラムのpiu/ballsを動かします。

```bash
cd $MODDABLE/examples/piu/balls
UPLOAD_PORT=/dev/cu.usbmodem11101 mcconfig -d -m -p esp32/m5atom_s3r
```

![https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_72479_f068f4c9-5012-110d-e287-4b79e8c12d16.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/ddfc434a-e351-76fa-b5ef-d2293ec50c0a.jpeg)