この投稿では、「I2C」または「IIC」または「IsquareC」ベースのLCDアダプターモジュールを見ていきます。これにより、ArduinoとLCDディスプレイ間の配線接続がわずか2線に減り、GPIOピンのトンも節約されます。他のセンサー/ドライブなど。
I2C LCDアダプタモジュールについて説明する前に、I2Cバスとは何かおよびそれがどのように機能するかを理解することが重要です。
しかしとにかく、この言及のLCDアダプターを使用するためにI2Cプロトコルの専門家である必要はありません。
I2C接続の図:
I2CまたはIICは「Inter-IntegratedCircuit」の略で、フィリップスセミコンダクターズ(現在はNXPセミコンダクターズ)によって発明されたシリアルコンピュータバスです。このバスシステムは1982年に発明されました。
バスとは?
バスは、あるチップから別のチップ/ある回路基板から別の回路基板にデータを伝送するケーブル/ワイヤのグループです。
I2Cバスプロトコルの主な利点は、サポートされているマイクロコントローラーまたはセンサーまたはチップを2本のワイヤーで相互接続できることです。このプロトコルの驚くべき利点は、127の異なるチップまたはセンサー/ドライバーを1つのマスターデバイス(通常は2本のワイヤーでマイクロコントローラー)に相互接続できることです。
2本のI2Cワイヤーは何ですか?
2本のワイヤは、それぞれシリアルデータとシリアルクロックであるSDAとSCLです。
シリアルクロックまたはSCLは、I2Cバスを介したデータ通信を同期するために使用されます。 SDAまたはシリアルデータは、実際のデータがマスターからスレーブに、またはその逆に伝達されるデータラインです。マスターデバイスはシリアルクロックを制御し、通信する必要のあるスレーブデバイスを決定します。スレーブデバイスは最初に通信を開始できず、マスターデバイスのみが開始できます。
シリアルデータラインは双方向で堅牢であり、8ビットデータのすべてのセットが送信された後、受信デバイスは確認応答ビットを送り返します。
I2Cプロトコルはどれくらい速いですか?
1982年に開発されたI2Cプロトコルの元のバージョンは、100Kbpsをサポートしていました。次のバージョンは1992年に標準化され、400Kbps(高速モード)をサポートし、最大1008台のデバイスをサポートしました。次のバージョンは、1998年に3.4 Mbps(高速モード)で開発されました。
他のいくつかのI2Cバージョンは2000年、2007年、2012年に開発され(5Mbps超高速モード)、I2Cの最近のバージョンは2014年に開発されました。
なぜI2Cバスにプルアップ抵抗があるのですか?
SDAとSCLは「オープンドレイン」です。つまり、両方のラインをLOWにすることはできますが、ラインをHIGHに駆動することはできないため、プルアップ抵抗が各ラインに接続されます。
ただし、LCDやRTCなどのほとんどのI2Cモジュールにはプルアップ抵抗が組み込まれているため、指定されていない限り、接続する必要はありません。
プルアップ/プルダウン抵抗:プルアップ抵抗は、電源の+ Veラインに接続された抵抗で、ラインがハイでもローでもない場合にラインの論理レベルをHIGHに維持します。
プルダウン抵抗は、電源の–Veラインに接続された抵抗であり、ラインがハイでもローでもない場合に、ラインのロジックレベルをLOWに維持します。
これにより、ラインにノイズが入るのも防ぎます。
I2Cプロトコルの表面を傷つけたことを願っています。I2Cプロトコルの詳細が必要な場合は、サーフィンしてください。
YouTubeとGoogle。
それでは、I2CLCDモジュールを見てみましょう。
LCDディスプレイ用の16個の出力ピンがあり、16 X 2LCDモジュールの背面に直接はんだ付けできます。
入力ピンは+ 5V、GND、SDA、SCLです。 Arduino UnoのSDAピンとSCLピンは、それぞれピンA4とA5です。 ArduinoのメガSDAはピン#20で、SCLはピン#21です。
I2Cアダプターなしとアダプター付きでLCDをArduinoに配線したときの外観を比較してみましょう。
I2Cアダプターなし:
I2Cアダプターの場合:
アダプターはLCDディスプレイの背面にはんだ付けされており、他のタスクのためにGPIOピンの負荷を節約し、ピンA4とA5にさらに126個のI2Cデバイスを追加し続けることができます。
標準の液晶ライブラリはこのI2CLCDアダプターでは機能しないことに注意してください。このための特別なライブラリがあります。これについては間もなく説明し、コーディング例を使用してこのモジュールの使用方法を説明します。
I2Cアダプタを16x2ディスプレイに接続する方法
記事の上記のセクションでは、I2Cプロトコルの基本を学び、I2CLCDアダプターモジュールの基本的な概要を説明しました。この投稿では、I2CLCDアダプターモジュールを16x 2 LCDディスプレイに接続する方法を学習し、例を使用してプログラムする方法を説明します。
I2Cプロトコルの主な利点は、サポートされているセンサー/入力/出力デバイスをわずか2行で配線できることです。また、GPIOピンが限られているため、Arduinoで役立ちます。
それでは、モジュールをLCDに接続する方法を見てみましょう。
モジュールには16個の出力ピンと4個の入力ピンがあります。アダプターを16x 2LCDディスプレイの背面にはんだ付けするだけです。 4つの入力ピンのうち、2つは+ 5VとGNDで、残りの2つはSDAとSCLです。
他の入力/出力タスクのためにArduinoで多くのピンを保存したことがわかります。
小さなドライバー(赤いボックスで強調表示)でポテンショメーターを調整することで、ディスプレイのコントラストを調整できます。
バックライトは、プログラムコード自体で制御できるようになりました。
lcd.backlight()
これにより、LCDディスプレイのバックライトがオンになります。
lcd.noBacklight()
これにより、LCDディスプレイのバックライトがオフになります。
ジャンパーが接続されていることがわかります。これは赤いボックスで強調表示されています。ジャンパーを取り外すと、プログラムコマンドに関係なくバックライトがオフのままになります。
これでハードウェアのセットアップが完了しました。次に、コーディング方法を見てみましょう。 I2CLCDモジュールには特別なものが必要であることを忘れないでください
ライブラリとプリインストールされている「リキッドクリスタル」ライブラリは機能しません。
ここからI2CLCDライブラリをダウンロードして、ArduinoIDEに追加できます。
github.com/marcoschwartz/LiquidCrystal_I2C
前回の投稿から、I2Cデバイスには、マスターまたはマイクロコントローラーがデバイスを識別して通信できるアドレスがあることがわかりました。
ほとんどの場合、I2CLCDモジュールのアドレスは「0x27」になります。ただし、製造元が異なれば住所も異なる場合があります。プログラムに正しいアドレスを入力するだけで、LCDディスプレイが機能します。
アドレスを見つけるには、ArduinoのVccに5V、GNDをGNDに接続し、I2CモジュールのSCLピンをA5に、SDAをA4に接続し、以下のコードをアップロードします。
これにより、接続されているI2Cデバイスがスキャンされ、それらのアドレスが表示されます。
// -------------------------------- //
#include
void setup()
{
Wire.begin()
Serial.begin(9600)
while (!Serial)
Serial.println('-----------------------')
Serial.println('I2C Device Scanner')
Serial.println('-----------------------')
}
void loop()
{
byte error
byte address
int Devices
Serial.println('Scanning...')
Devices = 0
for (address = 1 address <127 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(' !')
Devices++
}
else if (error == 4)
{
Serial.print('Unknown error at address 0x')
if (address <16)
Serial.print('0')
Serial.println(address, HEX)
}
}
if (Devices == 0)
{
Serial.println('No I2C devices found
')
}
else
{
Serial.println('-------------- done -------------')
Serial.println('')
}
delay(5000)
}
// -------------------------------- //
コードをアップロードし、シリアルモニターを開きます。
2つのデバイスが検出され、それらのアドレスが表示されていることがわかりますが、I2C LCDモジュールのアドレスのみを検索する場合は、スキャン中に他のI2Cデバイスを接続しないでください。
したがって、結論として、アドレス「0x27」を取得しました。
次に、LCDモジュールとRTCまたはリアルタイムクロックモジュールの2つのI2Cデバイスがあるため、例としてデジタル時計を作成します。両方のモジュールは2本のワイヤーで接続されます。
次のライブラリをダウンロードします。
RTCライブラリ:github.com/PaulStoffregen/DS1307RTC
TimeLib.h:github.com/PaulStoffregen/Time
RTCに時間を設定する方法
•ArduinoIDEを開き、[ファイル]> [例]> [DS1307RTC]> [時刻の設定]に移動します。
•完成したハードウェアを使用してコードをアップロードし、シリアルモニターを開くと、完了です。
回路図:
プログラム:
//------------Program Developed by R.Girish-------//
#include
#include
#include
#include
LiquidCrystal_I2C lcd(0x27, 16, 2)
void setup()
{
lcd.init()
lcd.backlight()
}
void loop()
{
tmElements_t tm
lcd.clear()
if (RTC.read(tm))
{
if (tm.Hour >= 12)
{
lcd.setCursor(14, 0)
lcd.print('PM')
}
if (tm.Hour <12)
{
lcd.setCursor(14, 0)
lcd.print('AM')
}
lcd.setCursor(0, 0)
lcd.print('TIME:')
if (tm.Hour > 12)
{
if (tm.Hour == 13) lcd.print('01')
if (tm.Hour == 14) lcd.print('02')
if (tm.Hour == 15) lcd.print('03')
if (tm.Hour == 16) lcd.print('04')
if (tm.Hour == 17) lcd.print('05')
if (tm.Hour == 18) lcd.print('06')
if (tm.Hour == 19) lcd.print('07')
if (tm.Hour == 20) lcd.print('08')
if (tm.Hour == 21) lcd.print('09')
if (tm.Hour == 22) lcd.print('10')
if (tm.Hour == 23) lcd.print('11')
}
else
{
lcd.print(tm.Hour)
}
lcd.print(':')
lcd.print(tm.Minute)
lcd.print(':')
lcd.print(tm.Second)
lcd.setCursor(0, 1)
lcd.print('DATE:')
lcd.print(tm.Day)
lcd.print('/')
lcd.print(tm.Month)
lcd.print('/')
lcd.print(tmYearToCalendar(tm.Year))
} else {
if (RTC.chipPresent())
{
lcd.setCursor(0, 0)
lcd.print('RTC stopped!!!')
lcd.setCursor(0, 1)
lcd.print('Run SetTime code')
} else {
lcd.clear()
lcd.setCursor(0, 0)
lcd.print('Read error!')
lcd.setCursor(0, 1)
lcd.print('Check circuitry!')
}
}
delay(1000)
}
//------------Program Developed by R.Girish-------//
注意:
LiquidCrystal_I2C lcd(0x27、16、2)
「0x27」はスキャンして見つけたアドレスで、16と2はLCDディスプレイの行と列の数です。
RTCの場合、アドレスを見つける必要はありませんが、「0x68」をスキャンしているときに見つけましたが、とにかくRTCライブラリがそれを処理します。
それでは、Arduinoでワイヤの混雑をどれだけ減らし、GPIOピンを節約したかを見てみましょう。
LCDディスプレイには、赤いボックスで強調表示されている4本のワイヤーのみが接続されています。
また、Arduinoからは4本のワイヤーのみが接続されており、RTCモジュールは同じラインを共有しています。
これで、I2CとI2CLCDアダプタモジュールの使用方法に関する基本的な知識を習得しました。
この投稿が好きですか?何か質問がありますか?コメント欄にご記入ください。すぐに返信があります。
前:シンプルなトランジスタダイオードテスター回路 次へ:このIRリモートコントロールレンジエクステンダー回路を作成します