Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

MakAir Firmware

Firmware Lint Firmware Unit Tests


Version Last Changelog Ready?
V1.2.x First release version on Hardware V1 ✅
V1.3.x Add Hardware V2 support ✅
V1.5.x Rework ventilation algorithms (pressure control, alarms, code quality) ✅
V3.0.x Add Hardware V3 support, support for triggers, add mass flow meter ✅
V4.0.x Protocol V2 with ventilation modes, drop Hardware V1 & V2 support ✅
V4.1.x End-of-line test and fatal errors on the UI ✅

For a full history of all minor versions, as well as details of all changes, see

⚛️ Latest Improvements

A bleeding edge firmware version is available on the dev branch, which contains our latest improvements. This firmware version might still be work in progress and thus might not be suitable for production use.

⚠️ Note that the master branch may not contain the latest firmware version. It might not work with the latest version of makair-control-ui. In this case, please use the dev branch instead.


Pre-compiled binaries are available in the Releases section.


Code documentation can be found there.

How To Build?

First, make sure arduino-cli is installed on your system. The supported version is 0.9.0. Newer versions are known to cause issues with compiling the firmware code.

In order to setup your environment and build the code, please follow the following commands (for MacOS):

  1. brew install arduino-cli
  2. arduino-cli config init --additional-urls
  3. arduino-cli core update-index
  4. arduino-cli core install STMicroelectronics:stm32@2.0.0
  5. arduino-cli lib install LiquidCrystal@1.0.7 && arduino-cli lib install OneButton@1.5.0 && arduino-cli lib install CRC32@2.0.0

Then, compile the project:

arduino-cli compile --fqbn STMicroelectronics:stm32:Nucleo_64:opt=o3std,pnum=NUCLEO_F411RE --verbose srcs/respirator.cpp --output builds/respirator-production

How To Flash?

In order to flash the firmware that you just built using the instructions above:

  1. Plug your ST-Link programmer to the motherboard, and switch the motherboard to flash mode (switch position to flash mode on the motherboard);
  2. Plug the ST-Link programmer to your computer, over USB, and fetch its device name via the arduino-cli board list command (we will call it {SERIAL_PORT});
  3. Make sure that STM32CubeProgrammer is installed on your computer, and run:
arduino-cli upload --port {SERIAL_PORT} --fqbn STMicroelectronics:stm32:Nucleo_64:pnum=NUCLEO_F411RE,upload_method=swdMethod --input builds/respirator-production

Make sure to replace {SERIAL_PORT} with your serial port, which should begin with /dev/.


A few scripts are available, eg. to automate repeated manual actions:

  1. Compile & Flash: ./scripts/ (compiles firmware and flashes it over the plugged STM32 programmer);
  2. Compile Only: ./scripts/ (compiles firmware, useful to check for code mistakes);

Some specialized scripts are available, eg. that target older hardwares:

  1. Compile & DFU (HW3): ./scripts/ (compiles firmware and flashes it to Hardware V3);


The configuration options can be found in the following files: