This article describes the data columns that appear in CSV files recorded to microSD cards by PurpleAir sensors. Use this as a reference when analyzing your SD card data.
SD card data uses different field names than the PurpleAir API. To see API field names, visit the API documentation.
Example SD Data
You can download example SD card data files here: Example SD Data
CSV File Structure
SD card data is recorded in CSV (comma-separated values) format. Each row represents one data recording (typically every 2 minutes). The first row contains the column headers listed below.
Sensor Information Columns
These columns identify the sensor and provide system status information.
| Column Name | Description |
|---|---|
| UTCDateTime | The time when this row of data was recorded. Derived from the Real-Time Clock and synced with NTP where possible. The format follows YYYY/MM/DDTHH:MM:SSz and uses UTC as the Time Zone. |
| mac_address | The sensor’s Device ID. This is identical to the sensor’s MAC address, except that leading 0’s are omitted in each Octet. For example, device ID 8:3a:8d:b:a4:fd would correspond to the MAC address 08:3a:8d:0b:a4:fd. |
| firmware_ver | Firmware version of the control board. |
| hardware | Hardware type the control board has detected. |
| uptime | Firmware uptime in seconds. Rebooting the sensor will reset this to 0. |
| rssi | WiFi signal strength in dBm. |
| mem | Free HEAP memory on the control board. |
| adc | The voltage reading on the analog input of the control board. |
Environmental Data Columns
These columns record environmental conditions measured by the sensor.
Note: Temperature and humidity data reflect conditions inside the sensor’s housing and do not always match ambient readings. Corrections are available to better match ambient conditions. See A Note on Temperature and Humidity.
| Column Name | Description |
|---|---|
| current_temp_f | Current temperature in Fahrenheit. This is taken directly from the sensor without applying a correction. |
| current_humidity | Current Humidity in %. This is taken directly from the sensor without applying a correction. |
| current_dewpoint_f | Calculated dew point in Fahrenheit. Calculated using uncorrected temperature. |
| pressure | Current pressure in millibars. |
| gas | Bosch BSEC IAQ when BME680 gas sensor is present (FIRMWARE 4.10 and up). These readings are experimental. |
Air Quality Data Columns
Air quality columns represent particulate matter measurements from the sensor’s dual laser counters (Channel A and Channel B).
All air quality data columns represent data from either laser counter A or laser counter B. Columns with “_b” at the end represent data from channel B. If “_b” is not at the end of an air quality data column, it represents data from channel A.
For more information about these channels, see: What are Channel A and Channel B?
Air Quality Channel A Columns
| Column Name | Description |
|---|---|
| pm1_0_cf_1 | Channel A CF=1 PM1.0 particulate mass in ug/m3. |
| pm2_5_cf_1 | Channel A CF=1 PM2.5 particulate mass in ug/m3. |
| pm10_0_cf_1 | Channel A CF=1 PM10.0 particulate mass in ug/m3. |
| pm1_0_atm | Channel A ATM PM1.0 particulate mass in ug/m3. |
| pm2_5_atm | Channel A ATM PM2.5 particulate mass in ug/m3. |
| pm10_0_atm | Channel A ATM PM10.0 particulate mass in ug/m3. |
| pm2.5_aqi_cf_1 | Channel A US EPA PM2.5 AQI calculated using pm2_5_cf_1. |
| pm2.5_aqi_atm | Channel A US EPA PM2.5 AQI calculated using pm2_5_atm. |
| p_0_3_um | Channel A 0.3-micrometer particle counts per deciliter of air. |
| p_0_5_um | Channel A 0.5-micrometer particle counts per deciliter of air. |
| p_1_0_um | Channel A 1.0-micrometer particle counts per deciliter of air. |
| p_2_5_um | Channel A 2.5-micrometer particle counts per deciliter of air. |
| p_5_0_um | Channel A 5.0-micrometer particle counts per deciliter of air. |
| p_10_0_um | Channel A 10.0-micrometer particle counts per deciliter of air. |
Air Quality Channel B Columns
| Column Name | Description |
|---|---|
| pm1_0_cf_1_b | Channel B CF=1 PM1.0 particulate mass in ug/m3. |
| pm2_5_cf_1_b | Channel B CF=1 PM2.5 particulate mass in ug/m3. |
| pm10_0_cf_1_b | Channel B CF=1 PM10.0 particulate mass in ug/m3. |
| pm1_0_atm_b | Channel B ATM PM1.0 particulate mass in ug/m3. |
| pm2_5_atm_b | Channel B ATM PM2.5 particulate mass in ug/m3. |
| pm10_0_atm_b | Channel B ATM PM10.0 particulate mass in ug/m3. |
| pm2.5_aqi_cf_1_b | Channel B US EPA PM2.5 AQI calculated using pm2_5_cf_1_b. |
| pm2.5_aqi_atm_b | Channel B US EPA PM2.5 AQI calculated using pm2_5_atm_b. |
| p_0_3_um_b | Channel B 0.3 micrometer particle counts per deciliter of air. |
| p_0_5_um_b | Channel B 0.5 micrometer particle counts per deciliter of air. |
| p_1_0_um_b | Channel B 1.0 micrometer particle counts per deciliter of air. |
| p_2_5_um_b | Channel B 2.5 micrometer particle counts per deciliter of air. |
| p_5_0_um_b | Channel B 5.0 micrometer particle counts per deciliter of air. |
| p_10_0_um_b | Channel B 10.0 micrometer particle counts per deciliter of air. |
Important Notes
UTC Time Zone
All timestamps in the UTCDateTime column are recorded in UTC (Coordinated Universal Time), not your local time zone. Remember to account for the time zone difference when analyzing your data.
For more information, see our section in our SD troubleshooting article on Time Zone Differences.
Data Recording Interval
PurpleAir sensors record SD data every 2 minutes when operating normally. If you see different intervals, review this SD Overview article section on our sensor’s LED indicators to see where things might be going wrong.