lundi 20 mai 2019

Et pendant ce temps, dans un blog près de chez vous...(4)



Quelques publications récentes qui ont éveillé mon intérêt:

Sur BreizhMakers:

Sur Arduiblog:

Sur Cyanuretech:

Sur RitonDuino:
Sur Framboise314:

Sur iTechnoFrance:

Sur MCHobby:

Yves Pelletier   (TwitterFacebook)

dimanche 19 mai 2019

Mini clavier sans fil et Raspberry Pi


La plupart du temps, quand j'utilise un Raspberry Pi, c'est par SSH ou VNC: aucun écran, clavier ou souris n'est alors branché au Raspberry Pi. Mais il m'arrive quand même occasionnellement d'avoir besoin de le brancher à un écran HDMI (ne serait-ce que pour configurer le Wifi suite à l'installation d'un nouvel OS). Dans ces occasions, mon téléviseur fait parfaitement l'affaire, à un détail près: je ne dispose pas, devant le téléviseur, d'une table ou d'un bureau sur lequel je pourrais placer un clavier et une souris USB.

Ce petit clavier sans fil, doté d'un pavé tactile (trackpad), se révèle bien pratique dans ce genre de situation, puisqu'il est conçu pour être utilisé pendant qu'on le tient dans ses mains, un peu comme une manette de jeu. Il est livré avec un petit récepteur qui se branche dans un port USB du Raspberry Pi. Sous Linux, aucune installation de pilote n'est nécessaire: ça fonctionne immédiatement dès le premier démarrage.

On peut le trouver sur eBay ou autre pour moins de 10 euros (cherchez "mini wireless touchpad keyboard"). Il existe également une version rétroéclairée, et il est possible de se le procurer en version AZERTY ou QWERTY.

Je ne m'imaginerais pas utiliser un tel clavier pour taper du texte toute la journée (les touches de style télécommande de téléviseur ne survivraient probablement pas longtemps), mais pour une utilisation occasionnelle, ça convient parfaitement à mes besoins.

Addendum (3 juin 2019): Quelques jours après la publication de ce billet, mon mini-clavier a cessé de fonctionné; il est désormais impossible d'établir une connexion entre le dongle USB et le clavier. Je me permet d'émettre une petite mise en garde concernant la durabilité, donc...

Yves Pelletier   (TwitterFacebook)

dimanche 5 mai 2019

Obtenir les grands titres de l'actualité avec l'ESP8266 (flux RSS)

Pour la petite expérience d'aujourd'hui, mon objectif était d'utiliser un ESP8266 afin de récupérer le flux RSS d'une agence de presse et de présenter dans le moniteur série les grands titres de l'Actualité.


RSS (Really Simple Syndication) est un format de données créé il y a une vingtaine d'années: il s'agit de texte encadré par des balises assez similaires à celles du html:  title, description, pubDate, link, etc.  Il est surtout utilisé pour diffuser des dépêches d'actualité, ou encore pour signaler les publications les plus récentes d'un site web.

Mon point de départ a été ce billet du blog Runtime Projects, qui présente une modification de l'exemple WiFiClient.ino (disponible dans l'IDE Arduino lorsque l'ESP8266 y a été installé) pour récupérer le flux RSS de l'agence Reuters.

Lors de mes tentatives d'utiliser ce sketch pour récupérer d'autres flux RSS, j'ai pu constater une certaine diversité dans le monde des serveurs RSS. Par exemple, plusieurs d'entre eux exigent une connexion sécurisée sur le port 443, alors que d'autres prévoient une connexion non sécurisée sur le port 80.  Certains flux de données comportent des sauts de lignes, alors que d'autres n'en comportent pas. Dans la plupart des cas, un titre est identifié par la balise title ; mais dans certains cas (plus rares), ce sera plutôt la balise title type="text".

J'ai donc tenté d'écrire un sketch relativement universel qui procédera de façon légèrement différente selon le serveur RSS qu'on désire interroger.

Au début du skech, nous fournissons des informations concernant le flux RSS à consulter. Par défaut, mon sketch utilise le fil de nouvelles de Radio-Canada, en français. Nous souhaitons extraire uniquement les grands titres, qui sont encadrés par la balise "title", sans conserver les résumés plus détaillés, les images, les liens, etc. De plus, puisque ce serveur exige que la connexion soit sécurisée, nous avons ajouté une instruction pour le préprocesseur: "#define SECURISE" (cette instruction servira plus loin dans le programme).


Un mot sur la variable fingerprint: sa valeur est différente d'un site à l'autre et, malheureusement, il faut parfois la mettre à jour au bout de quelques semaines.

Pour trouver sa valeur, vous entrez l'adresse du flux rss sécurisé dans un navigateur web et vous cliquez sur l'icône en forme de cadenas qui indique qu'il s'agit d'une connexion sécurisée...


... puis vous cliquez sur "Certificat". Parmi les informations fournies, vous localisez l'empreinte SHA-1, et vous recopiez son contenu dans la variable fingerprint du sketch.


Avant d'aller plus loin dans le sketch, jetons immédiatement un oeil sur les caractéristiques d'un serveur RSS radicalement différent: le flux RSS du blog "Électronique en Amateur".


Contrairement au serveur précédent, celui-ci n'exige pas de connexion sécurisée. De plus, il retourne un flux qui comporte des fins de ligne, ce qui nous permettra d'analyser les données ligne par ligne (d'où l'instruction de préprocesseur: #define FIN_DE_LIGNE). Pour compliquer les choses encore davantage, les titres sont annoncés par la balise title type="text" plutôt que simplement title. Notez que lorsque nous utilisons la possibilité de lire l'information ligne par ligne, nous devons également fournir la balise de fermeture (dans la constante baliseFin).

Au lignes 58 à 65, vous pouvez constater ce qui différencie la connexion à un serveur qui est sécurisé et un serveur qui ne l'est pas:


Les lignes 91 à 108 concernent uniquement un flux qui comporte des indications de fin de ligne (et qui a été déclaré comme tel avec la mention "#define FIN_DE_LIGNE"). Nous lisons l'information une ligne à la fois, grâce à l'instruction "ligne = client.readStringUntil('\r');".

Le reste consiste à détecter la présence de la balise "title" au moyen de la fonction "indexOf()" qui retourne sa position dans la chaîne de caractères (ou -1 si elle ne si trouve pas). S'il s'agit bien d'un titre, nous affichons dans le moniteur série la partie de la chaîne de caractères qui se trouve entre les deux balises.

Pour les flux ne comportant pas de saut de ligne, la stratégie précédente fonctionnait, mais la totalité de l'information était placée dans une même chaîne de caractères, ce qui entraînait un assez long délai avant que l'information apparaisse dans le moniteur série.

J'ai préféré utiliser une stratégie différente, qui se trouve aux lignes 110 à 117. L'information est lue jusqu'au symbole "<" qui indique le début d'une balise. On vérifie ensuite si notre chaîne de caractères contient bien la balise title et, si c'est le cas, on affiche dans le moniteur série la portion de texte qui se trouve après cette balise.












La capture d'écran ci-dessous montre le résultat lorsqu'on consulte le flux RSS de mon blog...


La suite logique de ce projet consistera probablement à présenter cette information sur un afficheur plutôt que dans le moniteur série.

Yves Pelletier   (TwitterFacebook)