Buen dia, soy nuevo en el foro, me presento, Raymundo Vega de Hermosillo, Sonora, Mexico.
Tengo bastante tiempo buscando información y programas para realizar un proyectito de una Alarma con GSM, tengo adelantado bastante pero me atore un buen en el apartado del GSM y los mensajes.
Después de mucho probar y probar y probar infinidad de programas, ninguno me resulto (busque en ingles y español en infinidad de foros) y me di a la tarea de escribirlo con partes de diferentes programas y probar hasta lograr el resultado deseado, asi que si alguien esta utilizando el mismo modulo o parecido y quiere realizar un proyecto similar les presento mi código.
Para empezar, hay que revisar puntos cruciales para hacer funcionar esto.
Fuente de energía del modulo: Yo lo tengo conectado para pruebas con un simple diodo de uso común, para que baje el voltaje aprox. a 4.3 volts, tomando 5v de una fuente de computadora. Si no tomamos la energía de una fuente de min. 2 amperes, el modulo solo contestara bien a los comandos de configuración, pero al momento de querer mandar un mensaje, leerlo o realizar una llamada, simplemente no lo hara. Incluso pudiera ser que ni siquiera se conecte a la red.
Puerto serial: Hay que conectar el modulo a un puerto Serial por software, y solo a pines que puedan ser utilizados para este fin, yo lo tengo con SoftwareSerial a un Arduino NANO a los pines 10 y 11.
Pines del modulo: VCC conectado a 4-4.3 voltios 2 amp., GND de la fuente utilizada debe ser conectado junto al GND del Arduino (hay personas que se les olvida este punto), TX al RX del Arduino, RX al TX del Arduino. Listo ! No hay que conectar nada al RST.
Después de tener listo el hardware hay que tomar en cuenta algunos puntos del código, los comandos AT. Para que funcione siempre hay que mandar Retorno de carro y Nueva linea, con las letras \r\n.
Para empezar lo primero que hay que mandar al modulo es la palabra AT, cuando hacemos esto el modulo activa la función Auto Baud Rate y la ajusta automáticamente al que estemos utilizando, recomiendo 9600.
Después hay que decirle al modulo que escribiremos en modo de texto simple con la funcion AT+CMGF=1.
Después hay que definir las opciones de aviso de mensajes entrantes con la funcion AT+CNMI=1,2,0,0,0. En bastantes foros vi otras opciones pero esta es la que me funciono, ya que al llegar el mensaje este sale directamente por el TX del modulo sin ni siquiera solicitarlo, solo hay que agarrarlo en una variable.
Vi en varias partes que con la funcion AT+CMGR=1 pediamos los mensajes, pues no sirve, ya que los mensajes al tener notificaciones estos salen directamente por el TX y el modulo no los guarda en ningun lado. Para guardarlos hay que apagar las notificaciones con el comando AT+CNMI=0,0,0,0,0 perooo hay que usar el comando AT+CMGL para recuperarlos pero no me funciono. Asi que no hay que utilizarlo.
Tambien vi que usan las variables char para comparar los datos del mensaje. NO funciona. Hay que utilizar la funcion readString para poder guardar el texto completo y despues analizarlo con la funcion indexOf para encontrar la palabra deseada.
Otra cosa muy importante, al guardar el texto en la variable String, solo hay que hacer eso dentro del if, nada mas, por que si agregas otro comando dentro, pienso son problemas de velocidad, el texto se pierde y solo aparecen simbolos y caracteres sin sentido. En este paso solo hay que preguntar si hay datos en el SoftwareSerial y si los hay guardarlos en la variable String. Ya con la variable podemos hacer las comparaciones y demas pero FUERA del if.
Sin mas les dejo el codigo que me funciono.
NOTA estoy trabajando para que solo funcione el activado con ciertos numeros de celular que yo agregare, por el momento funciona con cualquiera y no se por que, pero si agregas alguna clave despues del On o utilizas una palabra "secreta" solo funcionara si mandas la palabra "secreta".
Cuando tenga terminado el proyecto subire tambien el codigo, funciona con un sensor pir DSC modificado con un transmisor de RF de 433 MHZ. En este codigo ya implemente el envio de mensajes y llamadas del modulo GSM.
probador.ino (443 Bytes)