Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Gartenautomation
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Deutsch
  • English
Menu

Programmieren mit MicroPython #8: Gas Sensor MQ-9 am ESP32 betreiben

Posted on 13. Juli 20208. März 2024 by Stefan Draeger

In diesem Beitrag möchte ich dir zeigen, wie du den Gas Sensor MQ-9 am ESP32 mit MicroPython programmieren und auslesen kannst. 

Diesen Sensor habe ich bereits für den Arduino im gleichnamigen Beitrag Arduino Lektion #112: Sensor MQ-9 für Kohlenmonoxid und entflammbare Gase vorgestellt. In diesem Beitrag jedoch gehe ich darauf ein wie dieser mit der Sprache MicroPython am ESP32 programmiert und betrieben wird.

Gas Sensor MQ-9
Gas Sensor MQ-9
Gas Sensor MQ-9 - Rückseite
Gas Sensor MQ-9 – Rückseite

  • Bezug
  • Technische Daten des Gas Sensors MQ-9
  • Aufbau & Schaltung
    • Pinout des ESP32
    • Stromversorung
  • Programmieren des MQ-9 Gas Sensors mit MicroPython
  • schreiben der Daten in eine CSV Datei
    • Video

Bezug

Diesen Sensor habe ich über ebay.de für knapp 4,5 € inkl. Versandkosten* erstanden. 

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Technische Daten des Gas Sensors MQ-9

  • Betriebsspannung 5V
  • Heizwiderstand 31 Ω  ± 3 Ω
  • Stromaufnahme des Heizelements ≤ 180mA
  • Heizspannung 5V ± 0,1V / 1,5V ± 0,1V
  • Heizenergieleistung max. 350 mW
  • Genauigkeit ≥ 3 %
  • Antwortzeit ≤ 1sek.
  • Ansprechzeit nach dem Einschalten ≤ 30sek.

Aufbau & Schaltung

Die Platine des Gas Sensors MQ-9 verfügt über 4 Pins welche wie folgt mit dem ESP32 verbunden werden.

Sensor MQ-9ESP32
VCC5V von externem Power Shield
GNDG
DOGPIO 16
AOGPIO 0
Aufbau der Schaltung - Gas Sensor MQ-9 am ESP32
Aufbau der Schaltung – Gas Sensor MQ-9 am ESP32

Pinout des ESP32

Der ESP32 verfügt nicht an jedem GPIO Pin über die Möglichkeit einen analogen Sensor zu lesen. In der nachfolgenden Grafik sind die GPIO Pins für das lesen von analogen Sensoren mit der Beschriftung „A2:n“ bzw „A1:n“ versehen.

Pinout des Microcontrollers ESP32 - LOLIN32
Pinout des Microcontrollers ESP32 – LOLIN32

Stromversorung

Das ESP32 Board verfügt nur über einen 3V Pin somit müssen wir in diesem Fall eine externe Stromversorgung wählen. Da ich den ESP32 auf einem 400 Pin Breadboard gesteckt habe kann ich ein passendes Power Shield für ein Breadboard verwenden.

Power Shield für ein 400 / 720 Pin Breadboard
Power Shield für ein 400 / 720 Pin Breadboard

Programmieren des MQ-9 Gas Sensors mit MicroPython

Damit wir die Daten unverfälscht lesen können müssen wir zunächst den Sensor in der aktuellen Umgebung kalibrieren. 

from machine import Pin, ADC #Bibliothek zum auslesen von analogen Werten
from time import sleep #importieren der Funktion sleep aus dem Modul time

#der GPIO Pin 34 als analogen Eingang verwenden
mq9 = ADC(Pin(34))

#globale Variable
R0 = 0

print("calibration")
sensorValue = 0

#Schleife von 1 bis 100
for value in range(1,100):
  sensorValue = sensorValue + mq9.read()

#berechnen des Durchschnittwertes
sensorValue = sensorValue / 100.00

sensor_volt = (sensorValue / 1024) * 5.0
RS_air = (5.0 - sensor_volt) / sensor_volt
R0 = RS_air/9.9 #der Wert 9.9 wurde aus dem Datenblatt zum Gas Sensor MQ-9 entnommen

#Beginn der Endlosschleife
while(1):
  #lesen des aktuellen analogen Wertes
  sensorValue = mq9.read()
  sensor_volt = (sensorValue / 1024)  *  5.0
  RS_gas = (5.0 - sensor_volt) / sensor_volt
  ratio = RS_gas / R0
  
  #Ausgabe der Messwerte
  print("sensorVolt: "+ str(sensor_volt))
  print("RS_ration: " + str(RS_gas))
  print("Rs/R0: "+ str(ratio))
  
  #eine Pause von 1,5 Sekunden
  sleep(1.5)

Es ist wichtig das die externe Stromversorgung VOR dem ausführen des Programmes aktiviert wird denn sonst gibt es die Fehlermeldung „Division by Zero“.

In dem oben gezeigten Programm werden die Daten in die Konsole mit dem Befehl „print“ geschrieben. 

IDE upyCraft - Gas Sensor MQ-9
IDE upyCraft – Gas Sensor MQ-9

schreiben der Daten in eine CSV Datei

In diesem Abschnitt möchte ich dir nun zeigen wie du diese Daten in eine CSV Datei schreiben kannst. Die Datei können wir dann später mit zbsp. Microsoft Excel öffnen und in Diagramme visualisieren.

Für die Programmierung des ESP32s nutze ich die Entwicklungsumgebung upyCraft diese ist kostenfrei erhältlich und hat einen sehr guten Funktionsumfang jedoch muss man ein paar Abstriche machen einer davon ist dass diese Anwendung nur *.py, *.txt und *.json Dateien öffnen kann. Somit müssen wir unsere CSV Datei als *.txt Datei abspeichern.

from machine import Pin, ADC
from time import sleep

mq9 = ADC(Pin(34))

R0 = 0

print("calibration")
sensorValue = 0

for value in range(1,100):
  sensorValue = sensorValue + mq9.read()
  
sensorValue = sensorValue / 100.00
sensor_volt = (sensorValue / 1024) * 5.0
RS_air = (5.0 - sensor_volt) / sensor_volt
R0 = RS_air/9.9

#Datei mq9_data.txt anlegen und öffnen zum schreiben
#bereits vorhandene Daten werden überschrieben
#Wenn neue Daten angehängt werden sollen, dann muss
#der Parameter 'w' durch 'a' (append) ausgetauscht werden.
index = 0
with open('mq9_data.txt','w') as file:
  file.write(';sensor_volt;RS_gas;ratio\n')
  while(1):
    index = index + 1
    sensorValue = mq9.read()
    sensor_volt = (sensorValue / 1024)  *  5.0
    RS_gas = (5.0 - sensor_volt) / sensor_volt
    ratio = RS_gas / R0
    #schreiben der Daten in die Datei
    file.write(str(index)+';'+str(sensor_volt).replace('.',',')+';'+str(RS_gas).replace('.',',')+';'+str(ratio).replace('.',',')+'\n')
    #einen Punkt auf der Konsole ausgeben
    print('.', end='')
    #eine kleine Pause von 1,5 Sekunden
    sleep(1.5)

Video

Sollte das Video etwas verschwommen sein, so stelle die Qualität auf „1080P“.

ESP32 Daten des Gas Sensors MQ-9 sammeln und in Microsoft Excel visualisieren
Dieses Video auf YouTube ansehen.

4 thoughts on “Programmieren mit MicroPython #8: Gas Sensor MQ-9 am ESP32 betreiben”

  1. Fanmion sagt:
    11. Juli 2023 um 14:44 Uhr

    Hi,
    schöne Anleitung! ich habe da mal eine Frage: Welche Einheit haben die gemessenen Werte? mV oder V?

    LG
    Fanmion

    Antworten
    1. Stefan Draeger sagt:
      12. Juli 2023 um 07:03 Uhr

      Hi,

      die Frage nach der Einheit ist gut, da bin ich auch nicht abschließend fündig geworden.
      Das ist eher ein berechneter Index. Da sich jedoch dieser Wert mit der Zeit ändert.
      (Der Sensor heizt sich auf und dadurch ändert sich der Messwert.)

      Gruß, Stefan

      Antworten
  2. Thomas sagt:
    28. Dezember 2023 um 18:54 Uhr

    Hi, super Anleitung, die hilft mir bei meinem PicoPi Projekt.
    Aber eine Frage hätte ich:

    Der MQ-9 kann auch mit 3.3 Volt betrieben werden.

    Kann ich dann einfach die 5.0 gegen 3.3 im Code tauschen?
    Also:
    sensor_volt = (sensorValue / 1024) * 3.3
    RS_air = (3.3 – sensor_volt) / sensor_volt

    sensor_volt = (sensorValue / 1024) * 3.3
    RS_gas = (3.3 – sensor_volt) / sensor_volt

    Antworten
    1. Stefan Draeger sagt:
      28. Dezember 2023 um 18:56 Uhr

      Hi Thomas,

      nicht nur kann, sondern in deinem Fall musst du das auch.
      Jedoch musst du mal nachmessen, ob dann noch die analogen Werte passen, denn diese sind ja abhängig von der Spannung. D.h. 5V sind 1023 und 0V sind 0.

      Gruß,
      Stefan

      Antworten

Schreibe einen Kommentar Antworten abbrechen

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

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen
Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

link zu Fabook
link zu LinkedIn
link zu YouTube
link zu TikTok
link zu Pinterest
link zu Instagram
  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}