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 |
|---|---|---|
|
|
→
?!←
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 |
|---|---|---|
|
|
→
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 |
|---|---|---|
|
|
→
0A5!←
5 |
Get Device Identification#
The device will respond with its identification information:
14= SDI protocol version 1.4GEOLUX AX500= device name, with two space characters betweenfff= current firmware version, two space characters before
Request |
Response |
Example |
|---|---|---|
|
|
→
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 ready1= 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:
“+temp+rh+atm+aqi+ave_vin+min_vin+max_vin”,
“+pm1+pm2.5+pm10”,
“+slot1+slot2+slot3+slot4+slot5”
Request |
Response |
Example |
|---|---|---|
|
|
→
0M!←
00027… after 2 seconds …
→
0D0!←
0+27.82+48.16+101.33+0+11268+11261→
0D1!←
0+11413 |
|
|
→
0M1!←
01283… after 128 seconds …
→
0D0!←
0+1.97+1.97+1.97 |
|
|
→
0M2!←
00015… after 1 second …
→
0D0!←
0+0.00+1.66+6.80+5.70+37.84 |
|
|
→
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 |
|---|---|---|
|
|
→
0M!←
00027… after 2 seconds …
→
0D0!←
0+27.82+48.16+101.33+0+11268+11261→
0D1!←
0+11413 |
|
|
→
0M1!←
01283… after 128 seconds …
→
0D0!←
0+1.97+1.97+1.97 |
|
|
→
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 |
|---|---|---|
|
|
→``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 |
|---|---|---|
|
Returns an empty response after the command is accepted. |
→ 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 |
|---|---|---|
|
|
→ 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 |
|---|---|---|
|
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 |
|---|---|---|
|
Returns an empty response after the command is accepted. |
→ 0XGSLPOF!←
0! |
Reset Device#
Resets the complete sensor device.
Request |
Response |
Example |
|---|---|---|
|
Returns an empty response after the command is accepted. |
→ 0XGRST!←
0! |
Reset SmartSense Board#
Resets only the SmartSense sensor module.
Request |
Response |
Example |
|---|---|---|
|
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 |
|---|---|---|
|
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 |
|---|---|---|
|
|
→ 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 |
|---|---|---|
|
|
→ 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 |
|---|---|---|
|
|
→ 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 |
|---|---|---|
|
|
→ 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 |
|---|---|---|
|
|
→ 0XGBFLT!←
0+0+0! |