77 lines
1.6 KiB
C++
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();
|
|
}
|
|
}
|