Intro: Eye-Fi to Bluetooth Bridge: Direct Wireless Print With an Eye-Fi, Polariod Pogo and an Android Phone
The story behind this Instructable starts with Burning Man 2011 – as an amateur photographer and a virgin burner, I wanted to gift people with photos on the playa. However, I wanted to use my "fancy" D7000 and not a point and shoot Polaroid camera. After some search I found the perfect portable printer – the Polaroid PoGo. A compact and simple printer that don’t require ink.
The people I met seemed to like to idea, and it lead to some wonderful interactions. There was one major problem though – every time I wanted to print a photo I had to find a place where I can place the camera, and connect it to the printer using a USB cable. Instead of having a nice conversation with new friends, I was messing around with cables.
Ever since, I was looking for a way to streamline this process. In particular, I wanted a solution that is
- Requires no cables
- Allows me to use my DSLR (so I get to keep hi-res photos)
- Allows me to choose which photos to print
The first breakthrough was when I realized that the PoGo printer has a Bluetooth printing capabilities (somehow I missed that when i purchased it). Great. But my camera can't print to a Bluetooth printer, right? It actually has no wireless capabilities.
That's when I found out about the Eye-Fi cards - SD memory cards with built-in WiFi that allows (almost) any camera to send photos over WiFi. More than that, these cards can be set to send only specific photos by pressing the "Protect" button.
Now, if I can only find a device that can act as a bridge between a Bluetooth printer and a WiFi card. Oh yeah, the old Android phone I have lying around in my drawer! It's small, it has an integrated battery, and it is programmable.
Combining these these three components, I can now print directly from my camera using the following workflow:
- Take a photos
- Press "Protect"
- WiFi card send the photo to the Android phone by setting up a WiFi access point (using the Eye-Fi app)
- My Android app identifies the new photo, re-sizes it to the native resolution of the printer (smaller photos take less time to transfer over Bluetooth v2...), and sends it to the printer
- Printer prints the photo!
That's it! One click on the camera, and you get an instant photo! (sort of, it still takes about a minute to transmit and print)
Step 1: Ingredients
You will need the following:
- Your favorite camera with a SD card slot. Preferably a camera with a dedicated "Protect" button
- Eye-Fi Pro X2 (others might work too)
- Polaroid PoGo printer, or equivalent (e.g. Wasabi PZ310). Note that if you use a different printer, you might need to modify the code a little bit)
- Android phone, with 4.2.2Jelly Bean. Yes, it must be 4.2.2 if you want to use my code. The Bluetooth API on Android is unofficial and the folks from Google change it on every version. Seriously, it took me forever to get it to work. Just use 4.2.2
- Tip - Cyanogenmod 10.1 is based on Android 4.2.2. That's what I ended up using on my Samsung Galaxy S
I found it better to use a dedicated Android device for this purpose and keep only the Eye-Fi network. When other wifi networks exists, the process seem to take longer.
Step 2: Setting Up Eye-Fi and Pogo Printer
Eye-Fi card setup
- Setup your Eye-Fi card to use Direct mode, and send only protected photos (unless you want to print all photos)
- Install the Eye-Fi app on your Android device
- Tip - on your Android phone, go to Settings->Wifi->Advanced and uncheck "Wi-Fi optimization". It should make the Wi-Fi connection more reliable
- Place the card in your camera and test it - it might take up to a minute for photos to appear on your device. Does the photos get send to the phone? Great.
PoGo printer setup
- Pair the PoGo printer with the Android device
- Make sure it's the only paired device. The code will pick the first paired printer
- Test the printer - pick a photo from your device's gallery and send it using the Bluetooth connection
Step 3: Android App
Disclaimer - this is my first "serious" Android app, and as such, the code is pretty messy. Buy hey - it works.
How does it work?
- Start the application and press "start"
- The app will then scan the /Eye-Fi folder every several seconds and look for new Jpeg files. If you keep your files in a different folder, you will need to change the code
- Once a new file is discovered it will be re-sized, sent to the printer and then renamed with "processed." prefix. Note that the phone will vibrate once new files are detected
- On the first time time you print, you will be asked which Bluetooth application to use. Pick "com.or3n.onepressprint.BluetoothPicker.java" and click on "Always"
- Important! The original jpeg file is removed and only the re-sized version is kept.
Other notes about the code:
- The app does not automatically load when the device restarts. You might see some traces of my failed attempts to get this part to work in the code. If you figure out to get it to work, please let me know
- I am using a two stage process for re-sizing large images that do not fit in the memory of my old Galaxy S. If it worked on the Galaxy S it should work on all devices...
- If anyone wants to help improving the app - contact me and I will provide more information on the code
Step 4: Shoot and Print!
Simply follow these steps:
- Start the app (if you haven't yet)
- Turn on the printer
- Mark photo as protected
Note - there is an annoying timeout after which the printer will turn itself off if it is running on battery. I tried solving it by sending broken images to keep it awake without printing, but it did not work. If you manage to find a workaround, please share :)
Let me know if you have any questions!