Skip to content
/ furble Public

A bluetooth wireless remote shutter release/button for Fujifilm X/GFX and Canon EOS cameras.

License

Notifications You must be signed in to change notification settings

gkoh/furble

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

97 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

furble - FUjifilm Remote Bluetooth Low Energy

PlatformIO CI

A Bluetooth wireless remote shutter release originally targeted at Fujifilm mirrorless cameras.

The remote uses the camera's native Bluetooth Low Energy interface thus additional adapters are not required.

furble is developed as a PlatformIO project.

M5StickC Plus2 (Dark theme)

furble - Dark - M5StickC Plus2

M5Core2 (Default theme)

furble - Default - M5Core2

Supported Cameras

The following devices have been tested and confirmed to work:

Supported Controllers

Initially targeted at the M5StickC, the following controllers are supported:

  • M5StickC (EOL)
  • M5StickC Plus
  • M5StickC Plus2
  • M5Core Basic
  • M5Core2

What Works

Currently supported features in furble:

  • scanning for supported cameras
  • initial pairing
  • saving pairing data
  • connecting to previously paired camera
  • shutter release
  • focus
  • GPS location tagging
  • intervalometer
  • multi-connect

Table of Features

  Fujifilm X & GFX Canon EOS M6 Canon EOS RP Android & iOS
Scanning & Pairing ✔️ ✔️ ✔️ ✔️
Shutter Release ✔️ ✔️ ✔️ ✔️
Focus ✔️ (see #99) ❌ ❌ (see #29) ❌
GPS location tagging ✔️ ❌ (WiFi only) ❌ ❌

Installation

Easy Install

The simplest way to get started is with the web installer. Follow the instructions on the wiki: Easy Web Install

PlatformIO

PlatformIO does everything assuming things are installed and connected properly. In most cases it should be:

  • clone the repository
  • plug in the M5StickC
    • platformio run -e m5stick-c -t upload
  • OR plug in M5StickC Plus/Plus2
    • platformio run -e m5stick-c-plus -t upload
  • OR plug in the M5Stack Core2
    • platformio run -e m5stack-core2 -t upload

More details are on the wiki: PlatformIO

Usage

The top level menu has the following entries:

  • Connect (if there are saved connections)
  • Scan
  • Delete Saved (if there are saved connections)
  • Settings
  • Power Off

On first use, put the target camera into pairing mode, then hit Scan. If the camera advertises a known, matching signature, it should appear in the list. You can then connect to the target camera, which, if successful, will save the entry and show the remote menu.

furble will identify as furble-xxxx where xxxx is a consistent identifier enabling one to differentiate mutiple controllers.

Upon subsequent use it should be enough to hit Connect, selecting the previously paired device and leading to the remote menu.

From the remote menu you may choose to disconnect, control the shutter or activate the intervalometer.

Navigation

Hardware Buttons

All supported controllers have three buttons designated:

  • previous
  • select
  • next

For M5StickC format controllers:

  • previous == power button
  • select == big M5 button below screen
  • next == right side button

For M5 Core controllers:

  • previous == left button
  • select == middle button
  • next == right button

Basic navigation:

  • previous == highlight up/previous/right entry
  • next == highlight down/next/left entry
  • select == action

For slider and roller elements (eg. brightness control, intervalometer numbers):

  • highlight the desired element with previous/next
  • press select to 'edit' the element
  • press next/previous to up/down increase/decrease
  • press select to 'confirm' the change

Touch Screen

At time of writing, only the M5Core2 has been tested. All user interface widget are touch responsive:

  • in menus
    • touch the desired entry
    • drag up/down to scroll entries
  • in rollers (ie intervalometer configuration)
    • drag up/down to adjust entry

For M5Core2, the 'hardware' touch buttons are active and operate identically to the M5 Core.

During shutter control:

  • press 'Shutter' button to release shutter
  • press and hold 'Shutter' button for continuous shooting
  • press and/or hold 'Focus' button to auto-focus
  • press and hold 'Shutter Lock' to lock shutter open
    • press and hold 'Shutter Lock' again to release

Menu Map

  • Connect (if connections are saved)
    • list of connections
      • Shutter
        • Shutter
        • Focus
        • Shutter Lock
      • Interval
        • Start
          • Stop
        • Count
        • Delay
        • Shutter
      • Disconnect
  • Scan
    • list of matching targets
  • Delete (if connections are saved)
    • list of connections
  • Settings
    • Backlight
      • Backlight brightness
      • Inactivity timeout
    • Features
      • Faux-NY
      • Infinite-Reconnect
      • Multi-Connect
    • GPS
      • GPS
      • GPS Data (if GPS enabled)
    • Intervalometer
      • Count
      • Delay
      • Shutter
    • Theme
    • Transmit Power
    • About
  • Power Off

Mobile Devices

Android and iOS devices are supported. furble connects as a Bluetooth HID keyboard and sends the Volume Up key stroke to trigger the shutter. Connection to mobile devices is a little iffy:

  • hit Scan
  • on the mobile device:
    • pair with furble
  • on furble the mobile device should appear as a connectable target if the pairing was successful
  • forget furble on the mobile device to remove such a pair

GPS Location Tagging

Warning

This unit is EOL, support for the replacement is pending (see #141).

For Fujifilm cameras, location tagging is supported with the M5Stack GPS unit:

GPS support can be enabled in furble in Settings->GPS, the camera must also be configured to request location data.

Intervalometer

The intervalometer can be configured via three settings in Settings->Intervalometer:

  • Count (number of images to take)
  • Delay (time between images)
  • Shutter (time to keep shutter open)

Count can be configured up to 999 or infinite. Delay and shutter time can be figured with custom or preset values from 0 to 999 in milliseconds, seconds or minutes.

Shutter Lock

When in Shutter remote control, holding focus (button B) then release (button A) will engage shutter lock, holding the shutter open until a button is pressed.

Multi-Connect

Multi-Connect enables simultaneous connection to multiple cameras to synchronise remote shutter control. Up to 9 (ESP32 hardware limit) cameras can be simultaneously controlled.

To use:

  • Pair with one or more cameras
  • Enable Settings->Features->Multi-Connect
  • In Connect select one or more cameras
  • Select Multi-Connect
    • Selected cameras will be connected in sequence
  • If all cameras are connected, the standard remote control is shown

Caution

  • mobile device connections are extremely finnicky
  • multi-connect involving mobile devices is not well tested and can easily crash
    • multi-connect involving mobile devices is not recommended

Infinite-ReConnect

This is useful for using furble as a passive, always on GPS data source. With this, the camera will attempt to reconnect indefinitely. You don't need to turn on this setting if you are actively using the remote.

To use:

  • Enable Settings->Features->Infinite-ReConnect

Warning

This will not be kind to battery life

Themes

A few basic themes are included, to change:

  • Settings->Themes-><desired theme>
  • Settings->Themes->Restart to fully set the theme
    • better dynamic theme change support is improving in upstream LVGL

Motivation

I found current smartphone apps for basic wireless remote shutter control to be generally terrible. Research revealed the main alternative was attaching a dongle to the camera, of which there were many options varying in price and quality. I really just wanted the Canon BR-E1, but for my camera.

Possibly Supported Cameras

Fujifilm

Given reports from the community and access to additional cameras, it seems many (all?) Fujifilm cameras use the same Bluetooth protocol. Reports of further confirmed working Fujifilm cameras are welcome.

Canon

With access to a Canon EOS M6, I was able to implement support for it. Other Canon cameras might work, but I suspect the shutter control protocol will be different. @wolcano kindly implemented support for the Canon EOS RP.

Protocol Reverse Engineering

Android supports snooping bluetooth traffic so it was trivial to grab a HCI log to see what the manufacturer supplied camera app was doing.

For all supported cameras, a snoop log of:

  • scanning
  • pairing
  • re-pairing
  • shutter release

was analysed with Wireshark.

It was then an experiment in reducing the interaction to the bare minimum just to trigger the shutter release.

Supporting More Cameras

The best way is to repeat the previous steps, analyse the bluetooth HCI snoop log with Wireshark, implement, then test against the actual device.

Background Story

Requirements

Hardware

I wanted a complete solution out of the box to have:

  • bluetooth low energy
  • physical button
  • visual indicator (LED or display)
  • battery
  • case
  • low cost

My search concluded with the M5StickC from M5Stack. The M5StickC and M5StickC Plus have since been EOL and replaced with the M5StickC Plus2.

The M5StickC is an ESP32 based mini-IoT development kit which covered all of the requirements (and more). At time of writing, M5Stack sell the M5StickC for US$9.95. The M5StickC Plus(2) sells for US$19.95.

Software

The project is built with PlatformIO and depends on the following libraries:

Known Issues

  • depending on your perspective, battery life is anywhere from reasonable to abysmal
    • with an active BLE connection, the ESP32 consumes around 50mA
      • an M5StickC Plus2 would last around 4 hours
      • an M5StickC Plus would last around 2.5 hours
      • an old M5StickC would last less than 2 hours
    • if battery life is crucial, and form factor is not, consider an M5Stack Core2 with the 1500mAh module
      • this might last 30 hours

Things To Do

  • error handling is atrociousimproving (it might crash, then restart, which is OK, the M5StickC boots quickly)
  • improve the device matching and connection abstractions
    • especially if more cameras get supported
  • Support more camera makes and models
    • Complete support for newer Canon EOS (eg. RP)
    • Get access to and support the following:
      • Sony
      • Nikon
      • Others?

Links

Inspiration for this project came from the following project/posts:

Related projects: