ラズパイでACM1602NIを使おう
こんにちは。國松です。
i2c接続に関する騒動も一段落?しましたので今回はやっとi2c接続のLCDキャラクターモジュールACM1602NIを接続して動かしていきたいと思います。
ラズパイのi2c接続に関する設定は済んでいるものとして説明をしていきます。
ACM1602NIには16文字2行表示できるキャラクターLCDです。
ACM1602NIを使う時の注意点
・i2cdetectが使えない。
i2cdetectを実行するとハングアップしてしまうのでLCDの電源を入れ直す必要があります。
・baudrateを50000に設定する必要がある。
設定の方法は/boot/config.txtファイルにdtparam = i2c-baudrate = 50000を追記します。
ラズパイとACM1602NIの接続
ACM1602NI | ラズパイ | 半固定ボリューム |
1 VSS | GND | 右の足((ブレッドボードの縦列を利用してラズパイのGDNに接続) |
2 VDD | 3.3V | 左の足(ブレッドボードの縦列を利用してラズパイの3.3vに接続) |
3 VO | 真ん中の足 | |
4 SCL | i2c SCL(GPIO3) | |
5 SDA | i2c SDV(GPIO2) | |
6 BL+(バックライト+) | 未接続 |
(接続図)
i2cデバイスの接続の確認
ACM1602NIではi2cdetectが使えないので以下のlcdの初期化コマンドを打ち込んで書き込みができるかを確認します。
i2cset -y 1 0x50 0x00 0x01
ここでError: Write failedと表示されるたらラズパイとの接続がうまくいっていません。もしT型接続コネクタを使っていた場合それをやめてラズパイのGPIOピンに直接接続するとうまくいく事があります。
文字を表示
1 2 3 4 5 6 7 8 9 10 11 12 13 | i2cset -y 1 0x50 0x00 0x01 #lcdディスプレイの初期化 i2cset -y 1 0x50 0x00 0x38 i2cset -y 1 0x50 0x00 0x0c i2cset -y 1 0x50 0x00 0x06 #ここまでディスプレイの初期化 i2cset -y 1 0x50 0x00 0x41 #A i2cset -y 1 0x50 0x00 0x42 #B i2cset -y 1 0x50 0x00 0x43 #C |
ABCと無事に表示されました。
プログラムで文字を表示
参考サイト: DIY環境
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #ライブラリーをインポート import smbus from time import sleep i2c = smbus.SMBus(1) # 1 is bus number lcd_addr = 0x50 _command=0x00 _data=0x80 _clear=0x01 _home=0x02 _mode = 0x38 #8bit 2line 5×8dot display_On=0x0c LCD_2ndline=0x40+0x80 def command(code): i2c.write_byte_data(lcd_addr,_command, code) sleep(0.2) def data(code): i2c.write_byte_data(lcd_addr, _data, code) sleep(0.2) def write_lcd(text): bin = text.encode("utf-8") for ch in bin: i2c.write_byte_data(lcd_addr, _data, ch) def init(): command(_mode) command(_clear) command(display_On) #main init() command(_clear) write_lcd("Hello World!!") command(LCD_2ndline) write_lcd("Raspberry Pi") |
i2cには大分苦しめられましたが四苦八苦しながらも文字を表示することができました。