SDI-12 + GPS USB adapter

After a final revision, I am happy to release the SDI-12 GPS USB adapter! This adapter is the latest one to add to the line of SDI-12 USB adapters. In August 2015, I released my first SDI-12 USB adapter with this post. It was an idea that I thought about while traveling. I was working on data logger designs that use SDI-12 sensors and felt that interacting with SDI-12 sensors is not easy for agricultural or water resource researchers. Having an adapter that connects a computer to an SDI-12 sensor and reads measurements directly from the sensor would be very useful. So I made the adapter to simplify lab tests and data logger deployments. Since then, I’ve written free Python scripts for basic data logging (read the SDI-12 USB adapter main page). The demand for the adapter since then has been high enough to support my continued update on the data logging script, expanding from PC/Mac/Linux to single-board computers such as Raspberry Pi and Beagle Bone Bone. I have also expanded the adapter with an SDI-12 + Analog USB adapter that includes four high-precision analog inputs.

Later I found some need to add GPS modules to the existing SDI-12 USB adapter so that mobile data loggers such as those mounted on tractors will be able to produce with Geo-tagged data that can be made into maps. After some initial struggle using the new ATMEGA328PB processor that sports two hardware serial ports (one to talk to PC and the other with GPS), I realized that the GPS module actually interfered with the processor and caused program freeze-up. Then I made some hardware revisions and was able to prevent interference. It turned out that the new ATMEGA328PB processor that I used in my initial prototype was especially susceptible to interference when I used its second hardware serial port that have the same pins as the SPI pins that program the processor. So I switched to the ATMEGA1284P processor that I have been using on my open source physics laboratory design.

After extensive tests, I am happy to add this adapter to the product line. You can purchase (small quantity at the moment) at or on my blog (in the middle of the page). The adapter requires a separate purchase of the GPS module that Adafruit makes and sells, the Ultimate GPS module part number 746. You only need to solder four pins on the GPS module, the TX, RX, GND, and VIN, and the same pins on the adapter. Since the GPS module is relatively expensive, I can’t stock them up. But if you really need it assembled, you may have a GPS unit sent to me and a few extra dollars for assembly and testing. Just contact me once you make a purchase if you want assembly.

4 Responses to SDI-12 + GPS USB adapter

  1. Nikola Radovanovic says:

    I contacted you on Inmojo regarding purchasing SDI-12 USB Adapter board and asked for schematics of the circuit board design. There is one project I will work on regarding collecting data using SDI-12 Decagon sensors. However, due some technicalities we will probably have to use Arduino in conjunction with Raspberry Pi 3 and we would like to have schematics.

    Also, did you write SDI-12 protocol decoder yourself or used some library?

    Thank you kindly

    • liudr says:


      Thanks for providing some details. I wrote my own code for my SDI-12 USB adapters. I didn’t use any library. The schematics is rather simple, using ATMEGA328 or 1284 and FT232RL. It’s not useful to you unless you want to replicate my devices. The important part is actually the firmware in my perspective. Plus, I provide free Python data logging code for those that buy my adapters and help them getting started. I also have Arduino-compatible dongles and shields that can connect SDI-12 sensors to arduinos with Arduino code. I personally think that if you are already considering using Raspberry pi, then using Arduino for SDI-12 sensors is not necessary. Once you have tried my USB adapters, you will want to use it in your future projects. They connect directly with any computer including Raspberry PI and Beagle Bone. If you can write some basic programs in Python, you’re good to go.

      • nikola.radovanovic says:

        thanks for the response. FW part will not be in my jurisdiction: I recommended to use your devices because I recon it will be simpler for me to use them.

        There will be more devices and shields attached, so I guess that guy that will do the electronic/FW will have to create circuitry that will hold Arduino and some other stuff (GSM module ie) and that he want to fully control what is going on (in case of future maintenance, repairs, etc).

        On the other hand, Raspi 3 will be used as ‘master’ – mainly for expansions in the future when we add some other SW functionalities (like video streaming, remote control of sensors, etc.). So I thought that using Arduino as SPI slave to Raspi 3 will do the trick; among other things there are SDI-12 libraries for Arduino ready to use and we have to use additional board with MCU anyway.

        Thank you kiindly!

      • liudr says:

        I’ve never used the SDI-12 library or any one of the libraries myself. I’ve heard that some sensors such as those from Apogees don’t work with the libraries. It’s also more convoluted to use the library than a simple serial port, which is what my device simulates. You send a command and receive responses. Good luck with your project!

Leave a Reply