Skip to content

Instantly share code, notes, and snippets.

@oxmix
Created January 4, 2023 03:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save oxmix/d3889eed71763c6f927787ead63578f4 to your computer and use it in GitHub Desktop.
Save oxmix/d3889eed71763c6f927787ead63578f4 to your computer and use it in GitHub Desktop.
ESP8266 sensors BME280 and TEMT6000
const char* ssid = "nameWife";
const char* password = "passWifi";
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <Wire.h>
#include <Adafruit_BME280.h>
#include <Adafruit_Sensor.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>
#define SEALEVELPRESSURE_HPA (1013.25) // set hight
Adafruit_BME280 bme; // connect I2C
#define LED 2 // on board
#define RED 15 // D8
#define GREEN 12 // D6
#define BLUE 14 // D5
int temt6000Pin = A0;
WiFiServer server(80);
String header;
HTTPClient http;
WiFiClientSecure client;
unsigned long memMillis;
const unsigned long eachPush = 10000;
void setup() {
Serial.begin(115200);
bool status;
if (!bme.begin(0x76)) { // waiting init bme
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
pinMode(LED, OUTPUT);
pinMode(RED, HIGH);
pinMode(GREEN, HIGH);
pinMode(BLUE, HIGH);
pinMode(temt6000Pin, INPUT);
client.setInsecure();
memMillis = millis();
}
void loop(){
WiFiClient client = server.available();
if (client) {
Serial.println("New Client.");
String currentLine = "";
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
header += c;
if (c == '\n') {
if (currentLine.length() == 0) {
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html ");
client.println("Connection: close");
client.println("Refresh: 30");
client.println();
client.println("<!DOCTYPE html><html>");
client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
client.println("<meta charset='UTF-8'>");
client.println("<link rel=\"icon\" href=\"data:,\">");
client.println("<style>body { text-align: center; font-family: \"Trebuchet MS\", Arial;}");
client.println("table { border-collapse: collapse; width:40%; margin-left:auto; margin-right:auto; }");
client.println("tr { border: 1px solid #ddd; padding: 12px; }");
client.println("tr:hover { background-color: #bcbcbc; }");
client.println("td { border: none; padding: 12px; }");
client.println(".sensor { color:black; font-weight: bold; padding: 1px; }");
client.println("</style></head><body><h1>ESP8266 sensors BME280 and TEMT6000</h1>");
client.println("<table><tr><td>Температура</td><td><span class=\"sensor\">");
client.println(bme.readTemperature());
client.println(" *C</span></td></tr>");
client.println("<tr><td>Давление</td><td><span class=\"sensor\">");
client.println(bme.readPressure() / 100.0F / 1.33322);
client.println(" mmHg</span></td></tr>");
client.println("<tr><td>Приблизительная высота над уровнем моря</td><td><span class=\"sensor\">");
client.println(bme.readAltitude(SEALEVELPRESSURE_HPA));
client.println(" m</span></td></tr>");
client.println("<tr><td>Влажность</td><td><span class=\"sensor\">");
client.println(bme.readHumidity());
client.println(" %</span></td></tr>");
client.println("<tr><td>Свет</td><td><span class=\"sensor\">");
client.println(analogRead(temt6000Pin) * 0.0976);
client.println(" %</span></td></tr>");
client.println("</body></html>");
client.println();
break;
} else {
currentLine = "";
}
} else if (c != '\r') {
currentLine += c;
}
}
}
header = "";
client.stop();
Serial.println("Client disconnected.");
Serial.println("");
}
if (millis() - memMillis >= eachPush) {
memMillis = millis();
sendTelemetry();
digitalWrite(LED, LOW);
delay(100);
digitalWrite(LED, HIGH);
digitalWrite(RED, 255);
digitalWrite(GREEN, 0);
digitalWrite(BLUE, 0);
delay(100);
digitalWrite(RED, 0);
digitalWrite(GREEN, 255);
digitalWrite(BLUE, 0);
delay(100);
digitalWrite(RED, 0);
digitalWrite(GREEN, 0);
digitalWrite(BLUE, 255);
delay(100);
digitalWrite(RED, 255);
digitalWrite(GREEN, 255);
digitalWrite(BLUE, 255);
delay(100);
digitalWrite(RED, 0);
digitalWrite(GREEN, 0);
digitalWrite(BLUE, 0);
digitalWrite(LED, LOW);
}
}
void sendTelemetry() {
if (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi status failed");
return;
}
const char* host = "https://domain.net/sensorsWeather";
client.connect(host, 443);
http.begin(client, host);
http.addHeader("Content-Type", "application/json");
StaticJsonDocument<200> doc;
doc["sensors"] = "BME280 and TEMT6000";
doc["tempC"] = bme.readTemperature();
doc["mmHg"] = bme.readPressure() / 100.0F / 1.33322;
doc["altitude"] = bme.readAltitude(SEALEVELPRESSURE_HPA);
doc["humidity"] = bme.readHumidity();
doc["light"] = analogRead(temt6000Pin) * 0.0976;
String requestBody;
serializeJson(doc, requestBody);
int httpResponseCode = http.POST(requestBody);
if(httpResponseCode>0){
String response = http.getString();
Serial.println(httpResponseCode);
Serial.println(response);
} else {
Serial.printf("Error occurred while sending HTTP POST: %s\n", http.errorToString(httpResponseCode).c_str());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment