From a5b20bd4756183f232351cfceca5895de8c9c676 Mon Sep 17 00:00:00 2001 From: Daniel Brunner Date: Sun, 19 May 2019 22:00:25 +0200 Subject: [PATCH] Implemented tcp client for home automation --- platformio.pro | 1 + src/controlclient.h | 55 +++++++++++++++++++++++++++++++++++++++++++++ src/main.cpp | 10 +++++++-- 3 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 src/controlclient.h diff --git a/platformio.pro b/platformio.pro index 692b389..b361d99 100644 --- a/platformio.pro +++ b/platformio.pro @@ -68,6 +68,7 @@ HEADERS += src/pattern.h HEADERS += src/ledsettings.h HEADERS += src/ledcontroller.h SOURCES += src/main.cpp +HEADERS += src/controlclient.h HEADERS += src/patterns/confettipattern.h HEADERS += src/patterns/fire2012pattern.h HEADERS += src/patterns/sineleonpattern.h diff --git a/src/controlclient.h b/src/controlclient.h new file mode 100644 index 0000000..03b8b09 --- /dev/null +++ b/src/controlclient.h @@ -0,0 +1,55 @@ +#pragma once + +#include + +#include + +class ControlClient { +public: + ControlClient(const char *name, bool &power) : + m_name(name), + m_power(power) + {} + + void handleClient() + { + if(!m_client.connected()) + { + if (m_client.connect(host, 1234)) + { + m_client.println(m_name); + sendStatus(); + } + } + + if(m_client.connected()) + { + while(m_client.available()) + { + char c(m_client.read()); + + switch(c) { + case '1': on(); break; + case '0': off(); break; + case 't': toggle(); break; + case 's': sendStatus(); break; + case 'r': m_client.println("rebooting"); ESP.restart(); break; + default: Serial.print("Unknown command: "); Serial.println(c); + } + } + } + } + + void on() { m_power = true; sendStatus(); } + void off() { m_power = false; sendStatus(); } + void toggle() { m_power = !m_power; sendStatus(); } + bool status() { return m_power; } + void sendStatus() { m_client.println(status() ? "on" : "off"); } + +private: + static constexpr auto host = "192.168.0.2"; + + WiFiClient m_client; + const char *m_name; + bool &m_power; +}; diff --git a/src/main.cpp b/src/main.cpp index 4470971..e4a210d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,6 +7,7 @@ #include #include "ledcontroller.h" +#include "controlclient.h" constexpr auto WIFI_SSID = "McDonalds Free WiFi 2.4GHz"; constexpr auto WIFI_PASSWD = "Passwort_123"; @@ -14,11 +15,12 @@ constexpr auto WIFI_PASSWD = "Passwort_123"; LedController ledController; ESP8266WebServer server(80); -WiFiClient m_client; bool power = true; bool rotatePattern = true; +ControlClient client("daniel_ledstrip", power); + void setup() { Serial.begin(115200); @@ -281,7 +283,10 @@ void setup() return; } - power = *val == "true"; + if (*val == "true") + client.on(); + else + client.off(); server.send(200, "text/html", "ok"); }); @@ -359,6 +364,7 @@ void loop() } } + client.handleClient(); server.handleClient(); }