dstokesdubois
New member
I currently have two renards running 20 SSrez's. I'm going to use raspberry PI's to run my pixels wireless and would like to also get rid of the cat6 between the renard and the ssr. Anybody know of an wireless SSr ?
Rather than Arduino Pro/Mega, I suggest using ESP8266 (e.g. Wemos D1 mini). It has Wifi builtin, small form-factor, and plenty of GPIO pins.
The MiniRen8/4 is small (about 3" x 3.5") and has 4 on-board triacs so it's pretty close to a wireless SSR. You can plug an XBee radio into it, one of Komby's wireless gizmos if you want to use his control system or an ESP Snap-In if you want full Wi-Fi use.
http://digwdf.com/store/product.php?id_product=13
Alternately, you could connect a DIGWDF ESP Thing to the DIGWDF ZCSSR and have essentially the same thing that would handle even more current.
ESP Thing: http://digwdf.com/store/product.php?id_product=220
ZCSSR: http://digwdf.com/store/product.php?id_product=228
At DIGWDF we specialize in weird things.
Hi, it should be possible to use an ESP to switch a few channels, the fun bit is doing it without interrupts and not missing the new packet or the zero cross pulse.... I don't have a H11A1 on the bench so I'll have to simulate the high pulse this with another device. Can someone confirm the real world spec for this pulse please. I’ll work on 100uS until this is confirmed.
#include <ESP8266WiFi.h>
#include <E131.h>
// set the pin numbers of the in / outputs
int output_1 = 12; // pin number of output 1 to triac
int output_2 = 13; // pin number of output 2 to triac
int output_3 = 14; // pin number of output 3 to triac
int output_4 = 15; // pin number of output 4 to triac
int input_zc = 4; // pin number of zero cross input
// variables for the DMX value
int channel_value_1;
int channel_value_2;
int channel_value_3;
int channel_value_4;
// general variables
long int num_channels; // number of E1.31 values in packet
int loop_number; // keeps track of number of times looped
unsigned int step_ends; // single loop timer
unsigned int step_delay = 30; // delay for 60Hz
// E1.31 setup
const char ssid[] = "<YOUR_SSID>"; // AP SSID
const char passphrase[] = "<YOUR_PASSWORD>"; // AP password
const int universe = 1; // universe number
const int channel = 0; // start channel
E131 e131;
void setup() {
// set the function & state of the in / output pins
pinMode(input_zc, INPUT); // set pin as output
pinMode(output_1, OUTPUT); // set pin as output
pinMode(output_2, OUTPUT); // set pin as output
pinMode(output_3, OUTPUT); // set pin as output
pinMode(output_4, OUTPUT); // set pin as output
digitalWrite(output_1, LOW); // set output low / off
digitalWrite(output_2, LOW); // set output low / off
digitalWrite(output_3, LOW); // set output low / off
digitalWrite(output_4, LOW); // set output low / off
// select unicast or multicast - one must be commented out
//e131.begin(ssid, passphrase); // unicast
e131.beginMulticast(ssid, passphrase, universe); // multicast
}
void loop() {
while (digitalRead(input_zc) == 0) { // loop untill zero cross
step_ends = micros(); // time in micros now
}
num_channels = e131.parsePacket();
if (num_channels) {
channel_value_1 = (e131.data[channel + 0]);
channel_value_2 = (e131.data[channel + 1]);
channel_value_3 = (e131.data[channel + 2]);
channel_value_4 = (e131.data[channel + 3]);
}
do {
// switch on output / triac if we have waited long enough
if (loop_number == channel_value_1)
digitalWrite(output_1, HIGH); // set output high / on
if (loop_number == channel_value_2)
digitalWrite(output_2, HIGH); // set output high / on
if (loop_number == channel_value_3)
digitalWrite(output_3, HIGH); // set output high / on
if (loop_number == channel_value_4)
digitalWrite(output_4, HIGH); // set output high / on
step_ends += step_delay; // add delay to time to get end time
while (micros() < step_ends); // check time now against end time & wait
loop_number--; // reduce loop counter by 1
} while (loop_number > 10); // 'do' it all again unless ==0
digitalWrite(output_1, LOW); // set output low / off
digitalWrite(output_2, LOW); // set output low / off
digitalWrite(output_3, LOW); // set output low / off
digitalWrite(output_4, LOW); // set output low / off
loop_number = 255; // start value for loop counter
}