Le but du projet de cette semaine est de montrer une nouvelle application de notre Yocto-MaxiDisplay. L'application proposée est la suivante: afficher en temps réel l'arrivée des bus des transports publiques locaux.
En effet, il peut-être utile d'avoir un afficheur chez soi qui met à disposition les heures d'arrivées des bus environnants, ce qui évite d'attendre trop longtemps à l'arrêt de bus.
Le projet:
A Genève, nous disposons d'un service de transports en commun qui met à disposition une application permettant de consulter en tout temps l'heure d'arrivée d'un bus à un arrêt précis. L'idée de ce montage est de récupérer les horaires des bus sur le serveur de nos transports publics, et enfin de les afficher sur l'écran. Pour se faire, nous avons un Raspberry sur lequel un script Python s'occupe de faire les requêtes HTTP auprès du serveur, de traiter les données pour ensuite les afficher sur l'écran.
Aperçu du système d'affichage existant
Notre afficheur est capable d'afficher les horaires d'une seule ligne, dans les deux sens, et d'afficher l'heure d'arrivée des deux prochains bus.
L'afficheur
Le montage:
Pour permettre à cet affichage d'être déplacé aisément, l'écran est connecté à un YoctoHub-Wireless-g qui lui s'occupe d'assurer la connexion sans fil au réseau domestique. L'écran est monté dans son YoctoBox-Display.
Le Hub wifi vient se fixer derrière l'écran à l'aide de Fix-2.5mm, ce qui permet un montage très compact.
Aperçu du montage final
Le montage doit tout de même être alimenté par le connecteur micro USB du Hub.
Dans notre montage particulier, un Yocto-Buzzer a été ajouté afin de pouvoir émettre un son lors de l'arrivée d'un bus. Dans cet article, cette option n'a pas été implémentée, mais elle fera peut-être l'objet d'un futur article.
Le software:
Comme expliqué rapidement dans l'introduction, le Raspberry se charge ici de faire l'intermédiaire entre le serveur de nos transports et l'écran. En effet, un script Python a été spécialement développé pour cette application. Le script s'occupe de faire les requêtes HTTP au serveur, de décoder la réponse, puis de l'afficher sur l'écran.
En fouillant la page Internet de nos transports en commun, on trouve les requêtes de la page web vers le serveur qui, lui, renvoie toutes les données concernant le bus en question sous forme d'un objet JSON. En recopiant l'URL dans notre code Python et en utilisant la librairie requests, on peut faire la même requête que la page web. Ci-dessous un exemple démontrant la requête HTTP.
reponse = requests.get(url)
La requête ayant retourné une chaîne de caractères représentant l'objet JSON, il faut interpréter cette chaîne de caractères pour créer un objet Python de type "JSON". Puis on construit le message à afficher à partir de ces informations. Ci-dessous un exemple d'affichage de la chaîne de caractères extraite au préalable de l'objet Python JSON.
Une adaptation à des transports en commun d'autres villes est tout à fait envisageable. En effet, il suffirait de modifier les requêtes auprès des serveurs des transports publics et de venir les afficher de la même manière sur l'écran. Ci-dessous un exemple d'extraction du nom de la destination de la ligne de bus de l'objet JSON.
De plus, il existe dans la majorité des cas des API que ces services fournissent aux programmeurs pour faciliter l'accès à leur bases de données. Il faut en premier lieu se renseigner sur le site du transporteur en question, voir s'il ne fournit déjà pas une API.
Le code est disponible sur notre page GitHub, juste ici.
Le schéma de fonctionnement du programme