Tem 8, 2018
283 Views
0 0

ARDUİNO GOPRO WİFİ KONTROLÜ

Yazar

1. Adım: Malzemeler

Bu proje için sadece birkaç şeye ihtiyacınız olacak.

Başlamak için bir GoPro kamerasına ihtiyacınız olacak .  Arduino MKR Zero’ya da ihtiyacınız olacak .

Arduino geliştirme yazılımı olan bir bilgisayar ve GoPro uygulaması yüklü bir akıllı telefon, Arduino için bir USB kablosu

2. Adım: Kameranızın Wifi’sini Yapılandırın

Yapmanız gereken ilk şey kameranızın wifi bağlantısını açmak ve yapılandırmaktır. Yapılandırma kısmına çok fazla girmeyeceğim çünkü bunu yapan çok fazla öğretici yazılar var.

GoPro Hero4’te, bunu yapmanın en kolay yolu, uygulamadaki talimatları izleyerek kameranızı telefonunuza bağlamaktır.

Telefon kamera ile eşleştirildikten sonra, uygulamayı kullanarak kameranın ayarlarını açın ve wifi ağına seçtiğiniz bir yeni isim ve şifre verin.

GoPro Hero Session 5’de de aynı yöntem geçerlidir. Başlamak için, uygulamadaki talimatları uygulayarak kameranızı telefonunuza bağlayın. Bu, kablosuz ağın adını ve şifresini otomatik olarak yapılandıracaktır.

Kameranızdaki wifi ağ adını görmek için, ” Kamera Bilgisi ” bölümüne gidin.” ” Bağlantı Ayarları “ menüsü altında bulunur .

Adım 3: GoPro’nun MAC Adresini Bulma

Wifi etkinleştirildiğinde, kameranızın MAC (medya erişim kontrolü) adresinin ne olduğunu bulmanız gerekir.  

Bunu elde etmek için, önce kameranızı wifi ağınıza baglayıp ip adresine girmek.

Kameranızı wifi ağınıza bagladıktan sonra, bilgisayarınızdaki herhangi bir web tarayıcısını açın ve aşağıdaki URL’yi ziyaret edin:
http://sizin kameranın ip adresi/gp/gpControl/info

{{“model_number”21,”model_name”:”HERO5Session”,”firmware_version”:”HD5.03.02.51.00″,”serial_number”:”C3212365684485″,”board_type”:”0x05″,”ap_mac”:”0641631510c4″,”ap_ssid”:”GP54688615″,”ap_has_default_credentials”:”0″,”capabilities”:”16″}

İlgilendiğimiz  ap_mac:” ifadesini izleyen sayı dizisidir. Bu 12 haneli sayı ve karakter dizisi, MAC adresidir. Benim bu durumumda, 0641631510c4  mac adresim.

aşağıdaki gibi biçimlendirin:
0x06, 0x41, 0x63, 0x15, 0x10, 0xC4

Adım 4: GoPro Hero’ya bir Arduino bağlayın

Arduino’nun GoPro Hero serisi bir kamerayla iletişim kurması için bir PIN kullanarak eşleştirilmesi gerekiyor.

Pin sadece 3 dakika sürecek, bu yüzden 3 dakika içinde pini girmeniz gerek.

El ile PIN’i eklemek gerekir iki aşağıda kez koduna hem diyor yerlerde:
// !!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!
//ENTER YOUR PIN HERE WHERE IT SAYS XXXX
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Pin girildikten sonra, Arduino’ya yüklemek ve kamera ile bağlantı kurmak için üç dakikadan daha kısa bir süreniz vardır.

Bunun için, GoPro’nun wifi kimlik bilgilerini yazdığı yere girmeyi unutmayın:
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!
// WIFI ADINIZI VE ŞİFRENİZİ BURAYA GİRİN
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

Kodu başarıyla yükledikten sonra, GoPro’nun kurulum menüsünden video ekranına geri dönerseniz, artık komutları gönderebilmelisiniz (kısaca ele alacağımız).

PIN numarasını kullanarak GoPro’yu Arduino ile eşleştirmek için kod:

#include <SPI.h>
#include <WiFi101.h>
#include <WiFiUdp.h>



int status = WL_IDLE_STATUS;

  //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  //ENTER YOUR WIFI NAME AND PASSWORD HERE
  //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

char ssid[] = "XXXXXXXXXXXX"; //  your network SSID (name)
char pass[] = "XXXXXXXXXXXX";    // your network password (use for WPA, or use as key for WEP)

WiFiClient client;

const char* host = "10.5.5.9";
const int httpPort = 80;


void setup(){  

  //Initialize serial and wait for port to open:
  Serial.begin(115200);


  // check for the presence of the wifi module:
  if (WiFi.status() == WL_NO_SHIELD) {
     Serial.println("WiFi not present");
     // don't continue:
     while (true);
  }

  // attempt to connect to Wifi network:
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid, pass);

    // wait 8 seconds for connection:
    delay(8000);
  }

  Serial.println("Connected to wifi");
  printWifiStatus();


  // START PIN
  StartPin();

  delay(10000);

  // FINISH PIN
  FinishPin();


}


void loop(){

  //Nothing to do here!
  delay(1000);

}


void StartPin(){
  Serial.print("connecting to ");
  Serial.println(host);

  if (!client.connect("10.5.5.9", httpPort)) {
    Serial.println("connection failed");
    return;
  }

  //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  //ENTER YOUR PIN HERE WHERE IT SAYS XXXX
  //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  
  
  String StartUrl = "/gpPair?c=start&pin;=XXXX&mode;=0";
  Serial.print("Requesting URL: ");
  Serial.println(StartUrl);
  client.print(String("GET ") + StartUrl + " HTTP/1.1\r\n" +
  "Host: " + host + "\r\n" +
  "Connection: close\r\n\r\n");
  Serial.println("Started");
}



void FinishPin(){
  Serial.print("connecting to ");
  Serial.println(host);
  
  if (!client.connect("10.5.5.9", httpPort)) {
    Serial.println("connection failed");
    return;
  }

  //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  //ENTER YOUR PIN HERE WHERE IT SAYS XXXX
  //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  
  String StopUrl = "10.5.5.9/gpPair?c=finish&pin;=XXXX&mode;=0";
  Serial.print("Requesting URL: ");
  Serial.println(StopUrl);
  client.print(String("GET ") + StopUrl + " HTTP/1.1\r\n" +
  "Host: " + host + "\r\n" +
  "Connection: close\r\n\r\n");
  Serial.println("Finished");
}



void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}

5. Adım: GoPro Komutlarını Gönder

GoPro Komutlarının Resmi

Bu örnekte, video kaydını başlatmak ve durdurmak için komutların nasıl gönderileceğini göstereceğim.

Bu, burada gösterilen aynı yöntemi kullanarak, kamera içinde hemen hemen her işlevsellik için komutlar gönderebilirsiniz.

Aşağıdaki örnek 5 saniye boyunca kaydı yürütür, kayıt işlemini durdurur, 5 saniye daha bekler ve tekrar başlar.

Bir kez daha, GoPro’nun wifi kimlik bilgilerini ve MAC adresinizi girmeyi unutmayın! 

Start ve Stop kayıt komutlarını göndermek için kod:

#include <SPI.h>
#include <WiFi101.h>
#include <WiFiUdp.h>



int status = WL_IDLE_STATUS;

  //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  //ENTER YOUR WIFI NAME AND PASSWORD HERE
  //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

char ssid[] = "XXXXXXXXXXXX"; //  your network SSID (name)
char pass[] = "XXXXXXXXXXXX";    // your network password (use for WPA, or use as key for WEP)

int localPort = 7;
byte broadCastIp[] = { 10,5,5,9 };

  //!!!!!!!!!!!!!!!!!!!!!!!!!!!
  //ENTER YOUR MAC ADDRESS HERE
  //!!!!!!!!!!!!!!!!!!!!!!!!!!! 

byte remote_MAC_ADD[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
int wolPort = 9;


WiFiUDP Udp;

WiFiClient client;

const char* host = "10.5.5.9";
const int httpPort = 80;


void setup(){  

  //Initialize serial and wait for port to open:
  Serial.begin(115200);

  // check for the presence of the wifi module:
  if (WiFi.status() == WL_NO_SHIELD) {
     Serial.println("WiFi not present");
     // don't continue:
     while (true);
  }

  // attempt to connect to Wifi network:
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
     status = WiFi.begin(ssid, pass);

    // wait 8 seconds for connection:
    delay(8000);
  }

  Serial.println("Connected to wifi");
  printWifiStatus();

  delay(1000);

  // WAKE UP YOUR SLEEPY CAMERA!
  CameraInitiate(){

  // NOTE: If this does not seem to be working, 
  // turn your camera on and off and try again.

}


void loop(){

  //Nothing to do here!
  delay(1000);

}



// FUNCTION TO WAKE UP THE CAMERA

void CameraInitiate(){

  //Begin UDP communication
  Udp.begin(localPort);

  //Send the magic packet to wake up the GoPro out of sleep
  delay(2000);
  SendMagicPacket();
  delay(5000);  

  // Absolutely necessary to flush port of UDP junk for Wifi client communication
  Udp.flush();
  delay(1000);

  //Stop UDP communication
  Udp.stop();
  delay(1000);

}


// Function to create and send magic packet
// Taken and translated from here:
// https://www.logicaprogrammabile.it/wol-accendere-computer-arduino-wake-on-lan/

void SendMagicPacket(){

  //Create a 102 byte array
  byte magicPacket[102];

  // Variables for cycling through the array
  int Cycle = 0, CycleMacAdd = 0, IndexArray = 0;

  // This for loop cycles through the array
  for( Cycle = 0; Cycle < 6; Cycle++){

    // The first 6 bytes of the array are set to the value 0xFF
    magicPacket[IndexArray] = 0xFF;

    // Increment the array index
    IndexArray++;
  }

  // Now we cycle through the array to add the GoPro address
  for( Cycle = 0; Cycle < 16; Cycle++ ){
    //eseguo un Cycle per memorizzare i 6 byte del
    //mac address
    for( CycleMacAdd = 0; CycleMacAdd < 6; CycleMacAdd++){
      
      magicPacket[IndexArray] = remote_MAC_ADD[CycleMacAdd];
      
      // Increment the array index
      IndexArray++;
    }
  }

  //The magic packet is now broadcast to the GoPro IP address and port
  Udp.beginPacket(broadCastIp, wolPort);
  Udp.write(magicPacket, sizeof magicPacket);
  Udp.endPacket();

}


void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}
Makale Kategorileri:
Arduino
http://teknobayt.com

Teknobayt Tasarım Stüdyosunun tasarımcısı, ve kurucusudur.

Yorum Yap

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir