Gas & Air Quality
Interfacing MQ 2 Gas & Air Quality with Espressif ESP32
What is the MQ 2?
MQ 2 practical reference
A widely used analog gas sensor tuned for detecting LPG, smoke, and combustible gases in DIY safety and air-quality projects.
Key specifications
- Sensing element: SnO2 (tin dioxide) semiconductor — resistance drops in the presence of combustible gases
- Operating voltage: 5 V DC (heater and sensing circuit both run continuously on 5V, no duty-cycle required)
- Detection range: 300-10,000 ppm — LPG, propane, hydrogen, methane, and smoke
- Preheat time: Usable within ~20s of power-up; full baseline stabilization takes 24-48 hours of burn-in
- Current draw: ~150 mA, dominated by the heating element running continuously
- Output: Analog voltage (AOUT) proportional to gas concentration, plus a threshold digital output (DOUT) via onboard comparator
- Interface: Analog (AOUT) — requires an ADC and a datasheet Rs/Ro curve to convert to ppm; DOUT is a simple threshold trigger
Pinout and connection notes
Heater runs constantly at 5V — unlike the MQ-7/MQ-9, the MQ-2 doesn't need a duty-cycled heating voltage; a plain, constant 5V supply is correct per its datasheet. Just budget for the ~150mA continuous draw, which is easy to underestimate if your power rail is shared with other sensors.
AOUT is a raw voltage, not ppm — converting a reading to an actual ppm figure needs the Rs/Ro resistance ratio and the datasheet's gas-response curve, plus a clean-air calibration step to establish your specific sensor's Ro baseline. Don't treat raw analogRead() values as calibrated gas concentrations.
DOUT threshold needs manual calibration — the onboard potentiometer sets the trip point for DOUT and is not accurate out of the box; adjust it in known clean air before trusting it as an alarm trigger.
Don't touch the sensing element while powered — the metal mesh cap covers an actively heated element; it gets warm during normal operation.
Expect drift and burn-in behavior — readings during the first uses after unboxing will be noisier and less accurate than after ~24-48 hours of cumulative on-time; don't calibrate against a brand-new, un-burned-in sensor.
- VCC: Power, 5V DC — also powers the internal heating element continuously
- GND: Ground
- AOUT: Analog voltage output, proportional to gas concentration — read with an ADC, not a direct ppm value
- DOUT: Digital threshold output — trips based on the onboard comparator, threshold set by the potentiometer on the module
Integration checklist
- Confirm the exact part number and breakout-board revision.
- Verify supply voltage, current demand, logic levels, and signal direction against the datasheet.
- Check controller pin assignments and bus address or interface mode against the example code.
- Power up with external loads disconnected, then test signals before full integration.
- If readings or communication fail, check power and ground first, then pin mapping, interface settings, and library initialization.
Troubleshooting and reproducibility
Record the board used, wiring, library/version, supply arrangement, and measured behavior. Use the selected board-specific wiring example as the source of truth. Never assume visually similar modules share identical voltage tolerance or pin order.
Setting Up MQ 2 with Espressif ESP32
Wiring
| Component pin | Espressif ESP32 pin | Note |
|---|---|---|
| VCC | 5V (VIN) | The heater draws ~150mA and needs the full 5V rail — don't power this from 3V3 |
| GND | GND | |
| AOUT | GPIO34 (through a voltage divider) | AOUT can swing close to 5V, above the ESP32 ADC's 3.3V limit — use a divider (e.g. 10kΩ/20kΩ) sized for a 5V source, or you risk damaging the pin over time |
| DOUT | GPIO25 (optional) | Digital threshold output — check your breakout's logic level before wiring it straight to a GPIO |
Swipe sideways to see every column →
- Don't skip the voltage divider — MQ-2's analog output isn't 3.3V-safe on its own, unlike sensors designed specifically for the ESP32.
- The ESP32's ADC is noticeably non-linear near both ends of its range; average a few samples per reading if you need better precision.
- Same burn-in and "relative not calibrated" caveats apply as on the Arduino Uno — see that board's notes on this page.
Related Components
Related Guides & Projects
MicroPython vs Arduino on ESP32: Which Should You Learn First?
An honest comparison for beginners: where MicroPython is easier, where Arduino C++ is faster, how libraries and memory differ, and how to choose based on your project instead of hype.
MicroPython ESP32 Web Server: Control an LED or Relay from Your Browser
Create a working web server with the socket module, parse requests, serve a responsive control page for an LED or a relay, keep the displayed state truthful, choose a safe relay startup state and make the server survive bad or repeated requests.
MicroPython on ESP32 and Raspberry Pi Pico W: The Complete Guide
A structured MicroPython learning path for ESP32 and Pico W. Set up your tools, control GPIO, read sensors, connect to WiFi, build web servers, publish MQTT data and make projects reliable. Start here, then follow the links by level.
boot.py vs main.py in MicroPython: What Runs, When and Why
Understand the difference between boot.py and main.py in MicroPython, startup order, Wi-Fi setup, project structure, and recovery from boot errors.