Project 20.1 LCDディスプレイ/LCD1602

前回はステッピングモーターの制御について学びました。

あわせて読みたい
Project 19.1 ステッピングモーター/Stepper Motor 前回はサーボをポテンショメーターで制御しました。 https://kaneshige.org/?p=557 今回はステッピングモーターの制御を学びましょう! 【ステッピングモーターとは】 ...

今回はLCDディスプレイに文字を表示してみましょう。

目次

I2C通信について

I2C (Inter-Integrated Circuit) は2線式のシリアル通信方式で、マイクロコントローラとその周辺機器の接続に使用されます。I2C通信を使用するデバイスは、シリアルデータ (SDA) 線とシリアルクロック (SCL) 線 (I2Cバスと呼ばれる) に接続されている必要があります。SDAとSCLは複数の機器で共有するため、各線に各デバイスを接続します。各デバイスは固有のアドレス(識別番号)を持ち、バスに接続されているデバイスと通信するために送信機または受信機として使用することができます。

LCD1602について

LCD1602液晶ディスプレイは、16文字×2行の文字を表示することができます。数字、英字、記号、ASCIIコードなどを表示することができます。

以下の図は、モノクロLCD1602ディスプレイと回路ピン配置を示しています。

I2C LCD1602ディスプレイは、I2Cインターフェースを内蔵しており、シリアル入力・パラレル出力モジュールをLCD1602ディスプレイに接続します。これにより、LCD1602を操作するために必要な線が4本のみになります。

このモジュールで使用されているシリアルからパラレルへのICチップはPCF8574T(またはPCF8574AT)で、デフォルトのI2Cアドレスは0x27(または0x3F)です。

従来のLCD1602との違い

従来のLCD1602ディスプレイは、8本のデータピン(D0-D7)、RSピン、RWピン、VCCピン、VSSピンが必要です。一方、I2C LCD1602ディスプレイは、これらのピンに加えて、SDAピンとSCLピンが必要です。

メリット

I2C LCD1602ディスプレイを使用するメリットは以下の通りです。

必要な線が減る: 従来のLCD1602ディスプレイに比べて、必要な線が4本減ります。
配線が簡単になる: 必要な線が減ることで、配線が簡単になります。
ノイズの影響を受けにくい: I2C通信は、ノイズの影響を受けにくい通信方式です。

デメリット

I2C LCD1602ディスプレイを使用するデメリットは以下の通りです。

従来のLCD1602ディスプレイより高価であることが多い。
I2Cバスを使用している他のデバイスと競合する可能性がある。

具体的な使用方法

I2C LCD1602ディスプレイを使用するには、まずマイクロコントローラと接続する必要があります。次に、I2Cライブラリを使用して、命令とデータを送信して、ディスプレイを制御する必要があります。詳細は、I2C LCD1602ディスプレイのデータシートを参照してください。

PCF8574について

PCF8574はI2Cバスの2本の信号線を使用して、8つのI/Oポートを拡張するICです。(8ビットのI2C I/Oエキスパンダ)

PCF8574のピンアサイン及びブロック図

PCF8574モジュールのピンとLCD1602のピンは、それぞれ対応しており、相互接続されています。

I2Cインターフェースを使用すると、16ピンのLCD1602ディスプレイを制御するために必要なピンは4本だけになります。

このプロジェクトでは、I2C LCD1602を使用して、静的文字と動的変数を表示します。

回路図

接続図

コード

コードをアップロードする前にライブラリをインストールしてください。
Arduino IDEから『Sketch』⇒『Include library』⇒『Add .zip Library….』と進みます。そこから以下のファイルを選択してください。
Freenove_Ultimate_Starter_Kit_for_ESP32_S3\C\Libraries\LiquidCrystal_I2C.zip

/**********************************************************************
  Filename    : Drive LiquidCrystal I2C to display characters
  Description : I2C is used to control the display characters of LCD1602.
  Auther      : www.freenove.com
  Modification: 2022/10/25
**********************************************************************/
#include <LiquidCrystal_I2C.h>
#include <Wire.h>

#define SDA 14                    //Define SDA pins
#define SCL 13                    //Define SCL pins

/*
 * note:If lcd1602 uses PCF8574T, IIC's address is 0x27,
 *      or lcd1602 uses PCF8574AT, IIC's address is 0x3F.
*/
LiquidCrystal_I2C lcd(0x27,16,2); 
void setup() {
  Wire.begin(SDA, SCL);           // attach the IIC pin
  if (!i2CAddrTest(0x27)) {
    lcd = LiquidCrystal_I2C(0x3F, 16, 2);
  }
  lcd.init();                     // LCD driver initialization
  lcd.backlight();                // Open the backlight
  lcd.setCursor(0,0);             // Move the cursor to row 0, column 0
  lcd.print("hello, world!");     // The print content is displayed on the LCD
}

void loop() {
  lcd.setCursor(0,1);             // Move the cursor to row 1, column 0
  lcd.print("Counter:");          // The count is displayed every second
  lcd.print(millis() / 1000);
  delay(1000);
}

bool i2CAddrTest(uint8_t addr) {
  Wire.begin();
  Wire.beginTransmission(addr);
  if (Wire.endTransmission() == 0) {
    return true;
  }
  return false;
}

LiquidCrystal_I2C()関数の第2、第3引数は、それぞれカラム数(横の文字数)と行数です。setup()関数内の20行目でI2Cアドレスのテストをしています。0x27で送信を試みて失敗したら0x3Fだろうと推定しています。

次回は超音波モジュールを使用して距離を測定してみましょう。

あわせて読みたい
Project 21.1 超音波測距モジュール/Ultrasonic Ranging 前回はLCDディスプレイに文字を表示してみました。 https://kaneshige.org/?p=595 今回は超音波モジュールを使用して距離を測定してみましょう。 【超音波測距モジュー...
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

金重総合研究所の主席研究員。
子供の頃から研究者を目指し、ライフワークとして日々様々な研究をしています。
経営・マネジメント・金融・DXあたりが本職です。
私を採用したい人、私と一緒に働きたい人、一緒に知識を肥やしていきたい人はぜひお声がけ下さい。

コメント

コメントする

目次