Month: December 2016
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:
- https://forum.sparkfun.com/viewtopic.php?t=12563
- https://blog.rhysgoodwin.com/hardware/print-server-power-control-hack/
- http://www.linato.net/jetdirect/
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 192.0.0.192 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 192.0.0.192 was not convenient so it was changed to be in the 192.168.1.xxx range. This was done by issuing the command ip: 192.168.1.170
(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 1.3.6.1.4.1.11.2.4.3.13.4.0 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 192.168.1.170 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 192.168.1.170 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: