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
01
before 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
0x01
after being indicated with0x03
on "Confirm geotagging" characteristic in order to confirm geotagging capabilities - write
0x03
disable geotagging - write
0x04
+ 19 bytes of GPS data- byte 0:
0x04
, - byte 1:
N
orS
in ASCII, for North or South, - bytes 2-5: Latitude in DD format in float32 little endian,
- byte 6:
E
orW
in 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
0x01
when GPS receiver has been disabled on camera - indicates with
0x02
when GPS receiver has been set on camera - indicates with
0x03
after going in the camera menu, when going to GPS receiver > Select GPS device and selecting Smartphone
- indicates with