Section courante

A propos

Section administrative du site

Introduction

L'hélicoptère WiFli est un jouet interactif téléguidé utilisant l'iPhone, l'iPod, l'iPad ou Android afin d'être dirigé. Il coûte moins de 100 $ CAD. Le détail intéressant de se jouet, n'est pas qu'il vole et qu'on peut le diriger à l'aide d'un téléphone ou d'une tablette, mais plutôt le fait qu'il utilise la technologie WiFi (la même que celle des ordinateurs, des routeurs, des PS3, de la Nintendo WiFi, de la Boxee,...), il passe donc pour un jouet pour adulte à partir de ce point ! Il est fort intéressant et instructif de voir de quel quelle les concepteurs de ce jouet si sont prit afin de communiquer avec le jouet.

Fonctionnement

Avec n'importe quelle carte réseau sans fil, comme une LinkSys WMP45G, branché sur un ordinateur, on peut facilement trouver un SSID, avec un identificateur du format de «wifliXXXXXXXX». Il faut cependant attendre un bon 30 secondes avec que le système WiFi du WiFli soit opérationnel. Il contiendra aussi sa propre adresse MAC, il utilise toujours l'adresse IP 192.168.11.123 et le port 2000. On se rend facilement compte qu'il utilise un protocole basé sur le TCP pour communiqué en réseau. Attention, de bien comprendre que la communication n'utilise pas un processeur ou des circuits complexes en arrière de se jouet, et donc qu'il est monotâche et plusieurs connexions en même temps, risque plutôt de faire planter le jouet, et vous risquer d'attendre que les batteries soit mortes avant d'en reprendre le contrôle.

Ensuite, on peut observer qu'il envoie des séquences de 9 octets vers le socket afin de pouvoir contrôler le jouet WiFli. Il est ennuyeux de constater que le délai de réponses est très lent, fixer une limite de temps trop courte pour l'envoi de données est une très mauvaise idée. La structure de données aura donc le format suivant :

Position Taille Description
0 1 Cet octet doit toujours contenir la valeur 0AAh.
1 1 Cet octet doit toujours contenir la valeur 064h.
2 1 Cet octet permet d'indiquer la puissance du moteur électrique.
3 1 Cet octet ne semble pas être utilisé.
4 1 Cet octet permet d'indiquer le déplacement, valeur de 0 à 31 pour tourner à gauche, valeur de 128 à 160 pour tourner à droite.
5 1 Cet octet doit indiquer la même valeur que l'octet précédent.
6 1 Cet octet ne semble pas être utilisé.
7 1 Cet octet ne semble pas être utilisé.
8 1 Cet octet doit toujours contenir la valeur 0BBh.

Programmation

On pourra, à l'aide de l'exemple suivant écrit en Perl, envoyer des commandes :

  1. #!/usr/bin/perl
  2.  
  3. use IO::Socket;
  4. my $sock = new IO::Socket::INET (
  5.  PeerAddr => '192.168.11.123',
  6.  PeerPort => '2000',
  7.  Proto => 'tcp',
  8.  Type=> SOCK_STREAM
  9. );
  10. die "Impossible de créer le socket: $!\n" unless $sock;
  11. my $Power = 10;
  12. my $Rotation = 3;
  13. $sock->send(sprintf("%c%c%c%c%c%c%c%c%c",hex('0xAA'),hex('0x64'),hex($Power),hex(0),hex($Rotation),hex($Rotation),hex('0x00'),hex('0x00'),hex('0xBB')));
  14. close($sock);


Dernière mise à jour: Dimanche, le 27 novembre 2011