snyc up with base project
2 files changed, 84 insertions(+), 22 deletions(-)

M firmware/remote_sensors_esp32/platformio.ini
M firmware/remote_sensors_esp32/src/main.cpp
M firmware/remote_sensors_esp32/platformio.ini +2 -2
@@ 11,15 11,15 @@ 
 [env:nodemcuv2]
 upload_protocol = espota
 upload_port = 192.168.5.73
-upload_flags = --auth=0681
+upload_flags = --auth=7648
 platform = espressif8266
 platform_packages = 
 	platformio/framework-arduinoespressif8266 @ https://github.com/esp8266/Arduino.git
 board = nodemcuv2
 framework = arduino
 lib_deps = 
+	https://github.com/hww3/WiFiManager/#0.16.0-with-hostname
 	beegee-tokyo/SHT1x-ESP@^1.0.0
-	tzapu/WiFiManager
 	https://github.com/esp8266/ESPWebServer.git
 	bblanchon/ArduinoJson@^6.18.4
 	arduino-libraries/NTPClient@^3.1.0

          
M firmware/remote_sensors_esp32/src/main.cpp +82 -20
@@ 1,11 1,18 @@ 
 #include <FS.h>                   //this needs to be first, or it all crashes and burns...
+#include "config.h"
+#include <ESP8266WiFi.h>          //https://github.com/esp8266/Arduino
+#ifdef WANT_MDNS
+#include <ESP8266mDNS.h>
+#endif /* WANT_MDNS */
 
-#include <ESP8266WiFi.h>          //https://github.com/esp8266/Arduino
-#include <ESP8266mDNS.h>
 #include <WiFiUdp.h>
 #include <WiFiManager.h>          //https://github.com/tzapu/WiFiManager
+#ifdef WANT_NTP
 #include <NTPClient.h>
+#endif /* WANT_NTP */
+#ifdef WANT_OTA
 #include <ArduinoOTA.h>
+#endif /* WANT_OTA */
 #include <Arduino.h>
 #include <ArduinoJson.h>
 #include <SHT1x.h>

          
@@ 26,10 33,25 @@ 
  * to be reset and the device to enter access point mode.
  */
 
+#ifdef WANT_OTA
+#define OTA_PASSWORD "7648"
+#endif /* WANT_OTA */
+
 #define DEBUG(X...) do{if(Serial)Serial.println(X);}while(0)
 #define DEBUGCHAR(X...) do{if(Serial)Serial.print(X);}while(0)
 
-#define FIRMWARE_REVISION 1024
+
+/* by default, the value of PROJECTNAME will be used as the prefix of the devices's
+ * hostname and the configuration access point ssid.
+ */
+#define PROJECTNAME "ENVSENSOR"
+
+/* when storing data in the pseudo-eeprom of the ESP, you must specify how much space
+ * will be needed for the data stored. changing this value will likely cause existing
+ * data to be lost, so best over-estimate before going live.
+ */
+#define EEPROM_BYTES_NEEDED 50
+
 
 #define SLOW 250
 #define MEDIUM 100

          
@@ 49,13 71,16 @@ WiFiClient wifiClient;
 SHT1x sht1x(dataPin, clockPin, SHT1x::Voltage::DC_3_3v);
 IPAddress br_adr;
 WiFiUDP udp;
-WiFiUDP ntpUdp;
 
 String hubsn;
 String airsn;
 int reportfreq = 60;
 
+#ifdef WANT_NTP
+WiFiUDP ntpUdp;
+
 NTPClient timeClient(ntpUdp);
+#endif /* WANT_NTP */
 
 // 'flash' button is pin 0
 #define BUTTON_PIN 0

          
@@ 80,7 105,19 @@ void blink(int speed, int count) {
     }
     digitalWrite(16, ON);
 }
+WiFiManagerParameter hub_serial_number("hubsn", "HubSerialNumber", "10010", 7);
+WiFiManagerParameter air_serial_number("airsn", "AirSerialNumber", "10012", 7);
+WiFiManagerParameter report_frequency("reportfreq", "ReportFreq (seconds)", "60", 4);
 
+void wifi_register_custom_params(WiFiManager * myWifiManager) {
+
+    myWifiManager->addParameter(&hub_serial_number);
+
+    myWifiManager->addParameter(&air_serial_number);
+
+    myWifiManager->addParameter(&report_frequency);
+
+}
 //! clear the wifi configuration and restart the device in AP mode.
 void resetEverything() {
     WiFi.enableSTA(true);

          
@@ 117,7 154,7 @@ void writeStringToEEPROM(int addrOffset,
 
 String readStringFromEEPROM(int addrOffset)
 {
-    uint8_t newStrLen;
+    uint8_t newStrLen = 0;
     Serial.println("reading a string from eeprom");
     EEPROM.get(addrOffset, newStrLen);
 

          
@@ 129,6 166,14 @@ String readStringFromEEPROM(int addrOffs
     data[newStrLen] = '\0'; 
     return String(data);
 }
+
+String wifi_get_mac_subset() {
+    uint8_t mac[6];
+    char macStr[7] = { 0 };
+    wifi_get_macaddr(STATION_IF, mac);
+    sprintf(macStr, "%02X%02X%02X", mac[3], mac[4], mac[5]);
+    return String(macStr);
+}
 //***********************************************
 
 void setup() {

          
@@ 145,14 190,12 @@ void setup() {
     //Local intialization. Once its business is done, there is no need to keep it around
     WiFiManager wifiManager;
 
-    WiFiManagerParameter hub_serial_number("hubsn", "HubSerialNumber", "10010", 7);
-    wifiManager.addParameter(&hub_serial_number);
+    //    wifiManager.setDebugOutput(true);
+    String ssid = PROJECTNAME + String("-");
+    ssid += wifi_get_mac_subset();
+    wifi_register_custom_params(&wifiManager);
+    wifiManager.setHostname(ssid.c_str());
 
-    WiFiManagerParameter air_serial_number("airsn", "AirSerialNumber", "10012", 7);
-    wifiManager.addParameter(&air_serial_number);
-
-    WiFiManagerParameter report_frequency("reportfreq", "ReportFreq (seconds)", "60", 4);
-    wifiManager.addParameter(&report_frequency);
 
     //exit after config instead of connecting
    wifiManager.setBreakAfterConfig(true);

          
@@ 175,8 218,8 @@ void setup() {
     }
 
     blink(MEDIUM, 2);
-
-  ArduinoOTA.onStart([]() {
+#ifdef WANT_OTA
+    ArduinoOTA.onStart([]() {
         DEBUG("OTA Start");
     });
     ArduinoOTA.onEnd([]() {

          
@@ 194,19 237,22 @@ void setup() {
         else if (error == OTA_END_ERROR) DEBUG("OTA: End Failed");
     });
 
-    ArduinoOTA.setPassword((const char *)"0681");
-
+    ArduinoOTA.setPassword((const char *)OTA_PASSWORD);
+#endif /* WANT_OTA */
     //if you get here you have connected to the WiFi
     DEBUG("connected...yay :)");
 
+
+#ifdef WANT_OTA
     ArduinoOTA.begin();
+#endif /* WANT_OTA */
 
     DEBUG("local ip: ");
     DEBUG(WiFi.localIP());
     br_adr = WiFi.localIP();
     br_adr[3] = 255;
 
-    EEPROM.begin(50);
+    EEPROM.begin(EEPROM_BYTES_NEEDED);
 
     if (shouldSaveConfig) {
         String hs ="HB-";

          
@@ 233,24 279,38 @@ void setup() {
 
     udp.begin(SMARTWEATHER_PORT);
 
-    timeClient.begin();
+#ifdef WANT_MDNS
+    MDNS.begin(ssid);
+#endif /* WANT_MDNS */
 
-    delay(1000);
+#ifdef WANT_NTP
+    timeClient.begin();
+#endif /* WANT_NTP */
+
+    delay(100);
     Serial.println("ready to read");
 
     btn.attachLongPressStart(resetEverything);
 }
 
 void loop() {
+#ifdef WANT_NTP
     timeClient.update();
+        // don't update this every loop else you'll waste cpu
+    ts = timeClient.getEpochTime();
+#endif /* WANT_NTP */
+
+#ifdef WANT_OTA
     ArduinoOTA.handle();
+#endif /* WANT_OTA */
     long tsm = millis();
     btn.tick();
 
     if((tsm/1000) > (lastreport + 30)) {
         lastreport = millis() / 1000;
+#ifdef WANT_NTP
         ts = timeClient.getEpochTime();
-
+#endif /* WANT_NTP */
         blink(SLOW, 3);
 
         if (1) {

          
@@ 292,7 352,9 @@ void loop() {
         StaticJsonDocument<250> doc;
         blink(FAST, 2);
 
+#ifdef WANT_NTP
         ts = timeClient.getEpochTime();
+#endif /* WANT_NTP */
 
         lastobservation = (tsm/1000);
         doc["serial_number"] = airsn;