esp8266-ws2801d/src/relais.cpp

77 lines
1.6 KiB
C++

#include <WiFiUdp.h>
#include <Arduino.h>
#include "relais.h"
WiFiUDP relaisUDP;
#define RELAIS_PIN 5
#define RELAIS_UDP_PORT 2800
void relais_setup(void)
{
Serial.println("Relais: Setting up pin.");
digitalWrite(RELAIS_PIN, LOW);
pinMode(RELAIS_PIN, OUTPUT);
Serial.print("Relais: Starting UDP server on port ");
Serial.println(RELAIS_UDP_PORT);
if(!relaisUDP.begin(RELAIS_UDP_PORT)) {
Serial.println("Relais: UDP server start FAILED!");
}
Serial.println("Relais setup done");
}
void relais_loop(void)
{
unsigned char databyte;
unsigned char answer;
int packetSize = relaisUDP.parsePacket();
if(packetSize)
{
Serial.print("Relais: Received packet of size ");
Serial.println(packetSize);
Serial.print("From ");
IPAddress remoteIp = relaisUDP.remoteIP();
Serial.print(remoteIp);
Serial.print(", port ");
Serial.println(relaisUDP.remotePort());
if(packetSize == 1) {
int len = relaisUDP.read(&databyte,1);
switch(databyte) {
case 0: // switch relais off
Serial.println("Relais: switch off.");
digitalWrite(RELAIS_PIN, LOW);
answer = 0;
break;
case 1: // switch relais on
Serial.println("Relais: switch on.");
digitalWrite(RELAIS_PIN, HIGH);
answer = 1;
break;
default: // unknown code -> error
Serial.println("Relais: wrong code.");
answer = 0xFF;
break;
}
} else { // wrong length
Serial.println("Relais: wrong packet length.");
answer = 0xFF;
}
// send a reply, to the IP address and port that sent us the packet we received
relaisUDP.beginPacket(relaisUDP.remoteIP(), relaisUDP.remotePort());
relaisUDP.write(answer);
relaisUDP.endPacket();
}
}