This is an iOS app which does not (and will never) require an account and connects to a Canon EOS R series (it may work with other models, likely M series too) cameras, take photos and add GPS tags to photos.
- Connect to Canon cameras using BLE without creating an account,
- Take a single photo or long press to take many in burst mode,
- Navigate the playback menu from your iPhone, without touching the camera,
- Use the intervalometer for timelapses,
- Add GPS tags in different ways (I don't know how people use this feature so I implemented 4 ways).
The following models have been tested:
- EOS R6
From what I read in other projects, the Canon R series and M series all have the same Bluetooth implementation but please let me know by creating an issue if your camera model works or not.
- Graphics:
- Wi-Fi icon by zest (MIT License)
- Lens icon by SVG Repo (Public Domain)
- Canon BLE services an characteristics:
- Thanks to Guo-Rong from furble for helping me figuring out geotagging.
- Canon Bluetooth Control
- Canon BLE Intervalometer
- Bluetooth SIG Assigned Numbers
In order to complete or correct what's been documented in Canon Bluetooth Control, here's what I found:
00030011-0000-1000-0000-d8492fffa821(0xf309) — result of switching modes- notifies with
01before going into suspend
- notifies with
This isn't technically true, the camera notifies with 01 after writing 0x04 to 00030010-0000-1000-0000-d8492fffa821 (0xf307). The Canon Camera Connect app happens to write 0x04 before the camera goes to sleep, but the camera doesn't notify 01 by itself before going to sleep.
UUID: 00040000-0000-1000-0000-D8492FFFA821
00040001-0000-1000-0000-D8492FFFA821- unknown- readable characteristic
00040002-0000-1000-0000-D8492FFFA821- GPS data- write
0x01after being indicated with0x03on "Confirm geotagging" characteristic in order to confirm geotagging capabilities - write
0x03disable geotagging - write
0x04+ 19 bytes of GPS data- byte 0:
0x04, - byte 1:
NorSin ASCII, for North or South, - bytes 2-5: Latitude in DD format in float32 little endian,
- byte 6:
EorWin ASCII, for East or West, - bytes 7-10: Longitude in DD format in float32 little endian,
- byte 11:
+or-in ASCII, for positive or negative, - bytes 12-15: Elevation in meters in float32 little endian,
- bytes 16-19: Unix Timestamp in seconds in int32 little endian.
- byte 0:
- write
00040003-0000-1000-0000-D8492FFFA821- Confirm geotagging- indicates with
0x01when GPS receiver has been disabled on camera - indicates with
0x02when GPS receiver has been set on camera - indicates with
0x03after going in the camera menu, when going to GPS receiver > Select GPS device and selecting Smartphone
- indicates with
