#define PIN_LED1 12 #define PIN_LED2 13 #define PIN_LED3 15 #define PIN_LIGHT A0 #define PIN_BUTT1 14 #define PIN_BUTT2 0 #define PIN_BUTT3 2 #define DATA_FASTLED_PIN 16 #define FASTLED_ESP8266_RAW_PIN_ORDER #include #define NUM_LEDS_IN_STRIPLINE 8 CRGB ledsLine[NUM_LEDS_IN_STRIPLINE]; //include wire - Spi bus #include #include SFE_BMP180 pressureSens; struct BMP180val{ double temperature, pressure; }; //init axelerometer sensor #include #include /* Assign a unique ID to this sensor at the same time */ Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12346); //init guest sensor #include // Global Variables SparkFun_APDS9960 apds = SparkFun_APDS9960(); #include "StandData.h" StandData standData; #include #include #include #include ESP8266WebServer server(80); const char* ssid = "TP-LINK_6EF532"; const char* password = "49344059"; const char* mdnsName = "esp8266"; //Index HTML page const String IndexPage = "\ \ ESP8266 Web Server POST handling\ \ \ \

POST plain text to /postplain/ route

\
\ \

\ \ \
\ \ "; void getMain () { server.send(200, F("text/html"), IndexPage); BlinkPWRled(4, 40); } void getSensVal () { standData.LED1 = digitalRead(PIN_LED1); standData.LED2 = digitalRead(PIN_LED2); standData.LED3 = digitalRead(PIN_LED3); standData.button1State = digitalRead(PIN_BUTT1); standData.button2State = digitalRead(PIN_BUTT2); standData.button3State = digitalRead(PIN_BUTT3); standData.lightness = analogRead(PIN_LIGHT); /* BMP180val tmp = GetBMP180Val(); standData.temperature = tmp.temperature; Serial.println(standData.temperature); standData.pressure = tmp.pressure; Serial.println(standData.pressure); if(!apds.readAmbientLight(standData.ambient_light) || !apds.readRedLight(standData.red_light) || !apds.readGreenLight(standData.green_light) || !apds.readBlueLight(standData.blue_light) ) Serial.println("Error reading light values"); //for axeleration sensors_event_t event; accel.getEvent(&event); standData.acceleration_x = event.acceleration.x; standData.acceleration_y = event.acceleration.y; standData.acceleration_z = event.acceleration.z; */ for(int i = 0; i < NUM_LEDS_IN_STRIPLINE; i++) standData.stripLedsColors[i] = ledsLine[i]; String jsonMassage = standData.GetJSONString(); server.send(200, F("text/plain"), jsonMassage); BlinkPWRled(4, 40); } void postSensValue() { if (server.method() != HTTP_POST) { server.send(405, "text/plain", "Method Not Allowed"); } else { server.send(200, "text/plain", "POST body was:\n" + server.arg("plain")); String json = server.arg("plain"); Serial.print("args : "); Serial.println(json); StaticJsonDocument<700> jsonDocument; deserializeJson(jsonDocument, json); standData.LED1 = jsonDocument["LED1"]; digitalWrite(PIN_LED1, standData.LED1); standData.LED2 = jsonDocument["LED2"]; digitalWrite(PIN_LED2, standData.LED2); standData.LED3 = jsonDocument["LED3"]; digitalWrite(PIN_LED3, standData.LED3); for(int i = 0 ; i < NUM_LEDS_IN_STRIPLINE; i++) { String nameLeds = "leds" + String(i+1); JsonObject obj_led = jsonDocument[nameLeds]; Serial.println("Json object is; "); Serial.println(nameLeds); standData.stripLedsColors[i].r = obj_led["red"]; standData.stripLedsColors[i].b = obj_led["blue"]; standData.stripLedsColors[i].g = obj_led["green"]; Serial.println(standData.stripLedsColors[i].b); Serial.println(standData.stripLedsColors[i].r); Serial.println(standData.stripLedsColors[i].g); } //show a new line colors for(int i = 0; i < NUM_LEDS_IN_STRIPLINE; i++) ledsLine[i] = standData.stripLedsColors[i]; FastLED.show(); } BlinkPWRled(4, 40); } // Define routing void restServerRouting() { //return HTML page server.on("/", HTTP_GET, getMain); //return JSON data value representation server.on(F("/sensval"), HTTP_GET, getSensVal); server.on(F("/hello"), HTTP_GET, hallo); //get JSON value for parsing //return actual data value (sens and LEDs) server.on("/postvalue", HTTP_POST, postSensValue); } void hallo() { server.send(200, "text/plain", "Hallo"); BlinkPWRled(4, 40); } // Manage not found URL void handleNotFound() { String message = "File Not Found\n\n"; message += "URI: "; message += server.uri(); message += "\nMethod: "; message += (server.method() == HTTP_GET) ? "GET" : "POST"; message += "\nArguments: "; message += server.args(); message += "\n"; for (uint8_t i = 0; i < server.args(); i++) { message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; } server.send(404, "text/plain", message); Serial.println("error query from client"); Serial.println(millis()); BlinkPWRled(4, 40); } void writeLog(){ static unsigned long t_in = 0; static const int decay_sec = 2; //write log each if(t_in + decay_sec * 1000 < millis()) { t_in = millis(); Serial.print("Log time: "); Serial.print(t_in / 1000 /60); Serial.print(":"); Serial.println(t_in / 1000 % 60); } } void LedAlarmBlink() { while(1) { digitalWrite(PIN_LED3, !digitalRead(PIN_LED1)); delay(400); } } BMP180val GetBMP180Val(){ BMP180val tmp; char status; status = pressureSens.startTemperature(); if (status != 0) { delay(status); status = pressureSens.getTemperature(tmp.temperature); if (status != 0) { status = pressureSens.startPressure(3); if (status != 0) { delay(status); status = pressureSens.getPressure(tmp.pressure, tmp.temperature); if (status == 0) Serial.println("error retrieving pressure measurement\n"); } else Serial.println("error starting pressure measurement\n"); } else Serial.println("error retrieving temperature measurement\n"); } else Serial.println("error starting temperature measurement\n"); return tmp; } void BlinkPWRled(int blinkNum, int decay) { if(blinkNum < 2) blinkNum = 2; for(int i = 0; i < blinkNum; i++) { digitalWrite(PIN_LED3, 1); delay(decay); digitalWrite(PIN_LED3, 0); delay(decay); } } void setup(void) { pinMode(PIN_LED3, OUTPUT); BlinkPWRled(5, 50); Serial.begin(115200); while (!Serial); Serial.println("Serial Start"); BlinkPWRled(2, 40); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); Serial.println("Start connnect"); while (WiFi.status() != WL_CONNECTED) { delay(50); Serial.print("."); } BlinkPWRled(4, 100); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); // Activate mDNS this is used to be able to connect to the server // with local DNS hostmane esp8266.local if (MDNS.begin("esp8266")) Serial.println("MDNS responder started"); MDNS.addService("http", "tcp", 80); restServerRouting(); // Set not found response server.onNotFound(handleNotFound); server.begin(); Serial.println("HTTP server started"); BlinkPWRled(2, 300); //////SENS INIT///// pinMode(PIN_LED1, OUTPUT); pinMode(PIN_LED2, OUTPUT); pinMode(PIN_LED3, OUTPUT); pinMode(PIN_BUTT1, INPUT_PULLUP); pinMode(PIN_BUTT2, INPUT_PULLUP); pinMode(PIN_BUTT3, INPUT_PULLUP); //TODO uncomment this! /* //Led strip init FastLED.addLeds(ledsLine, NUM_LEDS_IN_STRIPLINE); //global lightness FastLED.setBrightness(64); /* CRGB color = CRGB(r, g, b); CHSV color = CHSV(h, s, v); ledsLine[i] = CRGB::Red; */ /* //pressure init if (!pressureSens.begin()) { // Oops, something went wrong, this is usually a connection problem, // see the comments at the top of this sketch for the proper connections. Serial.println("BMP180 init fail (disconnected?)\n\n"); LedAlarmBlink(); } //axeleration Sens init if(!accel.begin()) { Serial.println("Ooops, no ADXL345 detected ... Check your wiring!"); LedAlarmBlink(); } accel.setRange(ADXL345_RANGE_16_G); //Guest sensor init if ( !apds.init() ) { Serial.println(F("Something went wrong during APDS-9960 init!")); LedAlarmBlink(); } // Start running the APDS-9960 light sensor (no interrupts) if ( !apds.enableLightSensor(false) ) { Serial.println(F("Something went wrong during light sensor init!")); LedAlarmBlink(); } // Wait for initialization and calibration to finish digitalWrite(PIN_LED3, 1); Serial.println("Setup continue"); */ } void loop(void) { server.handleClient(); MDNS.update(); writeLog(); }