Ihre Wetterdaten im Internet

ESP8266 01 mit BMP280Schaltplan ESP8266 mit BMP280ams11173.3

Naja erst mal nur Temperatur und Luftdruck, aber es wird gezeigt wie man so was macht.
Später mal ersetze ich den BMP280 durch einen BME280 der kann auch noch Luftfeuchtigkeit. Auch eine CR2032 Knopfzelle ist etwas zu schlapp deswegen habe ich schnell noch einen Anschluss für ein Netzteil drangebastelt.

Hier der Sketch:

 

Der ESP8266 kann auf jedem Pin I2C. Ohne Angaben wird GPIO4 und 5 zu SCL und SDA.
Dieser hat nur GPIO0  und GPIO2. Also muss man ihm dieser Information mit Wire,begin(0,2) mitteilen.
Das steht hier nicht im Sketch sondern in der Adafruit_BMP280.cpp und muss vorm kompilieren geändert werden.
Dieser Sensor hat von Haus aus auch noch Adresse (0x076)
Das wird durch ändern von !bme.begin() in !bme.begin(0x76) erreicht.

/*
 *  Beispiel für eine Temperatur und Luftdruckmessung
 *  mit dem ESP8266 und Darstellung als HTML Seite
 *  
 */

#include <ESP8266WiFi.h>
// SCL und SDA sind beim 8266 auf GPIO5 und GPIO4
// Der ESP8266 01 hat diese Pins nicht
// Man kann mit Wire.begin(0,2) die beiden Pins des ESP01 zuweisen
// Geht hier aber nicht. Wire.begin steht in der Adafruit_BMP280.cpp
// Bitte da während des kompilierens einändern.
#include <Wire.h>

#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bme; // I2C

const char* ssid = "**IHRE SSID **";
const char* password = "** IHR WLAN PASSWORT **";

// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  delay(30);
Serial.println(F("BMP280 test"));
 
  if (!bme.begin()) {  
    Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
    while (1);}
Serial.println(F("BMP280 sensor OK !"));
 
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  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");
 
  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.println(WiFi.localIP());

   
}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
 
 
  client.flush();
 
 
  // Prepare the response
  String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n<h1>Wetter in Suttorf</h1><br><br> ";
 

  // Send the response to the client

  int pressure=(bme.readPressure());
  client.print(s);
  client.print ("Temperatur :");
  client.print(bme.readTemperature());
  client.print (" C<br>");
  client.print ("Luftdruck &nbsp;&nbsp;    :");
  client.print(pressure/100);
  client.print (" HPa<br>");
  delay(1);
  Serial.println("Client disonnected");

  // The client will actually be disconnected
  // when the function returns and 'client' object is detroyed
}

Das Programm meldet den ESP mit SSID un Passowort im Wlan an. Blaues Led flackert kurz.
Eine HTML Anfrage liefert dann Text und Daten aus dem Sketch.
Wenn am Router noch Portweiterleitung eingerichtet ist, ist der ESP auch übers Internet erreichbar. Sollte wie in in den meisten Haushalten üblich nur eine Dynamisch IP vorhanden sein, muss man sich an die entsprechenden IP Dienste wenden.

Links mitte zeigt nochmal den Schaltplan . Die Knopfzelle war zu schwach. Deswegen habe ich nochmal einen AMS1117 3,3 auf der Rückseite verlötet und ein Netztteil angeschlossen.
Knopfzellen (CR2032) sind zu schwach !

 

 

 

 

 

Wetterlogging mit Datenbank

ESP8266 Ich habe weiter gebastelt. Dazu habe ich ganz bewusst zwei Platinen verwendet. Die mit dem ESP ist nur mit Spannungsversorgung und Klemmleiste. Kann man mal was anderes mit basteln. Oder einfach mal als Standard ätzen lassen.
Meine Gedanke war zum Wetterlogin eine Datenbank sowie PHP Programme bei einem externen  Provider zu verwenden zu verwenden. So bleibt mein provates Netzwerk dicht. Das einzige was der kleine ESP macht ist meistens tief schlafen.
Aber ein mal pro Stunde wird er wach. Dann misst er die akuelle Luftfeuchte, Temperatur und den Luftdruck. Die Daten werden mit per HTML Aufruf mit Get an ein PHP Programm .

Die Spannungsversorgung sollte man erkennen und nachbauen können. Achtung der AMS1117 3,3V befindet sich auf der Rückseite der Platine. Der Ams1117 ist nicht Pinkompatibel zum Adapterboard.

Der Anschluss der Klemmen zur Sensorplatine lässt sich aus dem Sketch herleiten.

Powersupply

Bild links Spannungsversorgung

 

Dieser Sketch führt die Messung durch  und übergibt die Messdaten per Get an ein PHP Programm.

//Wetter in Suttorf

#include
#include "DHT.h"

#include
#include
#include
Adafruit_BMP280 bme; // I2C

const char* ssid = "Di´eine SSID";
const char* password = "Dein Wlanpasswort";

const char* host = "wetter.jkrumm.de"; //Web Server

#define DHTTYPE DHT11 // DHT 11
// DHT Sensor
const int DHTPin = 12;
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);

int Led = 13;// Wlan Kontrolle

 

void setup() {
dht.begin();

Serial.println(F("BMP280 test"));
if (!bme.begin()) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
while (1);
}
Serial.println(F("BMP280 sensor OK !"));
pinMode(Led, OUTPUT);

//Serial Start
Serial.begin(115200);
delay(10);

// We start by connecting to a WiFi network

Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);
WiFi.hostname("WetterinSuttorf");

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}

Serial.println("");
digitalWrite(Led, HIGH);
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}

 

void loop() {
delay(5000);
int f = dht.readHumidity();
if (isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
}
//int t=(dht.readTemperature());

int d = (bme.readPressure());
int t = (bme.readTemperature());
//t=t-3; Korrektur
Serial.print("connecting to ");
Serial.println(host);

// Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}

// We now create a URI for the request
String url = "/getwrite.php?";
url += "t=";
url += t;
url += "&f=";
url += f;
url += "&d=";
url += d;

Serial.print("Requesting URL: ");
Serial.println(url);

// This will send the request to the server
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
Serial.println("Werte an WebServer uebergeben");
delay(10);

// Read all the lines of the reply from server and print them to Serial
while (client.available()) {
String line = client.readStringUntil('\r');
Serial.print(line);
}

while (WiFi.status() != WL_CONNECTED)
{
digitalWrite(Led, 0);
WIFI_Connect();
}
digitalWrite(Led, 1);

 

 

Serial.println();
Serial.println("closing connection");
delay (5000);
startDeepSleep();
}

void WIFI_Connect()
{
digitalWrite(Led, 1);
WiFi.disconnect();
Serial.println("Booting Sketch...");
//WiFi.mode(WIFI_AP_STA);
WiFi.begin(ssid, password);
// Wait for connection
for (int i = 0; i < 25; i++)
{
if ( WiFi.status() != WL_CONNECTED ) {
delay ( 250 );
digitalWrite(Led, 0);
Serial.print ( "." );
delay ( 250 );
digitalWrite(Led, 1);
}
}

}

void startDeepSleep() {
Serial.println("Bin am einpennen...");
//ESP.deepSleep(3350000000);
ESP.deepSleep(3700000000);
}

Sensorplatine  
   

Login Form