En cours de rédaction
[Mise à jour le 10/1/2019]
Niveau : avancé
Contrôler les entrées, sorties logiques d'un Raspberry Pi “à la voix”.
Pepper peut faire de la Domotique (Site PwavRobot)
Remarques préalables
Pour tenir compte du matériel disponible, l'état logique des sorties de la carte Raspberry Pi est simplement visualisé avec des LED. Le flux Chorégraphe de la source du projet a été adapté au matériel listé ci-dessous.
Photo du montage à ajouter
L'utilisation d'un Raspberry Pi to Arduino Shield et d'un Sensor shield v2 Tinkerkit simplifie la mise en oeuvre puisqu'il suffit de supperposer les cartes comme sur la photo ci-dessus.
Tinkerkit → Arduino Shield → Raspberry Pi
O0 → 11 → GPIO10
O1 → 10 → GPIO8
O2 → 9 → GPIO22
O3 → 6 → GPIO4
O4 → 5 → GPIO25
O5 → 3 → GPIO23
Suivre la démarche proposé sur le site Raspberrypi.org.
#!/usr/bin/python # coding: utf-8 import socket import threading import RPi.GPIO as GPIO from time import sleep def clear(): print(' \n' * 80) class ClientThread(threading.Thread): def __init__(self, ip, port, clientsocket): threading.Thread.__init__(self) self.ip = ip self.port = port self.clientsocket = clientsocket print("[+] Nouveau thread pour %s %s" % (self.ip, self.port, )) def run(self): print("Connection de %s %s" % (self.ip, self.port, )) r = self.clientsocket.recv(2048) print("Instruction recue: " + r + "...") port, etat = r.split(",") print("GPIO:"+port + " / Etat:"+etat+" ") # Envoi du signal HIGH sur la pate #4 GPIO pour coller le relai # Le GPIO est sur ON if etat == 'HIGH': print "Off" GPIO.output(int(port), GPIO.HIGH) sleep(1) exit() if etat == "LOW": print "On" GPIO.output(int(port), GPIO.LOW) sleep(1) exit() print("Client déconnecté...") tcpsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) tcpsock.bind(("", 1111)) clear() print "(c)2016 - Dr CADIC - Serveur de pilotage des GPIO sur Pi ou PiZero avec le robot Pepper" # Mise en mode adequat BCM et definition du numéro de port GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) # Définit la sortie GPIO à activer GPIO.setup(4, GPIO.OUT) GPIO.setup(25, GPIO.OUT) GPIO.setup(22, GPIO.OUT) GPIO.setup(23, GPIO.OUT) while True: tcpsock.listen(10) print("En ecoute...") (clientsocket, (ip, port)) = tcpsock.accept() newthread = ClientThread(ip, port, clientsocket) newthread.start()
Le serveur se met en écoute des messages envoyés par Pepper.
Pour que la communication s'établisse, il faut entrer l'adresse IP du Raspberry Pi (serveur) et le port sur lequel il écoute.
Exemple
La code contenu dans la boîte communication est listé ci-dessous.
class MyClass(GeneratedClass): def __init__(self): GeneratedClass.__init__(self) def onLoad(self): #put initialization code here pass def onUnload(self): #put clean-up code here pass def onInput_onStart(self, p): #self.onStopped() #activate the output of the box # p est l'instruction à envoyer au serveur import socket # Recup des parametres de la boite ip_address=self.getParameter("ip_adress") port_number=self.getParameter("port_number") # Connexion au serveur avec IP et port s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((ip_address, port_number)) s.send(p) r = s.recv(9999999) self.onStopped() pass def onInput_onStop(self): self.onUnload() #it is recommended to reuse the clean-up as the box is stopped self.onStopped() #activate the output of the box
Le code source de l'exemple Domotique est téléchargeable A venir.