Utiliser un bouton et le GPIO sur un Raspberry Pi pour envoyer un SMS

Utiliser un bouton et le GPIO sur un Raspberry Pi pour envoyer un SMS

Dans ce guide, nous allons vous montrer comment envoyer un SMS à l’aide d’un bouton connecté aux broches GPIO d’un Rasberry Pi Zero.

YouTube video

Pour ce guide, le modem GSM que nous utilisons pour envoyer le 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.

Python sera utilisé pour surveiller certains boutons connectés aux broches GPIO et les liaisons python Gammu seront utilisées pour envoyer un SMS.

Les boutons sont utilisés ici à titre d’exemple, mais vous pouvez utiliser n’importe quoi pour déclencher le SMS, par exemple un capteur de température, un capteur de niveau d’eau, un capteur de lumière, etc.

Nous avons inclus des LED afin que nous puissions voir quand les boutons sont enfoncés.

Bouton LED 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é à un bouton et à une LED de couleur différente comme indiqué ci-dessus. Les résistances pull-down internes seront utilisées sur ces GPIO.
3.3v et GND sont connectés aux rails d’alimentation de la planche à pain.
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

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

Avant de créer le script python, vous devrez désactiver le démon gammu car il verrouillera le port utilisé pour communiquer avec le modem GSM. Ce script python doit accéder à ce port.

pi@raspberrypi ~ $ sudo systemctl désactiver gammu-smsd.service

import RPi.GPIO as GPIO
from  time import sleep
import gammu

RED_LED =  21
GREEN_LED =  20
BLUE_LED =  16

#The phone number where you want the SMS to be received
phoneNumber="+614123456789"
sendSMS = False

#setup GPIO pins
GPIO.setmode(GPIO.BCM)
GPIO.setup(RED_LED, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(GREEN_LED, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(BLUE_LED, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)


# Create state machine object
sm = gammu.StateMachine()

# Read ~/.gammurc
sm.ReadConfig(Filename="/etc/gammu-smsdrc")

# Connect to phone
sm.Init()


try:
        while True:
                if(GPIO.input(RED_LED)):
                        print "RED"
                        messageText="Red button"
                        sendSMS = True
                elif(GPIO.input(GREEN_LED)):
                        print "GREEN"
                        messageText="Green button"
                        sendSMS = True
                elif(GPIO.input(BLUE_LED)):
                        print "BLUE"
                        messageText="Blue button"
                        sendSMS = True

                if(sendSMS):
                        #Update the  message content
                        message = {
                                'Text': messageText,
                                'SMSC': {'Location': 1},
                                'Number': phoneNumber,
                                }
                        # Actually send the message
                        sm.SendSMS(message)
                        sendSMS = False
                        sleep (2)    #Allow time for the SMS to be sent

                sleep (0.1)
finally:
        GPIO.cleanup()