AirQ sygnalizator smogu

⏱️ Przewidywany czas czytania: 4 min

AirQ – lokalny sygnalizator jakości powietrza oparty na ESP8266 i OLED

1. Cele projektu

Projekt AirQ umożliwia każdemu użytkownikowi stworzenie własnego, lokalnego urządzenia informującego o jakości powietrza – bez potrzeby posiadania własnej stacji pomiarowej.
Urządzenie (zwane flagmanem) pobiera dane z wybranych stacji pomiarowych należących do sieci Filipiak.cc, która integruje pomiary z różnych źródeł, m.in. GIOS i AQICN.

Kluczową zaletą systemu jest to, że użytkownik uruchamia własny serwer AirQ – nie ma jednej scentralizowanej instancji. Dzięki temu cały system działa prywatnie, niezależnie i może funkcjonować nawet w sieci lokalnej.

2. Architektura systemu

 

2.1. Flagman (ESP8266 + OLED)

To urządzenie końcowe, które:

  • łączy się z siecią Wi-Fi,
  • rejestruje się w lokalnym serwerze AirQ,
  • pobiera dane w formacie JSON,
  • wyświetla aktualny poziom zanieczyszczeń na ekranie OLED.

Dostępna jest również wersja bez OLED – sygnalizująca stan za pomocą diod LED.

2.2. Serwer AirQ (PHP + MySQL)

Użytkownik instaluje moduł serwera na własnej maszynie (np. Raspberry Pi, VPS, lokalny komputer z XAMPP).
Serwer:

  • udostępnia JSON API,
  • prowadzi bazę danych flagmanów i stacji,
  • integruje się z siecią Filipiak.cc (lub innymi źródłami),
  • zapewnia formularz webowy do przypisywania flagmanów do stacji.

3. Działanie systemu

Schemat działania:

  1. Użytkownik instaluje serwer AirQ i konfiguruje bazę danych.
  2. Wgrywa firmware na ESP8266 i konfiguruje połączenie Wi-Fi przez terminal UART.
  3. Flagman wykonuje rejestrację: GET /?mod=airq&flagman=register → otrzymuje unikalny identyfikator, np. 3CII6AR0QU.
  4. W formularzu webowym (/?mod=airq) przypisuje ten identyfikator do wybranej stacji.
  5. Flagman cyklicznie odpytuje: GET /?mod=airq&flagman=3CII6AR0QU → otrzymuje np.:
    {"aq":"2","time":1761737001}
  6. ESP8266 wyświetla odpowiedni komunikat na OLED na podstawie wartości aq.

Poziomy jakości powietrza (AQI)

aq Opis
0 Bardzo dobre
1 Dopuszczalne
2 Niezdrowe dla wrażliwych
3 Ostrzeżenie zdrowotne
4 Alarm
5 Zagrożenie życia

4. Konfiguracja – krok po kroku

4.1. Serwer

  1. Skopiuj katalog server/ z repozytorium na serwer z PHP 8.x i MySQL.
  2. Utwórz bazę danych i zaimportuj tabele: AirQ_flagman, AirQ_station (database.sql)
  3. Skonfiguruj dane logowania w pliku config.php.
  4. Otwórz w przeglądarce: http://twój-serwer.pl/?mod=airq – zobaczysz formularz do przypisywania flagmanów.

4.2. Flagman (ESP8266)

  1. Zainstaluj w Arduino IDE biblioteki: ESP8266WiFi, ESP8266HTTPClient, U8g2, ArduinoJson, EEPROM.
  2. Wgraj kod z katalogu firmware/.
  3. Połącz się przez UART (115200 8N1) i wykonaj konfigurację:
    • s – skanuj sieci Wi-Fi,
    • c – ustaw SSID i hasło,
    • j – połącz z Wi-Fi,
    • r – zarejestruj flagmana,
    • o – sprawdź identyfikator.
  4. Przypisz identyfikator do stacji przez formularz webowy.
  5. Urządzenie samo zacznie wyświetlać dane.
Uwaga: adres serwera w firmware domyślnie może wskazywać na testowy serwer (np. http://api.filipiak.cc/), jednak po uruchomieniu własnej instancji zaleca się zmienić go na lokalny (np. http://192.168.1.100/).

5. API – szczegóły komunikacji

Przykłady zapytań (dla domeny twoj-serwer.pl):

  • Rejestracja:
    GET /?mod=airq&flagman=register{"name":"3CII6AR0QU"}
  • Pobranie danych:
    GET /?mod=airq&flagman=3CII6AR0QU{"aq":"1","time":1761737001}
  • Panel administracyjny:
    GET /?mod=airq → formularz HTML

Komunikacja odbywa się przez standardowe zapytania HTTP GET. Parametry są przekazywane jako część
adresu URL,
zgodnie z definicją standardu RFC 1738.

6. Prywatność i decentralizacja

Projekt nie wymaga żadnych usług zewnętrznych po uruchomieniu własnego serwera.
Dane mogą pochodzić z sieci Filipiak.cc, ale równie dobrze z lokalnych czujników (np. SDS011 + ESP32).
To podejście zapewnia:

  • pełną kontrolę nad danymi,
  • brak zależności od firm trzecich,
  • możliwość działania w 100% w sieci lokalnej.

7. Gdzie znaleźć kod?

Cały projekt jest otwarty i dostępny na GitHubie:

https://github.com/marcin-filipiak/esp_airq_oled