#include #include #include #include #include #include #include #define AP_SSID "BOKUS_NY_CHALLENGE" #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); ESP8266WebServer server(80); bool DISPLAY_PRESENT = true; String check_password() { char pass[]="Pa$$w0rd"; char *check = pass; for(int i=0; i<8; i++) { *(check+i) = 65+2*i; } return String(check); } void setup() { // put your setup code here, to run once: pinMode(D4, OUTPUT); digitalWrite(D4, HIGH); WiFi.softAP(AP_SSID, check_password()); IPAddress myIP = WiFi.softAPIP(); server.on("/", handleRoot); server.on("/win", handleWin); server.on("/off", handleOff); server.onNotFound(handleNotFound); server.begin(); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64 DISPLAY_PRESENT = false; // for(;;); // Don't proceed, loop forever } if(DISPLAY_PRESENT) { display.display(); delay(1000); // Pause for 2 seconds // Clear the buffer display.clearDisplay(); display.setTextSize(1); // Normal 1:1 pixel scale display.setTextColor(SSD1306_WHITE); // Draw white text display.cp437(true); // Use full 256 char 'Code Page 437' font drawStatus(); drawLightOff(); } } void loop() { // put your main code here, to run repeatedly: server.handleClient(); } void handleRoot() { String message = "\n"; message += "

You are connected

"; message += "To win and light ON - follow this link and tell the discovered secret to ANNA
"; message += "Or just light off lamp
"; message += ""; server.send(200, "text/html", message); } void handleWin() { digitalWrite(D4, LOW); String message = ""; message += "

CONGRATULATIONS!!!

"; message += "You are WINNER!
"; message += "ASAP tell ANYA - GOOGLE TRANSLATE FOREVER

"; message += "BE FIRST!


"; message += "return to main
"; message += ""; server.send(200, "text/html", message); if(DISPLAY_PRESENT) { display.clearDisplay(); drawStatus(); drawLightOn(); } } void handleOff() { digitalWrite(D4, HIGH); handleRoot(); if(DISPLAY_PRESENT) { display.clearDisplay(); drawStatus(); drawLightOff(); } } void handleNotFound() { String message = "File Not Found\n\n"; message += "URI: "; message += server.uri(); message += "\nMethod: "; message += (server.method() == HTTP_GET) ? "GET" : "POST"; message += "\nArguments: "; message += server.args(); message += "\n"; for (uint8_t i = 0; i < server.args(); i++) { message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; } message += "\n\nBack to status"; server.send(404, "text/plain", message); } String utf8rus(String source) { int i,k; String target; unsigned char n; char m[2] = { '0', '\0' }; k = source.length(); i = 0; while (i < k) { n = source[i]; i++; if (n >= 0xC0) { switch (n) { case 0xD0: { n = source[i]; i++; if (n == 0x81) { n = 0xA8; break; } if (n >= 0x90 && n <= 0xBF) n = n + 0x30; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB8; break; } if (n >= 0x80 && n <= 0x8F) n = n + 0x70; break; } } } m[0] = n; target = target + String(m); } return target; } void drawStatus() { display.setCursor(0, 0); display.print(AP_SSID); display.setCursor(0, 8); display.print(utf8rus("сервер")); display.setCursor(38, 8); display.print(WiFi.softAPIP()); for(int r = 0; r<4; r++) { display.fillRoundRect(display.width()-24+5*r, 12-4*r, 4, 4*(r+1), 1, SSD1306_WHITE); } display.setCursor(0, 17); display.print(utf8rus("1.Найти пароль и ")); display.setCursor(102, 17); display.print("SSID"); display.setCursor(36, 25); display.print(utf8rus("2.Подключиться")); display.setCursor(36, 33); display.print(utf8rus("3.Зайти по http")); display.setCursor(36, 41); display.print(utf8rus("на сервер и вк")); display.setCursor(36, 49); display.print(utf8rus("лючить лампочку")); display.setCursor(24, 57); display.print(utf8rus("4.Сказать код Ане")); display.display(); } void drawLightOff() { display.drawCircle(12, 36, 10, SSD1306_WHITE); display.drawCircle(12, 36, 9, SSD1306_WHITE); display.drawRoundRect(8, 45, 8, 16, 3, SSD1306_WHITE); display.drawRoundRect(7, 45, 10, 16, 3, SSD1306_WHITE); display.drawRoundRect(8, 45, 8, 13, 2, SSD1306_WHITE); display.drawRoundRect(8, 45, 8, 10, 2, SSD1306_WHITE); display.display(); } void drawLightOn() { display.fillCircle(12, 36, 10, SSD1306_WHITE); display.drawRoundRect(8, 45, 8, 16, 3, SSD1306_WHITE); display.drawRoundRect(7, 45, 10, 16, 3, SSD1306_WHITE); display.drawRoundRect(8, 45, 8, 13, 2, SSD1306_WHITE); display.drawRoundRect(8, 45, 8, 10, 2, SSD1306_WHITE); display.display(); }