Last active
February 22, 2020 23:33
-
-
Save maesoser/4222c2d2b8ef7a743b18b651e9ce4fba to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <Adafruit_NeoPixel.h> | |
| #include <ESP8266WiFi.h> | |
| #include <ESP8266WebServer.h> | |
| #include <Wire.h> | |
| #include <Adafruit_Sensor.h> | |
| #include <Adafruit_BME280.h> | |
| #include <ESP8266mDNS.h> | |
| #include <ArduinoJson.h> | |
| #define SEALEVELPRESSURE_HPA (1013.25) | |
| #define PIN D5 | |
| #define N_LEDS 16 | |
| #define MDNS_HOSTNAME "lightsensor" | |
| struct RGBSetup { | |
| byte r; | |
| byte g; | |
| byte b; | |
| byte mode; | |
| }; | |
| Adafruit_BME280 bme; | |
| float temperature, humidity, pressure, altitude; | |
| const char* ssid = ""; // Enter SSID here | |
| const char* password = ""; //Enter Password here | |
| ESP8266WebServer server(80); | |
| Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, PIN, NEO_GRB + NEO_KHZ800); | |
| void setup() { | |
| pinMode(D4, OUTPUT); | |
| digitalWrite(D4, HIGH); | |
| strip.begin(); | |
| Serial.begin(115200); | |
| delay(100); | |
| bme.begin(0x76); | |
| WiFi.begin(ssid, password); | |
| while (WiFi.status() != WL_CONNECTED) { | |
| delay(1000); | |
| } | |
| Serial.print("Got IP: "); | |
| Serial.println(WiFi.localIP()); | |
| while (!MDNS.begin(MDNS_HOSTNAME)) { | |
| delay(1000); | |
| } | |
| StaticJsonBuffer<200> jsonBuffer; | |
| server.on("/metrics", HTTP_GET, handle_PromMetrics); | |
| server.on("/api", HTTP_GET, handle_getLed); | |
| server.on("/api", HTTP_POST, handle_setLed); | |
| server.onNotFound(handle_NotFound); | |
| server.begin(); | |
| } | |
| void loop() { | |
| server.handleClient(); | |
| chase(strip.Color(255, 0, 0)); // Red | |
| chase(strip.Color(0, 255, 0)); // Green | |
| chase(strip.Color(0, 0, 255)); // Blue | |
| } | |
| static void chase(uint32_t c) { | |
| for(uint16_t i=0; i<strip.numPixels()+4; i++) { | |
| strip.setPixelColor(i , c); // Draw new pixel | |
| strip.setPixelColor(i-4, 0); // Erase pixel a few steps back | |
| strip.show(); | |
| delay(25); | |
| } | |
| } | |
| void handle_PromMetrics() { | |
| temperature = bme.readTemperature(); | |
| humidity = bme.readHumidity(); | |
| pressure = bme.readPressure() / 100.0F; | |
| altitude = bme.readAltitude(SEALEVELPRESSURE_HPA); | |
| server.send(200, "text/plain", PromMetrics(temperature,humidity,pressure,altitude)); | |
| } | |
| void handle_getLed() { | |
| server.send(200, "text/plain", "not_implemented"); | |
| } | |
| void handle_setLed() { | |
| /*JsonObject& root = jsonBuffer.parseObject(json); | |
| if (!root.success()) { | |
| server.send(500, "text/plain", "ParseObject() Failed"); | |
| return; | |
| } | |
| */ | |
| //const char* sensor = root["sensor"]; | |
| //long time = root["time"]; | |
| //double latitude = root["data"][0]; | |
| //double longitude = root["data"][1]; | |
| } | |
| void handle_NotFound(){ | |
| server.send(404, "text/plain", "Not found"); | |
| } | |
| String addMetric(String input, String name, float val){ | |
| input += MDNS_HOSTNAME; | |
| input += "_" + name + " "; | |
| input += val; | |
| input += "\n"; | |
| return input; | |
| } | |
| String PromMetrics(float temperature,float humidity,float pressure,float altitude){ | |
| String ptr = ""; | |
| ptr = addMetric(ptr,"temperature", temperature); | |
| ptr = addMetric(ptr,"humidity_pcnt", humidity); | |
| ptr = addMetric(ptr,"pressure", pressure); | |
| ptr = addMetric(ptr,"altitude_meters", altitude); | |
| ptr = addMetric(ptr,"heap_free_bytes", ESP.getFreeHeap()); | |
| ptr = addMetric(ptr,"heap_fragmentation_pcnt", ESP.getHeapFragmentation()); | |
| ptr = addMetric(ptr,"heap_max_block_bytes", ESP.getMaxFreeBlockSize()); | |
| return ptr; | |
| } | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment