#include #include // From https://github.com/DaKaZ/esp8266-restclient #include "RestClient.h" #include #include #include #include const char* ssid = "FLRLAN"; const char* password = "XXXXXX"; const char * host = "apis.lab.inf3.xyz"; const int httpsPort = 443; const char * path = "/esp8266/sensors"; #define BMP_SCK 13 #define BMP_MISO 12 #define BMP_MOSI 11 #define BMP_CS 10 Adafruit_BMP280 bmp; void setup() { Serial.begin(115200); delay(500); while (!bmp.begin()) { Serial.println("Could not find a valid BMP280 sensor, check wiring!"); delay(100); } delay(1000); EEPROM.begin(512); // Connect to WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); int c = 0; while (WiFi.status() != WL_CONNECTED) { delay(250); c++; Serial.print("."); if (c > 100) { Serial.println(); Serial.println("Unable to connect. Sleeping for 60 seconds before trying again."); int sleepTime = 60 * 1e6; ESP.deepSleep(sleepTime); } } Serial.println(""); Serial.println("WiFi connected"); } void loop() { float h = bmp.readPressure(); float t = bmp.readTemperature(); while (isnan(h) || isnan(t) || t > 100 || t < -100) { h = bmp.readPressure(); t = bmp.readTemperature(); } Serial.println("Got t=" + String(t) + " and h=" + String(h) + "."); String content = "{\n"; content += "\"id\": \"" + WiFi.macAddress() + "\",\n"; content += "\"name\": \"" + String(getNodeId()) + "\",\n"; content += "\"temp\": " + String(t) + ",\n"; content += "\"pressure\": " + String(h) + "\n"; content += "}\n"; Serial.println("Sending: " + content); String response = ""; int statusCode = 0; while (statusCode < 100 || statusCode >= 500) { RestClient client = RestClient(host, httpsPort, 1); const char * contentArr = content.c_str(); statusCode = client.post(path, contentArr, &response); Serial.println("Got response code: " + String(statusCode)); Serial.println("Got response: " + response); if (statusCode < 100 || statusCode >= 500) { delay(5000); } } String sleepTimeStr; String nodeId; int sleepTime = sleepTimeStr.toInt() * 1e6; if (sleepTime < 60 * 1e6) { sleepTime = 15 * 60 * 1e6; } Serial.print("Going to sleep for "); Serial.print(sleepTime); Serial.println(" nanoseconds"); ESP.deepSleep(sleepTime); /* } else if (value == REQ_SET) { setNodeId(parameter); } */ } #define LENGTH_ID 10 void setNodeId(String value) { const char* c = value.c_str(); size_t addr = 0x0; int givenLength = strlen(c); if (givenLength >= LENGTH_ID) { givenLength = LENGTH_ID; } size_t i = 0; for (; i < givenLength; i++) { EEPROM.write(addr + i, (uint8_t) c[i]); } for (; i < LENGTH_ID; i++) { EEPROM.write(addr + i, 0); } EEPROM.commit(); } char* getNodeId() { size_t addr = 0x0; char* eepromId = new char[LENGTH_ID]; for (size_t i = 0; i < LENGTH_ID; i++) { uint8_t temp = EEPROM.read(addr + i); eepromId[i] = temp; } return eepromId; }