2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ShigezoneフルカラーLEDパネルを使う(令和2)

Last updated at Posted at 2022-03-22

※2022/03/24 実ボードで動作が確認できました。
reiwa_20220324_1.jpg

はじめに

Qiitaの記事「マトリクスLEDパネルの動作確認」( https://qiita.com/Yukiya_Ishioka/items/c455f7bfbcb240bb2ba7 )でESP32を使い、秋葉原の Shigezone で購入した64×64のマトリクスLEDパネルを使って「令和」画像を表示するプログラムを紹介しました。
また、Shigezoneから「フルカラーLEDパネル用ESP32制御ボードキット」という商品が発売されたのを見つけ、このボードに対応した「令和」表示プログラムも紹介しました。

いずれも2枚の64x64のマトリクスLEDパネルを使って「令和」を表現しているため、1枚だけだと「和」しか表示されていませんでした。
このため、64x64のマトリクスLEDパネル 1枚でも「令和」を表示できるようデータを変更したプログラムを作ってみました。

・フルカラーLEDパネル用ESP32制御ボードキット(基板+部品)
 https://www.shigezone.com/product/hub75eboard/

・秋葉原ラジオデパートShigezone(シゲゾーン)
 https://www.shigezone.com/

・Qiitaの記事「マトリクスLEDパネルの動作確認」
 https://qiita.com/Yukiya_Ishioka/items/c455f7bfbcb240bb2ba7

・ShigezoneフルカラーLEDパネルを使う(令和)
 https://qiita.com/Yukiya_Ishioka/items/9984a42072edc950b4a4

・ShigezoneフルカラーLEDパネルでRSS表示
 https://qiita.com/Yukiya_Ishioka/items/33d27c350a3b4c677261

表示画像

「令和」の画像が64x64ドット内で可能な限り大きくなるよう、45度傾けた画像を作って表示データとしました。
reiwa_20220323_2.jpg
reiwa_20220323_4.jpg

ソースコード

以下に表示プログラムのソースコードを貼ります。
以前のプログラムではカラーコードとして青を「2」、緑を「4」としていましたが、現在のマトリクスLEDパネルに合っていないため、青を「4」、緑を「2」へ変更してあります。
表示に使うパネルも1枚に対応するため、表示幅DEF_DISP_WIDTHを「64」へ変更してあります。

matled_6464_reiwa2.ino

/*
 *  Copyright(C) by Yukiya Ishioka
 */

#include <stdio.h>
#include <string.h>

           /*  ESP32  */
#define R1PIN     25
#define G1PIN     26
#define B1PIN     27
#define R2PIN     21
#define G2PIN     22
#define B2PIN     23
#define APIN      12
#define BPIN      16
#define CPIN      17
#define DPIN      18
#define EPIN       4
#define CLKPIN    15
#define LATPIN    32
#define OEPIN     33

#define DEF_DISP_WIDTH      64
#define DEF_SEL_LINE        32

int  led_color;

const unsigned char  mask_pattern[8] = {
  0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01
};

const unsigned char reiwa_20220323_3_bin[] = {
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  0xff, 0x9f, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0f, 0x8f, 0xf1, 0xff,
  0xff, 0xff, 0xff, 0xf8, 0x07, 0x8f, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xfc,
  0x03, 0x87, 0x83, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x03, 0x87, 0x87, 0xff,
  0xff, 0xff, 0xff, 0xff, 0x03, 0x87, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff,
  0x83, 0x8e, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0x8c, 0x3f, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xc1, 0x08, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
  0xc1, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xe0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  0xe0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf0, 0x00, 0xf8, 0xff,
  0xff, 0xff, 0xff, 0xf3, 0xf0, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xf3,
  0xf8, 0x3f, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xf8, 0x3e, 0x00, 0x7f,
  0xff, 0xff, 0xff, 0xf8, 0x60, 0x30, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xf8,
  0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x0c, 0x0f,
  0xff, 0xff, 0xff, 0xf8, 0x1e, 0x18, 0x1e, 0x07, 0xff, 0xff, 0xff, 0xf8,
  0x1f, 0x7f, 0xff, 0x03, 0xff, 0xff, 0xff, 0xf8, 0x0f, 0xfc, 0x7f, 0x01,
  0xff, 0xff, 0xff, 0xfc, 0x0f, 0xfc, 0x3f, 0x01, 0xff, 0xff, 0xff, 0xfc,
  0x0f, 0xfe, 0x3e, 0x01, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0x3e, 0x03,
  0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x98, 0x07, 0xff, 0xbf, 0xff, 0xff,
  0xff, 0xff, 0x80, 0x0f, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x1f,
  0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0x9f, 0xff, 0xe1,
  0xff, 0xff, 0xe0, 0x3f, 0xff, 0x9f, 0xff, 0xc1, 0xff, 0xff, 0xc0, 0x1f,
  0xff, 0x9f, 0xff, 0xc3, 0xff, 0xff, 0xe0, 0x3f, 0xff, 0x1f, 0xff, 0xc3,
  0xff, 0xff, 0xfe, 0x7f, 0xff, 0x1e, 0x1f, 0x87, 0xff, 0xff, 0xff, 0xff,
  0xff, 0x18, 0x0f, 0x0b, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x0e, 0x00,
  0xff, 0xff, 0xff, 0xff, 0xff, 0x1e, 0x0c, 0x00, 0xff, 0xff, 0xff, 0xff,
  0xff, 0x1f, 0x00, 0x61, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x80, 0x41,
  0xff, 0xff, 0xff, 0xff, 0xfe, 0x1f, 0x87, 0xc1, 0xff, 0xff, 0xff, 0xff,
  0xfe, 0x1f, 0xc7, 0x83, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x1f, 0xc3, 0x03,
  0xff, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xe3, 0x07, 0xff, 0xff, 0xff, 0xff,
  0xfe, 0x31, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0xf0, 0x0f,
  0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x70, 0x1f, 0xff, 0xff, 0xff, 0xff,
  0xfc, 0x20, 0x30, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x70, 0x30, 0x1f,
  0xff, 0xff, 0xff, 0xff, 0xf8, 0x7c, 0x7c, 0x3f, 0xff, 0xff, 0xff, 0xff,
  0xf8, 0x7f, 0xfe, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xf8, 0x7f, 0xe0, 0x00,
  0x1f, 0xff, 0xff, 0xff, 0xf0, 0xfe, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff,
  0xf0, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00,
  0x03, 0xff, 0xff, 0xff, 0x80, 0x00, 0x0f, 0xe0, 0x01, 0xff, 0xff, 0xff,
  0xc0, 0xff, 0xff, 0xfc, 0x01, 0xff, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xff,
  0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
};


void led_addr_wr( int a, int b, int c, int d, int e )
{
  digitalWrite( OEPIN, HIGH );
  usleep(3);
  digitalWrite( APIN, a );
  digitalWrite( BPIN, b );
  digitalWrite( CPIN, c );
  digitalWrite( DPIN, d );
  digitalWrite( EPIN, e );
  usleep(3);
  digitalWrite( LATPIN, HIGH );
  digitalWrite( LATPIN, LOW );
  digitalWrite( OEPIN, LOW );
}


void matled_line_clear( void )
{
  int  col;

  for( col=0 ; col<DEF_DISP_WIDTH ; col++ ) {
    digitalWrite( R1PIN, LOW );
    digitalWrite( G1PIN, LOW );
    digitalWrite( B1PIN, LOW );
    digitalWrite( R2PIN, LOW );
    digitalWrite( G2PIN, LOW );
    digitalWrite( B2PIN, LOW );

    digitalWrite( CLKPIN, HIGH );
    digitalWrite( CLKPIN, LOW );
  }
  led_addr_wr( 0, 0, 0, 0, 0 );

}


void setup( void )
{
  /* init serial */
  Serial.begin(115200);
  Serial.println( "call setup()" );

  pinMode( R1PIN,  OUTPUT );
  pinMode( G1PIN,  OUTPUT );
  pinMode( B1PIN,  OUTPUT );
  pinMode( R2PIN,  OUTPUT );
  pinMode( G2PIN,  OUTPUT );
  pinMode( B2PIN,  OUTPUT );
  pinMode( APIN,   OUTPUT );
  pinMode( BPIN,   OUTPUT );
  pinMode( CPIN,   OUTPUT );
  pinMode( DPIN,   OUTPUT );
  pinMode( EPIN,   OUTPUT );
  pinMode( CLKPIN, OUTPUT );
  pinMode( LATPIN, OUTPUT );
  pinMode( OEPIN,  OUTPUT );
  digitalWrite( CLKPIN, LOW );
  digitalWrite( LATPIN, LOW );
  digitalWrite( OEPIN, LOW );

  /* dummy address set */
  led_addr_wr( LOW, LOW, LOW, LOW, LOW );

  /* clear MATLED */
  matled_line_clear();

  led_color = 4;
}


void loop( void )
{
  int  a, b, c, d, e;
  int  dr, dg, db;
  int  row, col;
  int  i, j;
  unsigned char  *buff1;

  dr = 0;
  dg = 0;
  db = 0;
  if( led_color & 0x1 ) dr = 1;
  if( led_color & 0x2 ) dg = 1;
  if( led_color & 0x4 ) db = 1;
  Serial.printf( "color DR=%d  DG=%d  DB=%d\n", dr, dg, db );

  buff1 = (unsigned char *)reiwa_20220323_3_bin ;

  j = 0;
  while( 1 ) {
    for( i=0 ; i<DEF_SEL_LINE ; i++ ) {
      row  = (DEF_DISP_WIDTH / 8) * (DEF_SEL_LINE -1 - i);
      for( col=0 ; col<DEF_DISP_WIDTH ; col++ ) {
        /* R1 G1 B1 */
        //if( (j % 3) == 0 && (buff1[ (DEF_DISP_WIDTH / 8) * DEF_SEL_LINE + row + (col >> 3) ] & mask_pattern[ col & 0x07 ]) != 0 ) {
        if( (buff1[ (DEF_DISP_WIDTH / 8) * DEF_SEL_LINE + row + (col >> 3) ] & mask_pattern[ col & 0x07 ]) != 0 ) {
          digitalWrite( R1PIN, dr );
          digitalWrite( G1PIN, dg );
          digitalWrite( B1PIN, db );
        } else {
          digitalWrite( R1PIN, LOW );
          digitalWrite( G1PIN, LOW );
          digitalWrite( B1PIN, LOW );
        }

        /* R2 G2 B2 */
        //if( (j % 3) == 0 && (buff1[ row + (col >> 3) ] & mask_pattern[ col & 0x07 ]) != 00 ) {
        if( (buff1[ row + (col >> 3) ] & mask_pattern[ col & 0x07 ]) != 0 ) {
          digitalWrite( R2PIN, dr );
          digitalWrite( G2PIN, dg );
          digitalWrite( B2PIN, db );
        } else {
          digitalWrite( R2PIN, LOW );
          digitalWrite( G2PIN, LOW );
          digitalWrite( B2PIN, LOW );
        }

        digitalWrite( CLKPIN, HIGH );
        digitalWrite( CLKPIN, LOW );
      }

      /* set access row position */
      a = b = c = d = e = 0;
      if( i & 0x01 ) a = 1;
      if( i & 0x02 ) b = 1;
      if( i & 0x04 ) c = 1;
      if( i & 0x08 ) d = 1;
      if( i & 0x10 ) e = 1;
      led_addr_wr( a, b, c, d, e );
    }

    j++;
  }

  /* clear MATLED */
  matled_line_clear();

  led_color++;
}

-以上-

2
0
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?