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.

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.