How to troubleshoot an SDI-12 adapter

If your SDI-12 adapter isn’t “working”, don’t panic! The adapter has been tested with an actual SDI-12 sensor so it’s supposed to work. Go through the following steps to troubleshoot the adapter. As a matter of fact, DO the following step BEFORE you put any adapter to use for the first time!

1. Remove any sensors or external power connections from the adapter. Check for any physical damages on the USB port, the board, and terminals.

2. Plug the adapter into a windows computer, if the computer recognizes the adapter with a “USB plugged in” chime, and your device manager shows a serial port just appeared, proceed. Otherwise, the adapter is either damaged or the USB port may be damaged. If it shows a message saying an unrecognized device, the USB chip is damaged. The following is a screen shot of my device manager. The serial port COM15 wasn’t there before I plugged in my adapter. Opening the property of the port shows the manufacturer as FTDI (the USB chip). This confirms this step is successful.

3. While connected to PC, use putty (available in windows app store) or tera term and connect to the serial port you observe that appeared in step 2, with 9600 baud rate and 8 bit data, 1 bit start, 1 bit stop, no parity (default settings for many terminal programs), type in zI!, which is zee-EYE-! without hitting enter. If the adapter responds, then proceed. The following screen shot is the set up screen of PuTTY. Make sure you select the connection type as Serial and type in the correct serial port name and speed.

You won’t be able to see what you typed in (no local echo unless you turn on that feature) but you will see the response from the adapter as below. Your version of firmware may be different from 1.5.9 (159) though. If there is no response, the SDI-12 interface chip may have been damaged.

4. Close PuTTY connection. Disconnect the adapter from your computer. Connect a sensor that you know works (just tested to work). Reconnect the adapter to your computer and open PuTTY again. In the terminal program, issue ?! command. If the sensor responds with its address such as 1 in the following screen shot, the adapter works. You can follow up with an identification command 1I! that is 1-EYE-! and replace 1 with the address you see on screen after ?!. You may have to connect 12V to the adapter’s power input and select to use this power input with a jumper for certain sensors. Consult with your sensor’s manual for operating voltage. If there is no response from either ?! or the identification command, the SDI-12 chip may have a damaged data pin.

Before asking for some help, please test the adapter with the above procedure and tell me what you see. Try to avoid generic descriptions such as “failed” or “not working” and describe what you did and what you observe.

Q/A UART version adapters

Q: I plan to integrate your adapters to my own controller, not a PC or raspberry pi USB port. Does your UART version adapter have all necessary resistors and no USB chip to interfere with the UART port? How do you make connection between the UART adapter and my own controller?

A: Yes, all necessary resistors are in place for the UART version of the adapter and the USB chip is not on the chip to interfere.
Here are some of the points:

  1. The adapter has a 6-pin header that is soldered underneath the adapter to avoid making jumper wires from being vertical, which takes extra space, or from going over the optional A/D header.
  2. The adapter requires 5V and GND to be supplied to it since it doesn’t have the 5V and GND from the USB connector. SDI-12 has 5V logic levels so the 5V supply.
  3. The 6-pin header has GND, TX_3V (back of board), 5V, RX, TX_5V, RST from left to right. This is where you power the adapter and connect to its serial port. RST is reset. Unless you want the option to reset the adapter, you can leave it disconnected. Reset is 5V logic.
  4. If your controller is 3.3V logic (ESP32, raspberry pi serial pins, rp2040 etc), connect your controller TX to adapter RX, then your controller RX to adapter TX_3V.
  5. If your controller is 5V logic (Arduino UNO, MEGA2560 etc), connect your controller TX to adapter RX, then your controller RX to adapter TX_5V.