UECS PiにLCD(デイスプレイ)を接続する

UECS PiユーザーマニュアルにはLCDモジュールの接続方法が記載されています。LCDを使用すれば、センサーで測定した値を表示できます、写真は温度、湿度、CO2濃度を表示したものです。

LCDはACM1602NIをモジュールにしたものを秋月電子通商で販売していますのでこれを使用します。
 ACM1602NI→https://akizukidenshi.com/catalog/g/gP-05693/

しかし、ここに超えないといけない山があります。マニュアル曰く、

モジュールの初期状態ではI2C通信速度が100kHzに対応していないためそのままでは動作しません。以下のHP情報を参考にモジュールのファームウェアを100kHz対応版に書き換えてください。

要するにLCDはI2Cで接続されますが、通信スピードをRaspberry Piと合わせないと接続できないということです。そのためにLCDのファームウエアを書き換えろと言っているのですが、これがなかなかむつかしいのです。ファーム書き換え用のツールである PICkit3(ネットで5千円~6千円する)を買ってきて、PCに開発環境を作ってサンプルプログラムをダウンロードして、ファームを書き換える。やってみましたがうまくいかず挫折しました。これはよほど慣れた人でないとできないと思います。

そこで下記のブログに書いてあるようにRaspberry Pi側のI2C通信スピードをLCDに合わせます。結果的にこちらの方がはるかに簡単でした。


Raspberry Pi ZeroにLCDと温湿度センサーSHT21とCO2センサーS-300を接続した。LCDの表示は月日、時刻、温度、湿度、CO2濃度。Raspbery Piは、自作のスタッキング基板の裏に隠れている。青い可変抵抗はLCDのコントラストとバックライトの調整用。

Raspberry PiのI2C通信スピードを変える

ブログにあるようにI2Cのbaudrate(ボーレート)を100KHzから50KHzに落とします。

「ボー」なんて大昔の通信モデムを使ってた方しかご存知ないと思いますが、bpsの類の言葉です。正確には1秒間の変調回数をいうもので50KHzは1秒間に50000回変調するということ。アナログの世界の話ですね。

一次的に変更するのはRaspberry Piのコマンドでもできますが、rebootするともとに戻るので定義ファイルを書き換えます。変更方法は、/boot/config.txtの最終行に下記の定義を追加します。
 dtparam=i2c_baudrate=50000
編集は前にもやったようにnanoで行えます。root権限のユーザーで編集してください。 

/boot/config.txtの編集。反転部分を追加する。

編集が終わったらrebootします。

接続方法

Raspberry Piに接続します。I2C通信ですので通信線としてSCLとSDA、Vddは3.3V、VssはGNDに接続します。そのほかにコントラスト調節のV0、バックライト用のBL+とBL-を使用します。バックライトを使わなければBL+とBL-は使用しなくていいですが、V0はコントラスト調整電圧を与えないと文字が見えませんので必須です。

V0は5.0.2の図のようにGNDからVddの間の電圧を与えます。20KΩ程度の可変抵抗を使用します。(もっと抵抗が高くてもいいです。可変抵抗ですから。)

BL-はGNDにするとBL+には3.3Vまでの電圧を与えればいいです。ここにも20KΩ程度の可変抵抗を使ってバックライトの明るさを調整します。データシートの3.2.3 LED Characteristics Curveを見ると3Vで10mAですから、それ以下の電流でしょう。Raspberry Piの電源供給でも大丈夫そうです。


ACM1602NI-FLW-FBW-M01 PDFデータシート(2019.2.19更新)より
データシートのダウンロードは秋月電子通商のサイトを参照

冒頭の写真がLCDと温湿度センサー、CO2センサーを接続したものです。ボードの青い四角がV0とBL+電圧調整用の可変抵抗です。

UECS Piの設定

あとはUECS Piの設定をするのですが、表示行フォーマットのところがわかりにくいので補足しておきます。「形式はjava.text.MessageFormatクラスのパターン形式に従います」と書いていますが、Javaをプログラムしたことがない方は迷うかと思います。

指定はLCDが2行なので2つのフォーマットを指定します。まず{}の外側は固定文字です。{}の内側の表現方法は、
 {インデックス,フォーマットタイプ,フォーマットスタイル}
です。

インデックスは、表示項目の欄にあるように0が時刻固定。「時刻」とはいえ、フォーマットタイプ(データ型)はdateなので日付も指定できます。よく使われそうなものは、y:年、M:月、d:日、H:時(24時間表記)、m:分、s:秒。文字数が桁数です。コロン(:)とかピリオド(.)を指定すれば表示してくれます。たくさん指定するとデータが入らなくなるので必要なものだけにしましょう。(ssを指定してもUECS Piの更新間隔が長く1秒ごとに進まないので意味がない)

1~5のインデックスは表示項目の1~5でセンサー測定値(CCM表示名)を指定します。使用できる表示名がリストで選択できます。センサーの値はフォーマットタイプがnumberで指定します。フォーマットスタイルは#が表示桁数で、.が小数点、0は小数点以下の桁がない場合でも0を表示します。(EXCELの表示形式指定と似ている)
冒頭の写真の表示は、下記の設定で表示したものです。

UECS Piのディスプレイ[LCD]の設定例

終わりに

ACM1602NIのLCDは、I2Cで通信するので温湿度センサーSHT21やSHT31とはマルチドロップの接続になり、アドレスで区別されます。最初にbaudrateを50KHzに遅くしてセンサーに影響はないのかと懸念される方もいらっしゃると思いますが、SHT21,SHT31をLCDと同時に接続して問題なく動くことは確認しています。
ただし何か問題があった時は、SHTxxを完全に外してLCDを確認することも有用です。また接続しなおしたときは、Raspberry Piの電源入れ直しから行った方がよいようです。

*「UECS Pi」はアルスプラウト株式会社が提供する汎用DIY環境制御ソフトウェアです。https://www.arsprout.co.jp/products/others/uecs-pi/

*「UECS」は農業用のセンサー機器や制御機器用の通信・動作の共通仕様です。UECS研究会が公開しています。https://www.uecs.jp/outline/outline-index

関連リンク:EzITコンサルティング www.ezitc.dev




コメント

このブログの人気の投稿

Arsprout Piを使ってみた③ ーファームウエアのカストマイズ UECS Piとの相違点ー

Arsprout Piを使ってみた② ー構成定義を中心にUECS Piとの違いを考えるー

Arsprout Piを使ってみた① ーUECS Piからの変更点を中心にー