Rasp-Hack-HDMI-Serveur
Introduction
C'est aujourd'hui l'occasion pour Joonas Pihlajamaa de CodeAndLife de mettre en oeuvre un projet qu'il planifiait depuis un moment:
- Utiliser un Raspberry Pi comme un “shield HDMI” (relativement bon marché) pour une microcontroleur Arduino.
Alors que le Pi est capable de réaliser facilement beaucoup des tâches d'un Arduino et même plus encore... certain peuvent avoir des projets Arduino nettement plus complets (comme par exemple, un projet relatif à l'automatisation d'un Home Cinema) qui pourrait bénéficier d'une sortie HDMI.
Les shield d'affichage pour Arduino ne sont pas les meilleurs marchés, pourquoi ne pas utiliser un RaspPi à la place? Il y aussi déjà eu des hack pour utiliser un RaspPi comme shield réseau, et ce projet y est fort semblable (vous pourriez juste changer un peu le code "côté Pi" pour avoir des commandes "réseaux" disponible en très peu de temps).
Raccordement
Le matériel nécessaire pour ce Hack est très simple - Le Pi est raccordé à l'Arduino en utilisant l'interface Série disponible sur les deux plateformes.
Comme le Pi fonctionne en 3.3V et un Arduino en 5V, il faut utiliser un convertisseur de niveau logique (level converter en anglais – cette fois j'ai utiliser un convertisseur AdaFruit, il est incroyablement simple à utiliser et il n'y a aucun danger de surcharge pour votre Pi (au contraire d'un convertisseur à base de résistance, voir cet autre Article de Joonas Pihlajamaa en anglais).
Ne raccordez jamais directement un Arduino et un Raspberry, Arduino fonctionne en 5v et le Raspberry en 3.3v... vous seriez assurez de détruire le GPIO et/ou votre Raspberry Pi. |
Les connexions sont réalisées comme suit par l'intermédiaire d'un convertisseur logique (level converter en anglais) qui adapte les tensions entre le Raspberry Pi et votre Arduino.
Effectuez toutes les connections suivantes par l'intermédiaire du convertisseur logique:
- connectez les GND (Ground, la masse en Français) entre les périphériques (soyez méfiant, vérifiez d'abord 3 fois qu'il s'agit bien de la masse!)
- Connectez le TX du Pi sur le RX d'Arduino (connectez uniquement après la programmation de votre Arduino, ne jamais programmer votre Arduino avec le Pi connecté!)
- Connectez le RX du Pi sur le TX d'Arduino
Programmation
Programme côté Raspberry Pi
Du côté logiciel, le PI agit comme un "serveur", acceptant des commandes d'affichage simple par l'intermédiaire de la connexion série.
Vous pouvez même démarrer le script serveur du Pi et vous conneter sur le port série à l'aide de Putty. La session pourrait ressembler à ceci:
# initialiser le viewport - pas encore implémenté dans le code serveur init 500 500 # Dessiner un rectangle de 10x10 à la position (5,15) draw 5 15 10 10 # quitter le serveur quit
Le serveur Python utilise la libraire de communication pyserial, configurée sur 9600 bauds, mais le Pi et Arduino devraient également être capable de dialoguer à 115 200 bauds.
Pour l'interface graphique, c'est le framework de pygame qui est utilisé. La version du code initialize le viewport graphique à 500×500 points (500x500 pixels), mais il serait possible de passer ce paramètre à une commande "init" envoyée depuis un Arduino (comme cela, c'est le programme Arduino qui défini également le ViewPort).
Le code devrait être assez facile à comprendre: il n'y a que deux commandes supportées, “draw” (dessiner) avec 4 paramètres, et “quit” pour quitter le programme (sinon une boucle infinie attends les commandes de dessin).
Le fichier est nommé ar2pi.py.
#!/usr/bin/env python # Code source ar2pi.py par Joonas Pihlajamaa pour codeandlife.com (Juillet 2012) # Article original: http://codeandlife.com/2012/12/27/raspberry-pi-as-arduino-hdmi-shield/ # original et credit par Joonas Pihlajamaa (www.joonaspihlajamaa.com) # Article Francais: http://mchobby.be/wiki/index.php?title=Rasp-Hack-HDMI-Serveur # Traduction CC-BY-SA par D.Meurisse (www.MCHobby.be) import serial import string import pygame ser = serial.Serial("/dev/ttyAMA0",9600) ser.open() pygame.init() window = pygame.display.set_mode((500, 500)) colour = pygame.Color("blue") pygame.mouse.set_visible(False) quit = False while not quit: line = ser.readline() words = line.split() if words[0] == "rect": pygame.draw.rect(window, colour, (int(words[1]), int(words[2]), int(words[3]), int(words[4]))) elif words[0] == "exit": quit = True pygame.display.flip() ser.close()
Rendre le fichier exécutable
Par défaut, les fichier sont considéré comme des fichiers texte non exécutable... même s'il contiennent des scripts.
Il faut donc indiquer au système d'exploitation qu'il peut autoriser l'exécution de notre raspi-blink.py
chmod +x ar2pi.py
Exécuter notre programme
sudo ./ar2pi.py
Vous pouvez arrêter le programme en utilisant la commande "quit" depuis votre Arduino ou en utilisant la combinaison de touche CTRL + C.
Source: Article "Raspberry Pi as Arduino HDMI Shield" de Joonas Pihlajamaa paru sur CodeAndLife
Traduit avec l'autorisation de Joonas Pihlajamaa, Translasted with autorization Joonas Pihlajamaa.
Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : « Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.
L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.