Arduino Nano R4の活用 ⑥ I2C LPS22HB Wire①

 マイコンにはI2C(Inter-Integrated Circuit)バスというシリアル・インターフェースが備わっている製品が多いです。これは、2本の信号線で通信をでき、複数のデバイス(センサなど)をつないで使えるので使い勝手が良いです。比較的通信速度は遅く、近距離で利用することもあって、トラブルが少ないです。

 読み方は、アイ・スクエアド・シーもしくはアイ・アイ・シーが使われます。アイ・ツー・シーも時々聞きます。

 I2CバスにはWireライブラリが用意されています。

環境

  • Arduino IDE;2.3.5
  • Windows11;24H2
  • Arduino Nano R4 1.5.1 PCはマザーボードのUSBポートから直接つなぐ。

2か所にI2Cインターフェースがある

 このArduino Nano R4マイコン・ボードでは、二つのI2Cバスが用意されています。Arduino Uno 3では一つでした。同時代、Arduino Megaシリーズのように二つのI2Cバスが利用できるボードもありました。

 この二つのI2Cバスは独立しています。Arduino Uno 3では2か所にI2Cバスをつなげられますが、一つのI2Cバスです。

接続1

 SDA(A4)、SCL(A5)のI2Cバスを利用します。このバスの電源は5Vです。写真では、前のLEDの接続が残っています。

 I2Cバスに取り付けたのは気圧センサのLPS22HBです。

LPS22HB

 このセンサは、Adafruitから入手しました。Adafruitでは、Stemma QT/Qwiicボードと呼んでいます。コネクタを接続すると、電源のLEDが点灯します。

 Arduino Nano R4マイコン・ボードとは、JST SH 4ピンのコネクタとオスのピンヘッダが付いたケーブルを使用しました。

 SCLは黄色、SDAは緑色、3Vは赤色、GNDは黒色です。

 LPS22ボード解説のページ

 Stemma QT/Qwiic(JST SH 4ピン)コネクタは2か所に装着されていて、どちらにつないでもかまいません。このコネクタを使ってI2Cで制御する場合、特に、ジャンパ線をつなぐなどは不要です。

 コネクタは、表と裏のどちらも差し込めそうですが、ピンが内部の上部に並んでいるので、差し込める方向は一意です。ロック機構はないですが、すぐに抜けるということはありません。

気圧センサLPS22のおもなスペック

 LPS22HBのデータシートはこのWebページから

  • 電源電圧  1.7~3.6V
  • 気圧測定範囲 260~1260hPa、確度;±1hPa、分解能;±0.1hPa
  • 温度測定範囲 -40~+85℃、確度;±1.5℃
  • インターフェース I2C(0~400kHz)、SPI(10MHz)
  • スレーブ・アドレス 0x5d、裏面のAddrをショートすると0x5c

スケッチ

 Wireライブラリを用いてアクセスします。読みだしたのは気圧です。温度も読み出せますがここでは省略しました。

#include <Wire.h>
unsigned char LPS22HB_address = 0x5d;
byte result[3];

void setup() {
    Wire.begin();
    Wire.beginTransmission(LPS22HB_address);
        Wire.write(0x10); Wire.write(0x10); //1Hz
    Wire.endTransmission(); 
    Serial.begin(9600);
    delay(1000);
    Serial.println("start ");
}

void loop() {
    Wire.beginTransmission(LPS22HB_address);
        Wire.write(0x28 | 0x80);;
    Wire.endTransmission(); 
    Wire.requestFrom(LPS22HB_address, 3);
    result[0] = Wire.read();
    result[1] = Wire.read();
    result[2] = Wire.read();
    float press = (result[2]<<16 | result[1]<<8 | result[0]) / 4096.0;

    Serial.print(result[0]);Serial.print(" ");
    Serial.print(result[1]);Serial.print(" ");
    Serial.print(result[2]);Serial.print(" ");

    Serial.println(" press= "+String(press,1)+"hPa");

    delay(3000);
}

 実行している様子です。

前へ

Arduino Nano R4の活用 ⑤ スイッチ入力のスケッチ スケッチの説明<第2回>