IoT何をいまさら(14) 工作1、LCDで表示、AQM1602XA

JosephHalfmoon

別シリーズでマイコンボードが使えるようになったので、実際にセンサを取り付け、また市販の無線モジュールなどを取り付け、「IoTの末端もどき」を作っていろいろ考察しようと考えました。そこで「工作」シリーズ開始なのですが、最初は、センサでも無線でもなく、マイコンボードに取り付ける表示から始めることにいたしました。センサの値を読み取ってデバッグ用に接続したパソコンの仮想端末に表示しても目的は達せるのですが、やはり「自立」感が欲しい。とりあえず文字が幾らか表示できればセンサもいろいろ饒舌に語るか、という期待をこめてであります。

さて使用するマイコンボードと開発環境の方は、鳥なき里のマイコン屋の方でとりあげさせていただいています

  • STマイクロエレクトロニクスのSTM32マイコン搭載、NUCLEO-F072RBボード
  • Arm Mbedのクラウド開発環境

をしばらく使ってみたいと思います。今回これに接続しようとするのは、秋月通商で見つけた以下のLCDモジュールです。

AQM1602XA-RN-GBWという型番。I2C接続のLCDディスプレイです。昔は電子工作でLCDパネルを接続するのは結構苦労が多かった気もするのですが、何時の間にか非常に簡単なモジュールが販売されていて助かります。写真左が本体で、真ん中がLCDの1.27mm(50mil)ピッチを2.54mm(100mil)ピッチに変換するボードです。優れものはこの小さいボードで、LCD動かすときに必要なコンデンサやI2Cバスのプルアップ抵抗(抵抗を使うのはハンダジャンパでオプショナル)など搭載してくれているので、ピンピッチを変換すると同時に細かい受動部品の始末が全部終わってしまうこと。便利です。後は、電源、グラウンド、I2CのSCL, SDAを接続すればおしまい。ほんとお手軽です(といいつつ老眼には、1.27mmピッチでも良く見えないが。。。)

端子の始末が終われば、後は接続(これまたブレッドボードでお手軽接続)するだけです。一応、NUCLEO-F072RBボードとLCDパネルの仕様を調べておかねばなりますまい。付属の説明書を読めば、LCDパネルは3.3V電源で、プルアップを使わない時1mAの消費電力。ボードの資料(これまた簡単にダウンロードできる)をちらちらと見れば、ボード上に3.3Vの電源回路は乗っており、LCDパネルへ1mAほど供給させても問題なさそうであったので、電源、グラウンドは、ボード上の

Arduino互換のピンソケット

から取り出すことにいたしました。このNucleoというボードはSTマイクロのボードなので、自社のMorphoという仕様のピンヘッダからほとんどの端子を当たれるようになっているのですが、人気者のArduino(こちらはAVRマイコン)を意識して互換のソケットも乗っているのです。その上、白く塗られたボード上に青色で端子名をしっかり印刷してあるので、老眼でも間違いようはありません。

さて後は、I2Cバスの端子二本ですが、Mbedがあまりにお手軽すぎる弊害がちと現れました。それこそI2Cバスを使用するためには、制御レジスタのアドレスやらビット配置など調べることもなく、以下のような一行を宣言するだけで良いのです。

I2C i2c(I2C_SDA, I2C_SCL);

しかし、そこに書いてある I2C_SDAとかI2C_SCLとか、実際にはどのピン?というのが分かりません。I2Cが1チャネルだけであれば迷うこともありませんが、複数チャネル乗っている場合はどちらの端子か?この定義は、ターゲット・ボード毎に存在する

PinNames.h

というファイルに書かれていました。APIのドキュメントなどに書かれていないボード固有情報など、はヘッダファイルを見た方が早そうです。参照したいヘッダファイル類については、Web上を探し回るより、ローカルにソースコード一式をイクスポートして持っておけば、ローカルに検索できるので良いかもしれません。これでピン名も分かったので、I2Cの端子をLCDに接続しました。そして、説明書(Arduinoとの接続サンプルコードが掲載されています)を真似して初期化コードなどを書き、MbedのWeb環境でコンパイル、ダウンロードしてGo!

あれ、表示が出ない。

なにか、間違っていますな。まずは接続を疑いました。こういう時に役に立つDigilent社

ANALOG DISCOVERY 2

というこれまた「お手頃、お手軽」なツールで、波形を見れば、こんな感じです。

それらしくクロックもデータも出力されている感じ。クロック測れば、MbedのAPIマニュアル記載どおりで、デフォルト100kHz動作。LCDパネルのスペックは上限400kHzなので問題ない。Analog Discovery 2には、オシロだけでなく、I2Cバスのトラフィックをモニタする機能もあるのでした。こんな感じ。

オシロ画面では送信されちるデータを読み取るのが面倒ですが、こちらの機能を使えばI2Cの仕様通りに解読してくれるので、意図したデータが出力されていることが分かります。また、ソフトウエアの方にもちょっと細工をし、

Serial pc(USBTX, USBRX);

とデバッグ用のCOMポートを開いてやって、I2CバスのACK信号をモニタしてみました。LCDパネルを外せばACKが返らず、つなげればACKが返ることが確認できました。ということは、

ハードは大丈夫じゃね。

ということで、ソフトを見ていたら、気付きました。初期化のシーケンスArduino用のコードをあまり良く読まずに真似したために、コマンドの書き込み方法が間違っていました。修正&Go!

下の方にLCDパネルが接続されています。ちゃんと表示されているのが、分かりますかね。

というわけでLCDに文字表示(16文字x2行ですが)ができるようになったので、これにセンサを継ぎ足していきたいと思います。

IoT何をいまさら(13) スマート水道メータへ戻る

IoT何をいまさら(15) 3角測量で距離を、シャープ測距センサ へ進む

鳥なき里のマイコン屋(48) Arm Mbed その6 へ戻る