DS18B20 & Volkszähler

Erstellt am 16. Oktober 2017 von Canoxnet

Statt mit einem Raspberry Pi kann man auch mit einem Wemos D1 Mini oder vergleichbarem die ausgelesene Temperatur eines DS18B20 Temperatursensors an eine Volkszähler Instanz schicken.

Benötigte Hardware:

  • NodeMCU oder Wemos D1 Mini
  • DS18B20
  • 4,7 kOhm oder 10 kOhm Widerstand
  • Breadboard
  • Male – Female Jumper Wire oder Male -Male Jumper – Wire

Arduino Sketch:

#include <Arduino.h>
 #include <ESP8266WiFi.h>
 #include <ESP8266WiFiMulti.h>
 #include <ESP8266HTTPClient.h>
 #include <Wire.h>
 #include <SPI.h>
 #include <OneWire.h>
 #include <DallasTemperature.h>

#define SERIAL

const String host = "IP-Adresse-des-VZ";
 const unsigned int port = 80;

const String url_start = "/middleware.php/data/";
 const String url_stop = ".json?operation=add&value=";

const String uuid_temp = "UUID";

const unsigned char ONE_WIRE_BUS = D4;

OneWire oneWire(ONE_WIRE_BUS);
 DallasTemperature sensor(&oneWire);

byte maxwait = 120;

#define SEALEVELPRESSURE_HPA (1013.25)

ESP8266WiFiMulti WiFiMulti;

void setup() {
 #ifdef SERIAL
 Serial.begin(115200);
 Serial.println("BOOT");

Serial.print("Wifi...");
 #endif

sensor.begin();
 Serial.print("Anzahl Sensoren: ");
 Serial.println(sensor.getDeviceCount());

WiFiMulti.addAP("SSID", "Passwort");

#ifdef SERIAL
 Serial.println("OK");
 Serial.print("DS18B20");
 #endif

#ifdef SERIAL
 Serial.print("OK");
 #endif
 }
 bool waitWifi() {
 while((WiFiMulti.run() != WL_CONNECTED) & maxwait > 0) {
 #ifdef SERIAL
 Serial.println("Wait Wifi");
 #endif
 delay(1000);
 maxwait--;
 }

if(WiFiMulti.run() == WL_CONNECTED) return true;
 return false;
 }

void sendHttpData(String url) {
 HTTPClient http;

if(waitWifi()) {

#ifdef SERIAL
 Serial.print("GET: "); Serial.println(url);
 #endif
 http.begin(host, port, url); //HTTP
 int httpCode = http.GET();
 #ifdef SERIAL
 if(httpCode) {
 if(httpCode == 200) {
 String payload = http.getString();
 Serial.println(payload);
 }else{
 Serial.print("HTTP "); Serial.println(httpCode);
 }
 } else {
 Serial.print("[HTTP] GET... failed, no connection or no HTTP server\n");
 }
 #endif
 }else{
 #ifdef SERIAL
 Serial.print("No WiFi available\n");
 #endif
 }
 }

void loop() {

String url_temp = "";

#ifndef SERIAL
 digitalWrite(1, HIGH); //LED off
 #endif

delay(2000); //If we've just started the power might be somewhat distorted - lets wait a bit to get things setteled...

{
 sensor.requestTemperatures();
 float temperatur = sensor.getTempCByIndex(0);
 #ifdef SERIAL
 Serial.print("Temperature = ");
 Serial.println(temperatur);
 Serial.println(" *C");
 #endif
 url_temp = url_start;
 url_temp += uuid_temp;
 url_temp += url_stop;
 url_temp += (temperatur);

sendHttpData(url_temp);
 }

#ifdef SERIAL
 Serial.println("SLEEP");
 Serial.flush();
 #endif

}

Angepasst werden müssen:

  • IP-Adresse
  • WLAN Daten
  • UUID-Temp

Anzeige