WIFI Enabled LED Matrix




About: Just a guy that likes to program and connect wires to things.

This projects has an Arduino UNO connected to a 7219 LED Matrix with 4- 8x8 blocks. The Arduino is also connected to a ESP8266-12 Development board.

The ESP8266-12 (NodeMCU)

  • Connects to your Wifi (you supply SSID and password)
  • Starts a web server on port 80
  • Sends the Arduino its IP address (which scrolls on the LED Matrix) so you know how to go to the web server.
  • Any data enter in the form on the webpage is sent to the Arduino which scrolls it on the LED Matrix.
  • You can also port forward from your wifi router to have an internet enabled device.

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: Parts Needed

You will need...

Step 2: Programming the ESP8266 Board

  1. Connect ESP8266-12 to the USB to serial programmer. Be sure to only use one with 3.3v
  2. Load the ESP8266 NodeMcu boards into the Arduino editor.
    • In File menu, under preferences
    • Put the following in the "Additional Board Managers URLs" 'http://arduino.esp8266.com/stable/package_esp8266com_index.json'
    • The in the Tools menu, click on Board and then "boards Manager"
    • Install the ESP8266 by the ESP8266 Community
  3. Load https://github.com/aapicella/WiFi-enables-LED-Mat...
  4. Set the Board to NodeMCU 0.9 (ESP-12 Module)
  5. Check jumper for programming or GPI0 to ground is connected to program

  6. Update and install program.

  7. Remove jumper and test by using serial monitor

  8. Program should print Connected follow by IP address. It will resend IP until you access the IP with web browser and enter text into the form.

Step 3: Attach 7219 LED Matrix to Arduino

  1. Connect LED power to 5V on Arduino
  2. Connect Ground to Ground
  3. Connect Clock to Arduino pin 13
  4. Connect Data or DIN to pin 11
  5. Connect CS to pin 10
  6. Install the Library
    1. Go to Sketch Menu, Include library then Manage Libraries.
    2. Install MD_MAX72XX library.
    3. Some LED Matrix require changing the MD_MAX72xx.h header file
      1. The file is located in your arduino directory under library/MD_MAX72xx/src
      2. edit it and change
      3. #define USE_FC16_HW 1
  7. Download this sketch: https://github.com/aapicella/WiFi-enables-LED-Mat...
  8. Compile and install on Arduino
  9. To test use serial monitor (set to 115200) and type in something to display on LED.

Step 4: Bring It Together

Next attach the ESP8266 to the Arduino

  1. Connect the 3.3v from Arduino to the ESP8266 module
  2. Connect Ground to Ground
  3. Connect RX to TX (note the board has a typo and TX/RX as switched)
  4. Connect TX toRX

Power on system by plugging in the Arduino.

The LED should Scroll "Hello!!" and soon be followed by the IP it gets from your wifi.

From your Phone, tablet or PC open a brower and put in the IP. You may need to put http:// infront of the ip.

On my home network its:

This was my first Instructable. I hope you enjoyed it.

Invention Challenge 2017

Participated in the
Invention Challenge 2017

Be the First to Share


    • CNC Contest

      CNC Contest
    • Make it Move

      Make it Move
    • Teacher Contest

      Teacher Contest

    39 Discussions


    6 months ago

    Error Code

    Arduino: 1.8.8 (Windows 10), Board: "NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Enabled, 4M (no SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 115200"
    MD_MAX7219_Scroll_Message:30:47: error: invalid conversion from 'int' to 'MD_MAX72XX::moduleType_t' [-fpermissive]
    In file included from E:\Project_HTP\arduino\UDP\WiFi-enables-LED-Matrix-master\MD_MAX7219_Scroll_Message\MD_MAX7219_Scroll_Message.ino:13:0:
    C:\Users\P.Sirawit\Documents\Arduino\libraries\MD_MAX72XX\src/MD_MAX72xx.h:365:3: error: initializing argument 1 of 'MD_MAX72XX::MD_MAX72XX(MD_MAX72XX::moduleType_t, uint8_t, uint8_t)' [-fpermissive]
    MD_MAX72XX(moduleType_t mod, uint8_t csPin, uint8_t numDevices=1);
    exit status 1
    invalid conversion from 'int' to 'MD_MAX72XX::moduleType_t' [-fpermissive]
    This report would have more information with
    "Show verbose output during compilation"
    option enabled in File -> Preferences.

    1 reply

    Reply 6 months ago

    I googled the message and it seems the code may not work on the new version of the library. If I have time I will rebuild it with a more recent version.


    7 months ago

    We have made this without arduino but the problem is that it take 35-40 sec every time for refresh even if same message is there so how to solve this problem

    1 reply

    Reply 1 year ago

    Currently I set it to 52 characters. Can modify the HTML in the arduino script.

    if you search for maxlenght='52' you may change that.

    I hope that answers your question.


    1 year ago

    There is an obvious mistake on connecting ESP8266 to the Arduino. It says connect RX to RX, TX to TX. It should be RX to TX and TX to RX.

    4 replies

    Reply 1 year ago

    I updated the doc, but this board has RX/TX mislabeled so it looks like rx/rx when its really rx/tx


    Reply 1 year ago

    I should explain that. The development board has them reversed. Apparently they were mislabeled. I didn't find that out until I read an article after this post. You are absolutely correct that is should be Rx-> Tx and Tx-> Rx.


    Reply 1 year ago

    Could you please specify where have you found about this mislabeling? Because in other places, like this from official arduino website, i find projects telling to connect Rx-Tx, Tx-Rx:



    2 years ago

    I am trying this build this but I get this error

    Arduino: 1.8.2 (Mac OS X), Board: "NodeMCU 0.9 (ESP-12 Module), 80 MHz, 115200, 4M (3M SPIFFS)"

    Archiving built core (caching) in: /var/folders/rc/pbz6jhyd73d_v4qvqdqq4qqw0000gp/T/arduino_cache_598623/core/core_esp8266_esp8266_nodemcu_CpuFrequency_80,UploadSpeed_115200,FlashSize_4M3M_fa9f64009382dc5d389fb3de0b203fc6.a

    Sketch uses 233609 bytes (22%) of program storage space. Maximum is 1044464 bytes.

    Global variables use 33536 bytes (40%) of dynamic memory, leaving 48384 bytes for local variables. Maximum is 81920 bytes.

    warning: espcomm_sync failed error: espcomm_open failed error:espcomm_upload_mem failed error: espcomm_upload_mem failed

    The other thing is you mention

    1 reply

    Reply 1 year ago

    The error seems to be communications with your ESP. In the past if I received this error I would swap rx and tx. I found that the development module had these mislabeled. I hope that works for you.


    2 years ago

    It's great that it will work on my "wife" router but will it work on mine! ?

    1 reply

    2 years ago

    Quick, easy and cool! You don't need the Arduino Uno for this though - it can all be done with the ESP8266. Get a WeMos D1 Mini or one of the ESP8266 dev boards like the LUA boards and program/connect it all to the ESP8266.

    2 replies

    Reply 2 years ago

    The MAX7219 LED matrices do tend to be labeled for 5V and the ESP8266 is at 3.3V (though its inputs are 5V tolerant). I did find one source that said that if you power the MAX7219 with 5V (and there is a 5V pin on the NodeMCU), it will understand 3.3V logic control. I haven't tried it. Have you tried it?


    Reply 2 years ago

    5V from the board works fine. I think It even works on 3.3V if II recall... I connect it to 5V and never had issues speaking with it from the ESP8266. Same with Neopixels too...