検索コード

LCD1602およびLCD2004のI²Cアドレスを設定する方法とI²Cスキャナの使い方

LCD1602およびLCD2004のI²Cアドレスを設定する方法とI²Cスキャナの使い方

このチュートリアルでは、LCD1602およびLCD2004ディスプレイのI²Cアドレスを設定する方法と、I²Cスキャナの使い方を解説します。I²C通信を理解することは、これらのLCDモジュールをArduinoプロジェクトに組み込む際に重要であり、効率的なデータ伝送と制御を可能にします。このガイドを終える頃には、LCDのI²Cアドレスを正しく特定し、正常に動作していることを確認できるようになります。

LCD1602-I2C display module with 4 wires

このプロジェクトでは、I²C通信で動作するBMP-180センサーを使用します。センサーは温度と気圧の読み取り値を提供し、LCD1602またはLCD2004のいずれかに表示できます。本チュートリアルには配線方法、コードスニペット、および期待される結果の実演が含まれます。視覚的にわかりやすくするため、関連ビデオ(ビデオ内 00:00)も必ずご確認ください。

ハードウェア解説

このプロジェクトの主な構成要素は、BMP-180センサー、LCD1602またはLCD2004ディスプレイ、そしてArduinoボードです。BMP-180はI²Cプロトコルで通信するデジタル気圧センサーで、SDA(データ線)とSCL(クロック線)の2本の信号線のみを必要とします。LCDディスプレイもI²C対応で、同じ通信プロトコルを用いて容易に制御できるため、配線がすっきりした効率的な構成が可能です。

BMP-180は1.8V〜3.6Vの電源電圧で動作します。つまり、より高い電圧源を使用している場合は電圧レギュレータを介して給電できます。一方でLCDディスプレイは通常5Vで動作するため、追加の部品なしでArduinoボードと容易に接続できます。

データシートの詳細

製造元 ボッシュ
部品番号 BMP-180
ロジック/入出力電圧 1.8~3.6V
電源電圧 1.8~3.6V
出力電流(チャンネルごと) 3.6 µA
ピーク電流(チャネルあたり) 1 mA
PWM周波数に関するガイダンス 該当なし
入力論理閾値 該当なし
電圧降下 / Rドレイン-ソース(オン) / 彩度 該当なし
熱限界 -40~+85℃
パッケージ 3.6×3.8 mm
備考/バリエーション 温度・圧力センサー

  • 適切な電圧を供給してください:BMP-180の電源は1.8V~3.6Vにしてください。
  • SDA と SCL ラインにはプルアップ抵抗を使用して、I²C 通信を安定させてください。
  • 信号の劣化を避けるため、配線は短くしてください。
  • スキャン中に正しいI²Cアドレスであるか確認してください。
  • BMP-180の温度監視範囲:-40〜+85 °C

配線手順

Arduino wirng for LCD1602 with I2C
Arduino wirng for LCD1602 with I2C

BMP-180センサーとLCDディスプレイをArduinoに配線するには、次の手順に従ってください。

まず、BMP-180のVnピンをArduinoの5V出力に接続します。次に、GNDBMP-180のピンをArduinoのGND(グラウンド)に接続します。そのSDABMP-180のピンはArduinoのものに接続されるべきですA4ピン、一方でSCLピンは接続されるA5.

LCD1602またはLCD2004の場合、接続してくださいVCCArduinoの5Vピンに接続し、そしてGNDピンもグラウンドに接続する。そのSDALCDのピンは…にも接続する必要がありますA4(BMP-180と共有されており)、そしてそのSCLピンは〜に接続する必要がありますA5

この構成により、両方のデバイスが同じI²Cバス上で通信でき、配線がすっきりした効率的なセットアップが可能になります。

コード例と解説

I²Cアドレスをスキャンするために、簡単なコードスニペットを使用します。以下の抜粋はI²C通信を初期化し、シリアルモニタを準備します:


#include 

void setup() {
  Wire.begin();
  Serial.begin(9600);
  while (!Serial); // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}

このコードはI²C通信のためにWireライブラリを初期化し、出力のためにシリアルモニタを設定します。これはデバッグおよびI²Cデバイスが認識されていることを確認するために不可欠です。

loop 関数は I²Cバス上のデバイスをスキャンし、それらのアドレスを表示します:


void loop() {
  byte error, address;
  int nDevices = 0;
  Serial.println("Scanning...");

  for(address = 1; address < 127; address++) {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
    if (error == 0) {
      Serial.print("I2C device found at address 0x");
      Serial.println(address, HEX);
      nDevices++;
    }
  }
  if (nDevices == 0) Serial.println("No I2C devices found\n");
  delay(5000); // wait 5 seconds for next scan
}

このループは1から127までの各アドレスをチェックし、存在するデバイスと通信を試みます。デバイスが応答した場合、そのアドレスがシリアルモニタに表示されます。これはお使いのLCDやその他の接続デバイスのI²Cアドレスを特定するための重要な手順です。

デモンストレーション/期待できること

I²Cスキャナを実行すると、シリアルモニタにI²Cデバイスが見つかったかどうかを示すメッセージが表示されるはずです。成功した場合、出力には接続されているデバイスのアドレスが16進数で表示されます(例:「アドレス0x27でI2Cデバイスが見つかりました」)。デバイスが見つからない場合は、それに応じたメッセージが表示されます。

デバイスの検出に問題が生じないよう、すべての接続が確実であり、正しい電圧レベルが供給されていることを確認することが重要です(ビデオの05:30)。

画像

Arduino wirng for LCD1602 with I2C
Arduino wirng for LCD1602 with I2C
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD2004_display-1
LCD2004_display-1
LCD2004_display-2
LCD2004_display-2
I2C_module
I2C_module
125-Arduino code for finding an I2C address
言語: C++
// --------------------------------------
//http://playground.arduino.cc/Main/I2cScanner
// i2c_scanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not known.
// Version 2, June 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26, 2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
// Version 6, November 27, 2015.
//    Added waiting for the Leonardo serial communication.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit addresses might not be seen properly.
// Watch Video explaining I2C address: https://www.youtube.com/watch?v=bqMMIbmYJS0
//
 
#include <Wire.h>
 
 
void setup()
{
  Wire.begin();
 
  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}
 
 
void loop()
{
  byte error, address;
  int nDevices;
 
  Serial.println("Scanning...");
 
  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
 
    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
 
      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Unknown error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
 
  delay(5000);           // wait 5 seconds for next scan
}

必要かもしれないもの

リソースと参考文献

まだリソースはありません。

ファイル📁

Arduinoライブラリ(zip)

フリッツィングファイル