управление камерой gopro с пульта frsky taranis
Вот решил вечером сделать приспособу для управления GoPro в полете
Используем Arduino и ESP8266. Если будет интересно, могу расписать по подробнее.
Конечно интересно, распишите)
Берем ардуину мини, микро. По большому счету подойдет любая. У меня была вот такая.
Далее нам понадобится модуль 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 я не программист и не инженер. тапками не кидать, если что-то не нравится, делаем сами, по своему.