управление камерой gopro с пульта frsky taranis

Rover

Конечно интересно, распишите)

pmaster

Берем ардуину мини, микро. По большому счету подойдет любая. У меня была вот такая.

Далее нам понадобится модуль WiFi ESP8266. Их тоже много модификаций, подойдет, я думаю, любой. Я брал такой

Он питается напряжением 3.3 вольта. От 5 дохнет, проверено. По этому нам понадобится стабилизатор на 3.3 вольта, например такой AMS1117

Инструкций по прошивке и того и другого в интернете полно навалом. По этому заострять внимание на этом не буду. Только напомню, что для прошивки ESP8266 надо замкнуть GPIO0 на землю перед включением питания.

Для начала прошьем код в ESP8266/ Выглядит он так.

#include <ESP8266WiFi.h>
const char* ssid     = "SuperGoPro";
const char* password = "1234512345";
const int httpPort = 80;
int val = 0;
String url = "";
WiFiClient client;

void setup() {
  Serial.begin(115200);  delay(10);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {delay(500); Serial.print(".");}
  if (!client.connect("10.5.5.9", httpPort)) {return; }
  delay (3000); SendCommands ("");  // power on
}

void loop() {
    if (Serial.available() > 0) { val = Serial.read();
     if (val =='1') SendCommands ("");  // camera power on
     if (val =='2') SendCommands ("");  // camera power off
     if (val =='3') SendCommands ("");  // camera CM - 00 Video Mode
     if (val =='4') SendCommands ("");  // camera CM - 01 Photo Mode
     if (val =='5') SendCommands ("");  // bacpac SH - 01 Shutter
     if (val =='6') SendCommands ("");  // bacpac SH - 00 Stop
  }
}

void SendCommands(String command){
    if (!client.connect("10.5.5.9", httpPort)) {return;}
    //delay (100);
      client.print(String("GET ") + command + " HTTP/1.1\r\n" + "Host: " + "10.5.5.9" + "\r\n" + "Connection: close\r\n\r\n"); delay(10);
}

Не забываем задать свое имя сети Wifi камеры и ее пароль. В коде думаю все понятно и предельно просто, кому надо, могут добавить свои команды. Мне пока хватает этого.

Полный список команд управления камерой

URL structure:  or bacpac/COMMAND?t=PASSWORD&p=%NUMBER
 PASSWORD: Replace by your camera's WiFi Password
 HTTP Response Codes:
 Response Code Meaning
  200 Successful
  403 Password Incorrect
  410 Command Failed

bacpac PW - 00 Turn GoPro OFF

bacpac PW - 01 Turn GoPro ON

bacpac RS - Reset bacpac

bacpac SH - 01 Shutter

bacpac SH - 00 Stop

camera PV - 02 Preview ON

camera PV - 00 Preview OFF

camera TM - Set time, requires a longer string, each field is a byte with a % before it:

Last 2 digits of the year
Month (1 - January, 12 - December)
Day of the month (1 - 31)
Hour (24-hour format, starts from zero)
Minute
Second
Mode:

camera CM - 00 Video Mode

camera CM - 01 Photo Mode

camera CM - 02 Burst Mode

camera CM - 03 Timelapse Mode

camera CM - 04 Timer Mode (hero2)

camera CM - 05 Play HDMI

Orientation

camera UP - 00 Orientation UP

camera UP - 01 Orientation DOWN

Video resolutions HERO2 and HERO3 silver:

camera VR - 00 WVGA 60

camera VR - 01 WVGA 120

camera VR - 02 720 30

camera VR - 03 720 60

camera VR - 04 960 30

camera VR - 05 960 48

camera VR - 06 1080 30

Video resolutions Black edition:

camera VV 08 4kCin12

camera VV 07 2.7kCin24

camera VV 06 4k 15

camera VV 05 2.7k 30

camera VV 04 1440p 40

camera VV 03 1080 60

camera VR 05 1080 30

camera VR 06 960 48

camera VV 02 960 100

camera VV 01 720 120

camera VV 00 WVGA 240

Video resolutions HERO3+Black:

camera VV 06 - 4K

camera VV 08 - 4K 17:9

camera FS 01 - 4K 15FPS

camera FS 00 - 4K 12FPS

camera VV 07 - 2K

camera VV 05 - 2.7k

camera FS 02 - 2.7k 24FPS

camera FS 04 - 2.7k 30FPS

camera VV 04 - 1440p

camera FS 05 - 1440 48FPS

camera VV 09 - 1080 SuperView

camera VV 03 - 1080

camera VV 02 - 960p

camera VV 0a - 720 SuperView

camera VV 01 - 720p

Frame rate:

camera FS - 00 FPS12

camera FS - 01 FPS15

camera FS - 0b FPS12p5

camera FS - 02 FPS24

camera FS - 03 FPS25

camera FS - 04 FPS30

camera FS - 05 FPS48

camera FS - 06 FPS50

camera FS - 07 FPS60

camera FS - 08 FPS100

camera FS - 09 FPS120

camera FS - 0a FPS240

Fov:

camera FV - 00 wide

camera FV - 01 medium

camera FV - 02 narrow

Photo resolution HERO2 and HERO3 silver:

camera PR - 00 11mpW

camera PR - 01 8mpM

camera PR - 02 5mpW

camera PR - 03 5mpM

Timelapse Interval:

camera TI - 00 0,5 sec

camera TI - 01 1sec

camera TI - 05 5sec

camera TI - 0a 10sec

camera TI - 1e 30sec

camera TI - 3c 60sec

Volume:

camera BS - 00 no sound

camera BS - 01 70%

camera BS - 02 100%

White Balance HERO3 "ONLY IF Protune ON"

camera WB - 00 auto

camera WB - 01 3000k

camera WB - 02 5500k

camera WB - 03 6500k

camera WB - 04 CAMRAW

Continuous Shot (HERO3):

camera CS - 00 Single

camera CS - 03 3SPS

camera CS - 05 5SPS

camera CS - 0a 10SPS

Burst Rate HERO3:

camera BU - 00 3/1s

camera BU - 02 10/1s

camera BU - 03 10/2s

camera BU - 04 30/1s

camera BU - 05 30/2s

camera BU - 06 30/3s

Loop Video HERO3:

camera LO - 00 OFF

camera LO - 01 5min

camera LO - 02 20Min

camera LO - 03 60Min

camera LO - 05 Max

Protune ON/OFF:

camera PT - 01 ON

camera PT - 00 OFF

Delete:

camera DL - (no number) last

camera DA - (no number) all

camera DF - delete specific?

Photo resolution Black ed:

camera PR - 05 12mpW

camera PR - 04 7mpW

camera PR - 06 7mpM

camera PR - 03 5mpM

Leds:

bacpac LB - 00 no leds

camera LB - 01 2 leds

camera LB - 02 4 leds

Spot Meter:

camera EX - 00 OFF

camera EX - 01 ON

One Button Mode:

camera OB - 00 OFF

camera OB - 01 ON

Protune Resolutions HERO2 and HERO3 silver:

camera VR - 07 1080 30 Protune

camera VR - 08 1080 24 Protune

camera VR - 11 1080 25 Protune

camera VR - 09 960 60 Protune

Protune Resolutions HERO3 black ONLY IF PROTUNE IS ON:

camera VV 00 720 120T

camera VV 02 960 100T

camera VV 03 1080 60T

camera VV 04 1440 48T

camera VV 05 2.7k 30T

camera VV 06 4k 15T

camera VV 07 2.7KCin24T

camera VV 08 4kCin12T

Auto Power Off:

camera AO - 00 NEVER

camera AO - 01 60s

camera AO - 02 120s

camera AO - 03 300s

Default Mode:

camera DM - 00 Video

camera DM - 01 Photo

camera DM - 02 Burst

camera DM - 03 Timelapse

OnScreen Display:

camera OS - 00 OFF

camera OS - 01 ON

Locate:

camera LL - 01 Start

camera LL - 00 Stop

Video Mode:

camera VM - 00 NTSC

camera VM - 01 PAL
*/

С платой wifi закончили, переходим к ардуинке. Ей мы будем обрабатывать SBUS сигнал приходящий с передатчика. и отсылать команды на wifi модуль. Тут есть небольшой момент. Сигнал передатчика SBUS идет в инвертированом виде. Многие ставят мс инвертора, типа 74HC14, у меня под рукой его не оказалось. По этому собрал инвертор на транзисторе. транзистор подойдет практически любой NPN. У меня по рукой оказался 2N2222. собираем с ним простейшую схемку. Резисторы любые по 1к.

Заливаем в ардуину код.

#include <SBUS.h>
SBUS sbus(Serial);
#include <SoftwareSerial.h>
#define rxPin 2
#define txPin 3
SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);
int CameraMode = 2;  //
                    // 1 - video mode
                    // 2 - photo mode

int CameraRecord = 0; // запись выключена


void setup()
{
  sbus.begin();
  mySerial.begin(115200);
  mySerial.println("SBUS Status");
  delay (10000); // ждем 10 секунд пока установится соединение wifi
  mySerial.println("1");delay (2000);mySerial.println("4");delay (2000);mySerial.println("5");
}

// this is timer2, which triggers ever 1ms and processes the incoming SBUS datastream
ISR(TIMER2_COMPA_vect)
{
  sbus.process();
}

void loop()
{
  delay(1000);
  //printSBUSStatus();
  if ( sbus.getNormalizedChannel(16) < -10 && CameraMode != 2) {CameraMode = 2;  mySerial.println("4");}
  if ( sbus.getNormalizedChannel(16) >  10 && CameraMode != 1) {CameraMode = 1;  mySerial.println("3");}
  if ( sbus.getNormalizedChannel(15) >  10 && CameraMode == 1  && CameraRecord == 0 ) { CameraRecord = 1; mySerial.println("5");}
  if ( sbus.getNormalizedChannel(15) >  10 && CameraMode == 1  && CameraRecord == 1 ) { CameraRecord = 0; mySerial.println("6");}

  if ( sbus.getNormalizedChannel(15) >  10 && CameraMode == 2) {  mySerial.println("5");}
}

void printSBUSStatus()
{
  mySerial.print("Ch1  ");
  mySerial.println(sbus.getNormalizedChannel(1));
  mySerial.print("Ch2  ");
  mySerial.println(sbus.getNormalizedChannel(2));
  mySerial.print("Ch3  ");
  mySerial.println(sbus.getNormalizedChannel(3));
  mySerial.print("Ch4  ");
  mySerial.println(sbus.getNormalizedChannel(4));
  mySerial.print("Ch5  ");
  mySerial.println(sbus.getNormalizedChannel(5));
  mySerial.print("Ch6  ");
  mySerial.println(sbus.getNormalizedChannel(6));
  mySerial.print("Ch7  ");
  mySerial.println(sbus.getNormalizedChannel(7));
  mySerial.print("Ch8  ");
  mySerial.println(sbus.getNormalizedChannel(8));
  mySerial.print("Ch9  ");
  mySerial.println(sbus.getNormalizedChannel(9));
  mySerial.print("Ch10 ");
  mySerial.println(sbus.getNormalizedChannel(10));
  mySerial.print("Ch11 ");
  mySerial.println(sbus.getNormalizedChannel(11));
  mySerial.print("Ch12 ");
  mySerial.println(sbus.getNormalizedChannel(12));
  mySerial.print("Ch13 ");
  mySerial.println(sbus.getNormalizedChannel(13));
  mySerial.print("Ch14 ");
  mySerial.println(sbus.getNormalizedChannel(14));
  mySerial.print("Ch15 ");
  mySerial.println(sbus.getNormalizedChannel(15));
  mySerial.print("Ch16 ");
  mySerial.println(sbus.getNormalizedChannel(16));
  mySerial.println();
  mySerial.print("Failsafe: ");
  if (sbus.getFailsafeStatus() == SBUS_FAILSAFE_ACTIVE) {
    mySerial.println("Active");
  }
  if (sbus.getFailsafeStatus() == SBUS_FAILSAFE_INACTIVE) {
    mySerial.println("Not Active");
  }

  mySerial.print("Data loss on connection: ");
  mySerial.print(sbus.getFrameLoss());
  mySerial.println("%");
}

Залили, соединяем это всё вместе. инвертор на транзисторе к приемнику и к ардуине, ардуину к wifi модулю по следующей схеме

На камере не забываем включить wifi. При включении питания. должна включится камера, переключится в режим фото и сделать одну фотографию

В общем всё просто и понятно 😉
Кстати библиотека SBUS_FUTABA у меня почему то не заработала. Я взял другую, она ниже во вложении.
Чуть не забыл. канал 16 это переключение режимов камеры фото или видео, канал 15 это затвор или старт-стоп записи. Можете поменять в коде по своему вкусу.

ps я не программист и не инженер. тапками не кидать, если что-то не нравится, делаем сами, по своему.

SBUS1.ZIP