#include #include #include #include #include #include #include #define NUMPIXELS 1 int RECV_PIN = 3; int bdly = 0; int pdly = -1; String IRc = ""; String IR_TYPE = ""; String plcd1 = ""; String plcd2 = ""; IRrecv irrecv(RECV_PIN); decode_results results; Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, 1, NEO_RGB + NEO_KHZ800); LiquidCrystal_I2C lcd(0x38, 6, 5, 4, 0, 1, 2, 3); ESP8266WiFiMulti WiFiMulti; int dlyA, dlyB, stp; String getValue(String data, char separator, int index) { int found = 0; int strIndex[] = { 0, -1 }; int maxIndex = data.length() - 1; for (int i = 0; i <= maxIndex && found <= index; i++) { if (data.charAt(i) == separator || i == maxIndex) { found++; strIndex[0] = strIndex[1] + 1; strIndex[1] = (i == maxIndex) ? i + 1 : i; } } return found > index ? data.substring(strIndex[0], strIndex[1]) : ""; } void st(String l1, String l2, int ile) { lcd.setCursor(0, 0); lcd.print(l1); lcd.setCursor(0, 1); lcd.print(l2); czekaj_na_ir(ile); } void bl(String l1, String l2, int dlyA, int dlyB, int ile) { for (int x = 0; x < ile; x++) { lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0, 1); lcd.print(" "); czekaj_na_ir(dlyB); lcd.setCursor(0, 0); lcd.print(l1); lcd.setCursor(0, 1); lcd.print(l2); czekaj_na_ir(dlyA); } } void dump(decode_results *results) { int count = results->rawlen; if (results->decode_type == PANASONIC) { IRc = String(results->value, HEX); IR_TYPE = "PANASONIC"; } if (results->decode_type == RC5) { IRc = String(results->value, HEX); IR_TYPE = "RC5"; } if (results->decode_type == RC6) { IRc = String(results->value, HEX); IR_TYPE = "RC6"; } } void czekaj_na_ir(int ms) { for (int irdly = 0; irdly < ms; irdly++) { if (irrecv.decode(&results)) { dump(&results); if (IR_TYPE == "RC5" or IR_TYPE == "RC6" or IR_TYPE == "PANASONIC") { irdly = ms; pixels.setPixelColor(0, 255, 0, 0); pixels.show(); http_pir(); pixels.setPixelColor(0, 0, 0, 0); pixels.show(); } irrecv.resume(); } delay(1); } } void sc(String l1, String l2, int dly, int st) { czekaj_na_ir(st); if (plcd1 != "") l1 = plcd1; if (plcd2 != "") l2 = plcd2; if (pdly != -1 ) dly = pdly; for (int positionCounter = 0; positionCounter < 20; positionCounter++) { lcd.scrollDisplayLeft(); delay(dly); } lcd.setCursor(0, 0); lcd.print(l1); lcd.setCursor(0, 1); lcd.print(l2); for (int positionCounter = 0; positionCounter < 20; positionCounter++) { lcd.scrollDisplayLeft(); delay(dly); } if (plcd1 != "") delay(bdly); } void setup() { int dot = 0; WiFi.mode(WIFI_STA); pixels.begin(); pixels.setPixelColor(0, 0, 0, 0); pixels.show(); WiFi.hostname("ESP_VFD_2x20"); WiFiMulti.addAP("fifirifi", "InterneT"); WiFi.begin(); pixels.setPixelColor(0, 50, 0, 0); pixels.show(); irrecv.enableIRIn(); Wire.begin(2, 0); lcd.begin(20, 2); lcd.setCursor(0, 0); lcd.print("ESP_VFD by dktr 2018"); lcd.setCursor(0, 1); lcd.print("v0.12 2x20 + IR_DEC"); delay(1000); lcd.clear(); while (WiFiMulti.run() != WL_CONNECTED) { lcd.setCursor(0, 0); lcd.print("Szukam sieci WLAN.. "); dot++; if (dot > 19) dot = -1; lcd.setCursor(dot, 1); lcd.print(" # "); pixels.setPixelColor(0, 50, 0, 0); pixels.show(); delay(30); pixels.setPixelColor(0, 0, 0, 0); pixels.show(); delay(30); } lcd.clear(); pixels.setPixelColor(0, 0, 50, 0); pixels.show(); lcd.setCursor(0, 0); lcd.print("Polaczony."); lcd.setCursor(0, 1); lcd.print("czekam na serwer."); delay(130); pixels.setPixelColor(0, 0, 0, 0); pixels.show(); } void http_pir() { HTTPClient http; String sign = String(WiFi.RSSI()); String ssid = String(WiFi.SSID()); ssid.replace("#", ""); ssid.replace(";", ""); ssid.replace("$", ""); ssid.replace("!", ""); ssid.replace(" ", "_"); http.begin("http://192.168.2.40/esp_vfd.php?netw=" + ssid + "&rssi=" + sign + "&irc=" + IRc + "&irtype=" + IR_TYPE); int httpCode = http.GET(); if (httpCode > 0) { IRc = ""; IR_TYPE = ""; String tmp = http.getString(); plcd1 = getValue(tmp, '|', 0); plcd2 = getValue(tmp, '|', 1); bdly = getValue(tmp, '|', 8).toInt(); pdly = getValue(tmp, '|', 3).toInt(); } else { pixels.setPixelColor(0, 255, 0, 0); pixels.show(); lcd.setCursor(0, 0); lcd.print("HTTP TIMEOUT "); lcd.setCursor(0, 1); lcd.print("Blad sieci... "); delay(1000); pixels.setPixelColor(0, 0, 0, 0); pixels.show(); } } void http_req() { plcd1 = ""; plcd2 = ""; pdly = -1; bdly = 0; HTTPClient http; delay(1); String sign = String(WiFi.RSSI()); String ssid = String(WiFi.SSID()); ssid.replace("#", ""); ssid.replace(";", ""); ssid.replace("$", ""); ssid.replace("!", ""); ssid.replace(" ", "_"); http.begin("http://192.168.2.40/esp_vfd.php?netw=" + ssid + "&rssi=" + sign + "&irc=" + IRc + "&irtype=" + IR_TYPE); int httpCode = http.GET(); if (httpCode > 0) { IRc = ""; IR_TYPE = ""; String tmp = http.getString(); String lcd1 = getValue(tmp, '|', 0); String lcd2 = getValue(tmp, '|', 1); String opts = getValue(tmp, '|', 2); int dly = getValue(tmp, '|', 3).toInt(); int rpta = getValue(tmp, '|', 4).toInt(); int rptb = getValue(tmp, '|', 5).toInt(); int rptc = getValue(tmp, '|', 6).toInt(); int stp = getValue(tmp, '|', 7).toInt(); if ( opts == "sc" ) sc(lcd1, lcd2, dly, stp); if ( opts == "bl" ) bl(lcd1, lcd2, rpta, rptb, rptc); if ( opts == "st" ) st(lcd1, lcd2, stp); } else { pixels.setPixelColor(0, 255, 0, 0); pixels.show(); lcd.setCursor(0, 0); lcd.print("HTTP TIMEOUT "); lcd.setCursor(0, 1); lcd.print("Blad sieci.. ."); delay(1000); pixels.setPixelColor(0, 0, 0, 0); pixels.show(); } } void loop() { http_req(); delay(10); }