summaryrefslogtreecommitdiff
path: root/luminate.ino
diff options
context:
space:
mode:
Diffstat (limited to 'luminate.ino')
-rw-r--r--luminate.ino65
1 files changed, 65 insertions, 0 deletions
diff --git a/luminate.ino b/luminate.ino
new file mode 100644
index 0000000..2f69b31
--- /dev/null
+++ b/luminate.ino
@@ -0,0 +1,65 @@
+#include <ESP8266WiFi.h>
+
+const char *ssid = "SSID";
+const char *password = "PASSWORD";
+
+#define MAX_CLIENTS 5
+WiFiServer server(23);
+WiFiClient clients[MAX_CLIENTS];
+
+void setup (void) {
+ int32_t channel = 0;
+ uint8_t bssid[6] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
+
+ pinMode(2, OUTPUT);
+ pinMode(0, OUTPUT);
+
+ // channel, bssid and IPAddress are optional but speed up the boot process
+ WiFi.begin(ssid, password, channel, bssid);
+ WiFi.config(IPAddress(0, 0, 0, 0), IPAddress(0, 0, 0, 0), IPAddress(255, 255, 255, 0));
+
+ while(WiFi.status() != WL_CONNECTED)
+ delay(500);
+
+ server.begin();
+ server.setNoDelay(true);
+}
+
+void loop(void) {
+ uint8_t i;
+
+ if (server.hasClient()) {
+ for (i=0; i<MAX_CLIENTS; i++) {
+ if (!clients[i] || !clients[i].connected()) {
+ if (clients[i]) clients[i].stop();
+ clients[i] = server.available();
+ continue;
+ }
+ }
+ server.available().stop(); // reject, no slots free
+ }
+
+ for (i=0; i<MAX_CLIENTS; i++) {
+ if (clients[i] && clients[i].connected()) {
+ uint8_t r;
+ while (clients[i].available()) {
+ r = clients[i].read();
+ switch (r) {
+ case 65: // 'A'
+ digitalWrite(2, HIGH); break;
+ case 66: // 'B'
+ digitalWrite(0, HIGH); break;
+ case 97: // 'a'
+ digitalWrite(2, LOW); break;
+ case 98: // 'b'
+ digitalWrite(0, LOW); break;
+ default:
+ clients[i].write(r); // echo back
+ }
+ clients[i].write(10); // line feed
+ }
+ }
+ }
+
+ delay(500);
+}