Thonthon : mon PI compagnon – Part one
Hello les loulous!
Je viens d’acheter un petit “Scroll pHat HD” (le HD est en fait la version 2) de chez Pimoroni. Qu’est-ce donc? C’est un kit comprenant un module de LED pour Raspberry Pi Zero ainsi qu’une tête toute mimi imprimée en 3D. Dès réception du colis, je m’empresse de déballer tout ça pour monter l’ensemble! Je sors le fer à souder, et je commence à fondre l’étain.
Évidemment, je n’ai pas pensé à regarder la notice (sur le site de Pimoroni)… donc au lieu de me retrouver avec un Raspberry amovible, je le retrouve soudée et intégrée dans mon robot… bref ce n’est pas très grave, je n’avais pas l’intention de l’enlever un jour. Par contre, les pattes qui font office de support sont assez fragiles, j’en ai cassé une après un transport (se recolle très bien avec de la super glue standard). Bon pour ne pas me prendre la tête, je balance un backup sur la carte SD, modifie le fichier /etc/network/interfaces en précisant mon réseau Wifi, et je branche le tout. Maintenant que je suis connecté en SSH, je télécharge le repo Git du projet, et teste quelques bouts de code. Voilà ce que ça donne pour un premier essai:
Tout fonctionne, parfait! N’oubliez pas que vous pouvez (devez, parfois) renverser l’affichage avec la fonction suivante:
scrollphathd.rotate(180)
Maintenant, que vais-je donc faire de ce machin? Bien entendu je ne l’ai acheté que parce que mon côté geek me l’a ordonné! J’aime bien le côté domotique, j’ai donc imaginé que ce robot pouvait être une incarnation de Yana, que j’appellerai au passage Thonthon (parcque codé en Python). Concrètement, il affichera des infos que Yana ne peut afficher, soit la météo, l’heure, des tweets, une humeur… et pourra également traduire ces choses là vocalement, grâce au Bluetooth intégré au Pi Zero connecté à une mini enceinte JBL.
Vous avez remarqué le “part one” dans le titre de l’article, c’est simplement parce que je n’ai pas encore finie ce projet et je vais donc le diviser en plusieurs parties. On commencera donc par un peu d’OSINT (Open Source INTelligence): récupération de tweets publiques et affichage sur l’écran de LED. Cela peut nous servir à faire de la veille en rapport avec la sécurité, en suivant le hashtag #InfoSec. Comment qu’on fait? Et bien on utilise l’API Twitter et les outils développées spécialement pour le Scroll pHat HD. Le tout en Python. Voici mon code commenté:
#!/usr/bin/python3.4 import time import signal import scrollphathd from twitter import * from hashlib import sha1 from scrollphathd.fonts import font5x7 # Variables hash_tag = '#InfoSec' list_hash_one = {} compteur = 0 hello = "Hey" # Print desc print(""" Scroll pHAT HD: Twitter Stream Print tweets about: %s Press Ctrl+C to exit! """ % hash_tag) scrollphathd.set_brightness(0.5) scrollphathd.rotate(180) scrollphathd.write_string(hello, x=0, y=0, font=font5x7, brightness=0.8) scrollphathd.show() print(" ") print("Initiating Twitter connexion...") # Tokens consumer_key = 'YOURKEY' consumer_secret = 'YOURCSECRET' token = 'YOURTOKEN' token_secret = 'YOURTSECRET' auth_t = OAuth(token, token_secret, consumer_key, consumer_secret) t = Twitter ( auth=auth_t) print("Done") print(" ") print("Initiating socket...") # Create a live stream socket connected to the Twitter API # This way, we do not create a socket for each querry twitter_userstream = TwitterStream(auth=auth_t, domain='userstream.twitter.com') print("Done") # Stream tweets print(" ") print("Fetching tweets..") # Main loop while True: # As soon as a new tweet is written in the socket, we take it in our tweet variable for tweet in twitter_userstream.statuses.filter(track=hash_tag): if (tweet['lang'] == 'fr' or tweet['lang'] == 'en') and tweet['retweeted'] == False: print(tweet['text']) scrollphathd.clear() scrollphathd.write_string(" " + tweet['text'], x=0, y=0, font=font5x7, brightness=0.5) for t in range(0, 800): scrollphathd.show() scrollphathd.scroll() time.sleep(0.035) else: print("Bad tweet for reasons:") print(tweet['lang']) print(tweet['retweeted']) print(" ") print("Fetching tweets..") scrollphathd.clear() scrollphathd.write_string(hello, x=0, y=0, font=font5x7, brightness=0.8) scrollphathd.show() exit(1)
Maintenant, je modifie le fichier /etc/rc.local pour ajouter la ligne suivante:
sudo nohup /home/pi/Python/thonthon.py > /dev/null 2>&1 &
Et voilà le résultat:
De cette façon, le script python se lance au démarrage, et pas besoin de passer par SSH pour le lancer, il suffit de brancher Thonthon =)
C’est à peu près tout pour cette première partie, je publierai la suite dès que le projet avancera!! A plus dans le bus!
Salut valou,
Je me suis aussi procuré le bot de Pimoroni pour faire un cadeau à mon fils. Par contre, j’ai remarqué que l’affichage des caractères accentués déconne un peu. La fonte 5×7 ne donne pas la bonne position des caractères unicode. Par exemple, le “é” devrait être en E9, or il est en 96. As-tu aussi ce problème ?
Merci pour ton article intéressant.
Salut Manuel!
Merci pour ton commentaire. De mon côté je ne crois pas avoir cette erreur, ce qui est étrange. Cependant les strings affichées sont souvent en anglais, ce qui explique peut être cela. J’essaye de faire un test en rentrant ce soir et je te fais un retour ici =)
Salut Manuel, je viens de véirifier (vaut mieux tard que jamais…) et j’ai également ce problème. Je n’avais jamais fais attention. Je n’ai pas cherché mais tu peux sûrement demander de l’aide en ouvrant une issue sur leur github si ce n’est pas déjà fait.
Bon courage!