Arduino NodeMCU – Reed Magnet als Gaszähler

NodeMCU

somit der Verbrauch gezählt werden. Dazu benötigt man ein Arduino Board z.B. NodeMCU und einen Reed-Magnet.
Zusammen mit den Wago-Klemmen und Kabeln kann man das Ganze wie abgebildet zusammenbasteln. Die beiden Kabel werden an D2 und GND angeschlossen. Ein zusätzlicher Widerstand wird nicht benötigt. Hier der entsprechende Code:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <PubSubClient.h>

const char* ssid = "WLANSSID";
const char* password = "TOLLESPASSWORT";

const char* mqttServer = "IP-Adresse";
const int mqttPort = PORT;
const char* mqttUser = "MQTTUSER";
const char* mqttPassword = "MQTTPASSWORT";

int connected_wlan = 0;
int connected_mqtt = 0;
int counttry_mqtt = 0;

WiFiClient espClient;
PubSubClient client(espClient);

const int REED_PIN = D2;

void setup() {
  Serial.begin(9600);//sets the baud rate

  int counttry_wlan = 0;
  int counttry_mqtt = 0;
  
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED && counttry_wlan < 4) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
    counttry_wlan++;
  }
  
  if(WiFi.status() == WL_CONNECTED){
      Serial.println("connected_wlan to the WiFi network");

      connected_wlan = 1;
 
  }else{
     Serial.println("go to sleep 2");
  }
  
  client.setServer(mqttServer, mqttPort);

  while (!client.connected() && connected_mqtt < 4) {
    Serial.println("Connecting to MQTT...");

    if (client.connect("ESP8266Client", mqttUser, mqttPassword )) {
 
      Serial.println("connected_mqtt");
      connected_mqtt = 1;
 
    } else {
 
      Serial.print("failed with state ");
      Serial.print(client.state());
      counttry_mqtt++;
      delay(2000);     
    }
  }

  pinMode(REED_PIN, INPUT_PULLUP);
}

void loop()
{  
 
  if (digitalRead(REED_PIN) == LOW) {

    if(client.state() != 0){
      client.connect("ESP8266Client", mqttUser, mqttPassword );
    }
    client.publish("/wirtschaftsraum/gas", "1");
  }
  delay(200);
}