Arduino環境でLEDマトリクスを使う(MAX7219)

コンピュータ、組み込み

Raspberry Pi Pico でLEDマトリクス MAX7219を使って文字列の表示をします。

今回紹介するもの

LEDマトリクス MAX7219

特徴

単色の8×8 LED Matrixモジュールです。
連結して使用することができます。

電源電圧5V
通信SPI
(CS, MOSI, SCK)
LED色購入時に選択します。
(赤, 青, 緑)

基板と、LEDパネルはICソケットで接続されています。
LEDパネルを取り換えて接続することもできます。(接続の上下向きに注意!!)
LEDパネルのピンは曲がりやすいです。
てこの原理や斜めでの挿抜は破損の原因になるので、真っすぐ挿抜を行ってください。

外観
使用感

5Vでの電源ですが、3.3VロジックレベルのRaspberry Pi Picoでも制御ができました。

輝度の調整はできませんが、くっきりと明るい表示パネルとして使用することができます。
全点灯させるそれなりの電力を消費するので、供給力の低いマイコンでは心配です。

先に紹介しましたが、モジュール同士を連結して使用できるため、後から付け足して制御することができます。
連結数が多い表示物を作成する際は、電源を用意した方が良いかもしれません。

同じドライバを使用している7セグ表示機の記事です。

準備

使うもの

画像名称、型番用途
LED Matrix 4連
MAX7219
光ってもらいます。
Raspberry Pi PicoMAX7219を表示制御します。
ブレッドボード配線します
ジャンパワイヤ数本
オス-メス
配線します
MAX7219のピンヘッダは標準でアングルが半田されているので
ジャンパワイヤを直接接続します。

ライブラリ

ライブラリマネージャから以下2件のライブラリをインストールします。

ライブラリ名検索確認時のバージョン
MD_MAX72XX by majicDesignsmd_max72193.3.1
MD_Parola by majicDesignsmd_parola3.6.2

動作

メッセージ表示

説明

4連MAX7219 の中央に”NEGI”と表示します。

配線
Raspberry Pi Pico配線MAX7219
VBUS(5V)VCC
GNDGND
GPIO1 (SPI0 CS)CS
GPIO2 (SPI0 SCK)CLK
GPIO3 (SPI0 MOSI)DIN
[2023/7/30 誤記修正]
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
Raspberry Pi Pico

【スケッチの説明】
4連MAX7219 の中央に "NEGI" と表示します。

【ライブラリ】
 Raspberry Pi Pico/RP2040 > Raspberry Pi Pico
 MD_MAX72XX by majicDesigns
 MD_Porola by majicDesigns

【準備】
Raspberry Pi Pico <-> MAX7219
VCC(5V)             <-> VCC
GND                 <-> GND
GPIO1 (SPI0 CS)     <-> CS
GPIO2 (SPI0 SCK)    <-> CLK 
GPIO3 (SPI0 MOSI)   <-> DATA

【バージョン情報】
2023/4/11 : 新規
**********************************************************************/

#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

#define HARDWARE_TYPE MD_MAX72XX::FC16_HW //デバイス種別
#define MAX_DEVICES 4     //8x8のマトリクス表示のユニット数
#define PIN_MOSI  3       //MOSI -> DIN
#define PIN_CS    1       //CS -> CS
#define PIN_SCK   2       //SCK -> CLK
MD_Parola LED = MD_Parola(HARDWARE_TYPE, PIN_CS, MAX_DEVICES);
 
void setup()
{
    //SPIのピン設定
    SPI.setTX(PIN_MOSI);
    SPI.setSCK(PIN_SCK);
    SPI.setCS(PIN_CS);
    SPI.begin();
    
    LED.displayReset();
    LED.begin();
    LED.displayText("NEGI", PA_CENTER, 0, 0, PA_PRINT, PA_NO_EFFECT);
    LED.displayAnimate();

}
 
void loop()
{
}
結果

青LEDのモジュールと、赤LEDのモジュールで試してみました。
発光LEDは全体の 1/5 程と思いますが、電流は125mA使用しています。
(Raspberry Pi Pico 単体では 約 30mA)

メッセージスクロール

説明

4連MAX7219 に “TAMANEGI”をスクロール表示させる。

配線

配線は、「メッセージ表示」と同じです。

Raspberry Pi Pico配線MAX7219
VBUS(5V)VCC
GNDGND
GPIO1 (SPI0 CS)CS
GPIO2 (SPI0 SCK)CLK
GPIO3 (SPI0 MOSI)DIN
[2023/7/30 誤記修正]
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
Raspberry Pi Pico

【スケッチの説明】
4連MAX7219 に "TAMANEGI"をスクロール表示します。

【ライブラリ】
 Raspberry Pi Pico/RP2040 > Raspberry Pi Pico
 MD_MAX72XX by majicDesigns
 MD_Porola by majicDesigns

【準備】
Raspberry Pi Pico <-> MAX7219
VCC(5V)             <-> VCC
GND                 <-> GND
GPIO1 (SPI0 CS)     <-> CS
GPIO2 (SPI0 SCK)    <-> CLK 
GPIO3 (SPI0 MOSI)   <-> DATA

【バージョン情報】
2023/4/11 : 新規
**********************************************************************/

#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

#define HARDWARE_TYPE MD_MAX72XX::FC16_HW //デバイス種別
#define MAX_DEVICES 4     //8x8のマトリクス表示のユニット数
#define PIN_MOSI  3       //MOSI -> DIN
#define PIN_CS    1       //CS -> CS
#define PIN_SCK   2       //SCK -> CLK
MD_Parola LED = MD_Parola(HARDWARE_TYPE, PIN_CS, MAX_DEVICES);
 
void setup()
{
    const long DlInterval_ms = 100;           //LED.displayAnimate()を実行するたびにスクロールを行って停止するインターバル。小さいほど早くスクロールが速くなる。
    const long DlStopTime_ms = 0;             //すべてのアニメーションが停止した後の停止時間

    //SPIのピン設定
    SPI.setTX(PIN_MOSI);
    SPI.setSCK(PIN_SCK);
    SPI.setCS(PIN_CS);
    SPI.begin();
    
    LED.displayReset();
    LED.begin();
    
    LED.displayText("TAMANEGI", PA_LEFT, DlInterval_ms, DlStopTime_ms, PA_SCROLL_LEFT, PA_SCROLL_LEFT);

}
 
void loop()
{
  //LED.displayTextで設定したアニメーションを実行する。 終了するとtrueを返すのでリセットする。
  if(LED.displayAnimate() == true)
  {
    LED.displayReset();
  }

}
結果

青LEDで動作させました。

コメント

タイトルとURLをコピーしました