Activité 2 Objet Connecté

Les objets connectés sont de plus en plus nombreux dans la vie de tous les jours (exemple : pèse-personne connecté directement par Bluetooth à un smartphone, permettant ainsi de suivre l’évolution de son poids à partir de ce dernier) et certains le sont en passant par internet ; on parle alors d’IoT ou IdO (Internet de Objets) ; l’objet doit dans ce cas accéder à Internet via un support de communication physique (WiFi, GSM, satellites etc.). On parle alors de Web 3.0 !

 

Pour introduire la notion d’Objets connectés par Internet (Internet of Thing en anglais), amusons-nous avec un petit robot sympa nommé « Codey Rocky » que vous allez piloter à distance :

Une des solutions dédiées aux IoT consiste à faire appel à des brokers MQTT (courtiers en français) qui transmettent des messages :

Avant tout, il nous faut un broker ! Deux familles de solutions sont possibles :

  • Soit le broker se trouve actif sur le réseau local (« LAN »)
  • Soit le broker se trouve en ligne sur un serveur à travers le monde (« on the cloud »)

Dans la solution « LAN » (réseau local), le broker MOSQUITTO est parfait (moustique en Français) sur un ordinateur (Windows, Mac OS, Linux, etc.) ; Sur smartphone ou tablette, il existe de multiples applications qui vont transformer votre appareil en broker (exemple « MQTT Broker App » sur Android).

Commençons modestement en restant sur votre machine (sans même utiliser le réseau) par échanger des messages avec vous-même autour d’un sujet de discussion qui tient à cœur à une large majorité de personnes : les vacances.

À faire vous-même 1 :

  • Sous Windows, lancez le broker MOSQUITTO en ouvrant le script « mosquitto.bat » (En cas d’échec, ouvrez directement le fichier en question et le logiciel mosquitto devra être installé au préalable) ; une fenêtre va s’ouvrir et le il ne faut pas la refermer mais éventuellement la réduire :

Bravo ! Le broker est actif (« running ») tant que vous ne refermez pas la fenêtre (vous pouvez cependant la réduire sans problème) et il ne reste plus qu’à l’utiliser comme serveur et d’y ajouter des clients.

À faire vous-même 2 :

  • Ouvrez un invité de commande (tapez « cmd » dans la barre de recherche de la barre de tâches de Windows) puis écrivez « mosquitto_sub -h localhost -t vacances/# » après le « :\> » afin de lancer, après validation (touche « entrée » du clavier), une souscription pour recevoir des messages (-h pour adresse et –t pour le topic) :

A ce stade, il ne se passe à priori rien car cette fenêtre (invité de commande) est en attente de messages.

Le « /# » signifie que tous les messages parlant de vacances seront visibles. On peut créer un sous sujet (« Subtopic » en Anglais) par exemple sur les vacances de carnaval « vacances/carnaval », exactement de la même manière que sont structurés les dossiers d’un ordinateur ; le message envoyé avec un tel topic sera visible dans ce premier invité de commande.

Il reste à publier votre premier message à partir d’une autre fenêtre (Invité de commande).

À faire vous-même 3 :

  • Ouvrez encore un nouvel invité de commande puis écrivez « mosquitto_pub -h localhost -t vacances/carnaval -m avancer » afin de lancer une publication pour envoyer un message (-m pour message) :

Si tout est correct, dans la fenêtre de la souscription, le résultat devra être le suivant :

Félicitations alors !

À faire vous-même 4 :

  • Maintenant amusez-vous à écrire une phrase comportant des espaces comme par exemple « je vais débouler » (Pour cela il vous faudra absolument mettre des guillemets autour) et vérifiez le résultat :

Remarquez que le résultat n’est pas parfait dans la fenêtre de réception pour le caractère « é » de « débouler » ; il s’agit d’un léger problème d’interprétation par l’invité de commande ; rien de grave.

 

Compliquons légèrement en voulant envoyer « je vais débouler avec le groupe "MASS MOUN MASSIF" ! ». Il faudra alors mettre le caractère « \ » devant chaque « " » du message.

À faire vous-même 5 :

  • Envoyez le message ci-dessus et vérifiez bien évidemment le résultat

Continuons à envoyer des messages soit à vos camarades soit sur l’ordinateur du professeur dont l’écran est projeté sur le tableau (Tout le monde pourra alors voir tous les messages échangés). Pour cela, il va falloir choisir une machine parmi les machines du réseau de la salle et connaitre son adresse IP (Voir thème Internet). Il serait préférable que dès maintenant, cette machine soit la même que celle sur laquelle le robot ira se connecter.

À faire vous-même 6 :

  • Dans un nouvel invité de commande, exécutez la commande « ipconfig » pour connaitre l’adresse IP de votre machine

  • Amusez-vous à envoyer des messages de votre choix (en restant correct !) autour des vacances en remplaçant dans la commande « localhost » par l’adresse IP de la machine retenue

Il maintenant temps de mettre en mouvement le robot. Il est possible de le faire par ligne de commande avec « mosquitto_pub » mais nous allons passer par un programme en langage « Python » et une interface graphique « Tkinter ».

À faire vous-même 7 :

  • Ouvrez le fichier Python « Pilotage robot.py » puis remplacez les «  » de l’instruction située à la ligne 14 par l’adresse IP du broker retenu servant d’intermédiaire avec le robot

  • A la ligne 17, modifiez éventuellement l’identifiant de votre robot (variable « client_id ») en fonction de son numéro marqué dessus (« robot1 » pour le robot 1, « robot2 » pour le robot 2 etc.) ; puis prenez connaissance aux lignes 18 et 19 des deux topics pour votre robot (Fini les « vacances » comme topic !), un pour recevoir des ordres et un envoyer des informations venant notamment de ses capteurs.

A ce stade, le professeur aura mis sous tension le robot posé au sol pour éviter qu’il ne tombe ; le voyant sur sa face avant devra être passée au vert (Rouge = non connecté au réseau, Orange connecté au réseau mais pas encore au Broker et Vert connecté au Broker et donc au réseau).

 

Les messages dans le cadre des IoT sont généralement au format d’objets JSON constitués d’un nom (chaine de caractères) et d’une valeur (nombre) :

{"nom":valeur}

Souvenez-vous… nous avons déjà fait connaissance avec JSON lors du thème précédent sur les données structurées ! En Python comme dans d’autres langages, on parle de dictionnaire (similaire à un dictionnaire où à gauche des « : » se trouve le mot et à sa droite sa définition !)

À faire vous-même 8 :

  • Après avoir observé l’instruction de la ligne 23, remplacez-les « … » de celle située à la ligne 28, qui vise à faire avancer le robot à 50 % de sa vitesse maximale (Le nom de l’objet JSON doit être « avancer » et sa valeur associée « 50 » pour 50 %)

  • Lancez l’exécution de ce programme ; puis appuyez sur le bouton « Avancer », situé sur une fenêtre graphique, afin de déclencher l’exécution de l’instruction que vous venez de modifier ; puis constatez, si tout est bon, l’avancement du robot

  • Appuyez sur le bouton « Arrêter » pour arrêter le robot

  • Observez qu’à chaque fois que vous placez votre main (ou autre chose) devant le robot (Capteur situé à l’avant en bas et orientable), qu’un message s’affiche sur votre fenêtre graphique en dessous des deux boutons poussoirs mais aussi dans la console Python de votre IDLE

  • Observez la partie de programme située entre les lignes 45 et 58 qui permettent l’affichage de ces messages  

On ne va pas se contenter de faire avancer et arrêter le robot ; il est possible de le faire reculer, tourner sur place et plein d’autres choses encore.

À faire vous-même 9 :

  • Ouvrir le programme du robot « Prog robot.mblock » et observez les instructions notamment celle de la fonction « on_message_come »

  • Complétez votre programme Python (Attention : Pas celui que vous venez d’ouvrir !) afin de pouvoir le faire reculer (Il faudra ajouter un nouveau bouton sur le modèle des deux autres) ; puis testez

  • Faites en de même pour permettre au robot de tourner à gauche et à droite ; puis testez

À faire vous-même 10... pour les plus avancés :

  • En vous aidant de recherche sur le Web, enjolivez les boutons poussoirs et la fenêtre « Tkinter » ; puis testez