Firmware 3.1.1 Released

We are just doing a soft release of the new 3.1.1 release.

It is available here:

If you get a blank display after flashing see the comment below.

Please comment if you have any questions or find anything not working as expected. I’d say straight forward bugs directly as GitHub issues, more general discussions here.

Version 3.1.1 Release

New features:

  • Over the air (OTA) updates. New versions of the firmware will be automatically downloaded and installed.
  • Added noxLearningOffset and tvocLearningOffset configuration for changing the behavior of the SGP41 sensor.
  • Added offline mode.
  • Added brightness settings for day/night for LED bar and display. In case display is off after flashing, please adjust it on our dashboard Place Settings.
  • Added platform I/O compatability.
  • Moved all dependent libraries into project structure.
  • Added docs folder with local API documentation
  • Add ‘Prevent Connection to AirGradient Server’ checkbox to WiFi Manager to not allow any connection with the AirGradient cloud. Only use if you do not want to access the AirGradient dashboard and if you do not want to share your outdoor data with openAQ. All local configurations are still possible even with using the AirGradient cloud.
  • Many bug fixes.

Breaking API Change: Temperature and humidity correction

Moved temperature and humidity correction to separate properties called atmp_compensated and rhum_compensated. As a result atmp and rhum properties do not contain compensated values anymore but the raw values measured. This only affects AirGradient Open Air outdoor models. 3rd party integrations like ESPHome or openHAB need to be updated. Sorry for the inconvenience!

The reason for this change was that we had a mix of raw values from the sensor modules and corrected values. We foresee that we need to develop a number of additional correction values e.g. for PM and probably also regularly adjust and improve these algorithms. So having them in the firmware makes this very difficult and handling it server side much easier.

Flashing Instructions

Important. Please follow these steps for flashing only. If you only want to see debug messages and logs of the monitor see the instructions for logging:

  1. Push the button on the PCB and keep it pushed
  2. Plug in the USB C cable
  3. Release the button. If you do not do this, the board will not get into the flash mode.
  4. Press the blue button
  5. Select the serial port your monitor is connected to. It is typically called “USB JTAG / Serial Debug”
  6. Follow the instructions for flashing
  7. After the flashing is complete, restart the monitor by unplugging the USB C cable (and plugging it back in)

Logging Instructions

Follow below to see debug messages and logs of the monitor:

  1. Plug in the USB C cable
  2. Press the blue button
  3. Select the serial port your monitor is connected to. It is typically called “USB JTAG / Serial Debug”
  4. Click on “Logs & Console”
  5. Click on “Reset Device” to reboot the monitor

minor typos report, hope you don’t mind:

Title of this thread: Firmeare

On the Firmwares page linked:

New firmware version that runs on both the AirGradieny …

I flashed my I-9PSL here and have two findings:

  1. It didn’t loose the wifi credentials. Nice!
  2. The display didn’t show anything after the boot sequence. I found displayBrightness: 0 by curling /config on the device, but there doesn’t seem to be a way to control this in the airgradient dashboard. Setting it via curl works, but I also had to set configurationControl to local to keep it from resetting.

2 doesn’t seem to be a firmware issue, so I’m only reporting it here.

Brightness can be set here:

Can you please let me know what values you have there?

Fixed. Thanks for letting me know.

I think I understand now, Currently we put the display into a night mode by default after 8pm. I guess its night time on your end. This is obviously confusing as a default and we will change that.

I have installed the firmware. The screen is however completely black.

Edit : I get that the brightness was adjusted to 0% for night time, but that’s not a good idea. It initially made me think the screen had died! Maybe 25% could be a nice compromise?

1 Like

This is the night mode I mentioned above,
Please go to:

Then change the following setting from:




and click SAVE

This behaviour is totally confusing and we will change the default to be just dimmed but not completely off.

1 Like

Yeah I understand that now. As an aside, the brightness scaling is fairly odd. The brightness drops very slowly with the scaler to the point that 1% is still quite bright. It doesn’t correspond at all to the preview images.

I would HIGHLY recommend not enabling a night mode by default at all, but let it be an end user decision. I expect you would be flooded with people reporting their devices as broken unnecessarily.
Display went dark and LED at low brightness · Issue #141 · airgradienthq/arduino (

This is also a very difficult setting to find. I spent 5+ minutes looking through all of the options in the Dashboard and couldn’t find it. Using your link I was able to find it, but not intuitive at all. I would expect it to be a per-device setting, as maybe I want it on all the time in the Livingroom, but would want it to dim in a bedroom.

1 Like

Oh, I was expecting to find it where the LED bar mode setting was. I didn’t think it would be under places.

The existing day/night settings seem ok now that I know where to find them.

I will probably just leave the display on all the time. I already have a pretty dark plastic filter that makes the display ok for my bedroom.

1 Like

Day and Night brightness settings are good, but are they really the most important display change needed? How about letting the display bar TVOC value? Maybe even better, would be a way to tell, from 6 feet away, “How Good Is The Air In This Room?” Mine has one green dot which doesn’t tell me much of anything. There are 11 LEDs. Why can’t 3 display PM2.5, another 3 display CO2, and 3 more display TVOC, with one dark LED between the 3 readings? Maybe each group of 3 LEDs could be Green, Yellow, or Red, with 1, 2 or 3 LEDs to subdivide the color. One green LED is best, 3 red LEDs is the worst. Repeat that for PM2.5, CO2 and TVOC. Yes this is on the OLED, but it’s SO SMALL and almost imposible to read.

Thank you for this update, the display brightness adjustment is a great addition that was sorely needed!

However, the implementation is really unfortunate… This option should absolutely be a per-device setting, or at least per-location, per-group, anything but “global”!

Right now, the “LED Mode” option which allows turning the lights on and off is there, and the display on/off should be right next to it:

Aside from that, a couple of issues:

  1. As pointed out above, the brightness setting doesn’t really work properly (the actual display does not dim enough even at 1% and looks nothing like the preview)
  2. The “Day & Night Time” option doesn’t make much sense. First of all, “day” and “night” times vary, well, daily; a better guide would be “Sun Rise” and “Sun Set”, which of course would have to be determined automatically based on the specified location; and, again, need to be a per-device setting. Ideally, there should also be an option to disable the two settings and just one permanent one – I think for a lot of people, the use of this is in locations such as the bedroom, and that one can be “dim” permanently, while other AirGradients around the house can stay “bright” permanently.

As others have mentioned, there’s currently no way to navigate to this page from the standard app or web page. Please fix that.
Secondly: Please add a Day/Night time option that’s based on sunrise/sunset where location is given.
Lastly: These should be per-device settings.
Thank you!

1 Like

The day/night is good, but as others have said, it would be nice if it were per device. I have one in the kitchen where I want the display on all the time, and one in my child’s room I want the display off at night. I would also like to have a second “night” period for when they nap during the day too. At least now I only have to turn it off and on once a day.

Many thanks for all the feedback. Please keep it coming.
This is extremely helpful and I expect a quick release of 3.1.2 that will already address some of these.


Now that OTA updates are going to be a thing, here are a few requests:

  1. A way to view the firmware version on the Dashboard

  2. A way to force an OTA update to the device via the Dashboard

Side questions: Is there resiliency built in during the update process? What happens if there is power loss or some other issue during the update process? Are there system A/B partitions?

Many thanks!

1 Like

Yes. In the next update the fw version will be reported to the dashboard. There is also resilience built into the process with A B partitions and it should be able to recover from failed OTAs.


please update package for Arduino IDE, latest published version is 3.1.0-beta.1

1 Like