Rack Mounting RTL-SDR


This post talks about rack mounting a RTL-SDR reciever attached to a raspberry pi into a 1U case. The donor case used was a used kramer broadcast 1110 balanced audio distributor, but any 1U case should work.

Parts Needed:

    • 1U Case
    • 5V 3A power supply (Mean Well RS-15-5)
    • Raspberry Pi
    • Class 10 SD Card
    • rtl-sdr receiver with antenna
    • Short 6″ ethernet patch cable
    • panel mount ethernet jack (“search ebay for “ip68 ethernet”)
    • Screws, wire, fuses, switches, etc…


Configuring the Raspberry PI:

    1. Get the Raspbian “lite” image from  https://www.raspberrypi.org/downloads/raspbian/
    2. Install the image based on this guide: https://www.raspberrypi.org/documentation/installation/installing-images/README.md
    3. Find the SD card on the computer and add an empty file to it with the file name “ssh” (no extension). This will enable ssh on boot
    4. Power up the raspberry pi with ethernet connected.
    5. Find the address of the pi by port scanning with a tool like Nmap or looking at your routers DHCP allocation table.
    6. Use a tool like Putty to ssh into the pi on port 23. User name “pi” Password: “raspberry”
    7. Its a good idea to change the password when you log in using the passwd utility
    8. Optional: since this is going to be a headless install it would be a good idea to lower the video memory using  raspi-config.
    9. Now run these commands to get Osmocom rtl-sdr up and running on the pi:
      sudo apt-get update
      sudo apt-get install git cmake build-essential libusb-1.0 libpulse-dev libx11-dev
      git clone git://git.osmocom.org/rtl-sdr.git
      cd rtl-sdr
      mkdir build
      cd build
      cmake ../ -DINSTALL_UDEV_RULES=ON
      sudo make install
      sudo ldconfig
  1. Now you should be able to run rtl_tcp -a IpAddressOfPiGoesHere If an error pop up like Failed to open rtlsdr device #0. run sudo rmmod dvb_usb_rtl28xxu rtl2832 This will prevent the pi from loading the stock drivers for the dongle.
  2. The pi now can be used as a remote rtl-sdr server

Mason Jar Hydroponics

The bucket system from a previous post was difficult to maintain. This was due to the fact that a 5 gallon bucket full of water weighs roughly forty pounds. Hauling that up my basement stairs to change out the water was not a fun task. This lead to trying to find a system that used smaller modular components to grow plants.

Parts Needed:

  • Wide mouth half gallon ball jars
  • Wide mouth plastic ball jar lids
  • 2″ net cups
  • 2″ hole saw
  • Tetra 77851 Whisper Air Pump, 10-Gallon
  • Tubing 1/4″ OD 3/16″ ID. This might be thicker than typical aquarium tubing.
  • Backflow valve
  • T valve
  • Small air stone
  • Rain Bird TS25/10PS Drip Irrigation 1/4″ Tubing Stake with Bug Cap Diffuser
  • rockwool cubes
  • fertilizer
  • 2″ hole saw
  • drill
  • drill bits

Assembly of the ball jar lids is pretty simple. Clamp the lid loosely in a vice and drill a 2″ hole with the hole saw for the net cup. Next drill a smaller hole so you are able to press fit the bug guard from the drip irrigation stakes. This part allows for the air tubing to be press fit into the jars for easy removal. After that plumb up the air pump add some water and the system is ready to grow plants.

Portable Battery Power Box

This post will discuss the construction of a portable battery box. The box was constructed to house a 12V 7AH sealed lead acid battery.


Parts Needed

  1. Plano Tactical Custom Ammo Box http://amzn.to/2ygsizL
  2. Schumacher SEM-1562A-CA 1.5 Amp Speed Charge Battery Maintainer http://amzn.to/2yiiqWc
  3. 12V 7 Amp Rechargeable Lead Acid Battery http://amzn.to/2yQhup9
  4. 12V Battery Low Voltage Cut off Switch PCB (see schematic for photo)
  5. Fuse Holder http://amzn.to/2xL0Siz
  6. Fast-blow Glass Fuses http://amzn.to/2x7bgiP
  7. 4 in 1 Socket Charger Panel http://amzn.to/2xKlQOo
  8. Schumacher WM-12 Cable Connector http://amzn.to/2xSR4oJ
  9. 100x68x50mm Project Box
  10. 1/2-Inch Hole Grommets http://amzn.to/2yPoF0J
  11. Wire
  12. Heat Shrink Tube http://amzn.to/2xTxHf6
  13. Crimp Connectors http://amzn.to/2xPWCzM


The battery was wired with the SAE (WM-12) connector that came with the battery maintainer. This allows for the battery to be connected to the battery maintainer to keep the battery in good condition. The battery box uses the secondary SAE (WM-12) connector that was purchased to connect the battery to the electronics. The Battery positive is run through a 10 AMP fast blow fuse. Then the voltage goes onto the low voltage cut off switch. This will prevent the battery from over discharging and damaging itself when in use. After that the voltage passes through the panel mount switch.  Next the panel meter, USB, and Lighter sockets are all wired in parallel.

The low voltage cut off switch and fuse holder are located in the 100x68x50mm Project Box. This was done to provide mechanical protection for the PCB and to also electrically isolate it since it otherwise would have been floating around in the ammo box.

The battery should not be charged with the box lid closed.

Here is a schematic:



Wireless RS-232 with ESP-Link and an ESP8266

This will show how to create a wireless WIFI serial port. This is accomplished by flashing esp-link onto an ESP8266 and using a  level shifter to convert 3.3V signals on the ESP8266 to computer levels.

Parts Needed:

  • nodemcu amica R2
  • RS-232 Level shifter using a MAX3232 Available from ebay by searching “MAX3232 converter” make sure you get one with four pins like this photo:


  • PCB Order from OSH Park
  • Micro USB cable
  • Micro USB 5V power supply for ESP8266
  • Windows PC
  • Optional RS-232 Loopback
  • Optional RS-232 DB9 gender changer


Flashing the nodemcu amica:

  1. Get the latest esp-link firmware from https://github.com/jeelabs/esp-link/releases
  2. Download the Nodemcu flashing software at https://github.com/nodemcu/nodemcu-flasher/archive/master.zip
  3. Connect the nodemcu amica to the computer using a USB Cable
  4. Setup the Nodemcu flashing software to flash the correct firmware files at the correct memory addresses See https://github.com/jeelabs/esp-link/blob/master/FLASHING.md for details: Flash
  5. Make sure that the checkbox is checked for all the files. It appears to not flash the file if it is unchecked:


Now you should be able to hit the flash button:


Setting up the esp-link software:

  • On a computer look for an open wifi hotspot with a name like  ESP_[??????] and connect to it.
  • In a web browser navigate to
  • On the right hand side of the website click on the Wifi Soft-AP and configure your SSID and add a password if you want. Note you will have to re-connect to the device if you change the SSID or password.
  • On the home tab configure the GPIO using the presets drop down choose the ESP-12 swapped option:


  • On the debug log tab turn off debugging since it will echo on the serial port:



The PCB connecting the ESP8266 and the level shiftier will need to be soldered as shown in this photo:


If you are unsure of the orientation make sure that the VCC and Grounds of the ESP8266 module are connected to the respective VCC and GND pins on the level shifter.

Testing and Use

The esp-link software has a built in serial terminal that works OK for a quick test. It is located on the uC Console tab. A quick way to test if everything is working is to use a loopback. The loopback can be as simple as connecting pins 2 and 3 of the dsub on the level shifter together. When the loopback is attached anything typed should be echoed in the console. When it is disconnected no echoing should occur.

The serial port can also be accessed using telnet. This can be done using a telnet client like PUTTY http://www.putty.org/

Connect to the device on port 23 using telnet

Network Attached GPIO with HP Jetdirect

The goal of this is to create some network attached GPIO with some of the HP Jetdirects in my junk box. Here are some of the web sites used to figure this out:

As far as hardware the project was started with a Jetdirect 300x this was replaced with a 170x. The 300x has 10/100 base t which is why it was initially chosen. This was later replaced with the 170x which is only 10 base t. If you are looking to buy hardware, shoot for the 170x. The 300x, at least the one tested, does not appear to be as stable as the 170x.

The Jetdirects did not come with a power supply. The power connector was a somewhat weird diameter. Sourcing the power supply on Ebay proved more time consuming and expensive than desired. The search did lead to this listing which is hilarious.  Just picture a person driving with a wired network and a printer in their car. No one probably ever buys this…


The easiest solution for this was to pop open the case and solder some wires to the power connectors. That was also a problem since HP was nice enough to use some super tiny Torx security bits. A quick trip to the hardware store and the screws were no match for my new set of security screwdriver bits.

These wires were then attached to a surplus 12v wall wart.


For testing a PCB was created and the design was sent to https://macrofab.com/.


The original PCB did not have the connection on the DB25 connector between pins 1,  10, 13 and 15. This was added later on with some red 30 awg wire wrap wire.

The first problem that was encountered was finding the Jetdirect’s IP address. Usually this would be a simple task. All that would be required is holding down a button on startup and the jet direct would print out a configuration page that lists its IP address. This would be easy other than the fact that I no longer own a printer with a parallel port interface. The device is supposed to have a default IP of so that was tried first. After some reading it appears that if the device is power cycled while holding the
“test”button and releasing after 5 seconds it will go into reset and have factory defaults. After this was accomplished it was possible to ping, telnet and connect to the device using a web browser.


The telnet interface looked somewhat primitive so I opted for the web interface. The web interface failed to load in chrome so IE was tried. IE gave this lovely error:


After updating Java and adding the IP to the trusted sites in the java control panel, the web interface still did not work.


After some reading this is due to stricter security in the newer versions of Java. The work around for this was to use the telnet interface.


The jet direct’s default IP address of was not convenient so it was changed to be in the 192.168.1.xxx range. This was done by issuing the command ip: (or whatever IP you want) hitting enter then typing quit. After that wait one minute and power cycle the Jetdirect. The Jetdirect should now show up hopefully at the new IP. One other setting also needs to be set to gain control of the Jetdirect’s parallel port. The “set cmnty name” setting also needs to be set. This can be done by sending set-cmnty-name: private then typing quit.

One more thing needs to be done to trick the Jetdirect into thinking it has a printer attached. This is setting the npPortCentronicsHandshaking value in the jet direct. This was done with SNMPGetSet available here: http://www.fileguru.com/SNMPGetSet/download. The register is set by putting the value of into the OID box at the bottom of the form. Once that is done hit the SNMPGet button. The returned value should be 3.


To set the value change the value in the box to 2. After changing the value of 2 make sure that you set the value type to ANS1_INT. Then press the SNMPSet Button.  If you do not change the value type the setting will not save.  You can confirm the setting was saved by pressing the SNMPGet button again.


If everything is working correctly the Jetdirect should now be able to be controlled. To verify everything is working correctly first check to see if the Jetdirect will open port 9100. This can be done from a Unix shell with netcat. Command nc -vz 9100 you should see  [tcp/*] succeeded! if everything is working. If that does not work try port 23. If you can connect on port 23 but not on 9100 the Jetdirect does not think a printer is connected. Check your wiring especially on pins 1,  10, 13 and 15.

If everything works the fun begins. A printf "\xFF" | nc 9100 should turn on all the leds.

A sample program was constructed in C# to simulate the Knight Rider dash or a Cylon.

Here is the code: https://github.com/mdunakin/JetDirectDemo

Here is a video of the code running:

Network Caller ID (NCID) Install On Raspberry PI

This guide will walk through how to install network caller ID (NCID) on a headless raspberry pi. The primary goal of this is to create a blacklist to prevent unwanted spam telephone calls.


Hardware needed:

  1. Raspberry Pi, a model b was used but any should work
  2. SD Card, any larger than 4gb should work
  3. 5V power supply. The modem appears to take a large amount of current. The first 1 amp power supply was unstable so it was replaced with a 2 amp version
  4. Modem, a Zoom 56K USB Modem Model 3095 was used. This was sourced from Ebay.
  5. Phone cord
  6. A splitter. http://amzn.to/2fyT9hP to put the modem in parallel to the phone

How to install NCID:

  1. Grab an image of the Rasbian operating system from https://www.raspberrypi.org/downloads/ and install it to an SD card using this guide https://www.raspberrypi.org/documentation/installation/installing-images/
  2. SSH into the PI using putty http://www.putty.org/ User Name pi Password raspberry
  3. Grab a copy of the NCID source code from here https://sourceforge.net/projects/ncid/files/latest/download using wget. Sourceforge can be a little strange so you may have to poke around to find the direct link
  4. Un-tar the archive using tar -zxvf ncid-X.XX.X-src.tar.gz (replace the X.XX.X with version number)
  5. Run sudo-apt get update then grab a copy of sudo apt-get install libpcap0.8*
  6. Navigate to the folder with the build scripts and run sudo make ubuntu-install
  7. Open the config file with sudo nano /etc/ncid/ncidd.conf
  8. Make the following changes to the configuration file:
    set ignore1 = 1
    set hangup = 1
    set ttyport = /dev/ttyACM0
    set lockfile = /var/lock/LCK..ttyACM0
    # Make sure your modem is located here
  9. open nano /etc/ncid/ncidd.alias
  10. Comment out this line with a “#” #alias LINE - = POTS
  11. Make the  NCID daemon automatically start up sudo update-rc.d ncidd defaults
  12. The blacklist is located here and should be edited /etc/ncid/ncidd.blacklist
  13. Finally run sudo invoke-rc.d ncidd restart to get the service running. This also appears to need to be run after editing the blacklist.


Deep Water Culture Hydroponic System

This is a short write up of the deep water culture hydroponics system that was just constructed. The water is housed in a food safe bucket from the hardware store. Food safe was chosen due to the fact that chromium and other heavy metals can leach from non-food safe buckets.   The bucket contains a EcoPlus 396 gallon per hour pump without any nozzle. The bucket also contains a Tetra Whisper Air Pump connected to a large air stones  with tubing  and a back-flow valve  to prevent water from siphoning back into the pump if power is lost. The pump and fish tank air pump are used to oxygenate the water for the system and keep the water moving so that it will not get stagnant.

The top of the bucket was drilled out with a 2″ hole saw . The holes are filled with 2″ mesh net pots. These pots allow the plants roots to grow down into the constantly moving water. The pots are filled with clay pebble grow media. Before this media was used it was washed multiple times to remove any excess dirt from the media. Then it was placed in the bucket for a few days with the fish tank air pump to oxygenate the stones. This was a recommendation from multiple sources found online.

The light is just a standard led spotlight bulb wired to a light timer to give the plants a sense of day and night. The pump and air pump will be run continuously while the system is operational.

The final step was transplanting in some plants and fertilizing the plants. General Hydroponics MaxiGro fertilizer was chosen since it has a PH buffer in it . The PH buffer hopefully will prevent having to adjust the PH of the system over time.

Here are some photos of the system:





Rfcat on eZ430-Chronos Dongle with CC-Debug

Steps to get Rfcat working on a eZ430-Chronos Dongle.

If you are interested on what Rfcat is watch this video https://youtu.be/ZWx8y5_J0Xo

Acquiring supplies

You will need 1 eZ430-Chronos kit (more specifically the PCB shown in the green box below)


Note: this will only work on older eZ430-Chronos dongles with the black PCB. The newer kits have a white PCB that contains a CC1101. To the best of my knowledge the Rfcat project only runs on the CC1111. The eZ430-Chronos kit used was purchased from TI on 08/2011 during a sale for $24.50 USD.

You will also need 1 CC-Debugger. They can be acquired from TI or in my case Ebay. Buying development tools from Ebay can be a gamble but the price was just too good for this CC-Debugger.


And here is the dongle and CC-Debugger:




Wiring the dongle is fairly straight forward. Since a bootloader will be installed it only really has to remain wired for a short period of time and does not need to be robust at all. Due to this some 30 awg solid core was used.


A diagram of how to wire the part can be found on page 47 of this pdf http://www.ti.com/lit/ug/slau292g/slau292g.pdf.


Note: the connector is wired as it would be looking into the CC-Debugger. If you are unsure of the connector orientation find a CC debugger pin-out and look at pins 1 and 9 (vcc and gnd) with a DMM.

Updating the CC Debugger

The easiest way to update the CC-Debugger to the latest firmware appears to be getting a copy of Smart RF Studio http://www.ti.com/tool/smartrftm-studio. Run the software with the CC-Debugger connected and you will be able to flash the CC-Debugger with the latest firmware.

Flashing the Chronos Dongle

Flashing the chronos dongle was done with SmartRF Flash Programmer (Version 1) http://www.ti.com/tool/flash-programmer. Version 2 was avoided since it did not have an apparent way to write protect the bootloader.

The hex files for Rfcat can be found here: https://bitbucket.org/atlas0fd00m/rfcat/downloads

The bootloader (RfCatChronosCCBootloader-150225.hex) was written first:


Then the actual code was written (RfCatChronos-150225.hex) Make sure that the Write protect boot block check box is checked for this step.


If you have done everything correctly you now should have an Rfcat dongle.

Using the Rfcat dongle

An old netbook was used to test the dongle. It was re-formatted and 32 bit Ubuntu 14.04.4 LTS was loaded on to it http://releases.ubuntu.com/14.04/.

After setting up the OS python-usb and libusb were acquired.

After that the rfcat tarball was unziped and  sudo python setup.py install was run to install rfcat.

A udev rule was added for the dongle but it ended up not working so it will not be documented. The tool can be run without the udev rule by issuing sudo rfcat -r

Screenshot from 2016-04-10 18_09_27