Artigos

Chamadas e SMS com Sim900, Python e Raspberry Pi

Conhece o projeto PiPhone de David Hunt ? PiPhone é um telemóvel criado com um Raspberry Pi e um módulo GSM. Ainda que se encontre a anos luz de um Iphone ou um Samsung Galaxy, este telefone “do it yourself” é capaz de enviar e receber mensagens (SMS) e de realizar e receber chamadas através de comandos “AT” e todo isto com um interface tátil graças a um ecrã TFT/LCD /touchscreen) do fabricante Adafruit.

Neste tutorial vamos aprender a realizar chamadas telefónicas e enviar SMS com um módulo EfCom Pro v1.0, Python e Raspberry Pi.

ElecFreaks EfCom Pro v1.0
ElecFreaks EfCom Pro v1.0

Caraterísticas do módulo EfCom Pro

Este módulo compacto está baseado no chipset Sim900, um emissor-receptor GSM/GPRS quadband (850/ 900/ 1800/ 1900 MHz) com suporte para comandos “AT” (GSM 07.07 ,07.05 e SIMCOM AT) graças a um controlador UART.

Dispõe de uma entrada e uma saída de audio para as chamadas em formato Jack 3,5 onde podemos ligar qualquer auricular com microfone dos que se usam para jogar ou para falar por Skype.

O cartão SIM é montado sobre uma base de plástico preto, pode usar qualquer cartão de tamanho ou um adaptador de microSIM.

Preparação do Raspberry Pi

O nosso Raspberry Pi vai comunicar com o módulo GSM através do portal série /dev/ttyAMA0 mas este portal vem bloqueado por defeito já que vem configurado como uma consola de entrada e saída por isso temos que libertá-lo, para isso vamos abrir o arquivo /boot/cmdline.txt com direitos de administrador e alteramos:

 

dwc_otg.lpm_enable=0 consola=ttyAMA0,115200 kgdboc=ttyAMA0,115200 consola=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevador=deadline rootwait

 

por:

 

dwc_otg.lpm_enable=0 consola=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevador=deadline rootwait

 

O passo seguinte é abrir o arquivo /etc/inittab, também com direitos de administrador, e na última linha colocar um ‘#’ para desativa-la tem-se que alterar:

 

T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

 

Por:

 

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

 

Para que estas alterações tenham efeito devemos reiniciar o Raspberry Pi, podemos faze-lo a partir do ícone do ambiente de trabalho ou escrevendo no terminal o comando:

 

sudo reboot

 

Com isto feito, já temos o portal série preparado para ser utilizado.

 

Montagem e ligações

Este módulo dispõe de 6 pins I/O, enumerados como VCC, GND, Tx, Rx, PWR e RST. Alimenta-se de 3 a 5V e pode ser ligado diretamente ao Raspberry Pi sem necessidade de uma fonte de alimentação externa, sempre que alimentemos o Raspberry Pi com um transformador de 2A no mínimo. Os pinos Tx e Rx são ligados aos do Raspberry Pi mas cruzados. Quanto aos pinos ‘PWR’ e ‘RST’ podem ser ligados a qualquer pino GPIO e servem para o mesmo que os botões que vêm soldados mas para chamar a sua função através de software.

 

 

Teste de ligação

Quando tivermos modificado os arquivos do Raspberry Pi mencionados anteriormente e ligado ao módulo GSM tal como indica o esquema, vamos instalar Minicom, um programa que fará de terminal e de onde vamos enviar comandos ao módulo GSM. Para instalar Minicom escrevemos na consola:

 

sudo apt-get install minicom

 

Quando tivermos instalado o Minicom, vamos realizar um teste de ligação, escrevemos na consola:

 

minicom -D /dev/ttyAMA0 -b 115200

 

 

Quando estivermos ligados, escrevemos  ‘AT’ e pressionamos ENTER, se recebemos  ‘OK’ o módulo está bem conectado e tudo está a funcionar perfeitamente.

 

Exemplos de código Python

Enviar SMS através comandos AT

 

#!/usr/bin/env python

import serial
import time
 
class TextMessage:
    def __init__(self, recipient="", message=""):
        self.recipient = recipient
        self.content = message
 
    def setRecipient(self, number):
        self.recipient = number
 
    def setContent(self, message):
        self.content = message
 
    def connectPhone(self):
        self.ser = serial.Serial('/dev/ttyAMA0', 115200, timeout=5)
        time.sleep(1)
 
    def sendMessage(self):
        self.ser.write('ATZr')
        time.sleep(1)
        self.ser.write('AT+CMGF=1r')
        time.sleep(1)
        self.ser.write('''AT+CMGS="''' + self.recipient + '''"r''')
        time.sleep(1)
        self.ser.write(self.content + "r")
        time.sleep(1)
        self.ser.write(chr(26))
        time.sleep(1)
 
    def disconnectPhone(self):
        self.ser.close()


#Trocar 666777888 pelo número de teléfone do destinatario
sms = TextMessage("666777888","Se estiver a ler isto é porque conseguiu enviar um SMS a partir do Raspberry Pi!")
sms.connectPhone()
sms.sendMessage()
sms.disconnectPhone()

 

Receber SMS através de comandos AT

 

import serial

SerialPort = serial.Serial("/dev/ttyAMA0",115200)
list = SerialPort.write("AT+CMGL=ALL")
msg = []
for item in list:
#print item
if item.startswith("+CMGL:") == False:
if item!="OK":
msg.append(item)
print msg

 

Enviar e receber chamadas através de comandos AT

 

import serial
import time

class ATcommands:
    def setDialledNumber(self, number):
        self.dialledNumber = number
 
    def connectPhone(self):
        self.ser = serial.Serial('/dev/ttyAMA0', 115200, timeout=5)
        time.sleep(1)
 
    def disconnectPhone(self):
        self.ser.close()

class VoiceCall:
    def __init__(self, dialledNumber='000000'):
        self.dialledNumber = dialledNumber
 
    def dialNumber(self):
        self.ser = serial.Serial('/dev/ttyAMA0', 115200, timeout=5)
        self.ser.write('ATZr')
                ## ATZ : Restore profile ##
        time.sleep(1)
        self.ser.write('ATD ' + self.dialledNumber + ';r')
                ## ATD : Dial command ##
                ## semicolon : voice call ##
        time.sleep(1)
        time.sleep(1)
        self.ser.write(chr(26))
        time.sleep(1)
        time.sleep(1)
        time.sleep(1)
 
    def endCall(self):
        self.ser = serial.Serial('/dev/ttyAMA0', 115200, timeout=5)
        self.ser.write('ATZr')
        time.sleep(1)
        self.ser.write('AT+CHUPr')
        time.sleep(1)
        self.ser.write(chr(26))
        time.sleep(1)

Gostaram deste artigo ? Deixem o vosso comentário no formulário a baixo.

Não se esqueçam de fazer like na nossa página no facebook.

Todos os produtos utilizados neste artigo podem ser encontrados na loja de componentes eletrónicos ElectroFun.

Comments

comments

Deixar uma resposta

Este site utiliza o Akismet para reduzir spam. Fica a saber como são processados os dados dos comentários.