Christopher Mendez Martinez
Published © GPL3+

DIY Internet Controlled Smart LED Matrix

In this second tutorial I will be sending text and color data through the internet.

IntermediateWork in progress3 hours1,131
DIY Internet Controlled Smart LED Matrix

Things used in this project

Hardware components

ESP8266 ESP-01
Espressif ESP8266 ESP-01
×1
WS2812 Addressable LED Strip
Digilent WS2812 Addressable LED Strip
×1
JLCPCB Customized PCB
JLCPCB Customized PCB
×1

Software apps and online services

Arduino IDE
Arduino IDE
postman
adafruit IO

Hand tools and fabrication machines

3D Printer (generic)
3D Printer (generic)

Story

Read more

Custom parts and enclosures

3D STL Files (Grid + Stands)

Schematics

Schematics

Code

Code

Processing
/////////////////MCM-LED-MATRIX WiFi/////////////////////////
/*  Autor: Christopher Mndez
*   Fecha: 21/10/2020
*   Canal: MCMCHRIS
*   Proyecto: https://youtu.be/WfhR8nHPO2s
*/

#include <Adafruit_NeoMatrix.h>
#include <gamma.h>
#include <Adafruit_GFX.h>
#include <gfxfont.h>
#include <Adafruit_NeoPixel.h>
#include <Fonts/TomThumb.h>

/************************ configuracin de Adafruit IO  *******************************/

// visit io.adafruit.com if you need to create an account,
// or if you need your Adafruit IO key.
#define IO_USERNAME    "..........."
#define IO_KEY         "..........................."

/******************************* Configuracin WIFI **************************************/

#define WIFI_SSID       ".........."
#define WIFI_PASS       ".........."

#include "AdafruitIO_WiFi.h"
AdafruitIO_WiFi io(IO_USERNAME, IO_KEY, WIFI_SSID, WIFI_PASS);

/************************ El programa principal empieza aqu *******************************/
#include <ESP8266WiFi.h>
#include <AdafruitIO.h>
#include <Adafruit_MQTT.h>
#include <ArduinoHttpClient.h>

#define PIN 0                   //Pin donde estn conectados los LEDs en el ESP8266.

String texto = "Hi";            //Texto inicial, esto ser lo que se muestre al inicio del programa.
int largo = texto.length();
int pass = 0;
String r="0",g="255",b="0";     //Colores, en este caso inicializamos las letras en color verde.

//Declaracin de los Feeds que creamos en io.adafruit 

AdafruitIO_Feed *mensaje = io.feed("mensaje");

AdafruitIO_Feed *rojo = io.feed("rojo");

AdafruitIO_Feed *verde = io.feed("verde");

AdafruitIO_Feed *azul = io.feed("azul");

//Inicializamos la instacia de la matriz y establecemos su configuracin

Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(20, 5, PIN,            //20*5 LEDs, conectados en el pin "PIN"
                            NEO_MATRIX_TOP     + NEO_MATRIX_LEFT +    //Comienza en la izquierda arriba, 
                            NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,      //Filas en ZIGZAG
                            NEO_GRB            + NEO_KHZ800);         //Tipos de LEDs y velocidad.


int x    = matrix.width();
int y    = 5;

void setup() {
  
  //Inicializo la matriz
  matrix.begin();
  matrix.setTextWrap(false);
  matrix.setBrightness(80);
  matrix.setFont(&TomThumb);
  matrix.setTextColor(matrix.Color(r.toInt(), g.toInt(), b.toInt()));
  
  //Inicio la comunicacin Serial
  Serial.begin(115200);

  //Nos conectamos a io.adafruit.com
  Serial.print("Connecting to Adafruit IO");
  io.connect();

  // Establezco un "handler" para cada feed.
  // Cada "handler" se va a ejecutar cada
  // vez que reciba algo desde adafruit io

  mensaje->onMessage(handleMessage);
  rojo->onMessage(handleRojo);
  verde->onMessage(handleVerde);
  azul->onMessage(handleAzul);

  // Espero por conectarme
  while (io.status() < AIO_CONNECTED) {
    Serial.print(".");
    presento(F("."),3);     //Presento en la pantalla puntos mientras espero a que se conecte a WiFi
    delay(1);
  }

  //Asocio cada handler con su funcin, obtener datos desde Adafruit.
  mensaje->get();
  rojo->get();
  verde->get();
  azul->get();
  
  //Si llegue aqui es que estamos conectados ya
  Serial.println();
  Serial.println(io.statusText());

}


void loop() {

  // io.run(); es requerido por todos los codigos con adafruit y debe
  // estar al inicio siempre, es quien procesa todo.
  io.run(); 
  
  presento(texto,5);      //Presento la variable texto en pantalla
  delay(50);

}

//Estas son las funciones que son llamadas cuando
//en Adafruit se modifica cualquiera de los feeds
//estas actualizan los valores de las variables de visualizacin.
void handleMessage(AdafruitIO_Data *data) {

  Serial.print("received <- ");
  Serial.println(data->value());
  texto = data->value();
  largo = texto.length();
}
void handleRojo(AdafruitIO_Data *data) {

  Serial.print("Rojo <- ");
  Serial.println(data->value());
  r = data->value();

}
void handleVerde(AdafruitIO_Data *data) {

  Serial.print("Verde <- ");
  Serial.println(data->value());
  g = data->value();

}
void handleAzul(AdafruitIO_Data *data) {

  Serial.print("Azul <- ");
  Serial.println(data->value());
  b = data->value();

}

//Esta es la funcin que presenta el dato de llegada en la pantalla y lo hace desplazarse
void presento(String data,int yall) {
  
  matrix.fillScreen(0);
  matrix.setCursor(x, yall);
  matrix.print(data);

  if (--x < -(largo * 3 + 18)) {
    x = matrix.width();
    matrix.setTextColor(matrix.Color(r.toInt(), g.toInt(), b.toInt()));
  }
  matrix.show();
}

Credits

Christopher Mendez Martinez

Christopher Mendez Martinez

35 projects • 74 followers
Electronic Engineer and Tech YouTuber who loves automation, programming and sharing his knowledge with everyone.

Comments