Outils pour utilisateurs

Outils du site


piloter_un_apn_lumix_depuis_son_ordinateur

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
piloter_un_apn_lumix_depuis_son_ordinateur [2018/07/04 18:09] Mushussupiloter_un_apn_lumix_depuis_son_ordinateur [2020/10/30 10:21] (Version actuelle) – ↷ Liens modifiés en raison d'un déplacement. serge
Ligne 1: Ligne 1:
 +====== Piloter un APN Lumix avec son ordinateur ======
 +
 Sélectionner le réseau Wi-Fi adéquat : Sélectionner le réseau Wi-Fi adéquat :
- MENU -> [Config.] -> Wi-Fi -> Fonction Wi-Fi -> Nouvelle connexion -> Prise de vue et affichage à distance -> DISP. Changer de mode -> Par réseau -> Dans la liste+  MENU -> [Config.] -> Wi-Fi -> Fonction Wi-Fi -> Nouvelle connexion -> Prise de vue et affichage à distance -> DISP. Changer de mode -> Par réseau -> Dans la liste 
 +===== Processing ===== 
 +<code java> 
 +// http://www.personal-view.com/talks/discussion/6703/control-your-gh3-from-a-web-browser-now-with-video-/p1 
 +import controlP5.*; 
 +import java.awt.image.*;  
 +import javax.imageio.*; 
 +import java.net.*; 
 +import java.io.*; 
 + 
 +ControlP5 cp5; 
 +ReceiverThread thread; 
 + 
 +XML xml; 
 +String adresse; 
 +int port; 
 +PImage video; 
 + 
 +void setup() { 
 +  size(1000, 600); 
 +  noStroke(); 
 +  video = createImage(640, 480, RGB); 
 +  thread = new ReceiverThread(video.width, video.height); 
 +  thread.start(); 
 + 
 +  cp5 = new ControlP5(this); 
 + 
 + 
 +  cp5.addToggle("Mode"
 +    .setPosition(40, 250) 
 +    .setSize(50, 20) 
 +    .setValue(false) 
 +    .setMode(ControlP5.SWITCH) 
 +    ; 
 + 
 +  cp5.addToggle("Diffusion"
 +    .setPosition(120, 250) 
 +    .setSize(50, 20) 
 +    .setValue(false) 
 +    .setMode(ControlP5.SWITCH) 
 +    ; 
 + 
 +  cp5.addButton("Photo"
 +    .setValue(0) 
 +    .setPosition(100, 300) 
 +    .setSize(120, 120) 
 +    ; 
 + 
 +  cp5.addButton("Connexion"
 +    .setValue(0) 
 +    .setPosition(100, 100) 
 +    .setSize(80, 80) 
 +    ; 
 +  adresse = ""; 
 +  port = 49152; 
 +
 + 
 +void draw() { 
 +  background(0); 
 +    if (thread.available()) { 
 +    video = thread.getImage(); 
 +  } 
 +    image(video,300, 60); 
 +
 + 
 +void Connexion(int valeur) { 
 +  println(valeur); 
 +  adresse = "http://192.168.54.1/cam.cgi?mode="; 
 +  xml = loadXML(adresse  + "getstate"); // Connexion 
 +  println("Connexion"); 
 +  println(xml); 
 +
 + 
 +void Mode(boolean drapeau) { 
 +  if (!drapeau && !adresse.equals("")) { 
 +    xml = loadXML(adresse  + "camcmd&value=recmode"); // Mode camera 
 +    println("0"); 
 +  } else { 
 +    xml = loadXML(adresse  + "camcmd&value=playmode"); // Mode lecture 
 +    println("1"); 
 +  } 
 +
 + 
 +void Diffusion(boolean drapeau) { 
 +  println(adresse); 
 +  if (!drapeau && !adresse.equals("")) { 
 +    xml = loadXML(adresse  + "startstream&value=" + port); // Diffusion 
 +    println("0"); 
 +  } else { 
 +    xml = loadXML(adresse  + "stopstream"); // Arret Diffusion 
 +    println("1"); 
 +  } 
 +
 + 
 +void keyPressed() { 
 +  println(byte(key)); 
 +  if (byte(key) == 10) { 
 +    Photo(0); 
 +  } 
 +
 + 
 + 
 +void Photo(int valeur) { 
 +  xml = loadXML(adresse  + "camcmd&value=capture"); // Diffusion 
 +  println(xml); 
 +
 + 
 +// Daniel Shiffman 
 +// <http://www.shiffman.net> 
 + 
 +class ReceiverThread extends Thread { 
 + 
 +  // Port we are receiving. 
 +  int port = 49152;  
 +  DatagramSocket ds;  
 +  // A byte array to read into (max size of 65536, could be smaller) 
 +  byte[] buffer = new byte[40000];  
 + 
 +  boolean running;    // Is the thread running?  Yes or no? 
 +  boolean available;  // Are there new tweets available? 
 + 
 +  // Start with something  
 +  PImage img; 
 + 
 +  ReceiverThread (int w, int h) { 
 +    img = createImage(w, h, RGB); 
 +    running = false; 
 +    available = true; // We start with "loading . . " being available 
 + 
 +    try { 
 +      ds = new DatagramSocket(port); 
 +    }  
 +    catch (SocketException e) { 
 +      e.printStackTrace(); 
 +    } 
 +  } 
 + 
 +  PImage getImage() { 
 +    // We set available equal to false now that we've gotten the data 
 +    available = false; 
 +    return img; 
 +  } 
 + 
 +  boolean available() { 
 +    return available; 
 +  } 
 + 
 +  // Overriding "start()" 
 +  void start () { 
 +    running = true; 
 +    super.start(); 
 +  } 
 + 
 +  // We must implement run, this gets triggered by start() 
 +  void run () { 
 +    while (running) { 
 +      checkForImage(); 
 +      // New data is available! 
 +      available = true; 
 +    } 
 +  } 
 + 
 +  void checkForImage() { 
 +    DatagramPacket p = new DatagramPacket(buffer, buffer.length);  
 +    try { 
 +      ds.receive(p); 
 +    }  
 +    catch (IOException e) { 
 +      e.printStackTrace(); 
 +    }  
 +    byte[] data = p.getData(); 
 +    int debutTrame = 0; 
 +    for (int i = 0; i < 200; i++) { 
 +      if ((int(data[i]) == 0xff) && (int(data[i + 1]) == 0xD8)) { 
 +        debutTrame = i; 
 +      } 
 +    } 
 +    // println("Received datagram with " + data.length + " bytes." );  
 +    data = subset(data, debutTrame, 30000); 
 +    // Read incoming data into a ByteArrayInputStream 
 +    ByteArrayInputStream bais = new ByteArrayInputStream( data );  
 +    // We need to unpack JPG and put it in the PImage img 
 +    img.loadPixels();  
 +    try { 
 +      // Make a BufferedImage out of the incoming bytes 
 +      BufferedImage bimg = ImageIO.read(bais);  
 +      // Put the pixels into the PImage 
 +      bimg.getRGB(0, 0, img.width, img.height, img.pixels, 0, img.width); 
 +    }  
 +    catch (Exception e) { 
 +      e.printStackTrace(); 
 +    } 
 +    // Update the PImage pixels 
 +    img.updatePixels(); 
 +  } 
 + 
 + 
 +  // Our method that quits the thread 
 +  void quit() { 
 +    System.out.println("Quitting.");  
 +    running = false; // Setting running to false ends the loop in run() 
 +    // In case the thread is waiting. . . 
 +    interrupt(); 
 +  } 
 +
 +</code> 
 +===== Sources ===== 
 +{{ media_10:panasonic_gx80.pdf |Manuel d'utilisation d'un APN}}
  
-= Sources =+{{ media_01:gamepad_bluetooth_2.pdf | Notice GamePad}}
  
-[[:File:PANASONIC_GX80.pdf]]+{{ media_01:gamepad_bluetooth_1.pdf | Notice GamePad}}
  
-http://www.machaon.fr/isn/reseaux/Fiche-Wireshark.pdf+[[http://www.machaon.fr/isn/reseaux/Fiche-Wireshark.pdf|Tutoriel d'utilisation de Wireshark]]
  
-https://security.stackexchange.com/questions/121538/turn-rpi3-wi-fi-adapter-into-monitor-mode-using-airmon-ng+[[https://security.stackexchange.com/questions/121538/turn-rpi3-wi-fi-adapter-into-monitor-mode-using-airmon-ng|Turn RPi3 Wi-Fi adapter into monitor mode using airmon-ng 
 +]]
  
-http://www.personal-view.com/talks/discussion/6703/control-your-gh3-from-a-web-browser-now-with-video-/p1+[[http://www.personal-view.com/talks/discussion/6703/control-your-gh3-from-a-web-browser-now-with-video-/p1|Control your GH3 from a Web Browser]]
  
 +{{tag>Processing sylvain}}
piloter_un_apn_lumix_depuis_son_ordinateur.1530727793.txt.gz · Dernière modification : 2018/07/04 18:09 de Mushussu