Arduino Nano ESP-32 with 64x64 LED Display Using ESP32-HUB75-MatrixPanel-I2S-DMA Library

417 Views Asked by At

I am trying to connect an Arduino Nano ESP32 to a 64x6 LED display. I was able to connect the same display to a different type of Arduino (following these instructions and using the noted board), but I can't seem to get the nano to work. I am trying to use the ESP32-HUB75-MatrixPanel-I2S-DMA library with a basic test implementation (trying to make the display turn all white).

I appreciate any help I can get! Thanks!

Here is my code:

#include <ESP32-HUB75-MatrixPanel-I2S-DMA.h>

#define PANEL_RES_X 64      // Number of pixels wide of each INDIVIDUAL panel module. 
#define PANEL_RES_Y 64     // Number of pixels tall of each INDIVIDUAL panel module.
#define PANEL_CHAIN 1      // Total number of panels chained one to another

#define R1_PIN D2
#define G1_PIN D3
#define B1_PIN D4
#define R2_PIN D5
#define G2_PIN D6
#define B2_PIN D7
#define A_PIN A0
#define B_PIN A1
#define C_PIN A2
#define D_PIN A4
#define E_PIN A5 // required for 1/32 scan panels, like 64x64px. Any available pin would do, i.e. IO32
#define LAT_PIN A3
#define OE_PIN D9
#define CLK_PIN D8

 
MatrixPanel_I2S_DMA *dma_display = nullptr;


void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  while (!Serial) {
    // This loop will continuously run until the serial connection is established
  }

  pinMode(R1_PIN, OUTPUT);
  pinMode(G1_PIN, OUTPUT);
  pinMode(B1_PIN, OUTPUT);
  pinMode(R2_PIN, OUTPUT);
  pinMode(G2_PIN, OUTPUT);
  pinMode(B2_PIN, OUTPUT);
  pinMode(A_PIN, OUTPUT);
  pinMode(B_PIN, OUTPUT);
  pinMode(C_PIN, OUTPUT);
  pinMode(D_PIN, OUTPUT);
  pinMode(E_PIN, OUTPUT);
  pinMode(LAT_PIN, OUTPUT);
  pinMode(OE_PIN, OUTPUT);
  pinMode(CLK_PIN, OUTPUT);


  HUB75_I2S_CFG::i2s_pins _pins={R1_PIN, G1_PIN, B1_PIN, R2_PIN, G2_PIN, B2_PIN, A_PIN, B_PIN, C_PIN, D_PIN, E_PIN, LAT_PIN, OE_PIN, CLK_PIN};

  // Module configuration
  HUB75_I2S_CFG mxconfig(
    PANEL_RES_X,   // module width
    PANEL_RES_Y,   // module height
    PANEL_CHAIN,    // Chain length
    _pins
  );

  // Display Setup
  dma_display = new MatrixPanel_I2S_DMA(mxconfig);


  dma_display->begin();
  dma_display->clearScreen();
  uint16_t myWHITE = dma_display->color565(255, 255, 255);
  dma_display->fillScreen(myWHITE);
}

void loop() {
  // put your main code here, to run repeatedly:

}
1

There are 1 best solutions below

1
Nezgardo On
#include <ESP32-HUB75-MatrixPanel-I2S-DMA.h>
#include "Adafruit_GFX.h"
#include "FontsRus/FreeMono6.h" // Русские буквы
#include "FontsRus/FreeSansBold9.h" // Цифры


#define PANEL_RES_X 80      // Number of pixels wide of each INDIVIDUAL panel module. 
#define PANEL_RES_Y 40     // Number of pixels tall of each INDIVIDUAL panel module.
#define PANEL_CHAIN 1      // Total number of panels chained one to another
 
//MatrixPanel_I2S_DMA dma_display;
MatrixPanel_I2S_DMA *dma_display = nullptr;

uint16_t myBLACK = dma_display->color565(0, 0, 0);
uint16_t myWHITE = dma_display->color565(255, 255, 255);
uint16_t myRED = dma_display->color565(255, 0, 0);
uint16_t myGREEN = dma_display->color565(0, 255, 0);
uint16_t myBLUE = dma_display->color565(0, 0, 255);

byte left;
byte left1;
byte left2;
byte left3;


String join1 = "QWERTY";
String join2 = "QWERTY>";
String join3 = "QWERTY";




void setup() {
  Serial.begin(115200);
  // Module configuration
  HUB75_I2S_CFG mxconfig(
    PANEL_RES_X,   // module width
    PANEL_RES_Y,   // module height
    PANEL_CHAIN    // Chain length
  );

  // Display Setup
  dma_display = new MatrixPanel_I2S_DMA(mxconfig);
  dma_display->begin();
  dma_display->setBrightness8(90); //0-255
  dma_display->clearScreen();
  // dma_display->fillScreen(myWHITE);
  // dma_display->setFont(&FreeMonoBold6pt8b); // выбор шрифта

}

void loop() {
  
  // dma_display->setCursor(3, 10);
  // dma_display->setTextColor(dma_display->color444(100,44,0));
  // dma_display->print("QWERTY");

  // dma_display->clearScreen();
  // cashMatrixLine1("1234567");
  // delay(1000);
  // dma_display->clearScreen();
  // cashMatrixLine1("123456");
  // delay(1000);
  // dma_display->clearScreen();
  // cashMatrixLine1("12345");
  // delay(1000);
  // dma_display->clearScreen();
  // cashMatrixLine1("1234");
  // delay(1000);
  // dma_display->clearScreen();
  // cashMatrixLine1("123");
  // delay(1000);
  // dma_display->clearScreen();
  // cashMatrixLine1("12");
  // delay(1000);
  // dma_display->clearScreen();
  // cashMatrixLine1("1");
  // delay(1000);
  // dma_display->clearScreen();
  // cashMatrixLine1("12");
  // delay(1000);
  // dma_display->clearScreen();
  // cashMatrixLine1("123");
  // delay(1000);
  // dma_display->clearScreen();
  // cashMatrixLine1("1234");
  // delay(1000);
  // dma_display->clearScreen();
  // cashMatrixLine1("12345");
  // delay(1000);
  // dma_display->clearScreen();
  // cashMatrixLine1("123456");
  // delay(1000);

  // dma_display->clearScreen();
  // MatrixLine("ЙЦУКЕНГШЩ");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine("ЙЦУКЕНГШ");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine("ЙЦУКЕНГ");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine("ЙЦУКЕН");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine("ЙЦУКЕ");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine("ЙЦУК");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine("ЙЦУ");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine("ЙЦ");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine("Й");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine("ЙЦ");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine("ЙЦУ");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine("ЙЦУК");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine("ЙЦУКЕ");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine("ЙЦУКЕН");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine("ЙЦУКЕНГ");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine("ЙЦУКЕНГШ");
  // delay(1000);
  
  // dma_display->clearScreen();
  // MatrixLine2("ЙЦУКЕНГШЩ");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine2("ЙЦУКЕНГШ");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine2("ЙЦУКЕНГ");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine2("ЙЦУКЕН");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine2("ЙЦУКЕ");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine2("ЙЦУК");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine2("ЙЦУ");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine2("ЙЦ");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine2("Й");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine2("ЙЦ");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine2("ЙЦУ");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine2("ЙЦУК");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine2("ЙЦУКЕ");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine2("ЙЦУКЕН");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine2("ЙЦУКЕНГ");
  // delay(1000);
  // dma_display->clearScreen();
  // MatrixLine2("ЙЦУКЕНГШ");
  // delay(1000);

  // dma_display->clearScreen();
  // MatrixLine("ЙЦУКЕНГШЩ");
  // MatrixLine2("ЙЦУКЕНГШЩ");
  // MatrixLine3("ЙЦУКЕНГШЩ");
      dma_display->clearScreen();
    MatrixLine(join1);
    MatrixLine2(join2);
    MatrixLine3(join3);
  delay(1000);

}


  


 void cashMatrixLine1(String cashMatrix1){
  byte allLetter1 = 77;//64
  byte widthOneLetter1 = 11;
  byte start1 = 2;//16
  byte i1 = cashMatrix1.length() * widthOneLetter1;
  if(i1 == widthOneLetter1 * 7){left1 = start1;Serial.println("i10");}  // 10
  else if(i1 == widthOneLetter1 * 6){left1 = widthOneLetter1 / 2 + start1;}  // 6
  else if(i1 == widthOneLetter1 * 5){left1 = widthOneLetter1 + start1;}  // 5
  else if(i1 == widthOneLetter1 * 4){left1 = (widthOneLetter1 / 2) + widthOneLetter1 + start1;}  // 4
  else if(i1 == widthOneLetter1 * 3){left1 = widthOneLetter1 * 2 + start1;}  // 3
  else if(i1 == widthOneLetter1 * 2){left1 = (widthOneLetter1 / 2) + widthOneLetter1 *2 + start1;}  // 2
  else if(i1 == widthOneLetter1 * 1){left1 = widthOneLetter1 * 3 + start1;}  // 1
   dma_display->setFont(&FreeSansBold9pt8b); // выбор шрифта
     dma_display->setCursor(left1, 2);
     dma_display->print(cashMatrix1);
  //  Serial.print("i1 = ");
 }

  void MatrixLine(String textMatrix){
  byte allLetter = 77;//64
  byte widthOneLetter = 8;
  byte start = 1;//16
  byte i = (textMatrix.length() / 2) * widthOneLetter;
  // if(i == widthOneLetter * 10){left = start;Serial.println("i10");}  // 10
       if(i == widthOneLetter * 9){left = widthOneLetter / 2 + start;}  // 9
  else if(i == widthOneLetter * 8){left = widthOneLetter + start;}  // 8
  else if(i == widthOneLetter * 7){left = (widthOneLetter / 2) + widthOneLetter + start;}  // 7
  else if(i == widthOneLetter * 6){left = widthOneLetter * 2 + start;}  // 6
  else if(i == widthOneLetter * 5){left = (widthOneLetter / 2) + widthOneLetter *2 + start;}  // 5
  else if(i == widthOneLetter * 4){left = widthOneLetter * 3 + start;}  // 4
  else if(i == widthOneLetter * 3){left = (widthOneLetter / 2) + widthOneLetter *3 + start;}  // 3
  else if(i == widthOneLetter * 2){left = widthOneLetter * 4 + start;}  // 2
  else if(i == widthOneLetter * 1){left = (widthOneLetter / 2) + widthOneLetter *4 + start;}  // 1
   dma_display->setFont(&FreeMono6pt8b); // выбор шрифта
     dma_display->setCursor(left, 9);
     dma_display->print("&"+textMatrix);
  //  Serial.print("i = ");
  //  Serial.println(i);
  //  Serial.print("left = ");
  //  Serial.println(left);
  //  Serial.print("textMatrix.length() = ");
  //  Serial.println(textMatrix.length());
 }

  void MatrixLine2(String textMatrix2){
  byte allLetter2 = 77;//64
  byte widthOneLetter2 = 8;
  byte start2 = 1;//16
  byte i2 = (textMatrix2.length() / 2) * widthOneLetter2;
      //  if(i2 == widthOneLetter2 * 10){left = start2;Serial.println("i10");}  // 10
       if(i2 == widthOneLetter2 * 9){left2 = widthOneLetter2 / 2 + start2;}  // 9
  else if(i2 == widthOneLetter2 * 8){left2 = widthOneLetter2 + start2;}  // 8
  else if(i2 == widthOneLetter2 * 7){left2 = (widthOneLetter2 / 2) + widthOneLetter2 + start2;}  // 7
  else if(i2 == widthOneLetter2 * 6){left2 = widthOneLetter2 * 2 + start2;}  // 6
  else if(i2 == widthOneLetter2 * 5){left2 = (widthOneLetter2 / 2) + widthOneLetter2 *2 + start2;}  // 5
  else if(i2 == widthOneLetter2 * 4){left2 = widthOneLetter2 * 3 + start2;}  // 4
  else if(i2 == widthOneLetter2 * 3){left2 = (widthOneLetter2 / 2) + widthOneLetter2 *3 + start2;}  // 3
  else if(i2 == widthOneLetter2 * 2){left2 = widthOneLetter2 * 4 + start2;}  // 2
  else if(i2 == widthOneLetter2 * 1){left2 = (widthOneLetter2 / 2) + widthOneLetter2 *4 + start2;}  // 1
   dma_display->setFont(&FreeMono6pt8b); // выбор шрифта
     dma_display->setCursor(left2, 22);
     dma_display->print("&"+textMatrix2);
  //  Serial.print("i2 = ");
  //  Serial.println(i2);
  //  Serial.print("left2 = ");
  //  Serial.println(left2);
  //  Serial.print("textMatrix2.length() = ");
  //  Serial.println(textMatrix2.length());
 }

  void MatrixLine3(String textMatrix3){
  byte allLetter3 = 77;//64
  byte widthOneLetter3 = 8;
  byte start3 = 1;//16
  byte i3 = (textMatrix3.length() / 2) * widthOneLetter3;
      //  if(i2 == widthOneLetter2 * 10){left = start2;Serial.println("i10");}  // 10
       if(i3 == widthOneLetter3 * 9){left3 = widthOneLetter3 / 2 + start3;}  // 9
  else if(i3 == widthOneLetter3 * 8){left3 = widthOneLetter3 + start3;}  // 8
  else if(i3 == widthOneLetter3 * 7){left3 = (widthOneLetter3 / 2) + widthOneLetter3 + start3;}  // 7
  else if(i3 == widthOneLetter3 * 6){left3 = widthOneLetter3 * 2 + start3;}  // 6
  else if(i3 == widthOneLetter3 * 5){left3 = (widthOneLetter3 / 2) + widthOneLetter3 *2 + start3;}  // 5
  else if(i3 == widthOneLetter3 * 4){left3 = widthOneLetter3 * 3 + start3;}  // 4
  else if(i3 == widthOneLetter3 * 3){left3 = (widthOneLetter3 / 2) + widthOneLetter3 *3 + start3;}  // 3
  else if(i3 == widthOneLetter3 * 2){left3 = widthOneLetter3 * 4 + start3;}  // 2
  else if(i3 == widthOneLetter3 * 1){left3 = (widthOneLetter3 / 2) + widthOneLetter3 *4 + start3;}  // 1
   dma_display->setFont(&FreeMono6pt8b); // выбор шрифта
     dma_display->setCursor(left3, 35);
     dma_display->print("&"+textMatrix3);
  //  Serial.print("i3 = ");
  //  Serial.println(i3);
  //  Serial.print("left3 = ");
  //  Serial.println(left3);
  //  Serial.print("textMatrix3.length() = ");
  //  Serial.println(textMatrix3.length());
 }

Пользуйся на здоровье)))