Display the air quality status (like “Good”, “Poor”, etc.) on a 16×2 LCD based on the voltage output from the MQ135 sensor connected to Raspberry Pi Pico.
Buy Basic Raspberry Pi Pico Kit
Items Required:
- Raspberry Pi Pico board
- MQ135 air quality sensor module
- 16×2 I2C LCD display
- Breadboard and jumper wires
- USB Micro B cable for power and programming
- Resistors (if needed for level shifting or pull-up, depending on LCD)
Connections:
- MQ135 Sensor
- VCC → Pico VBUS Pin 40
- GND → Pico GND
- AOUT → Pico ADC0 (physical pin 31 / GPIO26)
- I2C LCD (16×2):
- VCC → Pico VBUS Pin 40
- GND → Pico GND
- SDA → Pico GP0 (pin 1)
- SCL → Pico GP1 (pin 2)


Code:
from machine import ADC, Pin, SoftI2C
from pico_i2c_lcd import I2cLcd
from time import sleep
# LCD setup
i2c = SoftI2C(sda=Pin(0), scl=Pin(1), freq=400000)
lcd = I2cLcd(i2c, 0x3f, 2, 16)
# MQ135 analog pin setup
mq135 = ADC(Pin(26)) # ADC0 (Physical pin 31)
def get_quality(voltage):
if voltage < 0.5:
return "Excellent"
elif voltage < 1.0:
return "Good"
elif voltage < 1.5:
return "Moderate"
elif voltage < 2.0:
return "Poor"
else:
return "Very Poor"
lcd.clear()
lcd.putstr("Air Quality Meter")
sleep(2)
lcd.clear()
while True:
raw = mq135.read_u16()
voltage = (raw / 65535) * 3.3
quality = get_quality(voltage)
lcd.move_to(0, 0)
lcd.putstr("Volt:{:.2f}V ".format(voltage))
lcd.move_to(0, 1)
lcd.putstr("Air: {:<11}".format(quality))
sleep(1)
Result:
When you run this code:
Line 1 of LCD shows live sensor voltage
Line 2 displays air quality like “Good”, “Poor”, etc.
Values update every second