Little hacks for a GoPro Hero 3 White

Someone came to me with a broken GoPro Hero 3 White which wasn't turning on anymore, asking if there was a cheap way to fix it.

After tearing it down, a quick inspection revealed that the two flat-flex cables (the Shutter button one and the Power/Mode+LCD one) were both damaged, so neither the buttons or the LCD were working.

However, making contacts on the PCB traces of the Power button resulted in some reaction from the camera, so I knew there was still a chance.

Replacing the cables with spare parts could have been an option except that the receptacle for the Power button flat-flex was busted too. and I am not that great at micro-soldering; so I looked for an easier way out.

GoPro cameras have the so called “Herobus” interface and looking at the connector pinout for a similar model I saw that the Power button (PWRBTN) is exposed at pin 19, so an external button can be added to turn the camera on. I ended up buying a cheap compatible connector to experiment with.

I soldered a momentary button to a little piece of perf-board held into the strain-relief slot, and it works robustly enough.

Hero Bus External Power Button wiring

NOTE: do not apply too much solder to the pins of the connector, or you might risk to bridge them in places hard to reach. That happened to me and I lost quite some time struggling with flux and solder wick to get rid of the bridge.

In the picture below you can see the final result; it's an ugly contraption, but, hey, it works.

Hero Bus External Power Button

Debouncing the button is not strictly needed to power on the camera because a 1-second long press is required.

The external connector solves the problem of the busted Power button, however the Shutter button still has to be pressed somehow to be able to control the camera functions.

It turns out that, instead of buying the replacement for the flat-flex cable, a software solution can be used for that.

The hack is sometimes called “Super One-Button mode”, and it consists in putting a script named autoexec.ash in the MicroSD card: this script can contain commands to control the camera and it will be executed automatically when the camera boots. The ash extension of the file derives from the name of the command line interpreter Ambarella shell, which comes after the hardware platform used for the device, like reported in this DefConf presentation.

The camera I had was a GoPro Hero 3 White and unfortunately there were only very few basic scripts on-line for this model.

So here are some more examples I came up with.

Dump help text

The Ambarella shell supports output redirection, so the output of commands can be saved to a file for later inspection.

This script can be used to list the supported commands:

help > d:\help.txt

And from there, a script to dump the help text of various commands can be written:

bp > d:\bp.txt
config > d:\config.txt
cpu > d:\cpu.txt
date > d:\date.txt
dmesg > d:\dmesg_help.txt
dmesg rtos -100 > d:\dmesg_rtos.txt
dmesg dsp -100 > d:\dmesg_dsp.txt
eeprom > d:\eeprom_help.txt
net > d:\net_help.txt
net info > d:\net_info.txt
net status > d:\net_status.txt
poweroff > d:\poweroff_help.txt
t app curapp > d:\t_app_curapp_help.txt
t app curapp status > d:\t_app_curapp_status.txt
t app > d:\t_app_help.txt
t app key > d:\t_app_key_help.txt
t app linux_usb > d:\t_app_linux_usb_help.txt
t app msg > d:\t_app_msg_help.txt
t app tcmd > d:\t_app_tcmd.txt
t app test > d:\t_app_test_help.txt
t cal > d:\t_cal_help.txt
t disp > d:\t_disp_help.txt
t > d:\t_help.txt
t iavinfo > d:\t_iavinfo_help.txt
t k20 > d:\t_k20_help.txt
t uart > d:\t_uart_help.txt
ver > d:\ver.txt
wifi > d:\wifi_help.txt
sleep 1
poweroff yes

Enable the serial console via USB

Use this script:

sleep 4
t app test usb_rs232 1
sleep 2
t app key mode

Then:

  1. Power on the GoPro without connecting the USB cable.
  2. Wait 6 seconds and only then connect the USB cable.
  3. Open the new USB serial device (e.g. with minicom or screen).

The last command t app key mode seems to be needed to prevent the camera from cutting the serial connection.

Take a picture and then turn off the camera

This is done by changing the mode from Video to Picture, then pressing the record key (which corresponds to the physical Shutter button), and then shutting down:

sleep 2
t app key mode
sleep 1
t app key record
sleep 2
t app key power

The script assumes that Video mode is the default mode when the camera powers on.

Turn Wifi On

On the GoPro Hero3 White there is no easy way to press the Wifi button via software using the t app key command.

Presumably that could be done with the t gpio command but I didn't know what the GPIO pin number was, so I looked for an alternative way.

Using the t app key command it is possible to navigate the user menu.

The navigation steps can be figured out from the manual:

And/or by observing the steps on a fully functional camera, like here or here

To enable Wifi in App Mode the navigation is like the following:

  • press the mode button 4 times to get to the 'Settings' menu;
  • press the record button to enter the sub-menu;
  • press the mode button 6 times to get to the 'Wireless Controls' menu;
  • press the record button to enter the sub-menu;
  • press the record button again to enter the wireless mode sub-menu;
  • press the mode button 2 times to get to the 'GoPro App' mode;
  • press the record button to enable Wifi.

This results in the following script:

sleep 4
t app key mode
sleep 1
t app key mode
sleep 1
t app key mode
sleep 1
t app key mode
sleep 1
t app key record
sleep 1
t app key mode
sleep 1
t app key mode
sleep 1
t app key mode
sleep 1
t app key mode
sleep 1
t app key mode
sleep 1
t app key mode
sleep 1
t app key record
sleep 1
t app key record
sleep 1
t app key mode
sleep 1
t app key mode
sleep 1
t app key record
sleep 3
rm d:\autoexec.ash
sleep 1

Note that enabling WiFi seems to reduce the USB functionality, for instance it is not possible to enter the USB RS232 mode anymore, and the USB Mass storage mode gets disabled too.

A similar script can be used to disable the Wifi if needed.

Conclusions and final notes

A software solution to an hardware problem is not always the best one, but in this case it surely was the cheapest one.

In case a script produced some weird side-effect a manual firmware update can be performed to try to reset all the camera default status; this requires a charged battery. The upgrade process can take up to 5 minutes, so don't panic too early if the GoPro does not seem to be active for a while.

My collections of autoexec.ash scripts for the GoPro Hero 3 White has been merged in KonradIT/autoexechack.


CommentsSyndicate content

Thanks for the post! I'm

Anonymous's picture

Thanks for the post!

I'm having some troubles with enabling the serial console via USB - I've created an autoexec.ash file with the content that was provided, and I can't manage to find a USB serial device on my PC when connecting the camera to it.
If this matters - I'm using a Linux machine.

Hi, the USB-serial script is

ao2's picture

Hi,

the USB-serial script is very time-sensitive, make sure you are also following the instructions after the script.

Also this may be model-dependent, if your GoPro is a different model I am not sure if it works at all.

Unfortunately I don't have the device anymore so I cannot do any more testing.

Ciao, Antonio

Post new comment

The content of this field is kept private and will not be shown publicly. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
F
s
9
U
T
3
Enter the code without spaces.