Den Kohlenmonoxid Sensor MQ-7 verwende ich als einen einfachen Rauchmelder. Dazu wird der GND-PIN und der VCC wie gehabt mit dem Nodemcu verbunden. Den AO-Pin des Sensors habe ich mit dem AO-Pin des Boards verbunden. Die Stromversorgung erfolgt diesmal per USB-Kabel.

Und dann konnte es schon mit der Programmierung los gehen. Besonderheit an dem Sensor ist, er muss sich zunächst erwärmen um entsprechend zu funktionieren.

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

#define MQ7 A0
float value;

const char* ssid = "TOLLESSID";
const char* password = "SICHERESPASSWORT";

const char* mqttServer = "SERVERHOST";
const int mqttPort = 1883;
const char* mqttUser = "YourMqttUser";
const char* mqttPassword = "YourMqttUserPassword";

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

char valueC1String[8];

WiFiClient espClient;
PubSubClient client(espClient);

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");
  }
}

void loop()
{  
  analogWrite(MQ7, HIGH); // HIGH = 255
  delay(60000);
  analogWrite(MQ7, 71.4);
  delay(90000);

  analogWrite(MQ7, HIGH); 
  delay(50); 
  value = analogRead(MQ7);

  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);     
    }
  }  

  if(connected_mqtt == 0){
     Serial.println("go to sleep 1");
  }
  dtostrf(value, 2, 2, valueC1String);
  
  Serial.println(valueC1String);
  client.publish("/raum/smoke", valueC1String);
    
  delay(1000);
}
(Diese Seite enthält Affiliate-Links - Datenschutz)