#author("2017-10-17T13:27:53+09:00","default:nari","nari")
[[FrontPage]]

* HSES-LMC1のプログラミング [#vb112ea9]

LEDマトリックスコントローラHSES-LMC1には、ESP8266が搭載されており、
ESP8266にプログラムを書き込むことで、ネットワークから取得した
情報をLEDマトリックスモジュールに表示することが可能です。

このページでは HSES-LMC1のプログラムを作成する際に必要な情報を
提供します。

** ESP8266-Arduino 開発環境 [#q62ca4cc]

HSES-LMC1では、プログラム開発環境として
esp8266-arduino を使用します。

インストール方法は、下記ページを参照して下さい。

- [[ESP8266 Arduinoのインストール]]

** HSES-LMC1用ライブラリ [#aa458736]

ESP8266 Arduinoから HSES-LMC1を使ってLEDマトリックスへの描画、表示を
行うためにGitHubというサイトで、ライブラリHumblesoft_LedMatを提供しております。

- https://github.com/h-nari/Humblesoft_LedMat

GitHubからArduinoのライブラリのインストールの仕方については
[[Arduinoライブラリのインストール]]のページを御覧ください。

Humblesoft_LedMatは、他のArduinoライブラリを使用しています。

下記の3つのライブラリもインストールして下さい。

- https://github.com/adafruit/Adafruit-GFX-Library
- https://github.com/h-nari/Fontx
- https://github.com/h-nari/Humblesoft_GFX

** プログラム例 [#qb7de4a5]

LEDに文字と枠を表示する簡単なプログラム例lello.inoで説明します。

プログラムはHumblesoft_LedMatライブラリのexamplesに収められていますので、
Arduino-IDEのスケッチの例で呼び出せます。


以下のページでも参照、ダウンロード可能です。
- [[Humblesoft_LedMat/hello.ino at master · h-nari/Humblesoft_LedMat:https://github.com/h-nari/Humblesoft_LedMat/blob/master/examples/hello/hello.ino?ts=2]]

このプログラムの動作した様子の動画です。

#youtube(IpKsGaTyxJI)

** ライブラリのインクルード [#k0311ae6]

 #include <Adafruit_GFX.h>	
 #include <Fontx.h>	
 #include <Humblesoft_GFX.h>	
 #include <Humblesoft_LedMat.h>	

使用するライブラリのヘッダファイルをインクルードします。

** イメージバッファの確保 [#o28c4499]

 uint8_t imgBuf[1024*4];

Humblesoft_LedMatライブラリでは、LEDモジュールに表示するイメージを
ESP8266側に持ち、そこに文字や図形等を描画し、まとめて全部
表示用サブCPU側にSPIで転送します。

イメージバッファのサイズは、使用するLEDモジュールの数、サイズ、プレーン数で
変化します。最大サイズのバッファを確保してしまうと、他の目的でメモリを使用
できなくなってしまいますので、ライブラリの外で明示的に確保、使用するようになっています。

必要なサイズは、下の式で計算できます。

 必要なサイズ[byte] = LEDの数÷2 × プレーン数

例えば、 64x32dot LEDモジュール2枚を1プレーン(1階調8色表示)で使用すると

 64 × 32 × 2 ÷ 2 × 1 = 2048 [byte]

2048byte必要となります。
64x32dot LEDモジュール6枚、4プレーン(16階調4096色表示)で使用すると

 64 × 32 × 6 ÷ 2 × 4 = 24,576 [byte]

24,576byte必要になります。
大体、これが上限で これ以上のサイズを確保しようとすると、
コンパイル時に警告が出るようになります。

** 初期化 [#ye4b9ad4]

 LedMat.begin(LMMT64x32s16);
 LedMat.setLedMode(1);
 LedMat.setImgBuf(imgBuf, sizeof imgBuf);

- bool begin(LMModuleType mtype=LMMT64x32s16, uint8_t col =1, uint8_t row=1,LMLayoutType lt=LT_Normal);&br;
LedMat.begin()で LEDモジュールの種類、列数、行数、折り返しの有無を指定します。
&br;
LEDモジュールの種類は以下の3つが指定可能です
-- LMMT32x16s8:  32x16dot スキャン8のLEDモジュール
-- LMMT32x32s16: 32x32dot スキャン16のLEDモジュール
-- LMMT64x32s16: 64x32dot スキャン64のLEDモジュール
&br;
折り返しの種類は以下の2つが指定可能です。
-- LT_Normal:  折り返し無し
-- LT_Turnback: 折り返し有り

- void setLedMode(uint8_t mode);&br;
setLedMode()は、RGBの配置が特殊なLEDモジュール対策の設定です。&br;
HSLM-6432P4Bの場合は1を指定して下さい。&br;
通常は指定の必要はありません。

- void setImgBuf(uint8_t *buf, uint32_t length);

イメージバッファを設定します。&br;
設定しないとLEDに何も表示されません。

** 描画 [#x0bf5ab8]

 LedMat.println("Hello");
 LedMat.display();

println(), print(), printf()で文字がイメージバッファに書き込まれ、&br;
display()でイメージバッファが表示用サブCPUに転送されてLEDに表示されます。


 uint16_t fg = LedMat.rgb(colors[ci]);
 
 LedMat.clear();
 LedMat.setTextColor(fg);
 LedMat.setCursor(4,8);
 LedMat.println(colors[ci]);
 LedMat.drawRect(0, 0, LedMat.width(), LedMat.height(), fg);
 LedMat.display();

- clear()でイメージバッファがクリア
- setTextColor()で文字の色の指定
- setCursor()で文字描画位置の指定
- println()で文字を描画
- drawRectで長方形を描画
- display()でイメージを表示用サブCPUに転送し、LEDに表示されます。

** 監視機能 [#ia7bd0a1]

 LedMat.checkSubcon();

- checkSubcon()は、表示用サブCPUの状態を確認し、電源容量不足によりリセットされていた場合、表示パラメータの再設定、表示輝度の低下などを行います。

** 他の話題 [#c8973cb5]

- 描画機能について詳細
- 日本語の描画


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS