Nous sommes le Sam 24 Juin 2017, 14:55


Envoie de commande via wifi

Cette partie du site est dédiée à tous ceux qui se lancent dans la robotique ou qui se posent la question : par où commencer ?
  • Auteur
  • Message
Hors ligne
Avatar de l’utilisateur

Ben

De passage

  • Messages: 4
  • Inscription: Sam 24 Jan 2015, 19:30

Envoie de commande via wifi

Message non luSam 24 Jan 2015, 19:40

Bonjour,

Mon projet est assez simple, je voudrais communiquer avec mon robot via wifi.
Mais pas seulement en réseau locale: si je suis en Chine et mon robot en France je voudrais y acceder
Cependant, je ne sais pas réellement comment m'y prendre
Comment programmer une carte wifi ?
Comment envoyer un ordre de commande ?
Comment récupérer des informations sur le robot ? (si on lui envoie la commande "avancer" concrètement que va t-il se passer ? Comment va t-il transmettre l'info au microcontrôleur ?)

J'ai cherché sur le net et ce qui me semble le plus adapté c'est un module wifi pic (je voudrais éviter d'utiliser l'arduino): http://www.microchip.com/wwwproducts/De ... e=en558370

Je sais programmer en plusieurs langage mais le C est mon préféré (j'aimerais bien pouvoir programmer dans ce langage)

Merci à tous pour avoir pris le temps de me lire et d'avance pour vos réponse, merci :D
Hors ligne
Avatar de l’utilisateur

SonOfSparda

Membre asso caliban

  • Messages: 1035
  • Inscription: Dim 26 Oct 2008, 00:01

Re: Envoie de commande via wifi

Message non luDim 25 Jan 2015, 12:57

Je pense qu'il faut déjà que tu te renseignes sur comment fonctionne un réseau ethernet et faire ton truc en local, c'est a dire que ton robot et l'ordinateur qui le contrôlent soient sur le même réseau. Après pour faire un extranet c'est de la config réseau pas de la programmation, ya plusieurs manières de le faire faut voir ce dont est capable la carte et quel matériel tu utilise.

Maintenant pour que les programmes communiquent entre eux (qu'ils soient sur la même machine ou non) il faut que tu vois ce qu'on appelle les "socket", c'est pas super facile à utiliser surtout en C avec le typage mais comme tu as l'air d'aimer ce langage.

En (très) gros, tu crée un socket sur le pc qui envoie avec l'adresse du destinataire et son port (ou alors tu broadcast), puis sur le pc qui reçoit tu crée un socket qui "écoute" sur un certain port. La m**** après c'est qu'il faut que celui qui reçoive sache ce qu'il reçoit (le type), et je me rappelle plus si on peut faire passer une structure genre qui contienne tes ordres:

avancer.direction
avancer.distance

Il me semble que non il faut utiliser la sérialisation, enfin bref c'est pas simple, à ta place j'essaierai de chercher une bibliothèque qui te permette de le faire plus facilement.

ps: et si tu envoies des commandes à ton robot depuis la chine fait gaffe à ce que tu lui dit, les routeurs ont des oreilles ici :D
programmeur
langages: C,C++,C#,Java,asp, php,SQL,javascript.
Hors ligne
Avatar de l’utilisateur

Esprit

Membre asso caliban

  • Messages: 1635
  • Inscription: Jeu 11 Fév 2010, 11:14
  • Localisation: Ottignies

Re: Envoie de commande via wifi

Message non luLun 26 Jan 2015, 09:08

Comme l'a dit Son', tu dois d'abord le faire en local et après attaquer le problème de la distance. (Et là, c'est du réseau.)
Il y a des solutions "simples" (par exemple, tu ouvres une session avec un outil comme TeamViewer sur l'ordinateur qui est chez toi et de là tu contrôles le robot en réseau local) ou "compliquées" (Tu passes par un service du type "noip", tu configures ton modem/routeur pour rediriger un port réseau vers ton robot, ..)

En (très) gros, tu crée un socket sur le pc qui envoie avec l'adresse du destinataire et son port (ou alors tu broadcast)


Quoaaa ?!
Image

Non, tu broadcastes pas. Même si ça fonctionne, c'est pas du tout une bonne solution. (Au taf on se bat avec les équipements qui font du broadcast... C'est une horreur.)
Simon, membre fondateur de l'Association Caliban Belgique,
.·° Mon blog : Le Chipoteur de Brols .·°·. L' Association Caliban Belgique °·.
"L'impossible, nous ne l'atteignons pas, mais il nous sert de lanterne." (René Char)
Hors ligne
Avatar de l’utilisateur

Cybernaute

Membre asso caliban

  • Messages: 762
  • Inscription: Jeu 23 Oct 2008, 10:10
  • Localisation: Blond

Re: Envoie de commande via wifi

Message non luMer 28 Jan 2015, 14:49

Non, tu broadcastes pas. Même si ça fonctionne, c'est pas du tout une bonne solution. (Au taf on se bat avec les équipements qui font du broadcast... C'est une horreur.)


Faire du broadcast c'est mal !!! Vive le multicast :lol:

Je ne peux que plussoir aux remarques d'Esprit et de Son. C'est un beau projet pas simple mais pas compliqué non plus. Il te faut de l'organisation et surtout ne pas bruler les étapes.
Programmer avec une carte wifi, c'est comme programmer avec un port Ethernet (câble RJ45). Il faut établir une connexion. Une fois que ta connexion réseau est faite, c'est comme communiquer avec une connexion usb (enfin globalement). En usb, tu reçois ou envoies des trames, que tu décodes ou encodes, selon un schéma assez simple.
En Ethernet, c'est pareil mais avec une surcouche réseau qui permet à ta trame d'aller d'une machine à une autre.

Gosso modo ça donnerait ça en C# (Il est possible avec de bonnes libs d'avoir la même chose en C) :
Code: Tout sélectionner
// En Usb
SerialPort portUsb = new SerialPort("COM1", 115200);
portUsb.Open();
portUsb.Write("ma trame de commande sous format texte ou binaire");
portUsb.Close();

// En Ethernet
TcpClient client = new TcpClient(192.168.1.1, 13000);
Byte[] data = System.Text.Encoding.ASCII.GetBytes("ma trame de commande sous format texte"); // Sinon mettre directement dans data ta trame binaire
NetworkStream stream = client.GetStream();
stream.Write(data, 0, data.Length);
stream.Close();         
client.Close();



Info pour Son.
En C#, il existe un mécanisme qui simplifie l'envoi d'objet typé... Le Net Remoting... Pour ceux que ça intéresse, jetez un coup d’œil ici
Pour une implémentation simplifiée, voici un petit code(Code project) sympa

Le C n'est pas mon langage fétiche donc en terme de lib dispo je suis un peu à court. Mais globalement l'idée générale à appliquer est du même ordre qu'en C#...

:ygeek:
« la pratique est la forme la plus avancée de la théorie »
« le mouvement importe autant que la forme »
Hors ligne
Avatar de l’utilisateur

Ben

De passage

  • Messages: 4
  • Inscription: Sam 24 Jan 2015, 19:30

Re: Envoie de commande via wifi

Message non luVen 30 Jan 2015, 11:57

Bonjour,

Tout d'abord, merci de toutes vos réponse, elles me sont d'une grande aide

Effectivement, je vais devoir programmer avec le "module" fournit avec la carte wifi, cela me semble plus simple.
Pour ce qui est des socket j'en et déjà entendu parler: j'ai réaliser un chat internet en c++, mais je pensais que cela différer avec des robots.

Une petite question me trotte dans la tête, vous parliez de carte assez puissante pour prendre en charge le réseau "longue distance", il y a des spécifications particulière sur les modules wifi, certains ne le prenne pas en charge ?

En fait, j'ai un robot déjà opérationnel en local t en longue distance, cependant je voudrais le modifier mais n'ayant pas accès au code source, je ne vois pas comment faire, hormis de partir de zéros.
Hors ligne
Avatar de l’utilisateur

Zavatha

De passage

  • Messages: 2
  • Inscription: Dim 2 Avr 2017, 07:52

Re: Envoie de commande via wifi

Message non luDim 2 Avr 2017, 13:20

Bonjour.

Pour te simplifier la vie dans un premier temps tu peux également envoyer tes ordres à ton robot sous forme de chaînes de caractères plutôt qu'en utilisant la serialisation :
Avec une chaîne de caractères au format que tu définies tu peux envoyer des trames à ton robot.

Ex : un ordre pour ait être m1:a:125#m2:r:125
Avancer moteur 1 à une vitesse de 125
Reculer moteur 2 à une vitesse de 125
Ainsi un robot à chenilles tourner sur lui même. ..
Ici, la trame contient deux instructions (séparées par des #) vers deux devices (moteurs )
Chaque élément de la commande étant séparé par des :


Tu peux ainsi envoyer une trame à plusieurs devices en une seule fois sans passer par la serialisation (un objet serialisé doit pouvoir être lut du coter du robot ) car problème potentiel si tu utilises deux langages différents (à moins d'utiliser un standard tyep jyson ou autre)

Bonne programmation!

Sinon +1 pour le broadcast. .. c'est le mal ^^

Zav

Retourner vers Zone débutants

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités