-
-
Save PinkPandaKatie/21bafce98903c11b7f204775d7f259f3 to your computer and use it in GitHub Desktop.
ESP8266 Wifi-controlled outlet
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <ESP8266WiFi.h> | |
#include <WiFiUdp.h> | |
static const char* WIFINET = "notmyactualssidlol"; | |
static const char* WIFIPASS = "ormyrealpassword"; | |
static const uint8_t LED = D0; | |
static const uint8_t RELAY1 = D7; | |
static const uint8_t RELAY2 = D6; | |
uint8_t curbits = 0; | |
WiFiUDP udp; | |
void setpins() { | |
digitalWrite(RELAY1, (curbits & 0x01) ? LOW : HIGH); | |
digitalWrite(RELAY2, (curbits & 0x02) ? LOW : HIGH); | |
digitalWrite(LED, (curbits & 0x80) ? LOW : HIGH); | |
} | |
void setup() { | |
setpins(); | |
pinMode(LED, OUTPUT); | |
pinMode(RELAY1, OUTPUT); | |
pinMode(RELAY2, OUTPUT); | |
WiFi.begin(WIFINET, WIFIPASS); | |
udp.begin(5747); | |
} | |
void loop() { | |
int size; | |
if ((size = udp.parsePacket()) != 0) { | |
IPAddress raddr = udp.remoteIP(); | |
uint16_t rport = udp.remotePort(); | |
if (size == 2) { | |
uint8_t clearbits = udp.read(); | |
uint8_t togglebits = udp.read(); | |
curbits = (curbits & ~clearbits) ^ togglebits; | |
udp.beginPacket(raddr, rport); | |
udp.write(curbits); | |
udp.endPacket(); | |
} | |
} else { | |
// Reduce power by halting until interrupt is received | |
asm("waiti 0"); | |
} | |
uint32_t ctime = millis(); | |
if (WiFi.isConnected()) { | |
setpins(); | |
} else { | |
digitalWrite(LED, ((millis() % 500) > 250) ? HIGH : LOW); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment