2024年06月01日
ESP32-S3-Touch-LCD-1.28に温湿センサー(SHT31)を接続して使う
○はじめに
ESP32-S3-Touch-LCD-1.28にセンシリオン社のSHT31という温湿センサーを接続して使いたいと思います。
○接続方法
ESP32-S3-Touch-LCD-1.28の端子をSHT31の以下のピンに接続します。
ESP32-S3 - SHT31
○ソフトウェア
SHT31との接続はI2C接続です。また、ESP32-S3-Touch-LCD-1.28は以下のようにGPIO06とGPIO07がI2C接続でタッチやQMI8658に使われています。
I2C interface: The ESP32-S3 provides multiple hardware I2C. Currently, GPIO6 (SDA) and GPIO7 (SCL) pins are used for the I2C bus, mounting the QMI8658 six-axis inertial measurement unit and LCD touch control chip on the development board. Please refer to the schematic for more information.
つまり、I2Cバスが2本必要になります。
実は、これが今回のハマりポイントです。
○手順
ざっくり言うと、こんな感じです。
1. SHT31のライブラリのインストール。
簡単です。Menu -> Tools -> Manage Librariesでarduino-shtを指定すると以下のライブラリが自動で検出されるので、INSTALLをクリックするだけです。
2. CST8163.h、CST8163.cppをI2バスが指定できるように改造。
前回、ここで準備の話をしており、既にCST8163.h、CST8163.cppが手元にあることを前提で話をします。
実は、サンプルコードにあるCST8163.h、CST8163.cppはデフォルトのI2Cバスを使用されているように作られており、I2Cバスの指定ができるようにチョイチョイと変更する必要があります。
参考までに改造したファイルは以下において置きます。
CST8163.h、CST8163.cpp
3. メインコード(LVGL_Arduino.ino)で二つのI2Cバスを指定。
最後がI2Cバスをそれぞれに指定するのですが、ネットを色々探して以下のやり方で落ち着いています。
LVGL_Arduino.inoファイルで以下の定義を追加します。
GPIOの定義
I2Cの定義
モジュールの定義
void setup()で以下のように初期化すれば、タッチも温湿計も普通に使えるようになります。
参考までに。
ESP32-S3-Touch-LCD-1.28にセンシリオン社のSHT31という温湿センサーを接続して使いたいと思います。
○接続方法
ESP32-S3-Touch-LCD-1.28の端子をSHT31の以下のピンに接続します。
ESP32-S3 - SHT31
- 3V3 - VDD
- GPIO17 - SDA
- GPIO16 - SCL
- GND - GND
○ソフトウェア
SHT31との接続はI2C接続です。また、ESP32-S3-Touch-LCD-1.28は以下のようにGPIO06とGPIO07がI2C接続でタッチやQMI8658に使われています。
I2C interface: The ESP32-S3 provides multiple hardware I2C. Currently, GPIO6 (SDA) and GPIO7 (SCL) pins are used for the I2C bus, mounting the QMI8658 six-axis inertial measurement unit and LCD touch control chip on the development board. Please refer to the schematic for more information.
つまり、I2Cバスが2本必要になります。
実は、これが今回のハマりポイントです。
○手順
ざっくり言うと、こんな感じです。
- SHT31のライブラリのインストール。
- CST8163.h、CST8163.cppをI2バスが指定できるように改造。
- メインコード(LVGL_Arduino.ino)で二つのI2Cバスを指定。
1. SHT31のライブラリのインストール。
簡単です。Menu -> Tools -> Manage Librariesでarduino-shtを指定すると以下のライブラリが自動で検出されるので、INSTALLをクリックするだけです。
2. CST8163.h、CST8163.cppをI2バスが指定できるように改造。
前回、ここで準備の話をしており、既にCST8163.h、CST8163.cppが手元にあることを前提で話をします。
実は、サンプルコードにあるCST8163.h、CST8163.cppはデフォルトのI2Cバスを使用されているように作られており、I2Cバスの指定ができるようにチョイチョイと変更する必要があります。
参考までに改造したファイルは以下において置きます。
CST8163.h、CST8163.cpp
3. メインコード(LVGL_Arduino.ino)で二つのI2Cバスを指定。
最後がI2Cバスをそれぞれに指定するのですが、ネットを色々探して以下のやり方で落ち着いています。
LVGL_Arduino.inoファイルで以下の定義を追加します。
GPIOの定義
#define CST_SDA 6
#define CST_SCL 7
#define SHT_SCL 16
#define SHT_SDA 17
I2Cの定義
TwoWire i2c1 = TwoWire(0); //I2C1 bus
TwoWire i2c2 = TwoWire(1); //I2C2 bus
モジュールの定義
CST816S touch(CST_SDA, CST_SCL, 13, 5);
SHTSensor sht(SHTSensor::SHT3X_ALT);
void setup()で以下のように初期化すれば、タッチも温湿計も普通に使えるようになります。
i2c1.begin(SHT_SDA,SHT_SCL);
sht.init(i2c1);
i2c2.begin(CST_SDA,CST_SCL);
touch.begin(i2c2);
参考までに。
【ESP32の最新記事】
この記事へのコメント