はじめに
IoTLT vol.95で紹介があった「例の黄色い基板」を入手しました。(48:24あたり)
参考
黄色い基板まとめ
2.8インチタッチパネル
3.5インチタッチパネル
1.9インチディスプレイ(タッチパネルなし)
作った人 (fmzhangpei241氏)
到着
2.8インチ(感圧)版
2023年2月9日に届きました。
3.5インチ(感圧)版
2023年2月17日に届きました。
Moddable対応
2.8インチ(感圧)版
LCDドライバはILI9341Vで、タッチパネルはXPT2046が使用されているので、Moddableでサポートしていることを確認しました。
しかし、SPIが共有されておらず、LCDドライバのみをサポートしています。
(VSPIを使用するとリセット動作をするため、HSPIしか使用できませんでした。)
ILI9341V
GPIO | PIN |
---|---|
14 | TFT_SCK |
12 | TFT_SDO |
13 | TFT_SDI |
15 | TFT_CS |
2 | TFT_RS |
21 | TFT_BACKLIGHT |
XPT2046
GPIO | PIN |
---|---|
25 | TP_CLK |
32 | TP_DIN |
39 | TP_OUT |
33 | TP_CS |
36 | TP_IRQ |
USB以外に4つの外部端子がありますが、いずれも使いづらいです。
- 電源端子 (VINで入力方向のみ。USBシリアルがあるので利用する用途なし。)
- VIN
- TXD2
- RXD2
- GND
- 温湿度センサー端子 (GPIO27は10kΩでプルアップされています。)
- 3.3V
- GPIO27
- (N/A)
- GND
- スピーカー端子
- VO1
- VO2
- 外部接続端子 (GPIO21はLCDのバックライト制御で使用されています。GPIO35は入力専用。)
- GPIO21
- GPIO22
- GPIO35
- GND
デバイスサポート
LCDはModdable標準のILI9341ドライバを使用できましたので、LCDの初期化コマンドの定義は不要でした。
タッチパネルはSPIを共有していないため使用できませんでした。(HSPIのみ使用し、LCD用に割り当てました。)
外部端子はI2Cには使用できないため、デバイス定義を省略しました。
├── host
│ └── provider.js
└── manifest.json
import Analog from "embedded:io/analog";
import Digital from "embedded:io/digital";
import DigitalBank from "embedded:io/digitalbank";
import I2C from "embedded:io/i2c";
// import PulseCount from "embedded:io/pulsecount";
import PWM from "embedded:io/pwm";
import Serial from "embedded:io/serial";
import SMBus from "embedded:io/smbus";
import SPI from "embedded:io/spi";
const device = {
Serial: {
default: {
io: Serial,
port: 1,
receive: 3,
transmit: 1
}
},
SPI: {
default: {
io: SPI,
clock: 14,
in: 12,
out: 13,
port: 1 // HSPI
// port: 2 // VSPI
}
},
io: {Digital, DigitalBank, PWM, Serial, SMBus, SPI},
pin: {
button: 0,
backlight: 21,
displayDC: 2,
displaySelect: 15
}
};
{
"include": [
"$(MODDABLE)/modules/drivers/ili9341/manifest.json"
],
"build": {
"UPLOAD_SPEED": "1500000"
},
"config": {
"screen": "ili9341"
},
"defines": {
"spi": {
"miso_pin": 12,
"mosi_pin": 13,
"sck_pin": 14
},
"ili9341": {
"hz": 40000000,
"cs_pin": 15,
"dc_pin": 2,
"spi_port": "HSPI_HOST",
"backlight_pin": 21,
"backlight_on": 1
}
}
}
GitHubにもファイルを置きました。
$MODDABLE/examples/piu/ballsデモ
Node-RED MCUのDashboard表示
3.5インチ(感圧)版
LCDドライバはST7796で、Moddableではサポートされていません。
以前の経験でST7735やST7789の液晶ドライバ(ライブラリ)はILI9341のサブセットとして動作させていることを把握していました。
初期化コマンドをST7796用に変更すれば対応できるだろうと見当をつけました。
タッチパネルはXPT2046で、Moddableでサポートしていることを確認しました。
3.5インチ(感圧)版ではSPIが共有されていますので、LCDとタッチパネルの両方を使用できるだろうと見当をつけました。
(VSPIを使用するとリセット動作をするのは2.8インチ版と同様だったため、HSPIを使用しました。)
ST7796
GPIO | PIN |
---|---|
14 | TFT_SCK |
12 | TFT_SDO |
13 | TFT_SDI |
15 | TFT_CS |
2 | TFT_RS |
21 | TFT_BACKLIGHT |
XPT2046
GPIO | PIN |
---|---|
14 | TP_CLK |
13 | TP_DIN |
12 | TP_OUT |
33 | TP_CS |
36 | TP_IRQ |
USB以外に4つの外部端子がありますが、2.8インチ版と同様で、いずれも使いづらいです。
デバイスサポート
LCDはModdable標準のドライバがありませんので、ILI9341ドライバを使用し、LCDの初期化コマンドの定義を調査しました。
TFT_eSPIの初期化コマンドを利用し正常に動作しました。
タッチパネルはModdable標準のXPT2046ドライバを使用できました。
外部端子はI2Cには使用できないため、デバイス定義を省略しました。
├── host
│ └── provider.js
└── manifest.json
import Analog from "embedded:io/analog";
import Digital from "embedded:io/digital";
import DigitalBank from "embedded:io/digitalbank";
import I2C from "embedded:io/i2c";
// import PulseCount from "embedded:io/pulsecount";
import PWM from "embedded:io/pwm";
import Serial from "embedded:io/serial";
import SMBus from "embedded:io/smbus";
import SPI from "embedded:io/spi";
const device = {
Serial: {
default: {
io: Serial,
port: 1,
receive: 3,
transmit: 1
}
},
SPI: {
default: {
io: SPI,
clock: 14,
in: 12,
out: 13,
port: 1 // HSPI
// port: 2 // VSPI
}
},
io: {Digital, DigitalBank, PWM, Serial, SMBus, SPI},
pin: {
button: 0,
backlight: 27,
displayDC: 2,
displaySelect: 15
}
};
{
"include": [
"$(MODDABLE)/modules/drivers/ili9341/manifest.json",
"$(MODDABLE)/modules/drivers/xpt2046/manifest.json"
],
"build": {
"UPLOAD_SPEED": "1500000"
},
"config": {
"screen": "ili9341",
"touch": "xpt2046"
},
"defines": {
"spi": {
"miso_pin": 12,
"mosi_pin": 13,
"sck_pin": 14
},
"ili9341": {
"hz": 40000000,
"width": 320,
"height": 480,
"cs_pin": 15,
"dc_pin": 2,
"column_offset": 0,
"row_offset": 0,
"spi_port": "HSPI_HOST",
"backlight_pin": 27,
"backlight_on": 1,
"registers": [
"kDelayMS, 120,",
"0x01, 0,",
"kDelayMS, 120,",
"0x11, 0,",
"kDelayMS, 120,",
"0xF0, 1, 0xC3,",
"0xF0, 1, 0x96,",
"0x36, 1, 0x48,",
"0x3A, 1, 0x55,",
"0xB4, 1, 0x01,",
"0xB6, 3, 0x80, 0x02, 0x3B,",
"0xE8, 8, 0x40, 0x8A, 0x00, 0x00, 0x29, 0x19, 0xA5, 0x33,",
"0xC1, 1, 0x06,",
"0xC2, 1, 0xA7,",
"0xC5, 1, 0x18,",
"kDelayMS, 120,",
"0xE0, 14, 0xF0, 0x09, 0x0B, 0x06, 0x04, 0x15, 0x2F, 0x54, 0x42, 0x3C, 0x17, 0x14, 0x18, 0x1B,",
"0xE1, 14, 0xE0, 0x09, 0x0B, 0x06, 0x04, 0x03, 0x2B, 0x43, 0x42, 0x3B, 0x16, 0x14, 0x17, 0x1B,",
"kDelayMS, 120,",
"0xF0, 1, 0x3C,",
"0xF0, 1, 0x69,",
"0x13, 0,",
"kDelayMS, 120,",
"0x29, 0,",
"kDelayMS, 120,",
"kDelayMS, 0"
]
},
"xpt2046": {
"cs_pin": 33,
"touch_pin": 36,
"spi_port": "HSPI_HOST",
"raw_left": 360,
"raw_right": 4200,
"raw_top": 180,
"raw_bottom": 3900
}
}
}
GitHubにもファイルを置きました。
$MODDABLE/examples/piu/ballsデモ
Node-RED MCUのDashboard表示 (タッチパネルの動作も問題ありませんでした。)
1.9インチ版
タッチパネルはありませんが、ESP32-S3モジュールが搭載されており、GPIOの端子数が多いため、使い勝手が良さそうです。
LCDはST7789で、Moddable標準のST7789ドライバを使用できそうです。
2023年3月1日に到着しましたが、液晶が割れていました。
ST7789
GPIO | PIN |
---|---|
12 | TFT_SCK |
N/A | TFT_SDO |
13 | TFT_SDI |
10 | TFT_CS |
11 | TFT_RS |
1 | TFT_RST |
14 | TFT_BACKLIGHT |
デバイスサポート
LCDはTFT_eSPIの初期化コマンドを利用し正常に動作しました。
├── host
│ └── provider.js
└── manifest.json
import Analog from "embedded:io/analog";
import Digital from "embedded:io/digital";
import DigitalBank from "embedded:io/digitalbank";
import I2C from "embedded:io/i2c";
import PulseCount from "embedded:io/pulsecount";
import PulseWidth from "embedded:io/pulsewidth";
import PWM from "embedded:io/pwm";
import Serial from "embedded:io/serial";
import SMBus from "embedded:io/smbus";
import SPI from "embedded:io/spi";
const device = {
SPI: {
default: {
io: SPI,
port: 3,
clock: 12,
out:13
}
},
io: {Analog, Digital, DigitalBank, PulseCount, PulseWidth, PWM, Serial, SMBus, SPI},
pin: {
button: 41,
}
};
export default device;
{
"build":{
"ESP32_SUBCLASS": "esp32s3",
"UPLOAD_SPEED": "1500000"
},
"include": [
"$(MODDABLE)/modules/drivers/ili9341/manifest.json"
],
"config": {
"screen": "ili9341",
"touch": ""
},
"defines": {
"spi": {
"mosi_pin": 13,
"sck_pin": 12
},
"ili9341": {
"hz": 40000000,
"width": 170,
"height": 320,
"cs_pin": 10,
"dc_pin": 11,
"column_offset": 35,
"row_offset": 0,
"spi_port": "SPI3_HOST",
"backlight_pin": 14,
"backlight_on": 1,
"registers": [
"0x01, 0,",
"kDelayMS, 150,",
"0x11, 0,",
"kDelayMS, 120,",
"0x13, 0,",
"0x36, 1, 0x08,",
"0xB6, 2, 0x0A, 0x82,",
"0xB0, 2, 0x00, 0xE0,",
"0x3A, 1, 0x55,",
"kDelayMS, 10,",
"0xB2, 5, 0x0C, 0x0C, 0x00, 0x33, 0x33,",
"0xB7, 1, 0x35,",
"0xBB, 1, 0x28,",
"0xC0, 1, 0x0C,",
"0xC2, 2, 0x01, 0xFF,",
"0xC3, 1, 0x10,",
"0xC4, 1, 0x20,",
"0xC6, 1, 0x0F,",
"0xD0, 2, 0xA4, 0xA1,",
"0xE0, 14, 0xD0, 0x00, 0x02, 0x07, 0x0A, 0x28, 0x32, 0x44, 0x42, 0x06, 0x0E, 0x12, 0x14, 0x17,",
"0xE1, 14, 0xD0, 0x00, 0x02, 0x07, 0x0A, 0x28, 0x31, 0x54, 0x47, 0x0E, 0x1C, 0x17, 0x1B, 0x1E,",
"0x21, 0,",
"0x2A, 4, 0x00, 0x00, 0x01, 0xEF,",
"0x2B, 4, 0x00, 0x00, 0x00, 0x3F,",
"kDelayMS, 10,",
"0x29, 0,",
"kDelayMS, 100,",
"kDelayMS, 0"
]
}
}
}
GitHubにもファイルを置きました。
$MODDABLE/examples/piu/ballsデモ
次回は..
闇(液晶割れ)を引いてしまったので、次回は無いかもしれません..!