À la fin de ma dernière exploration du monde de l’Internet des Objets, j’étais parvenu à commander une lampe à l’aide d’un client MQTT programmé en C#. Laissez-moi vous rappeler comment en quelques lignes. J’avais d’abord écrit ce client de façon à ce que deux PC situés n’importe où dans le monde puissent échanger des messages relayés par un serveur de test MQTT en nuage. J’avais ensuite ajouté au client une fonction transmettant tout message reçu sur un port COM virtuel du PC. Grâce à cette liaison sérielle, il ne me restait plus qu’à relier au port COM une carte capable d’interpréter des commandes. Mon montage final comprenait une carte SAM D20, une carte d’extension avec relais, et une prise télécommandée. Une fois l’ensemble connecté, j’avais donc réussi à allumer et éteindre une lampe.
 
Évidemment, utiliser un PC pour envoyer des commandes n’était ni très moderne, ni très pratique. Je me suis donc mis en tête d’écrire une petite application pour smartphone Android (je possède un Galaxy S6) à partir de laquelle j’aurais pu envoyer des messages contenant les commandes des relais. Le plus simple m’a semblé de les envoyer par TCP/IP à un PC appartenant au même réseau WLAN que le portable, PC auquel serait bien sûr relié mon montage. On trouve heureusement sur le net du code Android/Java pour l’envoi de messages TCP/IP, et il est tout aussi facile de trouver du code C# pour leur réception. Avec ces routines, je ferai d’une pierre deux coups puisque qu’elles pourraient à n’en pas douter resservir dans toutes sortes de projets Elektor.
 
Aussitôt dit, aussitôt fait : j’ai réécrit mon client MQTT de façon à ce qu’il retransmette par MQTT tout message TCP/IP entrant. Le code source et l’exécutable sont dans l’archive zip ci-dessous. La mise en route est simple : entrez d’abord le sujet MQTT (Topic to publish) des messages à publier, par exemple « Lampe » (cf. épisode 4) ; pour vérifier ce qui a été publié par MQTT, abonnez-vous dans la foulée au sujet. Entrez ensuite l’adresse IP de votre ordinateur (pour votre réseau domestique, p. ex. 192.168.0.10 ; un programme comme Network Scanner de SoftPerfect rend à cet égard de bons services). Pour finir, cliquez sur le bouton TCP Listen. Vous pouvez maintenant lancer une autre instance du client MQTT sur un ordinateur distant auquel vous relierez votre montage, ou bien tester l’ensemble avec un seul PC. N’oubliez pas, dans le client MQTT correspondant, d’entrer le port COM auquel est connectée votre carte SAM ou Arduino (ou autre).
 
Voilà pour le programme PC, il me fallait encore écrire le code de l’appli envoyant les messages TCP/IP. Comme je n’avais pas programmé d’applications Android depuis un certain temps déjà, j’ai d’abord dû réinstaller Android Studio sur mon nouveau portable. J’ai une nouvelle fois constaté que Google ne faisait pas les choses à moitié : Android Studio est vraiment un environnement de développement puissant et fiable. Cela dit, mieux vaut être patient et avoir les nerfs solides si on s’attaque à la programmation d’applis Android sans connaître le système Android et sans avoir une grande expérience en programmation Java. La prise en main elle-même d’Android Studio demande d'ailleurs du temps. Il reste cependant possible d’implanter des commandes dans un smartphone sans passer par Java/Android. Je reviendrai sur ces différentes approches ici-même, et le magazine Elektor en parlera également.
 
Mon appli peut envoyer des messages TCP/IP à n’importe quelle adresse IP d’un réseau domestique, message et adresse étant à entrer dans les boîtes de texte correspondantes avant d’appuyer sur le bouton Send. Le temps m’a manqué pour ajouter un menu Settings (paramètres) et implanter une fonction Timeout (délai d’attente). Si le PC ne reçoit pas un message, soit que le listener TCP du client MQTT n’ait pas encore été lancé, soit que l’adresse ait été invalide, l’écran se fige. C’est un comportement acceptable pour une première démo, peut-être même trouverez-vous le code utile pour commander quelque circuit relié à votre PC.
 
Depuis mon smartphone, j’ai donc réussi à envoyer des commandes comme « R 0 1 + » et « R 0 1 – »  à ma prise télécommandée. Le résultat était satisfaisant, le moyen un peu moins : il n’est en effet pas très pratique d’avoir à taper des messages de texte pour commander une lampe. Et puis il reste pas mal de ressources matérielles à exploiter. En d’autres termes, pas mal de choses encore à optimiser ! [HM]