Device assembly

Two ways to build Air360

You can assemble the device with the Air360 shield board or wire sensors directly to the ESP32-S3. The shield reduces wiring mistakes; direct wiring is useful for prototypes, debugging, and custom enclosures.

Option 1recommended

Build with the shield board

The shield breaks power and signal lines out to labeled connectors. This is the primary user path for repeatable builds.

  • Order the board from Gerber files or from the OSHWLab project.
  • Check the board revision against this guide before soldering.
  • After assembly, sensors connect to the labeled shield connectors.
Option 2prototype

Wire directly to ESP32-S3

Connect sensors to GPIOs directly using the table below. This path requires careful power, ground, and shared-bus wiring.

  • For multiple I2C devices, use a branched I2C bus or a dedicated hub.
  • Search for "I2C hub" on AliExpress, Amazon, or similar marketplaces.
  • All signal lines must be compatible with ESP32-S3 3.3 V logic.
  • UART1 is shared by GPS and the cellular modem by default, so use separate UART ports if both are installed.

Option 1: build with the shield board

The shield board sits on top of the ESP32-S3 and breaks power, I2C, UART, and auxiliary lines out to connectors. These are the baseline parts needed to assemble the board.

ComponentQtyUseSearch keywords
DS1023-1x22S21, 1x22 female socket header, 2.54 mm pitch2 pcsHeaders for mounting the shield board onto the ESP32-S3.DS1023-1x22S21 female header 2.54mm
Single row male 2.54 mm breakable pin header1 strip or as neededMale pin headers for auxiliary pins and jumpers.2.54mm single row breakable male pin header
DC-005, 5.5x2.1 mm PCB-mount DC barrel jack1 pcDC power input on the shield board.DC-005 5.5x2.1mm PCB mount DC power jack
JST ZH 1.5 mm, 4-pin / 5-pin connector setas neededOptional cable connectors for SPS30 and SCD30.JST ZH 1.5mm 4 pin 5 pin connector housing crimp terminal
KF301-5.0-2P, 2-pin 5.0 mm screw terminal block1 pc if INA219 is usedScrew terminal for the INA219 power measurement path.KF301-5.0-2P 2 pin 5.0mm screw terminal block
0 Ω resistor / 0R jumper1 pc if INA219 is not usedJumper in place of the INA219 path when current sensing is not installed.0 ohm resistor 0R jumper

Option 2: direct wiring to ESP32-S3

The table below follows the current firmware defaults. Some UART and GPIO sensors can be reassigned in the device web UI, but these values are the best starting point for a first build.

  • I2C: all I2C sensors share SDA=GPIO8 and SCL=GPIO9.
  • GPIO and analog sensors use one of GPIO4, GPIO5, or GPIO6.
SensorInterfaceESP32-S3 pinsNote
  • AHT30
  • BME280
  • BME680
  • BMP390
  • SHT3X
  • SHT4X
  • HTU2X
  • SCD30
  • VEML7700
  • OPT3001
  • SPS30
  • INA219
I2CSDA=GPIO8, SCL=GPIO9Use one shared I2C bus for multiple modules; sensor addresses must not conflict.
  • SDS011
  • PMSX003
  • MH-Z19B
UART2 by default, 9600 baudRX=GPIO16, TX=GPIO15; UART1 RX=GPIO18, TX=GPIO17 is selectableSensor TX goes to ESP32-S3 RX; sensor RX goes to ESP32-S3 TX.
  • GPS (NMEA)
UART1 by default, 9600 baudRX=GPIO18, TX=GPIO17; UART2 RX=GPIO16, TX=GPIO15 is selectableUART1 conflicts with the SIM7600E default pins.
  • DHT11
  • DHT22
  • DS18B20
GPIOGPIO4, GPIO5, or GPIO6Select one available pin in the sensor settings.
  • PPD42NS
GPIOP1/yellow signal to GPIO4 by default; GPIO5 or GPIO6 selectableRequires 3.3 V-safe signal level shifting.
  • SIM7600E / cellular modem
UART1, 115200 baudRX=GPIO18, TX=GPIO17, PWRKEY=GPIO12, SLEEP/DTR=GPIO21RESET is not wired by default; do not use GPS on UART1 at the same time.

Choose your sensors

Pick one or more sensors based on what you want to monitor. Sensors can be combined freely; values go to the Air360 API, and compatible values also go to Sensor.Community.

SensorMeasuresWhy you'd want it
Climate
BME280Temperature, humidity, pressureCompact all-in-one climate sensor; good for indoor and outdoor baseline monitoring.
BME680Temperature, humidity, pressure, gas resistance (VOC)Same as BME280 with a gas sensor that estimates indoor air quality and volatile organic compounds.
BMP390Pressure, temperaturePrecise barometer: it measures pressure and temperature, but not humidity. Choose it when pressure accuracy matters most.
AHT30Temperature, humidityAccurate and low-cost; a reliable upgrade over DHT22 with I2C connectivity.
SHT3XTemperature, humidityHigh-accuracy sensor; more consistent than AHT30 across wide temperature ranges.
SHT4XTemperature, humidityImproved successor to SHT3X with higher accuracy in humid environments.
HTU2XTemperature, humidityBudget option; lower accuracy than SHT series but widely available.
DHT11Temperature, humidityEntry-level sensor with limited range (0–50 °C, 20–90 %RH); suitable for learning or quick tests.
DHT22Temperature, humidityBetter range and accuracy than DHT11; common first sensor for prototypes.
DS18B20TemperatureWaterproof probe; designed for outdoor, soil, or liquid temperature measurement.
Particulate matter
SPS30PM1.0, PM2.5, PM4.0, PM10, particle count, typical particle sizeMost complete PM sensor in the lineup; recommended for outdoor air quality stations.
SDS011PM2.5, PM10Affordable laser sensor; popular for city and roadside air monitoring.
PMSX003 (PMS5003 / PMS7003)PM1.0, PM2.5, PM10, particle count binsWidely available compact sensor; good balance of cost and data completeness.
PPD42NSParticle count (coarse)Basic optical sensor; lower accuracy; GPIO-based, no shared bus required.
CO₂ and gas
SCD30CO₂, temperature, humidityNDIR CO₂ sensor; accurate and stable; recommended for ventilation and indoor air quality monitoring.
MH-Z19BCO₂NDIR CO₂ via UART; compact and common for home automation projects.
Light
VEML7700Illuminance (lux)Measures ambient light level; useful for daylight tracking or controlling light-dependent devices.
OPT3001Illuminance (lux)Alternative to VEML7700 with a slightly different spectral response; same use cases.
Power monitoring
INA219DC current, voltage, powerMonitors the device's own power consumption; useful for solar-powered or battery-backed setups.

GPS — location tagging

A GPS module (any NMEA-compatible receiver via UART) adds geographic coordinates to every measurement batch. Use it for fixed outdoor stations where you want precise coordinates attached to each reading, or for mobile setups mounted on a vehicle or carried as a portable unit.

Cellular modem — connectivity without Wi-Fi

A cellular modem lets the device upload data over a SIM card with no Wi-Fi required. Supported models: SIM7600 (default), SIM7070, SIM7000, BG96, EC20, SIM800, and Generic (any AT-command modem via esp-modem). This is the right choice for rooftop stations, remote field installations, or any location where a stable Wi-Fi connection is not available.

Flashing the device

The easiest way to start is to flash the ready-made merged full.bin image with the browser-based ESP Flash tool. After first boot, the device starts a Wi-Fi setup access point.

1

Download full.bin

Open Air360 releases and download the current full.bin. This is the complete merged image for first-time flashing.

2

Flash via USB

Open espflash.app, connect the ESP32-S3 by USB, select the serial port and the full.bin file, then start flashing. Wait for the process to finish.

3

First boot — setup AP

The device reboots. The LED turns pink — it is in setup AP mode. Connect your phone or laptop to the air360 Wi-Fi network (password: air360password).

4

Configure Wi-Fi

A setup page opens automatically after connecting to the AP. Select your Wi-Fi network from the list, enter the password, and tap Save.

5

Verify connection

The device reboots and joins your network. Green LED = connected. Pink LED = connection failed — check the password and try again.

6

Open the device

Go to http://air360.local or http://192.168.4.1 in your browser to configure sensors and upload backends.

LED indicator reference

ColorMeaning
BlueBooting.
PinkSetup AP mode — no Wi-Fi configured, or connection to Wi-Fi failed.
GreenConnected to Wi-Fi (station mode).
RedFatal boot error — check serial logs.

Device web interface

After the device joins your Wi-Fi network, open http://air360.local or the device IP in a browser. The interface has four sections.

Overview

A read-only dashboard showing device health, network mode, IP address, uptime, and current time. Sensor readings and backend upload results — last status and upload time — are listed here. This is the first page to check when something does not look right.

Device

Network and device settings: Wi-Fi credentials, device name, static IP, cellular modem (APN, modem type, credentials), BLE advertising, and Wi-Fi power save. The firmware update card at the bottom of this page lets you upload a new .bin file directly from the browser without USB access.

Sensors

Add, configure, and remove sensors. For each sensor you choose the model, poll interval, and connection (I2C address, UART port, or GPIO pin). Current state and latest readings are shown on the sensor card. In most cases changes apply immediately without a reboot.

Backends

Configure where measurements are uploaded: Air360, Sensor.Community, openSenseMap, InfluxDB, or Custom Upload. Each service is enabled or disabled independently. The same page sets the upload interval and shows the last upload result for every service.

Sensor.Community: the device's Sensor ID is shown on this page. Register it at devices.sensor.community/sensors to link the device to your Sensor.Community account and start seeing measurements on the map.

Air360 API: air360.ru does not require registration. The device authenticates with an Upload secret — generate it on first setup and save it somewhere safe. If you reflash the device, reuse the same secret so your measurement history stays linked to the device.

Air360 API: device coordinates are required before uploads begin. Use the map picker or enter latitude and longitude manually. Adding altitude above sea level is optional but recommended — it improves atmospheric pressure accuracy for stations at elevation.

Where your measurements go

The device can send the same measurements to several services at once. Turn on the ones you want in the device web interface: each service has its own upload interval, and if one of them is temporarily unavailable, the others keep working.

Our service

Air360

The project's own service. It accepts readings from every sensor, and your station shows up on the Air360 map right away.

  • No account required: during setup the device creates a secret key. Save it — if you reflash the device, the same key keeps your measurement history.
  • Set the device coordinates before uploads start. Altitude above sea level is optional, but it makes pressure readings more accurate.
Community

Sensor.Community

A worldwide network of volunteer air quality stations. Your readings join a public map that anyone can use.

  • Works with BME280, BME680, BMP390, DHT11/22, HTU2X, SHT3X, SHT4X, DS18B20, SCD30, GPS, SPS30, SDS011 and PMSX003. Readings from other sensors are not sent.
  • Register the sensor number that the device shows you, and your station will appear on their map.
Community

openSenseMap

An open platform for environmental data. There is no fixed list of measurements: you choose what your station publishes.

  • You can publish anything you add to your senseBox, including CO2, light level and GPS coordinates.
  • The device fetches the sensor list from your senseBox and fills in the settings for you, so there is nothing to match up by hand.
Your own server

InfluxDB

A database for time-series data. Pick it if you want to keep the readings on your own machine and build charts in Grafana.

  • You provide the server address; a login and password are optional.
  • Readings from every sensor are sent, with nothing left out.
Your own server

Custom Upload

Sends the same data to any address you enter, so you can collect the readings on a server of your own.

  • No login is added: protect the address yourself.
  • Readings from every sensor are sent, with nothing left out.

Detailed documentation

For web UI setup, sensors, backend uploads, diagnostics, and OTA, use the full firmware user guide.

Enclosure: Stevenson screen

For outdoor installation, you can 3D-print a Stevenson-screen-style enclosure. It shields the device from direct sun and rain while keeping airflow around the sensors.

Powering the device

Air360 runs on 5 V. Choose whichever supply suits your installation.

Option 1

Mains power (5 V adapter)

Connect any 5 V USB power adapter. Two connection points are available depending on your build.

  • Via the USB-C port on the ESP32-S3 — works for both direct-wiring and shield builds.
  • Via the DC-005 barrel jack (5.5 × 2.1 mm) on the shield board.
Option 2

Solar panel with MPPT charger

For off-grid and outdoor deployments. The setup uses a custom MPPT module based on the CN3722 that charges a battery from a solar panel and supplies regulated 5 V to the device via power-path switching — the device stays on at night and on overcast days.

  • 3D-printable solar panel mount and MPPT module enclosure are on Printables — assembly instructions and a link to the PCB are on the same page.
  • Read the full CN3722 article before sourcing components — values depend on your battery chemistry and cell count.

Sensor.Community compatibility

Air360 firmware keeps backward compatibility with Sensor.Community: the device can still upload to the legacy Sensor.Community endpoint using the same short device ID registered on devices.sensor.community. Air360 API is broader and accepts every current sensor type.

Sensor / groupSensor.CommunityAir360 API
BME280, BME680Yes: temperature, humidity, pressure; gas resistance is skippedYes: all sensor values in a typed JSON batch
BMP390Yes: temperature and pressureYes
DHT11, DHT22, HTU2X, SHT3X, SHT4XYes: temperature and humidityYes: all sensor values
DS18B20Yes: temperatureYes
SCD30Yes: temperature, humidity, CO2Yes
SPS30Yes: PM1.0, PM2.5, PM4.0, PM10, number concentration bins, typical particle sizeYes
SDS011Yes: PM2.5 and PM10Yes
PMSX003Partial: PM1.0, PM2.5, PM10; particle-count bins are skippedYes: PM and particle-count values
GPS (NMEA)Partial: latitude, longitude, altitude; satellites/speed/course/HDOP are skippedYes: all GPS values
AHT30, VEML7700, OPT3001, PPD42NS, INA219, MH-Z19BNo: the Sensor.Community adapter skips these typesYes: all values pass through without sensor-type filtering