Enviar SMS con Python y la libreria PySerial

Mandar un SMS con Python
Mandar un SMS con Python

Algunos módem usb permiten recibir ordenes mediante comandos AT, con estos comandos podemos hacer muchas cosas. Hace años, muchos años, estos comandos los utilizábamos para configurar centralitas, realizar llamadas, obtener información del aparato, etc. Ahora esta técnica esta en desuso, pero aun así, algunos módems están preparados todavía para poderse programar con estos comandos.

Aprovechando la librería PySerial y python he creado un programa para cuando lee ciertos valores desde el arduino me los mande por SMS a mi móvil.

Para empezar con el programa tenemos que saber cual es el puerto serie del módem, en mi caso cuando pincho el módem usb al ordenador me crea tres puertos /dev/ttyUSB0, /dev/ttyUSB1 y /dev/ttyUSB2, para windows no tengo ni idea que hace.

Una vez que sabemos los puertos del módem, tenemos que saber cual de ellos es el que responde a los comandos AT. Para saber que puerto responde a los comandos hice este programa

Con este programa, lo que hacemos es abrir el puerto correspondiente, y le enviamos el comando “AT”. Si el módem sabe que es lo que le estoy enviando nos devolverá “OK”, en caso contrario “ERRROR”, o saltara la excepción del programa.

También lo podemos probar con un programa de terminal, como el “Serial port Terminal” o el “minicom” en Linux, o con el “Hiperterminal” en windows. Solo tenemos que abrir el puerto a probar y escribir “AT” y esperar la respuesta

Así con todos los puertos disponibles, en mi caso me admitió peticiones por los puertos /dev/ttyUSB1 y /dev/ttyUSB2.

Una vez que sabes el puerto, podes probar ha enviar un SMS de la siguiente forma.

Y con esto ya podemos mandar SMS desde python, esta un poco chapucero, pero para lo hace y lo que he tardado en el, sobra la mitad.

Ya solo nos queda leer los datos del arduino y mandar el SMS.

9 comentarios sobre “Enviar SMS con Python y la libreria PySerial”

    1. No lo he probado, cuando investigue esto solo necesitaba mandar sms para un sistema de control y alerta. Pero solo tienes que usar otro comando AT, que no me acuerdo, pero lo puedes encontrar la lista de comandos AT fácilmente en internet.

  1. Hola he intendo hacer funcionar tus 2 codigos y lo que me envia son estos mesajes de error:
    jc32@jc:~/sms_python$ ./detectar_modem.pyc
    ./detectar_modem.pyc: línea 1: $’03\363\r’: no se encontró la orden
    ./detectar_modem.pyc: línea 2: EOF inesperado mientras se buscaba un `” coincidente
    ./detectar_modem.pyc: línea 6: error sintáctico: no se esperaba el final del fichero

    1. No se exactamente que te ha provocado ese error, pero te aseguro que el problema no esta en el envío del código para el sms. Si quieres verificar que el código funciona, realiza una conexión con un programa terminal, tipo putty o hiperterminal en windows. Una vez realizado la conexión con el modem envíale lo comando AT.

  2. Disculpen, reaclice todo lo que dice, en el script ya no me sale errores pero no envia el sms tampoco escribe nada en pantalla, le agregue un timeout de 2 segundos para que salga del script pero nada.
    Estoy en con python 2.7 en windows 7 .
    La conexión en mi caso solo es la pc y un celular conectado por el puerto COM5, con el Hyperterminal los comandos funcionan a la perfección … les agradeceré mucho vuestra ayuda.

  3. Hola: acabo de escribir una consulta pero parece que no grabo, yo tengo un celular lo conecte a una pc (windows 7) con python 2.7 ejecuté tu script, no sale errores pero no envía el sms y tampoco me devuelve nada el comando print(sSerie.readline()) si no le pongo un timeout se queda pegado pero en caso de ponerlo a los x segundos configurados sale el pront de la linea de comando.
    Espero me puedas ayudar. Gracias

    1. Puede haber varias causas sobre eso, yo lo probé con Ubuntu y python 3. No se como funciona el python con Windows 7. En otro comentario que también reportaban problemas de python y Windows, lo probé y si funciona bien, con python 3. Lo primero que te recomiendo es que te pases a python 3, la versión 2 se va ha dejar de desarrollar. Si miras unos comentarios anteriores veras la respuesta que le di a la otra persona, no ha reportado nada más, así que me imagino que se le arreglo en problema.

    1. Es fácil lo único que tienes que hacer es conectar el pyserial al puerto del arduino. los datos que envíes, ya sea con el pyserial, o con el arduino las manejaras como con otras comunicaciones

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *