Artnet
Artnet, WS2812 and ESP8266 (Arduino IDE)
From my previous post I have updated the program to be compiled from Arduino IDE.
#include <ESP8266WiFi.h> #include <WiFiUdp.h> #include <Adafruit_NeoPixel.h> #define WSout 5 // Pin D1 #define ARTNET_PORT 6454 #define PIXELCOUNT 100 byte hData[318]; const int number_of_channels=300; //512 for 512 channels const char* ssid = ""; const char* password = ""; Adafruit_NeoPixel pixels = Adafruit_NeoPixel(PIXELCOUNT,WSout,NEO_GRB+NEO_KHZ800); WiFiUDP udp; IPAddress local_ip(192, 168, 1, 190); IPAddress gateway_ip(192, 168, 1, 1); IPAddress subnet_ip(255, 255, 255, 0); void setup() { Serial.begin(115200); delay(100); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); WiFi.config(local_ip, gateway_ip, subnet_ip); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } udp.begin(ARTNET_PORT); // Open ArtNet port Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); pixels.begin(); for(byte i=0;i<PIXELCOUNT;i++){ pixels.setPixelColor(i, Color(0,0,0)); } pixels.show(); } void loop() { if (udp.parsePacket()) { udp.read(hData, 318); // pixels.setPixelColor(0, Color(hData[19], hData[20],hData[21])); for ( int n=0; n<100; n++){ pixels.setPixelColor(n, Color(hData[(n * 3) + 19], hData[(n *3)+20],hData[(n *3)+21])); } pixels.show(); } } uint32_t Color(byte r, byte g, byte b){ uint32_t c; c = r; c <<=8; c |= g; c <<= 8; c |= b; return c; }
The WS2812 data line is connected to D1 from the NODEMCU board.
Config of the Arduino IDE
It looks like it work better than the code in Lua.
This comes from a similar program I did few years ago to run 10 matrices of 10 x 10 pixels. I was using WS2801 led stripes, arduino UNO and ethernet shield.
Everything still runs smooth untill now.
Some photos of matrix installed and the controller running JINX.
Artnet, WS2812 and ESP8266 (Lua)
From my previous post on Artnet ESP8266, I had some feedback about some trouble. I decided to make it again but with the WS2812.
- Flash the ESP8266 with the correct library. You will need:
- Nodemcu flasher
- Esplorer
- Compile a new firmware using: Nodemcu Custom Builds
Once compiled you will receive an email with a link to download the firmware.
Upload the firmware with Nodemcu flasher and change the path to point to the custom firmware
With Esplorer, upload this program:
wifi.setmode(wifi.STATION) wifi.sta.config("*****","*****",1) tmr.delay(5000000) -- wait 1,000,000 us = 1 second print(wifi.sta.getip()) print("Running") gpio.mode(4, gpio.OUTPUT) ws2812.init() tmr.delay(1000000) ws2812.write(string.char(0,0,0):rep(100)) s=net.createServer(net.UDP) s:on("receive",function(s,c) ws2812.write(string.sub (c, 19, 318)) end) s:listen(6454)
I am driving a Matrix (10*10) of 100 pixels.
In the UDP loop, I am extracting the 300 bytes (19 to 318) corresponding to each RGB values of each pixels; 3 * 100. Bytes 1 to 18 are the Artnet header.
The led stripe is connected to PIN D4 of my NODEMCU Board
Forgot to mention that a fast wifi router is needed.
Enjoy…
ESP8266: Artnet receiver
The other I was playing with a matrix of led. The matrix is made of a stripe of WS2801.
So, here is what I have done.
- I flash a new lua based firmware in the ESP8266 using Marcel’s NodeMCU custom build cloud service.
Add WS2801 and / or WS2812 modules - Wait and download the compiled firmware
- Flash it using the tool ESPtool
- I use ESPlorer to program the ESP
- Create a new ini.lua
- Copy the following lines of code.
This is for a matrix 10×10 “snakelines”wifi.setmode(wifi.STATION) wifi.sta.config("******","******",1) tmr.delay(5000000) -- wait 1,000,000 us = 1 second ws2801.init(0, 2) tmr.delay(1000000) ws2801.write(string.char(0,0,0):rep(100)) s=net.createServer(net.UDP) s:on("receive",function(s,c) ws2801.write(string.sub (c, 19, 318)) end) s:listen(6454)
- Use Jinx or Glediator (I prefer Jinx) to drive the matrix and send the Artnet commands to the ESP8266
It works very well.
The code is simple and works well. I haven’t tried on large matrix but I think for larger matrix a fast wifi connection would be needed.