Jusqu'à la semaine passée nos Yocto-Display devaient être connectés directement à un PC pour mettre à jour l'affichage. Maintenant que le YoctoHub-Ethernet est sorti nous pouvons nous affranchir de cette limitation. Nous allons voir comment afficher le contenu d'un flux RSS sur un Yocto-MaxiDisplay connecté à un YoctoHub-Ethernet en utilisant l'API PHP par callback HTTP.
Pour réaliser ce projet nous allons utiliser deux fonctionnalités clé: les séquences du Yocto-MaxiDisplay et l'API Callback du YoctoHub-Ethernet. Le YoctoHub-Ethernet va se connecter toutes les dix minutes à un script PHP pour récupérer la séquence à afficher sur l'écran. Ce script PHP devra télécharger le flux RSS et créer une séquence qui sera affichée en boucle jusqu'à la prochaine connexion du YoctoHub-Ethernet.
La vue d'ensemble du montage
Le code de notre callback PHP se compose de trois étapes. La première étape consiste à récupérer et parser les flux RSS des sites web qui vont être affiché. La deuxième étape consiste à initialiser l'API Yoctopuce pour fonctionner en mode callback HTTP. Et la troisième étape consiste à enregistrer sur le Yocto-MaxiDisplay une séquence animée qui va afficher un par un les titres des flux RSS. Nous n'allons détailler que la troisième étape, le reste étant soit trivial soit déjà expliqué dans de précédent articles.
Pour utiliser API PHP en callback HTTP il faut utiliser le mot clef callback lors de l'appel à yRegisterHub()
yDisableExceptions();
// Setup the API to use the VirtualHub on local machine
$errmsg = "";
if(yRegisterHub('callback',$errmsg) != YAPI_SUCCESS) {
logtofile("Unable to start the API in callback mode ($errmsg)");
die();
}
Lors de l'exécution du callback HTTP, nous n'allons pas afficher directement les informations sur l'écran; nous allons seulement enregistrer une séquence animée qui sera exécutée en boucle par l'écran. Cette solution a un double avantage. Premièrement, cela diminue le nombre de connexions nécessaires au callback HTTP (avec une connexion, on peut afficher plusieurs articles pendant 10 minutes). Deuxièmement, si votre réseau tombe ou que votre serveur s'arrête, le Yocto-MaxiDisplay continuera à afficher la dernière séquence qu'il a reçue.
Pour créer une séquence il faut démarrer l'enregistrement avec la méthode newSequence() de l'objet YDisplay et l'enregistrer avec la méthode saveSequence(). Toutes les commandes que vous envoyez à l'écran entre ces deux appels seront interprétées plus tard lors de l'exécution de la séquence. Pour que la séquence se relance automatiquement à la fin de l'exécution il faut appeler la méthode playSequence() en spécifiant le nom de la séquence que l'on est en train d'enregistrer. Il est aussi possible d'insérer des temps d'attente avec la méthode pauseSequence().
Dans notre exemple nous allons:
-1 appeler newSequence() pour démarrer l'enregistrement.
-2 exécuter les commandes pour afficher le contenu d'un article.
-3 appeler pauseSequence(20000) pour marque une pause de 20 secondes (pour que l'on ai le temps de lire ce qui a été affiché).
-4 si il y a d'autres articles à afficher on recommence au point 2.
-5 appeler playSequence('rss') pour qu'à la fin de l'exécution la séquence recommence.
-6 appeler saveSequence('rss') pour enregistrer la séquence sous le nom "rss".
-7 appeler playSequence('rss') pour réellement démarrer l'exécution de la séquence.
les points 2, 3, 5 ne seront interprétés par l'écran d'après l'exécution du point 7.
// start recording a new sequence
$display->newSequence();
...
foreach ($RSSItems as $item) {
...
$layer2 = $display->get_displayLayer(2);
$layer2->clear();
$layer2->drawText(0,0,Y_ALIGN_TOP_LEFT,$item['feed']);
...
$display->pauseSequence(TRANSITION_DURATION+DISPLAY_DURATION);
}
//trick to restart the same sequence
$display->playSequence('rss');
// save command will overwrite the previous sequence
$display->saveSequence('rss');
// start the sequence for real
$display->playSequence('rss');
...
Le code source complet est disponible sur GitHub.
Une fois le script écrit et installé sur un serveur web il ne reste plus qu'à configurer le YoctoHub-Ethernet pour l'exécuter toutes les dix minutes.
La première étape est de vérifier l'on arrive accéder au YoctoHub-Ethernet. Traditionnellement, retrouver l'IP d'un périphérique réseau sans écran est assez pénible, mais dans le cas du YoctoHub-Ethernet nous avons tout fait pour vous simplifier la vie. La plupart du temps il n'est pas nécessaire de changer la configuration réseau car par défaut le YoctoHub-Ethernet récupère par DHCP son adresse IP et s'annonce sur le réseau. Sous Windows il apparaît directement dans le voisinage réseau. Vous pouvez aussi vous connecter directement au module en utilisant le numéro de série du YoctoHub-Ethernet (par ex. http://YHUBETH1-0F17A). Sous OS X vous pouvez taper votre numéro de série suivit de ".local" (ex http://YHUBETH1-0F17A.local) dans n'importe quel browser. Si vous voulez utiliser une IP fixe ou que vous utilisez Linux vous pouvez configurer votre YoctoHub-Ethernet via son port de contrôle USB, en utilisant le VirtualHub (cf documentation).
Le YoctoHub-Ethernet apparaît dans le voisinage réseau d'une machine Windows
Une fois que vous avez accès au YoctoHub-Ethernet il ne vous reste plus qu'à entrer l'URL de callback HTTP et fixer le délai à 600 seconde entre les appels. Une fois ces paramètres sauvés le Yocto-MaxiDisplay va se mettre à afficher le contenu de votre Flux RSS.
La fenêtre de configuration du callback
Au fait, si vous voulez juste afficher sur votre écran les derniers articles de notre site vous n'avez même pas besoin d'un serveur, vous n'avez qu'a utiliser notre callback HTTP: http://www.yoctopuce.com/FR/interactive/yrss/yrss.php :-)