コマンドラインからAirGradient ONEにファームウェアを書き込む
原文は Michael Lynch により に公開されました。 このブログを購読する
自宅の空気質を測るために、室内用空気質モニターのAirGradient ONEを2台購入しました。AirGradientのデバイスはオープンソースなので、独自のカスタムファームウェアを書き込んで、データをAirGradient独自のクラウドダッシュボードに送るのではなく、ローカルで収集することができます。

仕事部屋に置いたAirGradient ONEでCO2や汚染物質を測定しています。
ファームウェアを書き込むための既存のドキュメントでは、ごつくて扱いづらいGUIアプリケーションであるArduino IDEを使う必要があります。

AirGradient ONEをフラッシュするための既存の手順は、扱いづらいGUIアプリケーションであるArduino IDEに依存しています。
コマンドラインでAirGradientデバイスをフラッシュする手順が見つからず、方法を突き止めるのに数時間かかってしまったので、以下にその手順をまとめておきます。
余談:AirGradientが持て囃される理由がよくわからない
フォーラムでAirGradientの話題を見かけるたびに、みんな製品に興奮しているように見えます。個人的にはAirGradient ONEは可もなく不可もなくという印象です。ソフトウェアは非常にバグが多く、ドキュメントも乏しい。ただ、オープンソースで完成品の空気質モニターを販売している会社は、今のところAirGradientしか見つからなかったので、2台目も購入しました。
何年もの間、AirGradientはAirGradient ONEにソフトウェアを書き込む手順を公開しようともしませんでした。私は次のブログ記事からやり方を学びました。
- “Monitoring my home’s air quality (CO2, PM2.5, Temp/Humidity) with AirGradient’s DIY sensor” by Jeff Geerling
- “AirGradient ONE Kit Review – An open-source indoor air quality monitor” by CNX Software
今年になってようやくAirGradientは公式の書き込み手順を公開しましたが、まだ少し見つけにくい場所にあります。
環境
この手順はDebian 13.0で検証しましたが、Debian/Ubuntu系のシステムであればどれでも動くはずです。
パッケージのインストール
まず、必要な基本パッケージをインストールします。
sudo apt update && \
sudo apt install -y \
git \
curl \
python3 \
python3-serialarduino-cliのインストール
次に、Arduino CLIツールをインストールします。
ARDUINO_CLI_VERSION='1.2.2'
ARDUINO_BIN_DIR="${HOME}/.local/arduino-cli"
mkdir -p "${ARDUINO_BIN_DIR}" && \
curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh \
| BINDIR="${ARDUINO_BIN_DIR}" sh -s "${ARDUINO_CLI_VERSION}"
export PATH="${PATH}:${ARDUINO_BIN_DIR}"インストールが成功したか確認するため、arduino-cliのバージョンを表示します。
$ arduino-cli version
arduino-cli Version: 1.2.2 Commit: c11b9dd5 Date: 2025-04-22T13:51:01ZESP32ライブラリのダウンロード
AirGradient ONEはESP32用のArduinoライブラリに依存しています。執筆時点では、AirGradientはまだArduinoの3.xバージョンに対応していないため、最新の安定版である2.xを使う必要があります。
ARDUINO_ESP32_VERSION='2.0.17'
arduino-cli config init \
--additional-urls https://espressif.github.io/arduino-esp32/package_esp32_index.json && \
arduino-cli core install "esp32:esp32@${ARDUINO_ESP32_VERSION}"デバイスのパスを確認する
次に、AirGradient ONEのデバイスパスを確認する必要があります。デバイスパスを見つける最も簡単な方法は次のとおりです。
dmesg --followを実行する- AirGradient ONEをUSBでシステムに接続する
dmesgの出力にデバイスパスが表示されるのを確認する
私の環境では次のように表示されました。
$ sudo dmesg --follow
[517021.978880] usb 1-4: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.01
[517021.978884] usb 1-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[517021.978894] usb 1-4: Product: USB JTAG/serial debug unit
[517021.978896] usb 1-4: Manufacturer: Espressif
[517021.978898] usb 1-4: SerialNumber: D8:3B:DA:1A:EE:C4
[517022.017678] cdc_acm 1-4:1.0: ttyACM0: USB ACM device
^^^^^^^
Path nameこの出力から、私の環境でのAirGradient ONEのパスは/dev/ttyACM0であることがわかります。
AIRGRADIENT_PATH='/dev/ttyACM0'デバイスパスを書き込み可能にする
次に、AirGradientのデバイスパスに書き込めるようにします。
sudo chmod a+rw "${AIRGRADIENT_PATH}"AirGradientのパスは、このようなパーミッションになっているはずです。
$ ls -l "${AIRGRADIENT_PATH}"
crw-rw-rw- 1 root dialout 166, 0 Aug 10 10:34 /dev/ttyACM0
^^^^^^^^また、パスに書き込めるように、自分自身をdialoutグループに追加します。
sudo adduser "$(whoami)" dialoutAirGradientのソースコードを取得する
次に、AirGradientの工場出荷時フラッシュ用ページで最新のプロダクションリリースを確認します。
# Current production release, as of this writing.
AIRGRADIENT_RELEASE='3.3.8'警告:AirGradientのウェブサイトに掲載されている最新バージョンは、AirGradientのGitHubリポジトリの最新リリースタグと一致しません。3.3.9を試したところ、2台ともCO2と温度の測定に失敗したため、3.3.9が既知の不具合を含むリリースなのかどうかはわかりません。
バージョン番号がわかったので、AirGradientのGitHubリポジトリからソースコードを取得します。
git clone --recurse-submodules \
--branch "${AIRGRADIENT_RELEASE}" \
--depth 1 \
https://github.com/airgradienthq/arduino.git \
~/airgradient-oneAirGradient ONEデバイスにファームウェアを書き込む
いよいよ、デバイスにソフトウェアを書き込みます。
cd ~/airgradient-one && \
arduino-cli compile \
--verbose \
--fqbn esp32:esp32:esp32c3:CDCOnBoot=cdc,PartitionScheme=min_spiffs,DebugLevel=info \
--library . \
--port "${AIRGRADIENT_PATH}" \
--verify \
--upload \
examples/OneOpenAir/OneOpenAir.ino注意:AirGradient ONEデバイス上の永続データを消去する場合(つまり、設定データを含むハードリセットを行う場合)、--fqbnフラグの末尾に,EraseFlash=allを追加してください。
書き込みが成功すると、デバイスが再起動し、処理の最後に次のような出力が表示されます。
Wrote 1753792 bytes (967231 compressed) at 0x00010000 in 14.7 seconds (effective 952.3 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...おまけ:シリアルログ出力を表示する
AirGradientをコンピューターに接続したまま、arduino-cli monitorコマンドを使ってシリアルポート経由でログ出力を確認できます。
$ arduino-cli monitor --port "${AIRGRADIENT_PATH}"
Using default monitor configuration for board: esp32:esp32:heltec_wifi_kit_32_V3
Monitor port settings:
baudrate=9600
bits=8
dtr=on
parity=none
rts=on
stop_bits=1
Connecting to /dev/ttyACM0. Press CTRL-C to exit.
[1] Standard Particle PM 2.5 = 7.00 ug/m3
[1] Particle Count 0.3 = 1298.5
[1] Particle Count 0.5 = 383.5
[1] Particle Count 1.0 = 39.7
[1] Particle Count 2.5 = 2.0
[1] Particle Count 5.0 = 2.0
[1] Particle Count 10 = 0.0代替案:Nix flake
Nixに詳しい人なら、Nix流にやりたいと思うかもしれません。私は上記のすべての手順を自動化するNix flakeを作成しました。
リポジトリをフラッシュしたいときは、次のコマンドを実行するだけです。
nix run .#flashシリアル出力を確認したいときは、次のコマンドを実行します。
nix run .#monitor私のNix flakeがどこまで汎用的に動作するかはわからないので、お使いの環境で動かすには少し調整が必要になるかもしれません。
まとめ
この手順が、AirGradient ONEデバイスへの書き込みや、お好みに合わせたファームウェアのカスタマイズの助けになれば幸いです。
記事をランダムに読む
コメント
ログインしてコメントする