注釈
こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。
参加する理由は?
エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。
学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。
独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。
特別割引:最新製品の独占割引をお楽しみください。
祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。
👉 私たちと一緒に探索し、創造する準備はできていますか?[ここ]をクリックして今すぐ参加しましょう!
1.1.7 I2C LCD1602
前書き
LCD1602は文字型液晶ディスプレイで、32(16 * 2)文字を同時に表示できる。
部品
原理
I2C LCD1602
ご存知のように、LCDやその他のディスプレイはマンマシンの相互作用を大幅に強化するが、共通の弱点を共有している。 それらがコントローラーに接続されると、外部ポートがあまりないコントローラーの複数のIOが占用される。 また、コントローラーの他の機能も制限される。したがって、この問題を解決するために、I2Cバスを備えたLCD1602が開発された。
I2C通信
I2C(アイ・スクエアド・シー)バスは、一つマスターデバイス(または複数のマスターデバイス)と単一または複数のスレーブデバイス間の通信用の非常に強力なバスである。
I2Cメインコントローラーを使用して、IOエクスパンダー、各種センサー、EEPROM、ADC/DACなどを制御できる。 これらはすべて、ホストの2つのピン、シリアルデータ(SDA1)ラインとシリアルクロックライン(SCL1)によってのみ制御される。
回路図
T-Board Name |
physical |
SDA1 |
Pin 3 |
SCL1 |
Pin 5 |
実験手順
ステップ1: 回路を作る。
ステップ2: I2Cをセットアップします( I2C設定 。I2Cを設定している場合は、このステップをスキップしてください。)
C言語ユーザー向け
ステップ3: ディレクトリを変更する。
cd ~/davinci-kit-for-raspberry-pi/c/1.1.7/
ステップ4: コンパイルする。
gcc 1.1.7_Lcd1602.c -lwiringPi
ステップ5: 実行する。
sudo ./a.out
コードの実行後、LCDに「Greetings」、「SunFounderから」が表示される。
注釈
コードと配線に問題がないのに LCD に内容が表示されない場合は、背面のポテンショメータをひねってみてください。
コード
#include <stdio.h>
#include <wiringPi.h>
#include <wiringPiI2C.h>
#include <string.h>
int LCDAddr = 0x27;
int BLEN = 1;
int fd;
void write_word(int data){
int temp = data;
if ( BLEN == 1 )
temp |= 0x08;
else
temp &= 0xF7;
wiringPiI2CWrite(fd, temp);
}
void send_command(int comm){
int buf;
// Send bit7-4 firstly
buf = comm & 0xF0;
buf |= 0x04; // RS = 0, RW = 0, EN = 1
write_word(buf);
delay(2);
buf &= 0xFB; // Make EN = 0
write_word(buf);
// Send bit3-0 secondly
buf = (comm & 0x0F) << 4;
buf |= 0x04; // RS = 0, RW = 0, EN = 1
write_word(buf);
delay(2);
buf &= 0xFB; // Make EN = 0
write_word(buf);
}
void send_data(int data){
int buf;
// Send bit7-4 firstly
buf = data & 0xF0;
buf |= 0x05; // RS = 1, RW = 0, EN = 1
write_word(buf);
delay(2);
buf &= 0xFB; // Make EN = 0
write_word(buf);
// Send bit3-0 secondly
buf = (data & 0x0F) << 4;
buf |= 0x05; // RS = 1, RW = 0, EN = 1
write_word(buf);
delay(2);
buf &= 0xFB; // Make EN = 0
write_word(buf);
}
void init(){
send_command(0x33); // Must initialize to 8-line mode at first
delay(5);
send_command(0x32); // Then initialize to 4-line mode
delay(5);
send_command(0x28); // 2 Lines & 5*7 dots
delay(5);
send_command(0x0C); // Enable display without cursor
delay(5);
send_command(0x01); // Clear Screen
wiringPiI2CWrite(fd, 0x08);
}
void clear(){
send_command(0x01); //clear Screen
}
void write(int x, int y, char data[]){
int addr, i;
int tmp;
if (x < 0) x = 0;
if (x > 15) x = 15;
if (y < 0) y = 0;
if (y > 1) y = 1;
// Move cursor
addr = 0x80 + 0x40 * y + x;
send_command(addr);
tmp = strlen(data);
for (i = 0; i < tmp; i++){
send_data(data[i]);
}
}
void main(){
fd = wiringPiI2CSetup(LCDAddr);
init();
write(0, 0, "Greetings!");
write(1, 1, "From SunFounder");
}
コードの説明
void write_word(int data){……}
void send_command(int comm){……}
void send_data(int data){……}
void init(){……}
void clear(){……}
void write(int x, int y, char data[]){……}
これらの関数は、I2C LCD1602オープンソースコードを制御するために使用される。
これにより、I2C LCD1602を簡単に使用できる。
これらの関数の中で、 init()
は初期化に使用され、 clear()
は画面の消去に使用され、 write()
は表示内容の書き込みに使用され、
他の関数は上記の関数をサポートする。
fd = wiringPiI2CSetup(LCDAddr);
この関数は指定されたデバイスシンボルでI2Cシステムを初期化する。関数のプロトタイプ:
int wiringPiI2CSetup(int devId);
パラメーターdevIdはI2Cデバイスのアドレスであり、i2cdetectコマンド(付録を参照)で見つけることができ、I2C LCD1602のdevIdは通常0x27である。
void write(int x, int y, char data[]){}
この関数では、 data[]
はLCDにプリントされる文字であり、パラメーターxとyはプリントの位置を決定する(行y + 1、列x + 1はプリントされる文字の開始位置である)。
Python言語ユーザー向け
ステップ3: ディレクトリを変更する。
cd ~/davinci-kit-for-raspberry-pi/python/
ステップ4: 実行。
sudo python3 1.1.7_Lcd1602.py
コードの実行後、LCDに「Greetings」、「SunFounderから」が表示される。
注釈
FileNotFoundError: [Errno 2] No such file or directory: '/dev/i2c-1'
というエラーが発生した場合は、 I2C設定 を参照して I2C を有効にする必要があります。ModuleNotFoundError: No module named 'smbus2'
エラーが発生した場合は、sudo pip3 install smbus2
を実行してください。OSError: [Errno 121] Remote I/O
というエラーが発生した場合は、モジュールの配線が間違っているか、モジュールが破損しています。コードと配線に問題がないのに LCD に内容が表示されない場合は、背面のポテンショメータをひねってみてください。
コード
注釈
以下のコードを 変更/リセット/コピー/実行/停止 できます。 ただし、その前に、 davinci-kit-for-raspberry-pi/python
のようなソースコードパスに移動する必要があります。
import LCD1602
import time
def setup():
LCD1602.init(0x27, 1) # init(slave address, background light)
LCD1602.write(0, 0, 'Greetings!!')
LCD1602.write(1, 1, 'from SunFounder')
time.sleep(2)
def destroy():
LCD1602.clear()
if __name__ == "__main__":
try:
setup()
except KeyboardInterrupt:
destroy()
コードの説明
import LCD1602
このファイルはI2C LCD1602を制御するためのオープンソースファイルである。I2C LCD1602を簡単に使用できる。
LCD1602.init(0x27, 1)
この関数は指定されたデバイスシンボルでI2Cシステムを初期化する。最初のパラメーターはI2Cデバイスのアドレスで、i2cdetectコマンドで検出できる(詳細については付録を参照してください)。I2C LCD1602のアドレスは通常0x27である。
LCD1602.write(0, 0, 'Greetings!!')
コードの実行後、LCDに「Greetings」、「SunFounderから」が表示される。