Utiliser un module 4G / LTE SimCOM A7682E avec Raspberry-Pi Pico et MicroPython

Bonjour à tous,

Cela fait un moment que nous vendons le HAT GSM 4G / LTE de Garatronic pour Raspberry-Pi et celui-ci connaît un certain succès.

Ainsi, nous avons décidé de produire une bibliothèque MicroPython pour l'utiliser avec un Raspberry-Pi Pico.

HAT GSM 4G / LTE avec Raspberry-Pi Pico 2

Brancher le module SimCom A7682E

Brancher le HAT sur le Raspberry-Pi Pico est assez simple. Il lui faut une source d'alimentation 5V, un UART et une broche pour contrôler la mise sous tension. 

Source: dépôt micropython-A7682E-modem

Bibliothèque sim76xx pour MicroPython

La bibliothèque -=[en cours de développement]=- est publiée sur le dépôt GitHub

Celle-ci concerne prend déjà en charge:

  • La connexion sur réseau mobile
  • La gestion des messages URC (unsollicited Result Code) -> les notifications
  • La réception / émission de SMS
  • Gestion des appels vocaux (émettre/recevoir/décrocher/raccrocher/...)

 Voici les quelques ligne nécessaires pour se connecter sur un réseau mobile

from machine import UART, Pin
from sim76xx import *
import time

# Pico 
pwr = Pin( Pin.board.GP26, Pin.OUT, value=False )
uart = UART( 0, tx=Pin.board.GP0, rx=Pin.board.GP1, baudrate=115200, bits=8, parity=None, stop=1, timeout=500)
sim = SIM76XX( uart=uart, pwr_pin=pwr, uart_training=True, pincode="6778" )

sim.power_up()
while not sim.is_registered:
	time.sleep(1)

Passer un appel vocal est à peine plus compliqué

# Create Voice call object
voice = Voice( sim )
" Calling...
voice.call( PHONE_NR )

L'envoi d'un SMS est tout aussi trivial

# Create SMS object
sms = SMS( sim )
# Send message to PHONE_NR )
sms.send( PHONE_NR, 'Test message' )

Options avancées

La bibliothèque permet également de traiter les appels et SMS entrant.
Cela se fait en prenant en charge les URC (des messages non sollicités) qui sont ensuite transformer en notifications par la bibliothèque.

Les URC sont correctement détectés et capturées durant le traitement des instructions utilisateurs (oui, ces URC arrivent à n'importe quel moment et sans prévenir).
Si le script utilisateur est en attente alors un appel régulier à la méthode update() permettra de capturer les URC durant les périodes sans activités.

sms = SMS( sim )

# Attendre notifications
while True:
  time.sleep( 1 )
  sim.update()
  if not sim.notifs.has_new:
    continue
		
  # Traitement des notifications
  _time, _type, _str, _cargo = sim.notifs.pop()
  while _time!=None:
    if _type == Notifications.SMS:
      # Cargo contient l ID du SMS
      print( f"SMS received @ id {_cargo}")

      # Lecture SMS Entrant
      _msg = sms.read( _cargo )
      print( f"  phone:{_msg.phone}" )
      print( "  Message :", _msg.message )

      # effacer SMS entrant
      sms.delete(_cargo) 

      # Envoi réponse
      try:
        id = sms.send( _msg.phone, "%s received!" % _msg.message )
      except SMSError as err:
        print( 'SMS Send error!', str(err) )
    else:
      print( "autre notification", (_time, _type, _str, _cargo) )

     # Next nofitication
     _time, _type, _str, _cargo = sim.notifs.pop()

Encore plus

La bibliothèque contient actuellement 15 exemples couvrant les concepts fondamentaux, les SMS et les appels vocaux.

Voir le bas du fichier readme pour une description des différents exemples.

Où acheter

Les produits utilisés dans cet article sont disponibles chez MCHobby.

1 commentaire: