Der erste Sensor (BME280) am NodeMCU

Veröffentlicht von

Teil drei – der erste Sensor (BME280) am NodeMCU

Der BME280 kann den Luftdruck, die Temperatur und Luftfeuchtigkeit auslesen, er eignet sich also perfekt für eine WiFi Wetterstation.

Den  BME280 am NodeMCU anschließen

Der BME280 läuft mit 3,3V und benötigt lediglich  zwei DigitalPins. Er ist somit recht einfach am NodeMCU angeschlossen.

Anbei das Schema nachdem ich den Sensor verdrahtet habe.

Der neue Sketch für die Arduino IDE

Wie ihr sicher seht, habe ich die LED jetzt weggelassen um Pins zu sparen. Aus diesem Grund wurde der Sketch dahingehend schon angepasst.

Jetzt benötigt ihr noch die dazugehörige Bibliothek und die Adafruit Sensor Bibliothek ladet sie als .zip herunter und installiert sie über Sketch -> Bibliothek einbinden -> .ZIP-Bibliothek hinzufügen… 

Alles weitere ist schnell umgesetzt, hier der Quelltext:

/*********
 * Project: Home automation using the ESP8266 NodeMCU board
 * Name: WiediMatic
 * 
 * Version: 0.1 / 01.08.2017
 * - Connecting to the WiFi network and start a webserver
 * - Read temperature and humidity from the BME280
 * - Display the values in the webbrowser
 * 
 * For the complete project look at: http://www.robinw.de    
 *********/

// Import Section
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <ESP8266WiFi.h>

// Define Section
#define DEBUG true

// Variables
Adafruit_BME280 bme;

float h, t, p;
char temperatureString[6];
char humidityString[6];
char pressureString[7];

const char* ssid = " --ssid-- ";
const char* password = " --password-- ";
const char* deviceName = "WiediMatic";
IPAddress clientIP(192, 168, 178, 201); //the IP of the WiediMatic device
IPAddress gateway(192, 168, 178, 1); //the gateway
IPAddress subnet(255, 255, 255, 0); //the subnet mask
WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  delay(10);
  
  Wire.begin(D3, D4);
  Wire.setClock(100000);

  // Connect to WiFi
  if ( DEBUG ) {
    debug ( "" );
    debug( "Connnecting to " );
    debug( ssid );
  }

  WiFi.hostname(deviceName);
  WiFi.config(clientIP, gateway, subnet);  
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }

  if ( DEBUG ) {
    debug ( "" );
    debug( "WiFi connected" );
  }  
 
  // Start the webserver
  server.begin();
  
  if ( DEBUG ) {
    debug ( "Server started" );
  }  

  //Initialize BME280
  bme.begin(); 
}

void debug(String DebugMessage){
  Serial.println( DebugMessage );
}

void getWeather() {
  h = bme.readHumidity();
  t = bme.readTemperature();
  p = bme.readPressure()/100.0F;
  dtostrf(t, 5, 1, temperatureString);
  dtostrf(h, 5, 1, humidityString);
  dtostrf(p, 6, 1, pressureString); 
  delay(100);
}

void loop() {
  WiFiClient client = server.available();
  if (client) {
    if ( DEBUG ) {
      debug("New client");  
    }
     
    // Boolean to locate when the http request ends
    boolean blank_line = true;
    
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        
        if (c == '\n' && blank_line) {
            getWeather();
  
            client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text/html");
            client.println("Connection: close");
            client.println();
            
            client.println("<!DOCTYPE HTML>");
            client.println("<html>");
            client.println("<head><META HTTP-EQUIV=\"refresh\" CONTENT=\"15\"></head>");
            client.println("<body><h1>Welcome to WiediMatic</h1>");
            client.println("<h2>It works!</h2>");
            client.println("<h3>Temperature</h3><p>");
            client.println(temperatureString);
            client.println(" &deg;C</p><h3>Humidity</h3><p>");
            client.println(humidityString);
            client.println(" %</p><h3>Pressure</h3><p>");
            client.println(pressureString);    
            client.println("<p>Version 0.1 / 01.08.2017</p></body></html>");  
            
            break;
        }
        
        if (c == '\n') {
          // when starts reading a new line
          blank_line = true;
        }
        else if (c != '\r') {
          // when finds a character on the current line
          blank_line = false;
        }
      }
    }
      
    // closing the client connection
    delay(1);
    client.stop();
    
    if ( DEBUG ) {
      debug("Client disconnected");  
    }
  }
}
NodeMCU BME280 (31 Downloads)

In den Variablen ssid und password braucht ihr nur noch eure WLan-SSID und das WLan-Passwort eintragen. Der Sketch kann so direkt auf den NodeMCU hochgeladen werden.

Wichtig ist noch dass die I2C Adressen ja nach Breakout-Typ unterschiedlich sind. Die Bibliothek hat 0x77 als Standard. Mein BME280 Breakout hatte aber die 0x76. Die Adresse könnt ihr in der Adafruit_BME280.h ändern.

Wie geht es weiter?

Im nächsten Teil möchte ich die Luftqualität mit dem MQ-135 überwachen bzw. auslesen.

Ein Webserver mit dem NodeMCU

Ein Kommentar

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.