The Yocto-SDI12 is finally available! Almost two years after we first tested SDI-12 as part of a post on a controlled watering system, the Yocto-SDI12 is now a reality. This communication module can be used as a data logger with sensors using SDI-12 communication, and it can also interface any SDI-12 sensor as if it were a Yoctopuce sensor.
What is SDI-12?
The SDI-12 protocol (Serial Data Interface at 1200 baud) is a communication standard used mainly for environmental measures, particularly in agronomy. It is based on a three-wire bus, which implements a serial interface operating at 1200 bauds with well-specified impedance. This bus enables multi-point data transmission over long distances, such as in greenhouses. The protocol offers bidirectional communication between the data logger and the sensors: the logger sends commands to the sensors to request specific measures, and the sensors perform these measures and send the result back to the logger.
SDI-12 sensors are usually supplied with a 12 V power supply directly on the SDI-12 bus, simplifying wiring and field installation. The SDI-12 protocol defines a standardized message format for data transmission, with commands and responses generally in the form of ASCII character strings.
To communicate with SDI-12, it's not enough simply to take a TTL serial interface and change the electrical levels, as the protocol imposes very precise timings, otherwise communication with the sensors is interrupted. But to make things easier for you, the Yocto-SDI12 automatically manages all these timings for you, as well as waking up dormant sensors before sending commands to the sensor.
The Yocto-SDI12
The Yocto-SDI12 comes in the form of a compact 60x20mm module, with a three-wire terminal block: ground (GND), an SDI-12 data line, and a 12V output that can supply up to 200mA to power SDI-12 sensors if required.
The Yocto-SDI-12
As with all our digital electrical interfaces, you can control the Yocto-SDI12 directly from your program. What's more, thanks to the integrated job system, the Yocto-SDI12 can interrogate your sensors autonomously and present the results to you just like a Yoctopuce sensor, with all the benefits that this brings: callbacks, data logging, calibration, and so on.
The Yocto-SDI12 is designed to function as an SDI-12 master, allowing you to control multiple SDI-12 sensors with the same module, provided these sensors use different SDI-12 addresses. What's more, the module is able to analyze SDI-12 communication between two third parties without influencing the communication, and record data separately in both directions.
Yoctopuce API function
In the Yoctopuce libraries, you'll find a new Sdi12Port class that makes it easy to query a sensor for information on its model, the measures it provides, launch measures, read results, or even change the sensor address. The library supports the advanced discovery functions introduced in version 1.4 of the SDI-12 standard.
sensorInfo = sdi12Port.getSensorInformation("1");
// Sends an 'M' command to the sensor and returns the sensor's response
List<double> valSensor = sdi12Port.readSensor("1", "M",500);
// Changes sensor address
sdi12Port.changeAddress("1", "2");
The Yocto-SDI12 interprets the SDI-12 messages exchanged, and can automatically wait for the necessary time after sending a measure command before interrogating the sensor to obtain the measured values. It transparently manages retransmissions if need be, for enhanced reliability in harsh environmental conditions.
Conclusion
The Yocto-SDI12 is an easy-to-use solution for interfacing your SDI-12 sensors, whether near a computer or not: simply connect it to a YoctoHub and benefit from continuous measure without a computer, thanks to Yoctopuce jobs.