With Black Swift, it is possible to convert one's old printer into wireless by integrating Wi-Fi print server into it. Such print server not only can send print jobs to the printer, but also control it's power to turn it off when not used and turn it on automatically — which is useful if you use that printer occasionally.

We will use 'p910nd' daemon without spooling capabilities — so it doesn't need additional disk space to store print jobs. p910nd is perfectly suitable for home environment.

Let's use an old Samsung ML-1630 printer.

We need:

  • Black Swift board with modified p910nd printing daemon.
  • Solid state relay (SSR) to control printer's AC power; I use Sharp S202T02 with integrated zero crossing detector and 2A maximum load current — with more power-hungry printer or 110 VAC mains you'll probably need more (check your printer's specs for maximum current consumption).
  • Low power 5VDC power supply to power BSB (printer's own power supply will be turned off when idle).

Simplified connection diagram, added blocks marked in yellow:

Hardware

  • Place 5VDC power supply inside printer
  • Place Black Swift inside printer (better to find a place away from metal parts to avoid Wi-Fi antenna shielding)
  • Connect 5VDC power supply to Black Swift and printer's AC input
  • Connect SSR's "+" via appropriate resistor (160 Ohm in this case — SSR with 8mA sensitivity and 1.4V forward voltage) to Black Swift's GPIO and SSR's "-" to Black Swift's ground
  • Cut one of the AC wires coming to printer's power supply and connect it to SSR's high voltage side
  • Place SSR on some metal part inside printer — you need metal to provide adequate cooling as SSR has to dissipate some power
  • Connect Black Swift's USB to printer's USB port. If you prefer not to use microUSB adapter but solder USB cable to Black Swift board, connect all 4 wire — +5V, GND, D+, and D-. Without +5V present most printers wouldn't recognize there's USB connection present

Tiny 5VDC/0.6A power supply fitted in printer's plastic frame:

Solid state relay mounted to printer's internal metal part (with some thermal greese added):

Black Swift board inside printer's case, all wires already soldered, including USB cable:

USB cable (this way it allows me to unplug print server and use ML-1630 as regular USB printer if I want to):

Software

Now we need to modify p910nd printer daemon software to add two functions:

  • Turn on the printer by setting some GPIO to "1" when print job arrives
  • Turn off the printer after finishing the job and waiting for some time (as we don't know if printer really finished printing; all we know is that we finished sending the job to it via USB)

As p910nd is very simple, it's an easy task. Patch is on our Github page, and precompiled package can be found here.

There are two new options in /etc/config/p910nd file:

  • option gpio 19 to set SSR's GPIO number
  • option timeout 300 to set timeout in seconds

Besides this, configuration is no different from regular OpenWRT configuration as print server:

  • install kmod-usb-printer with opkg update && opkg install kmod-usb-printer command (on devices different from Black Swift you may need to install common USB drivers and utilities as well)
  • download and install p910nd with opkg install p910nd_0.95-3-bsb1_ar71xx.ipk command
  • edit /etc/config/p910nd to enable it (set enable option to «1») and configure GPIO pin
  • enable autostart with /etc/init.d/p910nd enable command
  • start print server immediately with /etc/init.d/p910nd start command

To access the printer from PC with Windows OS, you need to add new printer on TCP/IP port 9100 with RAW protocol.