2017年5月27日土曜日

BLEnanoで必要なときだけLCDに情報を表示する方法



ところどころ詰まりながらも、実現できました。
BLEデバイスで利用したい時だけLCDを起動する方法は、需要がある気がするので方法を共有します。

使ったもの

LCDキット


I2C接続小型LCDモジュール(8x2行)ピッチ変換キット

3.3V、I2C接続で動作するLCDです。
ハンダを盛って信号線をpull upしています。


BLEnano キット


RedBearLab BLE Nanoキット

モジュールとライターがセットになったBLEのキットです。

MOSFET


MOSFET 2N7000

LCDの電源制御に利用します。

ブレッドボード、ジャンパワイヤ、抵抗


ブレッドボード
ジャンパワイヤ
1K抵抗

回路作りに利用します。

ボタン電池、ホルダー


CR2032 x 5
ボタン電池ホルダー CR2032

電源です。

Arduino IDEをインストールしたPC


https://www.arduino.cc/en/Main/Software

この記事ではArduino IDE 1.8.1 を使いました。

nRF51822-Arduino


https://github.com/RedBearLab/nRF51822-Arduino

BLE NanoのプログラムをArduino IDEで行うためのボード情報です。
Arduino IDEに追加してください。

ボード情報の設定方法がイメージできない方は、「Arduino boardmanager 情報設定」などで検索していただくか、以前自分が書いたこちらの記事が参考になると思います。

Arduino IDEからnrf51822モジュールにプログラムを書き込んで、スマホからbluetooth経由で制御する方法

arduino_ST7032


https://github.com/tomozh/arduino_ST7032

ST7032というマイコンで動作しているLCDをArduinoで操作するためのライブラリです。
Arduino IDEに追加してください。

ライブラリの設定方法がイメージできない方は「Arduino ライブラリ 設定方法」などで検索してみてください。

BLE Controllerをインストールしたスマホ


Android版はこちら

iOS版はこちら

BLE Nanoを作ったRedBearLabがリリースしているBLEで信号をやりとりできるアプリです。

回路

下記の図のように接続して、D0の信号でLCDの電源をMOSFETで制御できるようにしています。
MOSFETを使わず、LCDを常時起動させても良い場合は、LCDのGNDを電源のGNDに接続してください。


実際に組み立てると、このようになりました。


スイッチは無いので、電源を切りたい場合は電池を外してください。

プログラム

BLEのサンプルプログラムのSimpleControlsをベースに、LCDを制御するプログラムを作りました。

注意点

  • D2、D3はI2Cに利用するため、DigitalWriteで割り当てるピンをD0、D1に変更しました
  • Serialを使うとI2Cの通信ができなくなるので、Serialに関する記述を削除しました
  • LCDはsetContrastを実行しないと文字が見えないので、LCD起動後は毎回setContrastを実行するようにしました
  • LCDが起動していない時にLCDの制御をしようとするとプログラムが止まってしまうので、lcd_enabledというフラグがtrueの時だけLCDを操作するようにしました

注意点以外の動作内容

  • DigitalOutの操作で信号をHIGHにした直後に、LCDが起動したとみなして、起動に必要なコマンドを送信するようにしました
  • LCD起動中にAnalogReadモードになれば、読み取った値を表示し、そうでなければ「No value」と表示するようにしました
  • BLEデバイスとして検索される時の名称を「BLELCD」に変更しました

コードの全体像

https://github.com/asukiaaa/BLENanoLCD/blob/master/BLENanoLCD.ino

約200行のプログラムなのでここには表示しません。
上記のリンクをご覧ください。

プログラムの書き込み

nRF51822-Arduinoとarudino_ST7032を設定したArduino IDEで、BLE Nanoにプログラムを書き込んでください。

BLE Nanoに初めてArduino IDEからプログラムを書き込む場合、ドラッグドロップで専用のファームを設定しておく必要があります。
先程も紹介したリンクですが、詳しい流れはこちらを参考にしてみてください。

Arduino IDEからnrf51822モジュールにプログラムを書き込んで、スマホからbluetooth経由で制御する方法

動作確認

プログラムを書き換えたBLE Nanoと電池を接続し、動作させます。
起動したとしても、BLEで信号を送るまで見た目に変化はありません。


スマホでBLE Controllerを起動し、Simple Controlsのモードにします。


デバイスをスキャンします。


BLE Nanoが期待通り動いていれば、「BLELCD」というデバイスが見つかります。
見つかったら、そのデバイスを選択してください。


操作画面が表示されます。


LCDを起動するために、「Digital Out」の「NO」をタッチします。
これにより、MOSFETに信号が送られてLCDが起動すると共に、BLE NanoからLCD起動のための信号が送られます。


操作によってMOSFETへの信号がHIGHになり、LCDに初期設定の信号が送信され、「BLE Nano No value」と表示されます。


LCDの表示内容を変更するために、「Analog In」の「NO」をタッチします。


LCDにA5の測定値(0-1023)が表示されます。


「Digital Out」の「YES」をタッチすると、LCDがOFFになります。


LCDの表示が消えました。


BLEの操作でLCDの出力をON OFFする仕組みができました。
共有する情報は以上です。

参考

BLE Nano - RedBear

0 件のコメント :