A solar-powered, outdoor air quality monitor that transmits data over LoRaWAN and Bluetooth LE

Similar projects worth following
The OpenAirMonitor is a solar-powered, outdoor air quality monitor that transmits data over LoRaWAN and Bluetooth LE. It measures particulates (PM1, PM2.5 and PM10), humidity and temperature. The monitor has a STEMMA QT connector, so can be extended with other sensors.

The monitor is programmed in JavaScript over Bluetooth LE using Espruino.

Hardware: CERN Open Hardware License
Software: GPL-3.0 License
Documentation: CC BY-SA 4.0

Did you know that fossil fuel air pollution is responsible for 1 in 5 deaths worldwide? According to the World Health Organisation (WHO), air pollution is one of the biggest environmental threats to human health, alongside climate change. Both affect each other, as improving air quality can enhance climate change mitigation efforts, while reducing emissions will in turn improve air quality.

Air pollution comes in all different types and sizes:

  • Particulate matter (PM2.5 and PM10)
  • Carbon monoxide
  • Sulfur dioxide
  • Nitrogen dioxide
  • Ground-level ozone

On 22 September 2021, the WHO updated their Global Air Quality Guidelines (AQGs), adjusting almost all the AQGs levels downwards. The WHO warned that exceeding the new air quality guideline levels is associated with significant risks to health, but that at the same time, adhering to them could save millions of lives. Let's compare the 2021 WHO air pollution limits the existing limits set by the UK government:

PM10 annual mean1540
PM10 24 hour mean4550
PM2.5 annual mean525
PM2.5 24 hour mean15?
NO2 annual mean1040
NO2 hourly mean25200

Clearly there is an opportunity here to both educate ourselves on the levels of air pollution in our immediate environment, and also to inform and update local and national governments on what exactly is happening and where they should focus their efforts. Luckily measuring air pollution yourself has become a lot easier with the availability of low-cost sensors that use a laser beam and a photo-diode to measure particulate matter pollution.

There are some great open-source air quality sensors out there, like the airRohr sensor created by (previously known as Luftdaten). I built one using the instructions from their website, and have been using it for over a year. There are also relatively low-cost commercial air quality monitors like the PurpleAir. However, both the DIY and commercial varieties usually have the following shortcomings:

  • They need to be connected to a power source
  • They transmit data over WiFi, which is not available everywhere
  • The SDS011 PM sensor used by is less accurate at high humidity

It's time to redefine what a low-cost air quality monitor looks like! Let's design and build an air quality monitor that is:

  • Battery-powered, charging with a solar panel
  • Long-range wireless communication
  • Sensors that can be used in high-humidity environments


Enclosure (in development)

scad - 11.88 kB - 10/15/2021 at 10:32



OpenAirMonitor firmware

javascript - 4.36 kB - 10/15/2021 at 10:30


  • 1 × PMS7003 particulate matter sensor
  • 1 × SMA antenna
  • 1 × 3.7V LiPo battery (e.g. 6600mAh)
  • 1 × 6V solar panel
  • 1 × SHT40 temperature & humidity sensor using STEMMA QT connector

  • Working on the enclosure

    Gerrit Niezen10/26/2021 at 13:02 0 comments

    The enclosure design is slowly coming to an end. Who knew that it would be so much work making a plastic box to put something in? The idea is that this enclosure will be mounted on the bottom of the solar panel, so that only the solar panel itself (on a mounting plate) needs to be connected to a lamp post.

  • Choosing a battery charger chip

    Gerrit Niezen10/22/2021 at 09:00 0 comments

    With the current global chip shortage it can be challenging to find the right chip for your project that's actually in stock. I want to share some of my own challenges and what the options are. First up: What LiPo battery charger chips can be used with solar panels?


    I first came across Texas Instrument's BQ24074 while looking at Adafruit's Universal USB / DC / Solar LiPo charger, which replaced their earlier MCP73781-based charger. It's relatively inexpensive ($0.81) and has an input voltage of up to 10V. Unfortunately this chip was out of stock when I ordered my board for SMT assembly, so I had to consider alternatives.


    Analog Device's LT3652 is used in Sparkfun's Sunny Buddy (MPPT Solar Charger), but it's a lot more expensive (around $5) than other chips and was also out of stock at the time of ordering.

     CN3065 / CN3063

    Consonance Electronic's CN3065 is used in Seeed Studio's LiPo Rider boards, as well as many low-cost solar battery charger boards on eBay. It's even cheaper than the BQ24074 at around $0.50, and it was available in its SOP8 package version CN3063 at JLCPCB when I placed my order. While it has been working great so far, it only has an input voltage of 6V, which could cause issues if you get high peak voltages on your solar panel over an extended period of time.

  • Completed PCB design, working on the enclosure

    Gerrit Niezen10/15/2021 at 10:53 0 comments

    So what's the current state of the OpenAirMonitor? I've completed the hardware design and schematics, manufactured a rev 1 of the PCB with JLCPCB, and then made the following fixes:

    • a floating pin on the LDO that's now grounded
    • replaced the LDO with a AZ1117CR2 as the HT7333-A is underpowered.
    • I've also changed the STEMMA pins as rev 1's pins are also used for NFC
    • moved the PMS7003 connector as it wasn't correctly aligned with the sensor location

    I haven't yet ordered a rev 2, as it was easy enough to fix the rev 1 PCBs by replacing the LDO and putting a bodge wire to ground. I also found a way to use pins D9 and D10 on the MDBT42Q module by disabling NFC in the Espruino CLI:

    setTimeout(function() { 
            while(!peek32(0x4001e400)); // enable flash writing
            while(!peek32(0x4001e400)); // NFC pins as GPIO
            poke32(0x4001e504, 0);while(!peek32(0x4001e400)); // disable flash writing
    }, 1000);

     You can check if NFC is enabled on the Espruino module using:

    peek32(0x1000120c).toString(16) == "fffffffe"

    Right now I'm working on the enclosure design. You can download the OpenSCAD file from Files, but note that it's not quite yet ready for prime time. What still needs to be done:

    • adjusting the zip tie holes for holding the battery
    • making sure there's enough space for the o-ring in the lid
    • making sure there's enough space for the hex nut holes
    • checking the solar panel fit

View all 3 project logs

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates