水瓶座列車

どこまで行けるか、とりあえず発車します。

Raspberry Pi 3B+ でI2CキャラクタLCD(1602) の動作確認

f:id:aquarius999:20201114182925j:plain

 

OSOYOOのセンサーセットを買ったのでまずは、I2CキャラクLCDの動作確認をしました。

基本的には、OSOYOOの取り扱い説明手順と同じですが、少しハマったところもありました。

備忘も兼ねて動作確認手順を説明しようと思います。

 

 

 

 

  1.LCD 1602 I2C キャラクタデバイス

 

キャラクLCDバイスは、1行16文字で2行表示できるLCDです。 

数字、カタカナ、特殊記号などを表示することができます。

 

制御方法として始めは、OSOYOOのセンサーセットのサンプルプログラムを見るしかありません。

が、ネットでこのLCDのデータシートを探してみると、すぐに見つかりました。

英語ですが、このデータシートを見ながら、サンプルプログラムの動作を理解できると思います。 

とりあえず今回は制御方法の理解は後でやるとして、LCDの動作確認を優先します。

 

  2.ラズパイとLCDの接続

 

40ピンケーブルをラズパイとT字型GPIO拡張基盤に接続します。

そして、 キャラクLCD基盤の裏面にあるピンがSCL,SDA,5V,GNDとあるので、

ブレッドボードに挿したT字型GPIO拡張基盤の表示を見ながら接続します。 

f:id:aquarius999:20201121183104j:plain

 

接続完了後、ラズパイの電源を入れてLCDのバックライトが点灯することを確認し、

続けてスレーブアドレスを確認します。

 

スレーブアドレスの確認方法は、

$ i2cdetect -y 1

を実行して、下図のように表示されることを確認します。

 

f:id:aquarius999:20190112191037p:plain


この場合はスレーブアドレスが、0x27です。

 

このOSOYOOのセンサーキットには、一本線のオスメスのジャンプワイヤが含まれていません。

20ピンのオスメスのジャンプワイヤはあるのですが、わざわざ4本接続のために、

これを使うのも微妙ですし、ちぎってバラバラにするのも更に微妙な感じがしました。 

ちょっと見た目が良くないのとごちゃごちゃするので、オスメスの単線ワイヤを購入したほうが良いです。

 

 

 

 

  3.サンプルコードのダウンロード

 

ラズパイのターミナルからサンプルコードをダウンロードします。

$ sudo wget http://osoyoo.com/driver/pi3_start_learning_kit_lesson_13/i2c1602_lcd.c

ダウンロード後、ソースを開きスレーブアドレスの値を変更します。

 

変更箇所は、下記の赤枠です。

f:id:aquarius999:20190113180346p:plain

 

  4.サンプルコードのコンパイルと実行

 

スレーブアドレスの修正後、コンパイルします。

$ gcc -Wall -o i2c1602_lcd i2c1602_lcd.c -lwiringPi

 

コンパイルで生成されたi2c1602_lcdを実行します。

$ sudo ./i2c1602_lcd

 

 

 

  5.実行結果

 

実行した結果は、

「Hi man. Welcome to osoyoo.com」が表示され、

その後に、

「This is Lesson13 IIC LCD Test」と表示されます。

f:id:aquarius999:20201224025901j:plain

 

サンプルコードは確認できたけど、やっぱりどうやって制御しているのかを理解したい。

そもそも、GPIOで制御するLCDにI2Cで制御できるように基盤を付けている感じ。

だからデータシートを見てもI2C通信のことは書いていません。

サンプルコードを見てみると、例えばLCD画面クリア処理では、

ビット列を生成してI2Cで送信しているので、現在データシートとサンプルコードを読み込み中。 

 

  6.ハマったところ

 

私は組み込み系の仕事をやっていたこともあって、

OSOYOOの説明書を流し読みしながら動作確認を行っていました。 

そして初めてサンプルコードを実行したところ何も表示されません。

何故? スレーブアドレスは間違っていないし、

サンプルコードもスレーブアドレス変更以外触っていません。

 

原因がソフトかハードかを切り分けるために、

簡易ロジアナで波形出ているか確認してみましたところ、 ちゃんと波形は出ていました。

であれば、何か表示されるはずなのに、表示されていない。 

ということは、基盤の設定か?というところに行きついて、やっと原因がわかりました。

 

OSOYOOの説明書や説明動画をちゃんと読み返しているとLCD表示しないときは、

「基盤の裏側にある十字のツマミを触ってみて」という説明がありました。

そのツマミとは、下記の赤枠の部分です。

f:id:aquarius999:20201121183135j:plain

 

このツマミを左側や右側に回すことで、LCDバックライトの輝度を調整することができます。

 

 

 

  7.最後に

 

キャラクLCDの動作確認を優先しましたが、

制御方法やサンプルコードの解説も後々まとめていこうと思っています。

また、「6.ハマったところ」の原因解析がまさしく組み込みとしての醍醐味だなあと改めて感じました。 

何気に簡易ロジアナで確認したと書いていますが、

何万円もするロジアナを使用したわけではなく、 1000円ほどのものを使用しました。

 

この確認方法については、

RaspberryPi 3B+でロジックアナライザを使ってI2Cの波形を取得する方法 - 水瓶座列車

にありますので参考にしてみてください。

また、サンプルプログラムを自分で解析して更に詳細に調査解析した内容も、

LCD1602(I2C)を制御する方法を解析調査した結果まとめ - 水瓶座列車

にあります。

 

 

<関連・おすすめ記事> 

Raspberry Pi (ラズパイ)で役に立つ書籍のおすすめランキングベスト5 - 水瓶座列車

RaspberryPi (ラズパイ)で使用できるカメラのおすすめランキングベスト5 - 水瓶座列車

RaspberryPi 4Bと3B+のスペック比較解説 - 水瓶座列車

Raspberry Pi(ラズパイ)のOSをバックアップ・リストアする方法 - 水瓶座列車

Raspberry Pi OSのカーネルソースビルド手順解説 - 水瓶座列車