7.4. SDI-12 Protocol#

Protocol Overview#

The AX500 air quality meter supports communication via the SDI-12 (Serial Data Interface at 1200 baud) protocol. The instrument responds to standard SDI-12 measurement commands by returning measured data, and, in addition to standard measurement commands, the device implements a set of custom SDI-12 commands that allow users to read and modify internal configuration parameters, retrieve diagnostic information, and execute specific service operations such as restoring factory default settings.

CR and LF denote carriage return / line feed pair which is sent at the end of each response. The response contains no space character – in the table below the spaces are inserted between response elements to improve readability only.

Standard SDI-12 Commands#

Device Address Query#

Device will identify by returning its SDI-12 address. The factory default address is 0.

Request

Response

Example

?!

a CR LF

?!
0

Ping Sensor#

The device will return its address if the address in the request matches the device address. This command is used to verify that the device is active, at a given address, and responding to requests.

Request

Response

Example

a!

a CR LF

0!
0

Change Address#

The device will reconfigure to change its SDI-12 device address, and will respond with the new address. All subsequent requests to the device should be addressed to the new address. Take care when changing address, if improperly set on multi-sensor bus this can cause address collision.

Request

Response

Example

aAb!

b CR LF

0A5!
5

Get Device Identification#

The device will respond with its identification information:

  • 14 = SDI protocol version 1.4

  • GEOLUX  AX500 = device name, with two space characters between

  • fff = current firmware version, two space characters before

Request

Response

Example

aI!

a14GEOLUX  AX500  fff CR LF

0I!
014GEOLUX  AX500  103

Verify Device#

This command is executed in two steps. First, the master sends the command aV! to initiate the verification procedure. The device responds with a standard SDI-12 service request indicating that after 000 seconds one value will be available for retrieval.

The master must then issue the aD0! command to read the available value. The device responds with a single measurement representing the instrument’s operational status:

  • 0 = not ready

  • 1 = ready

Request

Response

Example

aV!
as CR LF
0V!
000001

Perform Measurement#

This group of commands instructs the instrument to start various measurement cycles. Three measurement groups are available: aM!, aM1! and aM!. Upon receiving aM*!, the device immediately responds with the required warm-up time in seconds and the total number of measurement values that will be available once the measurement is completed. After the specified warm-up time has elapsed, the master should retrieve the measurement results using the aD0!, aD1!, etc. commands as needed, until all reported values have been read. If a CRC checksum is required to ensure data integrity, the aMC!, aMC1! or aMC2! commands shall be used instead of aM!, aM1! or aM2! respectively. This command functions identically to aM*!, but the instrument appends a CRC checksum to each data response. The checksum in the response allows the master to verify the consistency and correctness of the transmitted values. For the measurement group aM!, the Geolux AX500 returns 7 values, in the following order: “+temp+rh+atm+aqi+ave_vin+min_vin+max_vin” For the measurement group aM1!, the Geolux AX500 returns 3 values, in the following order: +pm1+pm2.5+pm10” For the measurement group aM2!, the Geolux AX500 returns 5 values, in the following order: “+slot1+slot2+slot3+slot4+slot5” The grouping of measurement values in responses to the aD0!, aD1!, aD2!, etc., commands does not necessarily follow the structure shown in the example above. The example is provided for illustration purposes only. In accordance with the SDI-12 protocol, the instrument may distribute the returned values across one or more data responses depending on the total length of the response string. Each SDI-12 response is limited in length, so the device dynamically groups values to fit within this constraint. The device also supports high-volume ASCII commands introduced in SDI-12 version 1.4. They operate identically to aM*! commands but allow more measurements to be taken, and CRC is automatically included. Using aHA!, the user can take all measurements at once. The Geolux AX500 returns 15 values for high-volume ASCII commands:

  1. “+temp+rh+atm+aqi+ave_vin+min_vin+max_vin”,

  2. “+pm1+pm2.5+pm10”,

  3. “+slot1+slot2+slot3+slot4+slot5”

Request

Response

Example

aM!

asss8 CR LF

0M!
00027
… after 2 seconds …
0D0!
0+27.82+48.16+101.33+0+11268+11261
0D1!
0+11413

aM1!

a temp rh atm aqi+ave_vin min_vin max_vint CR LF

0M1!
01283
… after 128 seconds …
0D0!
0+1.97+1.97+1.97

aM2!

a pm1 pm2.5 pm10 CR LF

0M2!
00015
… after 1 second …
0D0!
0+0.00+1.66+6.80+5.70+37.84

aHA!

a slot1 slot2 slot3 slot4 slot5 CR LF

0HA!
0131015
… after 131 seconds …
0D0!
0+30.57+43.03+101.33+0+11276+11268+11434+2.16NPd
0D1!
0+3.02+3.02+1565.27+1.67+3.39+3.94+36.49LRB

Perform Concurrent Measurement#

The aC*! commands operates similarly to the previously described aM*! command, with the key difference being that it enables concurrent measurements. After receiving aC*!, the instrument responds with the required processing time and the number of values that will be available. Unlike aM*!, the instrument does not hold the SDI-12 bus during the measurement process. This allows other SDI-12 devices on the same bus to perform measurements simultaneously. Once the indicated processing time has elapsed, the master can retrieve the results using the aD0!, aD1!, etc., commands, in the same manner as for aM*!. In accordance with the SDI-12 specification for concurrent commands, the response to aC*! uses two digits to indicate the number of measurement values that will be returned. If a CRC checksum is required to ensure data integrity, the aCC*! command shall be used instead of aC*!. This command functions identically to aC*!, but the instrument appends a CRC checksum to each data response. The checksum in the response allows the master to verify the consistency and correctness of the transmitted values. The grouping of measurement values in responses to the aD0!, aD1!, aD2!, etc., commands does not necessarily follow the structure shown in the example above. The example is provided for illustration purposes only. In accordance with the SDI-12 protocol, the instrument may distribute the returned values across one or more data responses depending on the total length of the response string. Each SDI-12 response is limited in length, so the device dynamically groups values to fit within this constraint

Request

Response

Example

aM!

asss8 CR LF

0M!
00027
… after 2 seconds …
0D0!
0+27.82+48.16+101.33+0+11268+11261
0D1!
0+11413

aM1!

a temp rh atm aqi+ave_vin min_vin max_vint CR LF

0M1!
01283
… after 128 seconds …
0D0!
0+1.97+1.97+1.97

aM2!

a pm1 pm2.5 pm10 CR LF

0M2!
00015
… after 1 second …
0D0!
0+0.00+1.66+6.80+5.70+37.84

Ambient Measurement#

Returns ambient measurement values: temperature, relative humidity, atmospheric pressure, AQI, and input voltage values. Temperature is in °C, relative humidity in %, atmospheric pressure in kPa, AQI is dimensionless, and input voltage values are in mV.

Request

Response

Example

aM!aMC!aC!aCC!aR!aRC!
+slot1+slot2+slot3+slot4+slot5
0M2!
0+120.0+5.4+8.1+22.6+35.2

Particulate Matter Measurement#

Returns particulate matter concentration values measured by the particle sensor. PM values are expressed in µg/m³ and represent particles with diameter smaller than the indicated size.

Request

Response

Example

aM1!aMC1!aC1!aCC1!aR1!aRC1!
+pm1+pm2.5+pm10
0M2!
0+4.2+8.5+15.7

Gas Measurement#

Returns gas concentration values from gas sensor slots 1 to 5. Each slot value represents the measured gas concentration in µg/m³.

Request

Response

Example

aM2!aMC2!aC2!aCC2!aR2!aRC2!
+slot1+slot2+slot3+slot4+slot5
0M2!
← `` 0+120.0+5.4+8.1+22.6+35.2``

Custom (Extended) SDI-12 Commands Specific for VX60#

Start Blowout#

Starts one blowout cycle of the measurement chamber.

Request

Response

Example

aXGBO!

Returns an empty response after the command is accepted. !<CR><LF>

→``0XGBO!``
0!

Set Blowout Period#

Starts one blowout cycle and sets the automatic blowout period. Parameter d defines the blowout period in minutes. If d = 0, blowout is manual only.

Request

Response

Example

aXGBOP+d!

Returns an empty response after the command is accepted. !<CR><LF>

0XGBOP+60!
0!

Get Blowout Period#

Returns the configured blowout period in minutes. If the returned value is 0, blowout is configured for manual operation only.

Request

Response

Example

aXGBOP!

+d

0XGBOP!
0+60!

Enable SDI-12 Sleep Mode#

Enables SDI-12 sleep mode. In this mode, the sensor sleeps between commands. Each SDI-12 command wakes the sensor, and the sensor returns to sleep after the measurement is completed.

Request

Response

Example

aXGSLPON!

Returns an empty response after the command is accepted.

0XGSLPON!
0!

Disable SDI-12 Sleep Mode#

Disables SDI-12 sleep mode and returns the sensor to continuous normal operation.

Request

Response

Example

aXGSLPOF!

Returns an empty response after the command is accepted.

0XGSLPOF!
0!

Reset Device#

Resets the complete sensor device.

Request

Response

Example

aXGRST!

Returns an empty response after the command is accepted.

0XGRST!
0!

Reset SmartSense Board#

Resets only the SmartSense sensor module.

Request

Response

Example

aXGSRST!

Returns an empty response after the command is accepted.

0XGSRST!
0!

Factory Reset#

Resets all configurable settings to factory default values. Hardware revision and serial number are not erased.

Request

Response

Example

aXGFAC!

Returns an empty response after the command is accepted.

0XGFAC!
0!

Device Identification#

Returns device identification data: serial number, firmware version, and hardware revision of the interface board.

Request

Response

Example

aXGID!

+sn+fw+hw

0XGID!
0+123455+v1.0.0+RevA!

SmartSense Identification#

Returns SmartSense board identification data: firmware version, hardware revision, and bootloader version. Bootloader version may be empty.

Request

Response

Example

aXGSID!

+fw+hw+bl

0XGSID!
0+v1.4.35+GEGSv2+!

Sensor Status#

Returns sensor activity status flags. Each value indicates whether the corresponding sensor is active and functioning. 1 means active, 0 means inactive. The order is: gas slot 1, gas slot 2, gas slot 3, gas slot 4, gas slot 5, PM1, PM2.5, PM10.

Request

Response

Example

aXGSERR!

+g1+g2+g3+g4+g5+pm1+pm2.5+pm10

0XGSERR!
0+1+1+1+1+1+1+1+1!

Measurement Validity#

Returns measurement validity flags. Each value indicates whether the current measurement from the corresponding sensor is valid. 1 means valid, 0 means not valid. The order is: gas slot 1, gas slot 2, gas slot 3, gas slot 4, gas slot 5, PM1, PM2.5, PM10.

Request

Response

Example

aXGMVAL!

+g1+g2+g3+g4+g5+pm1+pm2.5+pm10

0XGMVAL!
0+1+1+0+1+1+1+1+1!

Blowout Faults#

Returns diagnostic fault flags related to the last performed blowout cycle. pump indicates a pump fault and valve indicates a valve fault. 1 means fault detected, 0 means no fault. A fault indicates that driver current exceeded 3.5 A, which typically means a short circuit in the pump or valve circuit.

Request

Response

Example

aXGBFLT!

+pump+valve

0XGBFLT!
0+0+0!