CamCoord Adds Automatic Geotagging to Sony Cameras Using Bluetooth

By pairing an nRF52840 with a GPS module, this project enables older Sony cameras to receive accurate location data over BLE.

Geotagging images

When snapping a photo on almost any smartphone and many DSLRs, more than just pixels are stored in the resulting image. In addition to the picture data is an assortment of metadata stored in the EXIF format which holds information such as the settings used to capture the photo, dimensions, timestamps, a thumbnail, and also the location where it was taken. This can be especially helpful when building a history of places that have been visited and for calculating the sun's angle in the sky given a timestamp.

However, older cameras and even some newer ones might lack the required GPS hardware to get coordinates, meaning that it's either foregone entirely from the metadata or needs an external phone and app to retrieve it. Instructables user MajorNerd found this to be a clunky solution, which is why he created his own Sony geotagging device called the CamCoord.

The hardware

After some cursory research, MajorNerd discovered that major progress had been made within the community to decipher Sony's BLE protocol, thus allowing him to send his A6600 data using a development board. The original plan involved a Raspberry Pi Pico W since it is relatively inexpensive and can run MicroPython, but this fell through since the library lacks support for pairing. The alternative Adafruit Feather nRF52840 Express board turned out to be an even better choice owing to its built-in BLE, onboard battery charging circuit, and ability to be attached to FeatherWing modules such as the Ultimate GPS FeatherWing from Adafruit.

Communicating with the camera

The script for connecting to the camera with Bluetooth Low-Energy was quite simple, as the program consists of just five steps. First, the radio connects to the camera using its hardware address. Next, a pairing sequence is initiated to set up communication between the two before the location service and location characteristic are discovered through their unique identifiers. Lastly, an infinite loop is started to write mock data to the characteristic once every second.

Getting GPS data

In order to replace the mock location data with actual values for latitude and longitude, MajorNerd had to attach the GPS FeatherWing and get it communicating. The Adafruit GPS library handles most of the work with regard to reading incoming serial data, parsing it into a usable format, and then converting those values into accessible objects and properties. One minor wrinkle to this implementation was the lack of automatic timezone and daylight savings time lookup, meaning that those values still need to be manually set on the camera itself.

Other features

MajorNerd went beyond the task of just sending values as he was able to incorporate the onboard RGB LED of the Feather to act as a signal for the device's current state. And, owing to the somewhat limited 3000mAh LiPo battery cell, the code includes a check for the onboard switch that will toggle sleep mode if it is pressed. Finally, the custom 3D printed enclosure has handles on both sides of easy carrying, a cutout for the indicator LED, and a port for charging the battery with a micro USB cable.

Using the CamCoord

On a pleasant sunny day, MajorNerd went out for a hike, and after reaching his first destination, he switched on the CamCoord, waited for it to connect to the camera, and then tossed it in his backpack. For the rest of the day, all he had to do was switch on his camera, wait for the connection to be re-established, and then take photos while knowing his current location data was being saved to every image file.

Evan Rust
Embedded Software Engineer II @ Amazon's Project Kuiper. Contact me for product reviews or custom project requests.
Latest articles
Sponsored articles
Related articles
Latest articles
Read more
Related articles