Posted on Leave a comment

Genlocking With MewPro

Building the first prototype of MewPro Genlock Dongle for GoPro Hero 3+ Black is finished. Our shop will sell it after PCB is ready.

As stated in our previous post, 3D video/photo captures by GoPro are very strict and accurate: They require genlock signals of not only VSYNC for every frame but also HSYNC for every scanning line. However, for slow microprocessors like Arduino it is impossible to generate high-frequency HSYNC, so we decided to use the original Dual Hero System as a function generator.

The following is a photo of the prototype we made:
genlock
genlock-fig

Two green boards are “MewPro Genlock Dongle” prototypes. They are attached to master/slave bacpacs of a GoPro Dual Hero System (two orange boxes connected by a white cable). The master MewPro Genlock Dongle has a wired shutter release connected. The slave Dongle has a GoPro Hero 3+ Black with MewPro connected. The latter connection consists of four signals (and GND), namely, RS-232(Dongle Tx -> MewPro Rx), HSYNC, VSYNC, TRIG.

MewPro Genlock Dongle emulates GoPro camera, and as a result we succeeded in getting these signals. The signals can be fed to as many numbers of GoPros with MewPro as you like. The settings of master camera will be automatically copied to of these slave cameras by using RS-232, as original Dual Hero is doing it using I2C.

Schematics and source code for MewPro Genlock Dongle will be published in this blog when the PCB is ready.

Posted on Leave a comment

Status of Supporting Hero 4

Today we got a brand-new GoPro Hero 4 Black. However, currently MewPro doesn’t work with it.

We attached MewPro to it and investigated responses for I²C commands. It seems that the supporting module of Dual Hero System, which MewPro also relies on, has not yet implemented on Hero 4.

Someone on the Net has already asked GoPro about Dual Hero System compatibility on Hero 4, and the official answer from the company was “not yet”.

So please wait until they release a new firmware. We believe that if a camera works with Dual Hero System then MewPro can also work with the camera.

Update 10 Feb 2015: GoPro Hero4 Black (firmware 02.00.00) doesn’t support Dual Hero System yet.

Posted on Leave a comment

Telnet to GoPro Hero 3+ Black

The post is to explain how to log-in to the Linux console of Hero 3+ Black.

A real-time operating system (RTOS) is running on GoPros, and a Linux is also running as a task of the RTOS. For example, communication between Herobus and GoPro Hero 3+ Black is maintained by the RTOS and the web server (Cherokee), which GoPro apps on smart phones and/or Wi-Fi Remotes are to connect, is by the Linux.

There’s a well-known hack for telnet-ing to GoPros: Putting a tuned autoexec.ash file on the root directory of microSD card. But the hacks written for older GoPros don’t work for Hero 3+ Black. The issue is because Hero 3+ Black seems to lack some linux commands such as pkill or telnetd at a glance. But don’t worry. These commands are actually implemented by busybox, not by standalone binaries even for older GoPros.


Steps to telnet-ing to Hero 3+ Black

  1. Create a text file named autoexec.ash that contains the following lines:

    Note: Each end-of-line should be ‘\n’ (Unix style), not ‘\r\n’ (MSDOS style).
  2. Put the autoexec.ash file to the root directory of microSD card where DCIM and MISC reside.
  3. Insert the microSD into your Hero 3+ Black.
  4. Turn on Wi-Fi and enter “GoPro App mode” using the side button of camera body.
  5. Power on GoPro using the front button of camera body.
  6. Connect GoPro’s Wi-Fi from your PC or Mac.
  7. Wait about 30 seconds.
  8. Type telnet 10.5.5.9 8080 on your terminal.

Voilà! You can now enter to the Linux on GoPro Hero 3+ Black.
telnet
If you have memdump in the root directory of your microSD then you can dump RTOS log, too:
memdump
dump

Posted on Leave a comment

You Like Underwater Selfie?

Adding a programmable switch to MewPro helps us, for example, to take selfies underwater.

No one is eager to drill a hole in underwater housing. But sometimes you might dream if there were an extra switch for customizable functions in GoPro then some great photo/video of something great (or GPOY) could be shot.

In this post, a method to use a reed switch and a magnet with MewPro is addressed. No drilling into housing will be required.

Parts List

  1. MewPro system (GoPro Hero 3+ Black, MewPro, Arduino Pro Mini)
  2. reed switch
  3. magnet
  4. (bits of solder and wires)

reed-switch-and-magnet
⇧ center: reed switch (cost about 2USD), right: neodym magnet (cost less than a dime)

The reed switch will be closed when magnet field is applied. The neodym magnet has strong enough force even from the outside of housing.

Wiring is simple as the following figure:
reed-schematic
⇧ connect D5 and GND pins to either leads of the reed switch

WARNING: Reed switches are very fragile; contacts are sealed in a thin glass envelop. Don’t bend the leads of switch or you will easily destroy/crack the glass.

reed-soldered
⇧ electrical wires are twisted around the straight leads before they are soldered

reed-sw-back
⇧ reed switch w/ a prototype of MewPro in GoPro housing


MewPro Software Mods

In MewPro.ino find the lines

//********************************************************
// f_Switches: One or two mechanical switches
#undef  USE_SWITCHES 

and modify them to

//********************************************************
// f_Switches: One or two mechanical switches
#define USE_SWITCHES

This will enable the part of code in f_Switch.ino:

void switchClosedCommand(int state)
{
  switch (state) {
    case (1 << 0): // SWITCH0_PIN
      if (!ledState) {
        startRecording();
      } else {
        stopRecording();
      }
      break;
    case (1 << 1): // SWITCH1_PIN
      startRecording();
      break;
    default:
      break;
  }
}

The statements in case (1 << 0) are executed when SWITCH0_PIN (= D5 as defined in MewPro.h) becomes the GND level, that is, when the neodym magnet gets near enough to the reed switch. The code above does simple things: start recording in video mode (or release the shutter in still camera mode) at the first time it is called, and at the second time stop recording (or no operation in still mode).

If you change the part of code anything can be accomplished. For example, modifying or adding a line of delay(10000); before startRecording();

void switchClosedCommand(int state)
{
  switch (state) {
    case (1 << 0): // SWITCH0_PIN
      if (!ledState) {
        delay(10000);
        startRecording();
      } else {
        stopRecording();
      }
      break;
    case (1 << 1): // SWITCH1_PIN
      startRecording();
      break;
    default:
      break;
  }
}

enables self timer of 10000 milliseconds (= 10 seconds) in still camera mode. Note this self timer mode is usable also in underwater where Wi-Fi is not available.