何がどうなっているのか。。。
中国のあるLEDパネルメーカーから仕入れた64x64ピクセルのパネルのHUB75コネクタの緑と青の信号線が入れ替わっていました。受け入れ時に点灯テストをしたのですが、緑と青が入れ替わっているとは夢にも思わなかったために、RGBが抜けなく表示されたため、ちょっとの間気が付かず不良交換を要求する時機を逸してしまいました。
HUB75の緑と青の信号線が入れ替わったパネルが何のコメントもなく売られている。。。どういうこと?
これに限ったことじゃないけど中国恐るべし。
ESP32-HUB75-MatrixPanel-DMAライブラリでは、信号線の接続が異なっている(間違ってる)パネルでも、初期化時に信号線の割り付けを変更することにより、ソフトウェア的に対処することができます。
例えば、緑と青の信号線の割りつけを変更する場合には、以下のようにします。
mxconfig.gpio.g1 = BL1;
mxconfig.gpio.b1 = G1;
mxconfig.gpio.g2 = BL2;
mxconfig.gpio.b2 = G2;
ドライバの初期化時にこのような信号線の割り付けを変更すれば、それ以降のスケッチは、信号線に接続が異なっていることを考慮せず、通常の処理を記述すればよいようになります。
#include <ESP32-HUB75-MatrixPanel-I2S-DMA.h>
#define GB_EXCHANGE
#define RES_X 64
#define RES_Y 64
#define CHAIN 1
#define PIN_E 32
#define R1 25
#define G1 26
#define BL1 27
#define R2 14
#define G2 12
#define BL2 13
MatrixPanel_I2S_DMA *dma_display = nullptr;
void setup()
{
HUB75_I2S_CFG mxconfig(RES_X, RES_Y, CHAIN);
mxconfig.gpio.e = PIN_E; // 64 pix height panels with 1/32 scan
// mxconfig.clkphase = 0;
#ifdef GB_EXCHANGE
mxconfig.gpio.g1 = BL1;
mxconfig.gpio.b1 = G1;
mxconfig.gpio.g2 = BL2;
mxconfig.gpio.b2 = G2;
#endif
// Display Setup
dma_display = new MatrixPanel_I2S_DMA(mxconfig);
dma_display->setBrightness8(128); // range is 0-255, 0 - 0%, 255 - 100%
dma_display->begin() ;
}
void loop()
{
dma_display->fillScreenRGB888(255, 0, 0);
delay(1000);
dma_display->fillScreenRGB888(0, 255, 0);
delay(1000);
dma_display->fillScreenRGB888(0, 0, 255);
delay(1000);
dma_display->fillScreenRGB888(96, 96, 96);
delay(1000);
dma_display->fillScreenRGB888(0, 0, 0);
delay(1000);
}