/* ESPurna WIFI MODULE Copyright (C) 2016 by Xose PĂ©rez */ #include "JustWifi.h" #include DNSServer dnsServer; // ----------------------------------------------------------------------------- // WIFI // ----------------------------------------------------------------------------- String getIP() { if (WiFi.getMode() == WIFI_AP) { return WiFi.softAPIP().toString(); } return WiFi.localIP().toString(); } String getNetwork() { if (WiFi.getMode() == WIFI_AP) { return jw.getAPSSID(); } return WiFi.SSID(); } void wifiDisconnect() { jw.disconnect(); } void resetConnectionTimeout() { jw.resetReconnectTimeout(); } bool wifiConnected() { return jw.connected(); } bool createAP() { return jw.createAP(); } void wifiConfigure() { jw.scanNetworks(true); jw.setHostname(getSetting("hostname", HOSTNAME).c_str()); jw.setSoftAP(getSetting("hostname", HOSTNAME).c_str(), getSetting("adminPass", ADMIN_PASS).c_str()); jw.setAPMode(AP_MODE_ALONE); jw.cleanNetworks(); if (getSetting("ssid0").length() > 0) jw.addNetwork(getSetting("ssid0").c_str(), getSetting("pass0").c_str()); if (getSetting("ssid1").length() > 0) jw.addNetwork(getSetting("ssid1").c_str(), getSetting("pass1").c_str()); if (getSetting("ssid2").length() > 0) jw.addNetwork(getSetting("ssid2").c_str(), getSetting("pass2").c_str()); } void wifiSetup() { wifiConfigure(); // Message callbacks jw.onMessage([](justwifi_messages_t code, char * parameter) { #ifdef DEBUG_PORT if (code == MESSAGE_SCANNING) { DEBUG_MSG("[WIFI] Scanning\n"); } if (code == MESSAGE_SCAN_FAILED) { DEBUG_MSG("[WIFI] Scan failed\n"); } if (code == MESSAGE_NO_NETWORKS) { DEBUG_MSG("[WIFI] No networks found\n"); } if (code == MESSAGE_NO_KNOWN_NETWORKS) { DEBUG_MSG("[WIFI] No known networks found\n"); } if (code == MESSAGE_FOUND_NETWORK) { DEBUG_MSG("[WIFI] %s\n", parameter); } if (code == MESSAGE_CONNECTING) { DEBUG_MSG("[WIFI] Connecting to %s\n", parameter); } if (code == MESSAGE_CONNECT_WAITING) { // too much noise } if (code == MESSAGE_CONNECT_FAILED) { DEBUG_MSG("[WIFI] Could not connect to %s\n", parameter); } if (code == MESSAGE_CONNECTED) { DEBUG_MSG("[WIFI] MODE STA -------------------------------------\n"); DEBUG_MSG("[WIFI] SSID %s\n", WiFi.SSID().c_str()); DEBUG_MSG("[WIFI] IP %s\n", WiFi.localIP().toString().c_str()); DEBUG_MSG("[WIFI] MAC %s\n", WiFi.macAddress().c_str()); DEBUG_MSG("[WIFI] GW %s\n", WiFi.gatewayIP().toString().c_str()); DEBUG_MSG("[WIFI] MASK %s\n", WiFi.subnetMask().toString().c_str()); DEBUG_MSG("[WIFI] DNS %s\n", WiFi.dnsIP().toString().c_str()); DEBUG_MSG("[WIFI] HOST %s\n", WiFi.hostname().c_str()); DEBUG_MSG("[WIFI] ----------------------------------------------\n"); } if (code == MESSAGE_ACCESSPOINT_CREATED) { DEBUG_MSG("[WIFI] MODE AP --------------------------------------\n"); DEBUG_MSG("[WIFI] SSID %s\n", jw.getAPSSID().c_str()); DEBUG_MSG("[WIFI] PASS %s\n", getSetting("adminPass", ADMIN_PASS).c_str()); DEBUG_MSG("[WIFI] IP %s\n", WiFi.softAPIP().toString().c_str()); DEBUG_MSG("[WIFI] MAC %s\n", WiFi.softAPmacAddress().c_str()); DEBUG_MSG("[WIFI] ----------------------------------------------\n"); } if (code == MESSAGE_DISCONNECTED) { DEBUG_MSG("[WIFI] Disconnected\n"); } if (code == MESSAGE_ACCESSPOINT_CREATING) { DEBUG_MSG("[WIFI] Creating access point\n"); } if (code == MESSAGE_ACCESSPOINT_FAILED) { DEBUG_MSG("[WIFI] Could not create access point\n"); } #endif // Disconnect from MQTT server if no WIFI if (code != MESSAGE_CONNECTED) { if (mqttConnected()) mqttDisconnect(); } // Configure mDNS if (code == MESSAGE_CONNECTED) { if (MDNS.begin((char *) WiFi.hostname().c_str())) { MDNS.addService("http", "tcp", 80); DEBUG_MSG("[MDNS] OK\n"); } else { DEBUG_MSG("[MDNS] FAIL\n"); } } // Configure captive portal if (code == MESSAGE_ACCESSPOINT_CREATED) { dnsServer.start(DNS_PORT, "*", WiFi.softAPIP()); } if (code == MESSAGE_DISCONNECTED) { dnsServer.stop(); } }); } void wifiLoop() { jw.loop(); if (WiFi.getMode() == WIFI_AP) { dnsServer.processNextRequest(); } }