FrontPage

HSES-LMC1のプログラミング

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

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

関連文書

ESP8266-Arduino 開発環境

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

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

HSES-LMC1用ライブラリ

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

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

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

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

プログラム例

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

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

以下のページでも参照、ダウンロード可能です。

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

ライブラリのインクルード

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

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

イメージバッファの確保

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必要になります。 大体、これが上限で これ以上のサイズを確保しようとすると、 コンパイル時に警告が出るようになります。

初期化

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);
    LedMat.begin()で LEDモジュールの種類、列数、行数、折り返しの有無を指定します。
    LEDモジュールの種類は以下の3つが指定可能です
    • LMMT32x16s8: 32x16dot スキャン8のLEDモジュール
    • LMMT32x32s16: 32x32dot スキャン16のLEDモジュール
    • LMMT64x32s16: 64x32dot スキャン64のLEDモジュール
      折り返しの種類は以下の2つが指定可能です。
    • LT_Normal: 折り返し無し
    • LT_Turnback: 折り返し有り
  • void setLedMode(uint8_t mode);
    setLedMode()は、RGBの配置が特殊なLEDモジュール対策の設定です。
    HSLM-6432P4Bの場合は1を指定して下さい。
    通常は指定の必要はありません。
  • void setImgBuf(uint8_t *buf, uint32_t length);

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

描画

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

println(), print(), printf()で文字がイメージバッファに書き込まれ、
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に表示されます。

監視機能

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

他の話題

  • 日本語の描画

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-11-07 (火) 16:58:54 (40d)