Contrôler le GPIO d’un Raspberry Pi par SMS depuis un téléphone portable

Contrôler le GPIO d'un Raspberry Pi par SMS depuis un téléphone portable

Dans ce guide, nous allons vous montrer comment contrôler les broches GPIO d’un Raspberry Pi en envoyant un SMS au Raspberry Pi depuis un téléphone mobile.

YouTube video

Pour ce guide, le modem GSM que nous utilisons pour recevoir les SMS est le BerryGPS-GSM.

Côté logiciel, nous utiliserons Gammu, qui est spécialement conçu pour contrôler les téléphones et les modules GSM. Il dispose également d’un démon qui surveillera le modem GSM pour les SMS entrants.

Nous allons configurer Gammu pour déclencher un script python lorsqu’un nouveau SMS est reçu. Nous utiliserons le contenu du SMS pour contrôler ce qui se passe en Python

Les LED sont utilisées ici à titre d’exemple, mais vous pouvez faire tout ce que vous voulez. Ouvrir une porte de garage, allumer des lumières, etc.

SMS GPIO Raspberry PI

Nous utiliserons les trois broches GPIO en bas à droite sur l’en-tête Raspberry Pi. Ce sont les GPIO 16, 20 et 21.
Chacun est connecté à une LED de couleur différente comme indiqué ci-dessus. le
Les résistances utilisées sont de 330 Ohm et la broche GND (broche la plus courte) des LED est connectée au rail d’alimentation GND.

Installer

Installez les liaisons Gammu et Python ;

pi@raspberrypi ~ $ sudo apt-get mise à jour
pi@raspberrypi ~ $ sudo apt-get install gammu-smsd python-gammu

Modifiez le fichier de configuration ;

pi@raspberrypi ~ $ sudo nano /etc/gammu-smsdrc

Trouvez les lignes ci-dessous et ajoutez le port et la vitesse.
Pour le BerryGPS-GSM, utilisez /dev/ttyACM1 pour le port et at115200 pour la vitesse

port = /dev/ttyACM1
connection = at115200

Au bas du fichier, ajoutez la ligne ci-dessous. C’est le script python qui s’exécutera lorsqu’un nouveau SMS sera reçu.

RunOnReceive = sudo python /home/pi/smsReceived.py

Nous allons faire un test rapide. Redémarrez le service gammu pour que la nouvelle configuration prenne effet ;

pi@raspberrypi ~ $ sudo /etc/init.d/gammu-smsd redémarrer

Envoyez un SMS de test à un numéro de mobile. Le numéro de mobile ci-dessous est un exemple, vous devrez le mettre à jour ;

pi@raspberrypi ~ $ echo « Ceci est un test d’un Raspberry Pi » | /usr/bin/gammu –sendsms TEXTE +614123456789

Ce script python s’exécutera à chaque fois qu’un nouveau SMS sera reçu.

pi@raspberrypi ~ $ nano ~/smsReceived.py

Copiez dans le code ci-dessous

import RPi.GPIO as GPIO
import time
import sys
import re


RED_LED =  21
GREEN_LED =  20
BLUE_LED =  16

GPIO.setmode(GPIO.BCM)
filename=str(sys.argv[1])                               #Gammu will pass the filename of the new SMS as an argument
complete_filename="/var/spool/gammu/inbox/"+filename    #we create the full path to the file here

GPIO.setup(RED_LED , GPIO.OUT)
GPIO.setup(GREEN_LED , GPIO.OUT)
GPIO.setup(BLUE_LED , GPIO.OUT)

sms_file=open(complete_filename,"r")
#read the contents of the SMS file
message=sms_file.read(160) #note that a not-parted SMS can be maximum 160 characters

#search the contents and perform an action. Rather than use 'find',
# we will use regular expression (re) so we can ignore case.
#Most smartphones will have the first letter capitalised
if re.search('red', message, re.IGNORECASE):
        GPIO.output(RED_LED , GPIO.HIGH)
        time.sleep(2)
        GPIO.output(RED_LED , GPIO.LOW)
elif re.search('green', message, re.IGNORECASE):
        GPIO.output(GREEN_LED , GPIO.HIGH)
        time.sleep(2)
        GPIO.output(GREEN_LED , GPIO.LOW)
elif re.search('blue', message, re.IGNORECASE):
        GPIO.output(BLUE_LED , GPIO.HIGH)
        time.sleep(2)
        GPIO.output(BLUE_LED , GPIO.LOW)



GPIO.cleanup()

Pour dépanner, vous pouvez afficher le syslog

pi@raspberrypi ~ $ tail -f /var/log/syslog