A quoi ça sert?

RaspiMine offre la possibilité d'envoyer des signaux sur les ports GPIO d'un Raspberry Pi grâce à un simple mécanisme de levier sur un serveur Minecraft.

Voici un exemple d'utilisation de RaspiMine, vous pouvez allumer et éteindre jusqu'à 15 appareils différents!

Qu'est ce qu'un Raspberry Pi?

Un Raspberry Pi est un ordinateur de la taille d'une carte bancaire. Il est équipé d'un processeur de type ARM monocore cadencé à 700MHz (Ouais c'est pas beaucoup mais c'est suffisant pour ce qu'on va en faire).

Il existe plusieurs modèles de Raspberry Pi. J'ai utilisé le modèle B rev2, mais RaspiMine peut être utilisé sans problème avec le modèle A ou le modèle B+. Le modèle B rev2, en plus d'avoir un processeur ARM à 700MHz, possède 512Mo de RAM (256Mo pour le modèle B rev1) et ne consomme quasiment rien: 3.5W. Il est aussi intéressant de savoir que le Rasperry Pi utilise une carte SD comme support de stockage, contrairement à un disque dur (ou SSD) pour nos ordinateurs personnels.

Ces informations sont tirées de la page Wikipedia que je vous invite à consulter si vous souhaitez en savoir d'avantage: Raspberry Pi

Le rapport avec Minecraft?

Nous allons utiliser un serveur Minecraft pour envoyer des signaux sur les différents ports GPIO du Raspberry Pi. Pour cela il nous faut donc un Raspberry Pi qui fera tourner un serveur Minecraft. Un monde spécial a été conçu sur ce serveur. En effet, il n'est pas très grand et ne comporte qu'un bâtiment rempli de leviers.

Chaque levier 1 correspond à un port GPIO, son numéro est noté au dessus du levier 2 et une torche de redstone 3 indique l'état actuel du port GPIO: si la torche est éteinte, aucun signal n'est envoyé, si au contraire la torche est allumé, un signal est émis sur le port correspondant.

Derrière chaque levier se situe un circuit de redstone composé de deux "Command Blocks". Le premier 4 a pour commande: say [GPIO num],on (GPIO num étant le numéro du port GPIO, par exemple: say 2,on). Le deuxième 5 : say [GPIO num],off. La commande say affiche un message dans le chat (visible aussi côté serveur). Ces deux Command Blocks enverront dans le chat par exemple: 2,on ou 2,off. Côté serveur, nous installerons un dispositif qui détectera le numéro du port ainsi que son état en lisant la sortie console du serveur afin d'envoyer les signaux aux ports GPIO. On revient donc sur notre circuit composé de ces deux Command Blocks qui se comporte ainsi:

GPIO, Kézako?

Un connecteur GPIO (General Purpose Input/Output) est une interface de communication électronique, elle offre la possibilité de communiquer avec d'autres appareils électroniques (par exemple un circuit pour éteindre ou allumer une lampe). Sur un Raspberry Pi, c'est la partie avec les broches.

A gauche le modèle B rev2 et à droite le modèle B+. On remarque que le modèle B+ en possède plus.


Il est possible de contrôler ces sorties en décidant d'envoyer du courant électrique ou non. RaspiMine est fait pour fonctionner avec le modèle B rev2 qui possède 15 ports GPIO qui peuvent soit envoyer un signal, soit le recevoir. Ce signal est un courant électrique qui passe entre la masse (GROUND) et les ports GPIO:

Les ports GPIO concernés sont ceux en vert (4,7,8,9,10,11,17,18,22,23,24,25,27) et ceux en rose (2,3). Source de l'image: raspberrypi-spy.co.uk

Comme dit précédemment, RaspiMine permet de contrôler jusqu'à 15 ports GPIO. Afin de les tester j'ai utilisé un debugger (fait maison). Ainsi, un levier = une lumière.

Le debugger est un simple circuit (fait maison) qui relie chaque port GPIO à une LED.


Le debugger relié au Raspberry Pi grâce à une bande de connexion.

Je teste ainsi chaque levier pour faire clignoter la LED correspondante:

Je rappelle que le debugger ne fait pas parti de RaspiMine, il est ici juste pour démontrer le fait que 15 ports GPIO peuvent être contrôlés.

Comment ça fonctionne?

Pour commencer il faut un serveur Minecraft. Ce dernier doit être minimaliste pour que le Raspberry Pi puisse le faire fonctionner sans que le jeu lag. Un monde plat et limité en taille ainsi qu'une distance de vue réduite est une bonne solution pour éviter cela.

Normalement pour lancer le serveur, on utilise la commande suivante:

java -jar minecraft_server.jar

Le serveur se lance environ une minute après, mais le dispositif n'est pas encore prêt. Pour contrôler l'interface GPIO, il faut lire la sortie de la console serveur afin de détecter les messages comme: 2,on ou 3,off. Pour cela j'ai utilisé un script python (je ne connais pas très bien ce langage, je l'ai choisi car il est simple à comprendre pour la plupart des gens). Ce script python lit l'entrée standard et détecte les messages afin de contrôler l'interface GPIO. Ce script doit être lancé en root (Nécessaire à la manipulation de l'interface GPIO). La commande ressemble maintenant à:

java -jar minecraft_server.jar | sudo python gpio.py

Ainsi, tout ce qui est affiché normalement par le serveur, est envoyé au script python. Vous n'avez plus qu'a attendre que le serveur soit démarré à 100% puis connectez vous dessus!

Télécharger le serveur au format tar.gz Télécharger le serveur au format zip

Cette archive contient le serveur Minecraft si vous voulez essayer par vous même, ainsi que le script python. Amusez vous bien!

Me contacter

Si vous avez une remarque ou une question à propos de ce projet, n'hésitez pas à m'envoyer un mail: gabriel.mgt0@gmail.com