diff --git a/src/FabReader_v2/platformio.ini b/src/FabReader_v2/platformio.ini index a3f3403..4950c9e 100644 --- a/src/FabReader_v2/platformio.ini +++ b/src/FabReader_v2/platformio.ini @@ -21,3 +21,4 @@ lib_deps = uipethernet/UIPEthernet@^2.0.12 bblanchon/ArduinoJson@^6.19.4 mbed-feb11/Crypto@0.0.0+sha.f04410cef037 + ottowinter/ESPAsyncWebServer-esphome@^3.0.0 diff --git a/src/FabReader_v2/src/main.cpp b/src/FabReader_v2/src/main.cpp index cdffe6d..01e2261 100644 --- a/src/FabReader_v2/src/main.cpp +++ b/src/FabReader_v2/src/main.cpp @@ -1,183 +1,63 @@ -#include -#include - -#include "config.h" -#include "pins.h" -#include "nfc.h" -#include "otaproxy.h" -#include "helpers.h" -#include "Desfire.h" -#include "display.h" - #include -#include - -#include -#include -#include +#include +#include #include "website.h" -WiFiClient espClient; -//Config_Data config; +const char* ssid = "FabReader"; +AsyncWebServer server(80); -PubSubClient* mqtt; -NFC* nfc; -OTAProxy* ota; -Display* display; - -unsigned long otatimeout = 3000; -unsigned long lastotatime; - -void setup_wifi() +String template_index(const String& var) { - delay(10); - Serial.println("Connecting Wifi ..."); - - WiFi.mode(WIFI_STA); - WiFi.begin(WLAN_SSID, WLAN_PASS); - - while (WiFi.status() != WL_CONNECTED) - { - delay(500); + if(var == "STYLE") + { + return String(WEBSITE_CSS); } - - randomSeed(micros()); - Serial.println("WiFi connected"); -} - -void reconnect() -{ - while (!mqtt->connected()) + else { - String clientId = "FabReader_"; - clientId += String(FABREADERID); - - Serial.println("Connecting MQTT ..."); - bool connected = false; - if(MQTT_USERNAME == "") - { - connected = mqtt->connect(clientId.c_str()); - } - else - { - connected = mqtt->connect(clientId.c_str(), MQTT_USERNAME, MQTT_PASSWORD); - } - - if (connected) - { - Serial.println("MQTT connected"); - char id[6] = "00000"; - sprintf(id, "%05d", FABREADERID); - mqtt->publish("fabreader", id); - - char topic_requestOTA[] = "fabreader/00000/requestOTA"; - sprintf(topic_requestOTA, "fabreader/%05d/requestOTA", FABREADERID); - mqtt->subscribe(topic_requestOTA); - - char topic_stopOTA[] = "fabreader/00000/stopOTA"; - sprintf(topic_stopOTA, "fabreader/%05d/stopOTA", FABREADERID); - mqtt->subscribe(topic_stopOTA); - - char topic_display[] = "fabreader/00000/display/#"; - sprintf(topic_display, "fabreader/%05d/display/#", FABREADERID); - mqtt->subscribe(topic_display); - - display->writeTitle("Connected"); - display->writeInfo(""); - } - else - { - display->writeTitle("Reconnect"); - display->writeInfo("MQTT"); - - Serial.print("failed, rc="); - Serial.print(mqtt->state()); - Serial.println(" try again in 5 seconds"); - delay(5000); - } + return String(); } } -void callback(char* topic, byte* payload, unsigned int length) +String template_saved(const String& var) { - Serial.println("Receive Message"); - Serial.println(topic); - if(ota->hasActiveOTA()) - { - ota->continueOTA(topic, payload, length); + if(var == "STYLE") + { + return String(WEBSITE_CSS); + } + else + { + return String(); } - display->updateByMQTT(topic, payload, length); } void setup() { Serial.begin(115200); Serial.print("\n\n\n"); - Serial.println("Booting ..."); - - pinMode(PIN_BUZZER, OUTPUT); - pinMode(PIN_BUTTON, INPUT); - pinMode(PIN_ETH_SPI_SS, OUTPUT); - digitalWrite(PIN_ETH_SPI_SS, HIGH); - display = new Display(PIN_SDA, PIN_SCL, FABREADERID); - display->clearReaderInfo(); + WiFi.mode(WIFI_AP); + WiFi.softAP(ssid); - display->writeInfo("Start NFC ..."); - Serial.println("Connecting NFC ..."); - nfc = new NFC(PIN_RFID_SPI_SS, PIN_RFID_RST); - if(!(nfc->rfid->PCD_PerformSelfTest())) + server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) { - Serial.println("NFC Test failed"); - } - Serial.println("NFC connected"); + request->send_P(200, "text/html", WEBSITE_INDEX, template_index); + }); - display->writeInfo("Start WIFI ..."); - setup_wifi(); + server.on("/update_config", HTTP_POST, [](AsyncWebServerRequest *request) + { + if(request->hasParam("wlan_ssid", true)) + { + Serial.print("WLAN_SSID set\n"); + } + request->send_P(200, "text/html", WEBSITE_SAVED, template_saved); + }); - display->writeInfo("Start MQTT ..."); - mqtt = new PubSubClient(espClient); - mqtt->setServer(MQTT_BROKER, 1883); - mqtt->setCallback(callback); - - display->writeInfo("Start OTA ..."); - ota = new OTAProxy(mqtt, nfc, FABREADERID); + server.begin(); + Serial.print("Server started\n"); } void loop() -{ - if (!mqtt->connected()) - { - reconnect(); - } - mqtt->loop(); +{ - if(!ota->hasActiveOTA()) - { - if(nfc->checkforCard()) - { - Serial.println("Card detected"); - if(nfc->connecttoCard()) - { - Serial.println("Card connected"); - lastotatime = millis(); - - display->createReaderInfo("Run OTA"); - ota->startOTA(); - } - else - { - display->createReaderInfo("Retry Card"); - } - } - } - if(ota->hasActiveOTA()) - { - if(millis() - lastotatime > otatimeout) - { - ota->cancelOTA(); - display->clearReaderInfo(); - } - } } \ No newline at end of file diff --git a/src/FabReader_v2/src/main.cpp.2 b/src/FabReader_v2/src/main.cpp.2 new file mode 100644 index 0000000..cdffe6d --- /dev/null +++ b/src/FabReader_v2/src/main.cpp.2 @@ -0,0 +1,183 @@ +#include +#include + +#include "config.h" +#include "pins.h" +#include "nfc.h" +#include "otaproxy.h" +#include "helpers.h" +#include "Desfire.h" +#include "display.h" + +#include +#include + +#include +#include +#include + +#include "website.h" + +WiFiClient espClient; +//Config_Data config; + +PubSubClient* mqtt; +NFC* nfc; +OTAProxy* ota; +Display* display; + +unsigned long otatimeout = 3000; +unsigned long lastotatime; + +void setup_wifi() +{ + delay(10); + Serial.println("Connecting Wifi ..."); + + WiFi.mode(WIFI_STA); + WiFi.begin(WLAN_SSID, WLAN_PASS); + + while (WiFi.status() != WL_CONNECTED) + { + delay(500); + } + + randomSeed(micros()); + Serial.println("WiFi connected"); +} + +void reconnect() +{ + while (!mqtt->connected()) + { + String clientId = "FabReader_"; + clientId += String(FABREADERID); + + Serial.println("Connecting MQTT ..."); + bool connected = false; + if(MQTT_USERNAME == "") + { + connected = mqtt->connect(clientId.c_str()); + } + else + { + connected = mqtt->connect(clientId.c_str(), MQTT_USERNAME, MQTT_PASSWORD); + } + + if (connected) + { + Serial.println("MQTT connected"); + char id[6] = "00000"; + sprintf(id, "%05d", FABREADERID); + mqtt->publish("fabreader", id); + + char topic_requestOTA[] = "fabreader/00000/requestOTA"; + sprintf(topic_requestOTA, "fabreader/%05d/requestOTA", FABREADERID); + mqtt->subscribe(topic_requestOTA); + + char topic_stopOTA[] = "fabreader/00000/stopOTA"; + sprintf(topic_stopOTA, "fabreader/%05d/stopOTA", FABREADERID); + mqtt->subscribe(topic_stopOTA); + + char topic_display[] = "fabreader/00000/display/#"; + sprintf(topic_display, "fabreader/%05d/display/#", FABREADERID); + mqtt->subscribe(topic_display); + + display->writeTitle("Connected"); + display->writeInfo(""); + } + else + { + display->writeTitle("Reconnect"); + display->writeInfo("MQTT"); + + Serial.print("failed, rc="); + Serial.print(mqtt->state()); + Serial.println(" try again in 5 seconds"); + delay(5000); + } + } +} + +void callback(char* topic, byte* payload, unsigned int length) +{ + Serial.println("Receive Message"); + Serial.println(topic); + if(ota->hasActiveOTA()) + { + ota->continueOTA(topic, payload, length); + } + display->updateByMQTT(topic, payload, length); +} + +void setup() +{ + Serial.begin(115200); + Serial.print("\n\n\n"); + Serial.println("Booting ..."); + + pinMode(PIN_BUZZER, OUTPUT); + pinMode(PIN_BUTTON, INPUT); + pinMode(PIN_ETH_SPI_SS, OUTPUT); + digitalWrite(PIN_ETH_SPI_SS, HIGH); + + display = new Display(PIN_SDA, PIN_SCL, FABREADERID); + display->clearReaderInfo(); + + display->writeInfo("Start NFC ..."); + Serial.println("Connecting NFC ..."); + nfc = new NFC(PIN_RFID_SPI_SS, PIN_RFID_RST); + if(!(nfc->rfid->PCD_PerformSelfTest())) + { + Serial.println("NFC Test failed"); + } + Serial.println("NFC connected"); + + display->writeInfo("Start WIFI ..."); + setup_wifi(); + + display->writeInfo("Start MQTT ..."); + mqtt = new PubSubClient(espClient); + mqtt->setServer(MQTT_BROKER, 1883); + mqtt->setCallback(callback); + + display->writeInfo("Start OTA ..."); + ota = new OTAProxy(mqtt, nfc, FABREADERID); +} + +void loop() +{ + if (!mqtt->connected()) + { + reconnect(); + } + mqtt->loop(); + + if(!ota->hasActiveOTA()) + { + if(nfc->checkforCard()) + { + Serial.println("Card detected"); + if(nfc->connecttoCard()) + { + Serial.println("Card connected"); + lastotatime = millis(); + + display->createReaderInfo("Run OTA"); + ota->startOTA(); + } + else + { + display->createReaderInfo("Retry Card"); + } + } + } + if(ota->hasActiveOTA()) + { + if(millis() - lastotatime > otatimeout) + { + ota->cancelOTA(); + display->clearReaderInfo(); + } + } +} \ No newline at end of file diff --git a/src/FabReader_v2/src/website.h b/src/FabReader_v2/src/website.h new file mode 100644 index 0000000..8d93cb6 --- /dev/null +++ b/src/FabReader_v2/src/website.h @@ -0,0 +1,138 @@ +#ifndef WEBSITE_H +#define WEBSITE_H +const char WEBSITE_INDEX[] = "" + "\n" + "\n" + "\n" + " \n" + " \n" + " FabReader\n" + " \n" + "\n" + "\n" + "
\n" + " \n" + "

FabReader

\n" + "
\n" + "

Configuration

\n" + "
\n" + "

WLAN

\n" + "

SSID:

\n" + "

PSK:

\n" + " \n" + "

MQTT

\n" + "

Host:

\n" + "

Port:

\n" + "

User:

\n" + "

Password:

\n" + " \n" + "

FabAccess

\n" + "

FabReaderID:

\n" + "\n" + " \n" + "
\n" + "\n" + ""; + +const char* WEBSITE_CSS = "" + "body\n" + "{\n" + " float: none;\n" + " margin: 0px;\n" + " font-family: sans-serif\n" + "}\n" + "\n" + "#header\n" + "{\n" + " display: table;\n" + " background-color: #3c474d;\n" + " width: calc(100% - 20px);\n" + " padding: 10px;\n" + "}\n" + "\n" + "#header_title\n" + "{\n" + " display: table-cell;\n" + " vertical-align: middle;\n" + " color: #00d4aa;\n" + " text-align: start;\n" + " padding-right: 50px;\n" + " padding-left: 20px;\n" + "}\n" + "\n" + "#header_logo\n" + "{\n" + " display: table-cell;\n" + " height: 50px;\n" + " width: 50px;\n" + "}\n" + "\n" + ".title\n" + "{\n" + " padding-left: 10px;\n" + "}\n" + "\n" + ".subtitle\n" + "{\n" + " padding-left: 30px;\n" + " margin-bottom: 5px;\n" + "\n" + " font-weight: lighter;\n" + "}\n" + "\n" + ".config\n" + "{\n" + " display: table;\n" + " padding-left: 40px;\n" + "}\n" + "\n" + ".config_title\n" + "{\n" + " display: table-cell;\n" + " min-width: 120px;\n" + "}\n" + "\n" + ".config_content\n" + "{\n" + " display: table-cell;\n" + " margin-left: 10px;\n" + " min-width: 150px;\n" + "}\n" + "\n" + "#update_button\n" + "{\n" + " margin-top: 20px;\n" + " margin-left: 30px;\n" + " font-weight: bold;\n" + " min-width: 300px;\n" + " min-height: 30px;\n" + "}" + ".download_link\n" + "{\n" + " padding-left: 30px;\n" + "}\n"; + +const char WEBSITE_SAVED[] = "" + "\n" + "\n" + "\n" + " \n" + " \n" + " FabReader\n" + " \n" + "\n" + "\n" + "
\n" + " \n" + "

FabReader

\n" + "
\n" + "

Updated

\n" + "

Configuration is updated.

\n" + "

Go Back

\n" + " \n" + ""; +#endif \ No newline at end of file