I'm stuck at this point. I don't see any Artnet Wifi Libraries compatible with my board. Is there something I can do to change the library from rstephan to make it work? Is there a better library to use? Any help is appreciated, this is my first Arduino project.
Thanks,
Michele
#include <noise.h>
#include <bitswap.h>
#include <fastspi_types.h>
#include <pixelset.h>
#include <fastled_progmem.h>
#include <led_sysdefs.h>
#include <hsv2rgb.h>
#include <fastled_delay.h>
#include <colorpalettes.h>
#include <color.h>
#include <fastspi_ref.h>
#include <fastspi_bitbang.h>
#include <controller.h>
#include <fastled_config.h>
#include <colorutils.h>
#include <chipsets.h>
#include <pixeltypes.h>
#include <fastspi_dma.h>
#include <fastpin.h>
#include <fastspi_nop.h>
#include <platforms.h>
#include <lib8tion.h>
#include <cpp_compat.h>
#include <fastspi.h>
#include <FastLED.h>
#include <dmx.h>
#include <power_mgt.h>
#include <ArtnetWifi.h>
#include <WiFi.h>
#include <WiFiUdp.h>
#include <ArtnetWifi.h>
#include <FastLED.h>
#include <WiFi.h>
#include <WiFiUdp.h>
#include <ArtnetWifi.h>
#include <FastLED.h>
//Wifi settings - be sure to replace these with the WiFi network that your computer is connected to
const char* ssid = "o2WLAN73";
const char* password = "46848T476676439";
// LED Strip
const int numLeds = 90; // Change if your setup has more or less LED's
const int numberOfChannels = numLeds * 3; // Total number of DMX channels you want to receive (1 led = 3 channels)
#define DATA_PIN 12 //The data pin that the WS2812 strips are connected to.
CRGB leds[numLeds];
// Artnet settings
ArtnetWifi artnet;
const int startUniverse = 0;
bool sendFrame = 1;
int previousDataLength = 0;
// connect to wifi – returns true if successful or false if not
boolean ConnectWifi(void)
{
boolean state = true;
int i = 0;
WiFi.begin(ssid, password);
Serial.println("");
Serial.println("Connecting to WiFi");
// Wait for connection
Serial.print("Connecting");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
if (i > 20){
state = false;
break;
}
i++;
}
if (state){
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
} else {
Serial.println("");
Serial.println("Connection failed.");
}
return state;
}
void onDmxFrame(uint16_t universe, uint16_t length, uint8_t sequence, uint8_t* data)
{
sendFrame = 1;
// set brightness of the whole strip
if (universe == 15)
{
FastLED.setBrightness(data[0]);
}
// read universe and put into the right part of the display buffer
for (int i = 0; i < length / 3; i++)
{
int led = i + (universe - startUniverse) * (previousDataLength / 3);
if (led < numLeds)
{
leds[led] = CRGB(data[i * 3], data[i * 3 + 1], data[i * 3 + 2]);
}
}
previousDataLength = length;
FastLED.show();
}
void setup()
{
Serial.begin(115200);
ConnectWifi();
artnet.begin();
FastLED.addLeds<WS2812, DATA_PIN, GRB>(leds, numLeds);
// onDmxFrame will execute every time a packet is received by the ESP32
artnet.setArtDmxCallback(onDmxFrame);
}
void loop()
{
// we call the read function inside the loop
artnet.read();
}
error messages
WARNING: library ArtnetWifi-master claims to run on (esp8266, esp32) architecture(s) and may be incompatible with your current board which runs on (avr) architecture(s).
In file included from /Users/TheOracle/Documents/Arduino/libraries/FastLED-3.2.1/noise.h:4:0,
from /Users/TheOracle/Documents/Arduino/LEDstaves/LEDstaves.ino:1:
/Users/TheOracle/Documents/Arduino/libraries/FastLED-3.2.1/FastLED.h:14:21: note: #pragma message: FastLED version 3.002.001
# pragma message "FastLED version 3.002.001"
^
/Users/TheOracle/Documents/Arduino/LEDstaves/LEDstaves.ino: In function 'boolean ConnectWifi()':
/Users/TheOracle/Documents/Arduino/LEDstaves/LEDstaves.ino:65:28: warning: invalid conversion from 'const char*' to 'char*' [-fpermissive]
WiFi.begin(ssid, password);
^
In file included from /Users/TheOracle/Documents/Arduino/LEDstaves/LEDstaves.ino:31:0:
/Applications/Arduino.app/Contents/Java/libraries/WiFi/src/WiFi.h:79:9: note: initializing argument 1 of 'int WiFiClass::begin(char*, const char*)'
int begin(char* ssid, const char *passphrase);
^
Sketch uses 11402 bytes (35%) of program storage space. Maximum is 32256 bytes.
Global variables use 1349 bytes (65%) of dynamic memory, leaving 699 bytes for local variables. Maximum is 2048 bytes.
avrdude: stk500_recv(): programmer is not responding
WARNING: library ArtnetWifi-master claims to run on (esp8266, esp32) architecture(s) and may be incompatible with your current board which runs on (avr) architecture(s).
What board type did you select?
The mkr1010 has a samd21 chip which your code gets uploaded to. I don't know if/how you can directly upload code to the esp32 chip.
But the samd21 is not avr architecture either, hence my question about board selection.
Also, before you post again, please read the forum guidelines in the sticky post to find out how to post code and error messages correctly, using code tags. Then you can modify your post above and put the code tags in.
Thanks for editing your post. But really, I meant the code and error messages would be in separate code tags, one for the code and one for the error messages.
The bad news is I know nothing about the mkr series Arduino. I always looked at them and thought "who wants that?" because they seem over complicated and expensive.
For your project I would have chosen an esp8266 board. Wemos Mini are my favourite. But then I know little about dmx either, so you had better get a second opinion. This is the Arduino forum, so I'm sure one will be along in a moment...
i wish i new that a few days ago... it seems pretty useless at the moment because nothing works on it. i'm sure that will change but for now i decided to get a different board and try again. i want to use esp because artnet libraries support it.
PaulRB:
The bad news is I know nothing about the mkr series Arduino. I always looked at them and thought "who wants that?" because they seem over complicated and expensive.
My impression as well.
But then I think the ESP has really taken over from whatever "space" those might have filled and is (8266 at least) ridiculously cheap ...
I got the Adafruit ESP8266 Feather and so far so good. Everything compiled and now I just need to understand somethings about the code and the way artnet works so that I will be able to add more led strips to my system and control them all as one matrix. I'm going to try a few things and if it doesn't work, well I'll ask more questions. If it does work I'll share what I did here.
I got it working, but now once I turn off the board and strip by removing the power source and then plug everything back in I need to also reload the program on board or nothing works, not even the inittest. I want to be able to turn it on and off without having to put the program on every time. Any suggestions or ideas why it is that is happening?
/*
This example will receive multiple universes via Artnet and control a strip of ws2811 leds via
Adafruit's NeoPixel library: https://github.com/adafruit/Adafruit_NeoPixel
This example may be copied under the terms of the MIT license, see the LICENSE file for details
*/
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <ArtnetWifi.h>
#include <Adafruit_NeoPixel.h>
//Wifi settings
const char* ssid = "o2-WLAN73";
const char* password = "46848T4766776439";
// Neopixel settings
const int numLeds = 90; // change for your setup
const int numberOfChannels = numLeds * 3; // Total number of channels you want to receive (1 led = 3 channels)
const byte dataPin = 2;
Adafruit_NeoPixel leds = Adafruit_NeoPixel(numLeds, dataPin, NEO_GRB + NEO_KHZ800);
// Artnet settings
ArtnetWifi artnet;
const int startUniverse = 0; // CHANGE FOR YOUR SETUP most software this is 1, some software send out artnet first universe as 0.
// Check if we got all universes
const int maxUniverses = numberOfChannels / 512 + ((numberOfChannels % 512) ? 1 : 0);
bool universesReceived[maxUniverses];
bool sendFrame = 1;
int previousDataLength = 0;
// connect to wifi – returns true if successful or false if not
boolean ConnectWifi(void)
{
boolean state = true;
int i = 0;
WiFi.begin(ssid, password);
Serial.println("");
Serial.println("Connecting to WiFi");
// Wait for connection
Serial.print("Connecting");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
if (i > 20){
state = false;
break;
}
i++;
}
if (state){
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
} else {
Serial.println("");
Serial.println("Connection failed.");
}
return state;
}
void initTest()
{
for (int i = 0 ; i < numLeds ; i++)
leds.setPixelColor(i, 127, 0, 0);
leds.show();
delay(500);
for (int i = 0 ; i < numLeds ; i++)
leds.setPixelColor(i, 0, 127, 0);
leds.show();
delay(500);
for (int i = 0 ; i < numLeds ; i++)
leds.setPixelColor(i, 0, 0, 127);
leds.show();
delay(500);
for (int i = 0 ; i < numLeds ; i++)
leds.setPixelColor(i, 0, 0, 0);
leds.show();
}
void onDmxFrame(uint16_t universe, uint16_t length, uint8_t sequence, uint8_t* data)
{
sendFrame = 1;
// set brightness of the whole strip
if (universe == 15)
{
leds.setBrightness(data[0]);
leds.show();
}
// Store which universe has got in
if ((universe - startUniverse) < maxUniverses)
universesReceived[universe - startUniverse] = 1;
for (int i = 0 ; i < maxUniverses ; i++)
{
if (universesReceived[i] == 0)
{
//Serial.println("Broke");
sendFrame = 0;
break;
}
}
// read universe and put into the right part of the display buffer
for (int i = 0; i < length / 3; i++)
{
int led = i + (universe - startUniverse) * (previousDataLength / 3);
if (led < numLeds)
leds.setPixelColor(led, data[i * 3], data[i * 3 + 1], data[i * 3 + 2]);
}
previousDataLength = length;
if (sendFrame)
{
leds.show();
// Reset universeReceived to 0
memset(universesReceived, 0, maxUniverses);
}
}
void setup()
{
Serial.begin(115200);
ConnectWifi();
artnet.begin();
leds.begin();
initTest();
// this will be called for each packet received
artnet.setArtDmxCallback(onDmxFrame);
}
void loop()
{
// we call the read function inside the loop
artnet.read();
}
You should not need to re-upload the code each time, because it is stored in flash memory, and is not lost when power is removed.
But I can guess what is happening. At power-up, the esp chip is going into upload mode, or some other mode, instead of run mode. This mode is controlled by certain pins. What do you have connected to which pins on the board?
To enter run mode (boot from flash), both GPIO0 and GPIO2 must be HIGH and GPIO15 must be LOW. The feather has components onboard to achieve this, but only if no external circuit prevents it. Do you have anything connected to pins 0, 2 or 15 ?
Running the data from another pin causes the inittest to run but nothing else. The board doesn't communicate with my computer over wifi anymore after being unplugged and the powered up again.