SPIとデバイスの設定
ブラウザからESP EasyのWebUIを開き、 Hardware タブでMAX7219との通信に必要なSPIを有効にします。
なお、 Init SPI 項の注釈にあるように CS ピンの指定はここではなく、デバイス設定ページで指定します。また、SPIには入力の MISO と出力 MOSI という2つのデータ線があるのですが、LEDへ表示させるだけという性格上、 MISO は今回使われません。
続いて Devices タブを開いて、MAX7219マトリックスLEDのデバイス設定を作成します。
先ほどの CS ピンの設定は Actuator 項に見つかるので、 GPIO-15 にセット。更に Hardware Type をこのマトリックスLEDモジュールの呼称と思われる FC16 (図02参照)に変更しました。
注釈に詳しい説明があるのですが、思い通りに表示されない場合は候補を一通り試して、自分に合った設定を探すのが手っ取り早いように思えます。
今回は4つのマトリックスLEDを横一列とした1つのディスプレイとみなすので、 Zones には 1 を設定します。
その他、 Clear display on disable にチェックを入れておかないと、このページ上でデバイスを無効にしても、LEDが表示されたままになってしまうので注意。
時刻表示例
上図のマトリックスLEDデバイス設定にはまだ続きがあり、それがこの Zone configuration の項目。実際にマトリックスLEDへ表示させるコンテンツをここで定義します。
まずは手始めに、現在の時刻を HH:MM 形式にディスプレイのセンタへ表示してみました。
Rulesの有効化
ここで、複数のコマンドをフローにまとめることができるRulesの機能を活用したいので、 Tools タブを開いてデフォルトではチェックの入っていない有効化にチェックを入れます。
WebUIを再読込すると Rules タブが現れます。早速、中に入って先ほどの時刻表示の設定を1つのイベントにまとめて、記述してみました。
1 2 3 4 5 6 7 8 9 |
on showclock do DotMatrix,clear,1 DotMatrix,settxt,1," " DotMatrix,alignment,1,1 DotMatrix,anim.in,1,1 DotMatrix,anim.out,1,0 DotMatrix,brightness,1,0 DotMatrix,content,1,2 endon |
これをESP EasyのWebUIの Command から呼び出して実行するか、次のようなHTTPリクエストでイベント名をGet文字列に記述して、直接呼び出すことも可能です。
1 |
http://IP_ADDRESS/control?cmd=event,showclock |
テキストスクロール表示例
続いて長めのテキストのスクロール表示を試してみました。
Content を Text へ変更し、スクロールは Animation In/Out で設定、 Brightness を少し上げて目に留まりやすくします。
ちなみに、プラグインページによると、利用可能なフォントには日本語カタカナが含まれているのですが、今回使っているDISPLAYバイナリには収録されていないのか、 Font 項のプルダウン候補に載っていませんでした。
また、輝度 Brightness を明るくした時に気になる消費電流を、USBメーターUM25Cで計測してみました。
1 2 3 4 5 6 7 |
輝度 電流 ESP-12E単体 96mA 0 101mA 1 113mA 3 135mA 7 177mA 15 265mA |
なお、ESP-12EオンボードのレギュレータAMS1117の出力定格電流は1Aなので、多数のモジュールをドライブさせる際は、Vccを5VにしてUSBから直接給電するのが安全でしょう。
この設定もRuleにイベントとしてまとめると次のようになるのですが….
1 2 3 4 5 6 7 8 9 10 11 |
on showmsg do DotMatrix,clear,1 DotMatrix,settxt,1," " DotMatrix,alignment,1,0 DotMatrix,anim.in,1,4 DotMatrix,anim.out,1,4 DotMatrix,brightness,1,7 DotMatrix,content,1,0 DotMatrix,settxt,1,". . . ." timerSet,1,300 endon |
Ruleのイベントへ投げたり受け取ったりできるのは Value 、つまり数値のみという制約に阻まれます。表示させる文字列をこのイベントへ投げることはできないので、HTTPリクエストも都合2回投げる必要があります。
1 2 |
http://IP_ADDRESS/control?cmd=event,showmsg http://IP_ADDRESS/control?cmd=DotMatrix,settxt,1,"Next station%3ATsim%20Sha%20Tsui" |
代替機能にMQTT Importer調べてみるも、こちらもESP Easyで受け取れるのは数値に限られるようです。
確定したルールを記述
Ruleに用意されているイベントリスナーを駆使して、起動時の既定動作なども併せて記述してみました。
想定している大まかなフローは以下の通り。
- 起動後、平時はクロック表示モード。
- WiFi接続後は30秒間IPアドレス表示。
- HTTPCALLでイベントを呼ぶと、5分間テキスト表示モードで待ち受け。
- その間にHTTPでCMDに文字列送出して表示書き換え。
- 5分タイマー到達するとクロック表示モードに戻る。
それをRuleに記述したのがこちらです。
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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
On System#Boot Do DotMatrix,clear,1 DotMatrix,settxt,1," " DotMatrix,alignment,1,1 DotMatrix,anim.in,1,1 DotMatrix,anim.out,1,0 DotMatrix,brightness,1,0 DotMatrix,content,1,2 Endon on WiFi#Connected do DotMatrix,clear,1 DotMatrix,settxt,1," " DotMatrix,alignment,1,0 DotMatrix,anim.in,1,4 DotMatrix,anim.out,1,4 DotMatrix,brightness,1,7 DotMatrix,content,1,0 DotMatrix,settxt,1,"Conn.IP: %ip%" timerSet,2,30 endon On Rules#Timer=2 do timerSet,2,0 DotMatrix,clear,1 DotMatrix,settxt,1," " DotMatrix,alignment,1,1 DotMatrix,anim.in,1,1 DotMatrix,anim.out,1,0 DotMatrix,brightness,1,0 DotMatrix,content,1,2 endon on showclock do DotMatrix,clear,1 DotMatrix,settxt,1," " DotMatrix,alignment,1,1 DotMatrix,anim.in,1,1 DotMatrix,anim.out,1,0 DotMatrix,brightness,1,0 DotMatrix,content,1,2 endon on showmsg do DotMatrix,clear,1 DotMatrix,settxt,1," " DotMatrix,alignment,1,0 DotMatrix,anim.in,1,4 DotMatrix,anim.out,1,4 DotMatrix,brightness,1,7 DotMatrix,content,1,0 DotMatrix,settxt,1,". . . ." timerSet,1,300 endon On Rules#Timer=1 do timerSet,1,0 DotMatrix,clear,1 DotMatrix,settxt,1," " DotMatrix,alignment,1,1 DotMatrix,anim.in,1,1 DotMatrix,anim.out,1,0 DotMatrix,brightness,1,0 DotMatrix,content,1,2 endon |
実際にテキストスクロール表示モードから、タイマ到達でデフォルトの時刻表示に戻る様子はこのようになります。
今後の課題
惜しむらくは表示テキストを受け渡しの手間でしょう。これについては以前、ブラウザ上でリレー開閉制御するのに利用した、ESP Easyカスタムページへ実装できないか調べてみようと思います。