0% encontró este documento útil (0 votos)
689 vistas355 páginas

Comunicaciones Bluetooth para Arduino

Este documento presenta los conceptos básicos de Bluetooth y dos módulos Bluetooth populares para Arduino, el HC-06 y el HC-05. Explica las diferencias entre estos módulos a nivel de software y hardware, y proporciona un programa básico de comunicación entre un teléfono externo y un Arduino mediante un módulo Bluetooth.

Cargado por

poli
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
689 vistas355 páginas

Comunicaciones Bluetooth para Arduino

Este documento presenta los conceptos básicos de Bluetooth y dos módulos Bluetooth populares para Arduino, el HC-06 y el HC-05. Explica las diferencias entre estos módulos a nivel de software y hardware, y proporciona un programa básico de comunicación entre un teléfono externo y un Arduino mediante un módulo Bluetooth.

Cargado por

poli
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 355

TIENDA ARDUINO RASPBERRY PI IMPRESORA 3D FORO CONTACTO

INDICE BLUETOOTH
Los modulos Bluetooth

Home 
 Indice Bluetooth

70 El módulo BlueTooth HC-06 .


71 El módulo BlueTooth HC-05 .

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


72 Controlando Arduino con Android.
73 De Arduino a tu PC por Bluetooth .
73B Bluetooth 4.0 Low Energy.

Consigue tu Kit de Iniciación

Tienda Prometec

Baterias

Comprar Arduino

Comprar Comunicaciones

Comprar Motores

Displays

Electronica

Fuentes de Alimentacion

Impresora 3D

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Kit de Inicio

LED light

RaspBeryy_PI

Robot

Sensores

Shields

Varios

Productos Populares

PLA 1.75mm Negro


16.00€ + IVA

Arduino Nano
8.20€ + IVA

Rueda + Motor
6.20€ + IVA

TFT IPS 3,3" 480x320 Color


16.00€ + IVA

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


MAX 485 TTL to RS485
3.00€ + IVA

BUSCADOR

Type here to search

submit

Nombre de usuario

Contraseña

Recordarme
Registrarse
Identifícate

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Foros

Administracion

Comunicaciones
Motores
Proyectos
Sensores y actuadores

Categorías

Admin

arduino

BlueTooth

comunicaciones

ethernet shield

Libros

Referencia C++

Sin categoría

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Uncategorized

Entradas Recientes

 Rotary Encoders

 Cerebrito Pérez y Prometec


 NodeMCu con OLED y DHT11
 Arrancamos con Nuestro Mailing Mensual
 Cambiando el chip del Arduino UNO

Carrito

No hay productos en el carrito.

Copyright Prometec

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


TIENDA ARDUINO RASPBERRY PI IMPRESORA 3D FORO CONTACTO

MÓDULO BLUETOOTH HC-06


Algunos conceptos básicos de BlueTooth

Home 
 Módulo BlueTooth HC-06

OBJETIVOS

  Presentar los conceptos básicos del BlueTooth.

 Presentar los comandos AT.

 Introducir el modulo BlueTooth HC-06.

 Presentar un programa básico de comunicación, entre un teléfono externo y un Arduino mediante el


modulo Bluetoth.

MATERIAL REQUERIDO.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


6.60€ +
9.60€ + IVA
IVA

ARDUINO MODULO
UNO REV 3 BLUETOOTH
HC-06
 Añadir al
carrito  Añadir al
carrito

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


2.00€ +
IVA

CABLES
DUPONT
MACHO-
HEMBRA
 Añadir al
carrito

LAS REDES BLUETOOTH

Pocos de los que estén leyendo estas líneas, no tendrán un teléfono móvil en el bolsillo, y muy probablemente será del tipo Smartphone, que
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
incluirán un sistema operativo como Android o Apple IOS equipados con Wifi y Bluetooth.

Por eso la posibilidad de integrar conexión WIFI o BlueTooth en nuestros proyectos, nos abre unas posibilidades inmensas. Poder controlar nuestros
proyectos desde el propio móvil, bien con WIFI o bien con BlueTooth, es algo muy interesante para controlar montajes de diferentes tipos.

En las sesiones previas, vimos cómo usar el móvil conectado a la red local para gobernar múltiples salidas digitales, y en próximas sesiones veremos
cómo usar el WIFI como sistema de control desde nuestros teléfonos.

Pero como los grandes viajes deben empezar con pequeños pasitos, vamos a dedicar un par de capítulos al BlueTooth, para ver de qué posibilidades
disponemos, como configurarlos y demás. De modo que seamos capaces de integrar el BlueTooth con nuestros Arduinos.

Y para ello empezaremos hablando un poco, de que es el BlueTooth y de cómo funciona, así como unos pocos conceptos básicos claves, para
poderlo usar con garantías de éxito.

Para empezar diremos que los dispositivos BlueTooth pueden actuar como Masters o como Slaves (Amos o esclavos).

La diferencia es que un BlueTooth Slave solo puede conectarse a un master y a nadie más, en cambio un master BlueTooth, puede conectarse a
varios Slaves o permitir que ellos se conecten y recibir y solicitar información de todos ellos, arbitrando las transferencias de información ( Hasta un
máximo de 7 Slaves)

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Cada uno de los dispositivos que se identifican vía BlueTooth presentan una dirección única de 48 bits y además un nombre de dispositivo que nos
sirva para identificarlo cómodamente a los humanos. Por eso cuando configuras tu móvil puedes especificar n nombre propio que será el que
mostraras a los demás cuando busquen tu teléfono en la inmediaciones.

La dirección propia también se puede identificar pero lógicamente, es un poco menos cómoda y tiene menos utilidad. Tampoco es raro establecer un
protocolo IP sobre transporte BlueTooth, con lo que además de su identificación interna BlueTooth (Equivalente al MAC Ethernet) dispondrá de una
dirección IP para conectarse a Internet.

Por eso puedes conectarte vía Bluetooth a tu PC, por ejemplo, y a través de el conectarte a internet.

Así pues un nodo BlueTooth puede ser Master o Slave y dispone de una dirección única, así como de un nombre para identificarse y muy
habitualmente también incluye un PIN de conexión o número de identificación que debe teclearse para ganar acceso al mismo.

Como el BlueTooth lo desarrolló Nokia para conectar teléfonos móviles, a otros dispositivos como auriculares, micrófonos o conexiones al audio del
coche, existe un procedimiento definido que se llama Pairing (o emparejamiento) que vincula a dos dispositivos Bluetooth.

Cuando vinculas dos dispositivos BT, se inicia un proceso en el que ellos se identifican por nombre y dirección interna y se solicitan la clave PIN para
autorizar la conexión.

Si el emparejamiento se realiza con éxito, ambos nodos suelen guardar la identificación del otro y cuando se encuentran cerca se vuelven a vincular
sin necesidad de intervención manual. Por eso el CD de tu coche reconoce el móvil de tu bolsillo en cuanto te subes y puedes reproducir la música
que tienes en tu Smartphone.

 Aunque para que tu BlueTooth pueda enviar o recibir música, debe aceptar otra norma posterior llamada
Advanced Audio Distribution Profile (A2DP) y que en caso de ser algún sistema antiguo te impedirá la
reproducción.

Naturalmente, a lo largo de los años la norma ha ido variando y existen varias versiones de la misma, con compatibilidad siempre con las versiones
anteriores que se diferencian en la distancia que pueden alcanzar (entre 50 y 100 metros, teóricamente y sin obstáculos) además de la velocidad de
transferencia.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


MÓDULOS BLUETOOTH DISPONIBLES PARA ARDUINO

Hace ya un tiempo que disponemos de módulos BlueTooth sencillos y económicos, que resultan muy prácticos para todo esto, y en esta sesión,
vamos a empezar viendo cuales tenemos disponibles y como trabajar con ellos.

Los más frecuentes en el mercado son los módulos HC-06 y HC-05 que si hacéis una búsqueda por eBay o similares veréis que se consiguen por
poco dinero, y están disponibles independientes o en modo SHIELD y para zocalo XBEE (ya hablaremos).

Hay bastante confusión en la red acerca de cómo diferenciar uno de otro y en muchas ocasiones sobre las prestaciones de unos y otros. Vamos a
ver si podemos aclarar un poco el tema.

Lo primero es que el hardware de ambos modulos es el mismo. No hay diferencia hardware, pero el software que incorporan es diferente

 De hecho, parece que es posible reprogramar uno para covertirlo en el otro, aunque el procedimiento es
aparentemente bastante pesado.

Ademas el modulo de conexión se monta sobre un soporte que a su vez puede presentar diferencias notables según el fabricante y las conexiones
que realice, pero por lo que he podido comprobar con un par de modulos de los que dispongo, hay una diferencia obvia, el numero de pines del
modulo montado.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


El modelo HC-06 dispone de 4 pines, en lugar de los 6 que incluye el modelo HC-05, pero hay además importantes diferencias de funcionalidad y de
manejo que hace que merezca la pena dedicar una sesión a cada modelo.

Basicamente el modelo HC-06 solo puede actuar como esclavo y además dispone de un juego reducido de instrucciones a las que atiende, mientras
que el modelo HC-05 puede actuar como master o como Slave y acepta un número mayor de órdenes de configuración.

En esta sesión vamos a usar el modelo HC-06, pero antes necesitamos hablar de la cuestión de los comandos AT.

LOS COMANDOS AT

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


En la época heroica, para enviar mensajes (de texto exclusivamente, por supuesto) de un ordenador a otro, usabas las líneas o puertas serie. Muy al
estilo de la comunicación que hoy tu Arduino hace con tu PC a través del USB.

El interface no era USB sino RS232, que aunque físicamente diferente, comunicaban vía serie dos puntos próximos hasta un máximo, de digamos,
unos 100 metros.

Pero cuando querías enviar información a otro equipo situado en una oficina remota de tu empresa, la única posibilidad era utilizar las líneas
telefónicas, mediante un adaptador diabólico, que se llamaba Modem.

La idea básica, era codificar el 0 binario con un tono grave de audio (que se pudiera enviar por la línea de teléfono) y los unos binarios como un tono
agudo.

Así con la sucesión más o menos rápida de tonos graves y agudos por la línea telefónica se podían enviar un mensaje binario codificado en frecuencia
de audio, de un punto a otro.

 La palabra Modem, que tal vez hayáis oído, deriva del apocope de MODulador DEModulador, y si veis pelis
de los años 80 y primeros 90 eran esos chismes que hacían los ruiditos típicos de audio, asociados a la
informática.

Naturalmente, las líneas telefónicas eran analógicas, lo que implicaba una cantidad indecente de ruido térmico, que aumentaba exponencialmente
con la distancia, obligando a disminuir la velocidad en función del ruido que te encontraras y a retransmitir una y otra vez el mensaje hasta que
conseguías que llegara correctamente (algo que rara vez pasaba a la primera)

 La velocidad de los módems empezaron sobre los 300 baudios o bits por segundos y fueron aumentando
con la revolución tecnológica hasta 1.200, 2.400, 9.600 y que yo sepa los últimos que se comercializaron
con el ese nombre fueron de 56.000 baudios. (Compara esos 56k de máximo con las redes de cable
modernas de 100 Mbps, casi 1.800 veces más rápidas)

Por eso, los módems necesitaban una especie de comandos, que nos permitiera modificar la velocidad según necesitáramos, léase bajarla, cuando el
ruido impedía una comunicación fiable y ya de paso modificar algún que otro parámetro sobre la marcha.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Y como el RS232 solo disponía de dos hilos de comunicaciones, no había más remedio que incorporar una orden de atención que significara que a
continuación venia una orden de programación del modem, que no debía ser transmitida al otro extremo.

Es decir que las ordenes eran del tipo “AT+Orden”, donde AT era el comando especificado de atención. En un santiamén todos los módems y demás
máquinas de comunicación serie empezaron a aceptar este tipo de órdenes, y al conjunto de ellas se llamó comandos AT, por extensión.

Con el tiempo, mucho del hardware sencillo que se comunica con otros equipos vía una humilde puerta serie, siguen aceptando ordenes AT para
configurarlos y este es el caso de los módulos BlueTooth HC-05, HC-06 y otros pequeños dispositivos que veremos en el futuro.

CONEXIÓN DEL BLUETOOTH HC-06 AL ARDUINO

Pues es cantidad de fácil. Fíjate que el modulo tiene rotulado el nombre de los pines, y simplemente conectar tensión y GND al módulo y después
conectamos Txd y Rxd a los pines digitales 2 y 4 respectivamente de tu Arduino. Eso es todo

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


 Como el modulo HC-06 funciona a 3,3 V hay bastante controversia en internet respecto a si debemos o
no, poner divisores de tensión para acceder a los pines del módulo con Arduino. Por las pruebas que he
hecho no parece necesario y no veo ninguna razón para que a largo plazo deban surgir problemas, por lo
que yo conecto directamente los pines al Arduino.

Fijaros que al hacer esta conexión, el LED del módulo HC-06, parpadea continuamente. Esto indica que no está pareado o vinculado.

Cuando conectes algo al módulo, esta luz se quedará fija y es la forma de saber si hay conexión o no.

EL PROGRAMA DE CONTROL

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Como el modulo BlueTooth es básicamente un nodo BT conectado a un interface serie, podríamos en principio conectar los pines RX y Tx a los
equivalentes de Arduino en los pines 0 y 1 digitales, sin más que cruzarlos (BT Tx a Arduino Rx y BT Rx a Aduano Tx) y de hecho muchos ejemplos
en Internet utilizan este esquema y se comunican con el BT mediante las familiares instrucciones de Serial.print ().

Sin embargo, prefiero desaconsejar hacerlo así, porque los pines 0 y 1 se utilizan en la comunicación serie de Arduino con el PC a través del USB y
por tanto, si los usamos para comunicar con el modulo BT, perderíamos la conexión con el PC.

Por ello prefiero destinar otro par de pines cualesquiera a la transmisión, aunque para ello tenemos que importar una librería que habilite la
comunicación serie con otros pines como es la librería SoftwareSerial .

Para ello importamos la librería que viene de serie en el IDE y creamos un nuevo objeto serie llamado BT1 conectado a los pines 4 y 2:

#include <SoftwareSerial.h>
SoftwareSerial BT1(4,2); // RX, TX

Y después, podemos usar BT1 exactamente igual a como usamos Serial.

Vamos a escribir un programa para comunicarnos con el modulo BT que simplemente lee lo que se escribe en la puerta BT1 y si hay algo lo manda a
la consola Serial.

A su vez si hay algo en la consola, lee una línea con GetLine() y finaliza con intro antes de enviar la línea completa al BT1

 El motivo es, que el modulo HC-06, a diferencia del HC-05, no espera un terminador de línea como \n, si no
que salta por tiempo, lo que nos fuerza a escribir muy deprisa los comandos largos y resulta incómodo..

 Si no escribimos el comando completo a tiempo, simplemente lo ignorará y ni siquiera dará error. Por eso
prefiero mandar comandos completos directamente y no carácter a carácter.

El programa queda algo así: Prog_70_1

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


#include <SoftwareSerial.h>
SoftwareSerial BT1(4,2); // RX, TX recorder que se cruzan

void setup()
{
Serial.begin(9600);
Serial.println("Enter AT commands:");
BT1.begin(9600);
}

void loop()
{
if (BT1.available())
Serial.write(BT1.read());

if (Serial.available())
{ String S = GetLine();
BT1.print(S);
Serial.println("---> " + S);
}
}

String GetLine()
{ String S = "" ;
if (Serial.available())
{ char c = Serial.read(); ;
while ( c != '\n') //Hasta que el caracter sea intro
{ S = S + c ;
delay(25) ;
c = Serial.read();
}
return( S + '\n') ;
}
}

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Según el manual el modulo HC-06 viene de serie configurado a 9600 y por eso usamos

BT1.begin(9600);

Si por cualquier motivo, no consigues establecer comunicación con el modulo BT, vete cambiando la velocidad hasta que veas que hay conexión.

Fíjate ahora, en el modulo, verás una luz roja parpadeando. Eso significa que el modulo está listo para vincularse a un dispositivo BlueTooth o para
aceptar comandos AT, el modulo HC-06 no necesita nada mas para entrar en modo de aceptar comandos AT.

 De hecho siempre que veas la luz parpadeando significa que el modulo no retransmitirá los comandos AT,
sino que los interpretara como ordenes internas.

 Pero si realizas una conexión (y la luz roja se queda fija, ignorará los comandos AT y los transferirá sin más .

Si no te has vinculado aún, y la luz roja parpadea, ya podemos enviar comandos AT. Veamos algún ejemplo.

 Con el HC-06 es necesario que en el Monitor Serial seleccionemos “Sin ajuste de línea”.

 Si usamos el HC-05, por el contrario, tendremos que seleccionar “Ambos NL & CR”.

El primero y más básico es enviar (siempre en mayúsculas) un simple AT desde la consola. Se supone que debería responder con OK, pero en mi caso
y con mi modulo no es así. Y si vuestro caso es el mismo deberéis probar con más comandos.

AT+VERSION, Requiere la versión del Firmware

AT+NAMEXXX, Programa el nombre que queremos presentar cuando alguien nos busque:

AT+NAMEPROMETEC

AT+BAUDX, Fija la velocidad de comunicación entre el modulo y la consola según a la siguiente tabla:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


1 configura 1200bps
2 configura 2400bps
3 configura 4800bps
4 configura 9600bps (Default)
5 configura 19200bps
6 configura 38400bps
7 configura 57600bps
8 configura 115200bps

Ejemplo: AT+BAUD7 configura la comunicación a 57600 baudios

AT+PINXXXX, configura el número de identificación personal, que se requerirá para establecer la vinculación

AT+PIN4516, establece 4516 como PIN

En caso de que probando varios de estos comandos, no obtuvierais respuesta, o vierais caracteres extraños en la consola, probad con otras
velocidades hasta conseguir una que funcione. Probad diferentes velocidades en la línea:

BT1.begin(9600);

Y me temo que parece no haber más comandos disponibles para un módulo HC-06 y desde luego no dispone de los comandos de interrogación de
los que si dispones su hermano mayor HC-05.

PROBANDO LA CONEXIÓN CON EL MODULO HC-06

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Una vez volcado el programa anterior a nuestro Arduino, con una velocidad de comunicación correcta con el modulo vamos a probar a enviar y recibir
información desde y hacia, un teléfono móvil.

Para ello voy a utilizar un teléfono Android y un programa Android llamado Bluetooth SPP, pero en realidad servirá cualquier terminal BT.

 Debo indicar que no he sido capaz de vincular este módulo a mi Iphone 4S, porque este insiste en que no
existe nada en los alrededores con lo que vincularse y en cambio mi viejo HTC Android 2.1 lo ve a la primera
y sin problemas.

Lo primero es confirmar que el LED del módulo BT parpadea, indicando que está en modo AT o esperando vinculación con otro dispositivo. Después
asegúrate de que el BlueTooth del teléfono está activo y por último, dependiendo del programa que uses como terminal, pídele que busque
dispositivos BT en los alrededores y vincúlate al que encuentres.

Si todo va bien ya podrás enviar y recibir mensajes de texto entre tu móvil y Arduino en ambas direcciones.

Aquí os dejo un pequeño mini video con el resultado:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


RESUMEN DE LA SESIÓN

  Hemos presentado algunos conceptos básicos del mundo Bluettoth y su relación con Arduino.

 Vimos lo que son los comandos AT y de donde provienen, asi como algunos de ellos que sirven para
programar el modulo HC-06.

 Empezamos viendo algunasd diferencias entre el HC-05 y el HC-06.

 Escribimos un programa básico para comunicar un teléfono Bluetooth con Arduino mediante un
programa de terminal BlueTooth.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Anterior Siguiente

« COMENTARIOS MÁS VIEJOS

(268) Comments

Jalito 04 Ene 2018


Hola, Ivan.
Como es tradición, y porque es más que merecido, empezaré dándote la enhorabuena por tus artículos que sigo
Reply asíduamente con todo interés y que me han enseñado muchísimo.

Dicho esto, quisiera hacerte una pregunta que yo mismo llevo haciéndome desde hace tiempo, cuya respuesta no he
podido encontrar, y que es la siguiente: Es posible hacer que arduino reconozca específicamente a un dispositivo
bluetooth al que se conecte (mediante su dirección MAC, por ejemplo) para actuar de forma individual dependiendo del
que se trate? Eso permitiría muchas cosas, como permisos, por ejemplo. Espero tu respuesta que, desde ya, te
agradezco.

Un saludo

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 08 Ene 2018
Hola Jalito, pues no lo he intentado nunca, pero la verdad es que parece de lo más útil. A ver si saco un rato y puedo
investigarlo. Un saludo.
Reply

Jose 27 Dic 2017


Hola ivan, estoy intentando comunicar con el modulo bluetooth de arduino, pero me pide contraseña. En alguna otra
publicación he visto que hay que decirle cual es la contraseña, pero ahora no lo encuentro. Podrías ayudarme?
Reply

Ivan 02 Ene 2018


Hola Jose, puedes cambiar la contraseña con el comando AT+PIN aunque por defecto creo que trae 0000 o 1234. Un
saludo.
Reply

Jorge 17 Nov 2017


Hola, estoy empezando en este mundo de Arduino, ya tengo algo de experiencia con otro tipo de micros como los de la
gama PIC de microchip, pero hay cosas como esto de las comunicaciones que nunca se me ha dado bien. Ahí va mi
Reply duda:
Cargo su programa en mi Arduino y este realiza la configuración sin problemas me deja hacer el pairing y después
conecta muy bien con mi móvil, pero cuando escribo algo en la terminal de Arduino, en la pantalla de mi móvil (Utilizo la
App Bluetooth SPP PRO en el modo CMD line mode) no aparece lo que he enviado. De la misma manera, si escribo algo
en mi movil y pulso el enter no aparece nada en la terminal de Arduino.

A ver si me puede echar un cable porque no se que mas modificar.. ¡Muchas gracias!

PD.: Su página está genial la he recomendado mucho a compañeros y amigos que también se dedican a esto!

Ivan 20 Nov 2017


Hola Jorge, repasa la conexión del HC-06 y el Arduino, y recuerda que el Tx del HC-06 va al Rx del puerto Software
serial (el 4 según el programa de la sesión) y el Rx al Tx (el 2 de Arduino). Si no te funciona ¿qué Arduino estás
Reply usando? Si no usas un UNO puede ser que esos pines no estén permitidos por la librería SoftwareSerial.
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Un saludo y gracias por compartirnos!

Guillermo 10 Oct 2017


Hola Iván, tengo mi código funcionando como explicáis en el tutorial. Pero ahora necesito los pines con los que
inicializas para otro propósito porque en mi código necesito todas las entradas disponibles de mi Arduino Uno. He
Reply empezado a cambiarlo para usar los pines 1 y 0 que como bien explicabáis, están para hacer labores de Tx y Rx. He
conseguido compilar y ejecutar el código correctamente (quitando los cables de los pines 1 y 0 y volviéndolos a poner
después de la compilación/ejecución). Y consigo parear mi BT correctamente, pero ahora mi código principal no
funciona, sospecho que tiene que ver con la inicialización SoftwareSerial BT1(1,0); porque ahora -creo que- no entra en la
condición BT1.available(), ¿Cómo debería iniciar correctamente mi bluetooth para que consiga recibir instrucciones
nuevamente? ¡Estoy cerca! Gracias de antemano.

Ivan 10 Oct 2017


Hola Guillermo, si vas a usar los puertos 0 y 1 no tienes que utilizar la librería software serial, simplemente usas Serial
en vez de BT1.
Reply

Andres 01 Sep 2017


Holas les cuento mi experiencia de como logré que funcionara el codigo:3:

Reply –>Me di cuenta que cuando escribia “AT” en el monitor serie y apretaba enter, arduino en vez de leer un ‘\n’ leia el enter
como basura(una ‘y’ pero con dos puntitos arriba). Como no logré que reconociera el ‘\n’ le puse “while(c != ‘Z’) y al final
de cada comando AT escribí con un Z: (por ejemplo, “ATZ” en vez de “AT”). no es muy elegante pero funcionó para
identificar ese problema.
Si no les funciona el codigo podrian verificar que efectivamente estan saliendo de ese while y no estan en un loop infinito
:3

–>En la parte que dice “return( S + ‘\n’);” borré ” +’\n’ y ahi recien empezé a recibir respuestas del modulo. (por lo que
infiero que el modulo tampoco estaba leyendo los ‘\n’ como saltos de linea).
Mandandole “AT” en vez de “AT\n” el modulo reconoció los comandos :3
Si alguien sospecha que el problema es el modulo y no el arduino comprueben que efectivamente BT1.available() es en
algun momento TRUE, si no, puede ser que los comandos AT que le envian esten mal escritos (como en el caso de
“AT\n”) y que por lo tanto el modulo no entregue una respuesta y BT1.available() nunca sea TRUE.
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Espero que a alguien le haya servido. Si alguien me quere explicar mas en detalle por que me paso esto, o si es que
estoy infiriendo mal el funcionamiento del modulo, bienvenido sea

GIVE A REPLY

Message

Name (required) Email (required)

URL

Post comment
WordPress
WordPress Anti-Spam
Anti-Spam by
by WP-SpamShield
WP-SpamShield

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Copyright Prometec

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


TIENDA ARDUINO RASPBERRY PI IMPRESORA 3D FORO CONTACTO

EL MÓDULO BLUETOOTH HC-05


ARduino y la conexión BlueTooth

Home 
 El Módulo BlueTooth HC-05

OBJETIVOS

  Presentar el módulo HC-05.

 Describir las ventajas y diferencias con el módulo HC-06.

 Presentar más posibilidades con los comandos AT.

 Presentar un montaje y programa que nos permite entrar directamente en modo de configuración de
comandos AT..

MATERIAL REQUERIDO.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


6.80€ +
9.60€ + IVA
IVA

ARDUINO MODULO
UNO REV 3 BLUETOOTH
HC-05
 Añadir al
carrito  Añadir al
carrito

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


2.00€ +
IVA

CABLES
DUPONT
MACHO-
HEMBRA
 Añadir al
carrito

EL MÓDULO BLUETOOTH HC-05

En la sesión anterior presentamos algunos conceptos básicos sobre las redes Bluetooth y las funciones que se suelen realizar con ellos. Presentamos
el concepto de Master y Slave y configuramos el modulo HC-06 que solo podía trabajar en el modo Slave.

En esta sesión, vamos a utilizar su hermano mayor el modulo HC-05, que puede configurarse tanto como Master que como Slave, y que además

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


dispone de bastante más parámetros de configuración y capacidades de interrogación.

El aspecto externo es bastante similar y la mejor manera de diferenciarlos es por los pines el soporte, 4 para el HC-06 y 6 pines para el HC-05.

En la última sesión insistimos en que no hay diferencias hardware entre ambos modelos, pero sí que hay diferencias muy importantes en el firmware
(La programación interna del módulo).

Además, mientras que el HC-06 entra en modo de programación en cuanto lo enciendes y mientras no haya nadie conectado por Bluetooth, el HC-05
es ligeramente más complicado de colocar en modo comandos y requiere una cierta manera de arrancado, concretamente requiere que el pin KEY,
(Que no estaba conectado el caso del HC-06) este en HIGH cuando encendemos el modulo.

He visto bastante información he internet que recomendaba unos ciertos procesos para arrancar el modulo que siempre me han parecido confusos y
tienden a despistar a los que se acercan al tema por primera vez.

Por eso hemos decidido implementar este procedimiento en un Sketch de Arduino, para que podamos correrlo cuando necesitemos programar el
módulo.

El procedimiento normal con estos módulos, suele ser conectarlos, ver la configuración y reprogramarlos con nuestras preferencias. Después
mantendrá la programación hasta que decidamos cambiarla.

Pero parece que el proceso da bastante guerra, así que vamos a ver si podemos ayudar.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


CONEXIÓN DEL BLUETOOTH HC-05 AL ARDUINO

La conexión es muy sencilla aunque requiere algún cable más que el modulo HC-06, y algún cambio:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


En primer lugar, para que el HC-05 entre en modo comandos AT, requiere que cuando se enciende el modulo, el pin KEY este HIGH. Por eso hemos
conectado la tensión Vcc del módulo BlueTooth al pin 8 de nuestro Arduino.

El consumo del módulo es mínimo y nuestro Arduino es capaz de alimentarlo sin problemas, por eso el modulo se encenderá cuando pongamos HIGH
en el pin 9. Esto nos permitirá poner en HIGH el pin digital 8, al iniciar nuestro programa y después levantar el pin 8, de este modo cuando arranque
entrara sin más en el modo de comandos AT.

El resto de los pines se conectan de forma similar a lo que hicimos en la sesión anterior. Txd y Rxd se deben conectar cruzados con los pines de
comunicación de Arduino, que usaremos mediante la librería software Serial.

El pin State refleja, supuestamente, la situación en la que se encuentra el modulo y por ahora no vamos a utilizarlo.

PROGRAMA DE CONTROL

Así pues, no tenemos nada nuevo en el programa excepto que alimentaremos el modulo desde el pin digital 8, para forzarle a entrar en el modo
comandos AT. Nuestro programa quedaría poco más o menos así: Prog_71_1

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


#include <SoftwareSerial.h>

SoftwareSerial BT1(10, 11); // RX | TX


void setup()
{ pinMode(8, OUTPUT); // Al poner en HIGH forzaremos el modo AT
pinMode(9, OUTPUT); // cuando se alimente de aqui
digitalWrite(9, HIGH);
delay (500) ; // Espera antes de encender el modulo
Serial.begin(9600);
Serial.println("Levantando el modulo HC-06");
digitalWrite (8, HIGH); //Enciende el modulo
Serial.println("Esperando comandos AT:");
BT1.begin(57600);
}

void loop()
{ if (BT1.available())
Serial.write(BT1.read());
if (Serial.available())
BT1.write(Serial.read());
}

Con este procedimiento garantizamos que el modulo HC-05 entra solo en modo AT comandos, y que nuestra consola nos va a servir para
programarlo, y confío en que nos evite todas las complicaciones.

Mi HC-05 me envía a la consola un mensaje de Status en cuanto arranca en el modo AT, si es vuestro caso deberíais ver un mensaje en la consola.
Si no es así, o veis signos raros, suele ser indicador de que la velocidad de comunicación entre Arduino y el modulo es incorrecta.

Id probando velocidades hasta que veáis algún mensaje correcto. Enviar un AT siempre debería recibir una respuesta de OK.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


PROGRAMANDO EL HC-05 CON COMANDOS AT

Confío en que si hemos seguido los pasos anteriores cuando abras la consola deberías recibir un mensaje del módulo directamente, y si no, basta con
que escribáis AT Intro, recibiréis un OK como muestra la captura de pantalla:

El mensaje que obtengáis no tiene por qué ser el mismo e incluso puede que no tengáis ningún mensaje en absoluto, pero es importante que os
aseguréis de que tenéis seleccionado Ambos NL&CR para terminar las líneas.

El modulo HC-6, finaliza los comandos por tiempo y por eso en la sesión anterior usamos GetLine para conseguir líneas completas. Pero el HC-05, no
hace esto sino que espera que la línea acabe educadamente en \r\n y entonces ejecuta el comando.

 Aparentemente el número de modificaciones de software con la que se venden estos módulos es bastante
elevada y por ello no es fácil garantizar nada con ellos.

 Aparentemente todos los módulos que he probado aceptan ordenes similares, pero no todos los módulos
aceptan todas las ordenes,(Supongo que dependiendo del Firmware).
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Cuando menos si escribís en mayúsculas AT e intro, deberías recibir una respuesta de OK en la consola. Y si es así podemos seguir viendo más
comandos.

AT+VERSION, Requiere la versión del Firmware. En la captura de arriba muestra el resultado

AT+NAME, Requiere que nos informe del nombre que tiene asignado el modulo. Debería devolvernos un mensaje del tipo +NAME=HC-05,
indicando que se llama HC-05.

 El modulo HC-06 se podía renombrar exactamente así, pero no podíamos preguntarle qué nombre tenía
asignado. Solo cambiarlo.

AT+NAMEXXXX, programa el nombre que queremos presentar cuando alguien nos localice:

AT+NAMECharly

AT+BAUD, nos permite solicitar la velocidad a la que está programado el modulo para hablar con Arduino, y AT+BAUDX, Fija la velocidad de
comunicación entre el modulo y la consola de acuerdo a la siguiente tabla:

1 configura 1200bps
2 configura 2400bps
3 configura 4800bps
4 configura 9600bps (Default)
5 configura 19200bps
6 configura 38400bps
7 configura 57600bps
8 configura 115200bps

Ejemplo: AT+BAUD7 configura la comunicación a 57600 baudios

Si enviamos AT+BAUD, la respuesta es de la misma forma: BAUD=7 para indicar 9600.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


AT+PIN, Solicita el PIN actual y en la consola veris: PIN=1234 o similar.

AT+PINXXXX, configura el número de identificación personal, que se requerirá para establecer la vinculación

AT+PIN4516, establece 4516 como PIN.

 Recordad que el PIN es el número de identificación personal, que usaremos al conectarnos al módulo, pues
exigirá conocer la contraseña.

 El PIN es de 4 dígitos siempre

Básicamente estos son los mismos comandos que aceptaba el modulo HC-06 pero el HC-05 acepta bastante más.

AT+ROLE Nos informa de si está configurado como Maestro 1, o como esclavo 0.

ROLE=0 (Esclavo)

AT+ROLE1 Configura el modulo como Master.

AT+ROLE0 Configura el modulo como Slave.

 He visto muchos ejemplos por internet que indican que se debe usar un = para asignar valores, por ejemplo
AT+ROLE=1, o que para pedir información de la velocidad hay que hacer AT+BAUD?, También he visto que
varias páginas aseguran que para cambiar el PIN hay que hacer AT+PSSWD.

 Yo no he sido capaz de que nada de eso me funcione así, y sin embargo en mi modulo funciona la sintaxis
que os escribo en los ejemplos. Tengo que suponer que hay diferentes Firmwares que modifican la sintaxis
porque no puedo creer que haya tantas nomenclaturas erróneas corriendo por la red.

 Así que tendréis que probar cual es la que os funciona a vosotros.

No tendría demasiado sentido revisar aquí todos los posibles comandos AT, y por eso he preferido mostrar media docena de ellos, los más típicos,
para que podáis experimentar y configurar el modulo.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Aquí tenéis una lista con algunos comandos a los que más o menos he encontrado sentido (Porque hay montones que no tengo ni idea para que
sirvan).

AT COMMAND LISTING

COMMAND FUNCTION

AT Test UART Connection

AT+RESET Reset Device

AT+VERSION Query firmware version

AT+ORGL Restore settings to Factory Defaults

AT+ADDR Query Device Bluetooth Address

AT+NAME Query/Set Device Name

AT+RNAME Query Remote Bluetooth Device’s

AT+ROLE Query/Set Device Role

AT+CLASS Query/Set Class of Device CoD

AT+IAC Query/Set Inquire Access Code

AT+INQM Query/Set Inquire Access Mode

AT+PSWDAT+PIN Query/Set Pairing Passkey

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


AT COMMAND LISTING

COMMAND FUNCTION

AT+UART Query/Set UART parameter

AT+CMODE Query/Set Connection Mode

AT+BIND Query/Set Binding Bluetooth Address

AT+POLAR Query/Set LED Output Polarity

AT+PIO Set/Reset a User I/O pin

Para aquellos que sientan curiosidad por saber que más se puede hacer con los comandos AT (Alguien habrá, ¿No?), les remito a un documento de
Instructables que incluye un listado mayor de ellos. La dirección es:

Referencia comandos AT

Cuando hayamos programado el modulo como deseemos, podemos retirar la conexión del pin rotulado como KEY y el HC-05 está listo para trabajar
normalmente sin aceptar ya comandos AT.

Atención
Es importante comprender, que en cuanto conectemos algún dispositivo a nuestro modulo Bluettotth HC-05, la luz roja dejará de parpadear y
automáticamente saldremos del modo de comandos AT para entrar en el de transporte de información, es decir, cualquier cosa que le enviemos,
incluyendo comandos AT, se consideraran texto plano que se reenviará al otro extremos de la conexión Bluetooth.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Recordad que solo podemos enviar comandos AT mientras no estemos conectados

RESUMEN DE LA SESIÓN

  Hemos presentado el modulo BlueTooth HC-05.

 Hemos visto las diferencias con el módulo HC-06 y que a diferencia de este, se puede configurar como
maestro o como esclavo.

 También hemos visto que acepta bastantes mas ordenes en comandos AT.

 Hemos presentado un montaje que fuerza a entrar en el modo AT al módulo cuando arranca. Una vez
programado podemos soltar el pin KEY y el modulo estará listo para el servicio.

Anterior Siguiente

« COMENTARIOS MÁS VIEJOS

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


(249) Comments

Joaquín 05 Ene 2018


Hola, me parece que todo esta muy bien explicado, pero apesar de eso no puedo enviar ningun solo comando AT.
Podrian ayudarme?
Reply Saludos

Ivan 08 Ene 2018


Hola Joaquín, pueden ser varias cosas.
Que los cables estén al revés, recuerda, Tx a Rx y Rx a Tx.
Reply Que la velocidad que selecciones para el puerto serie no sea la que tiene configurada el HC-05.
Recuerda también que en el monitor serie tienes que seleccionar Ambos NL & CR abajo a la derecha.

Un saludo.

René 20 Nov 2017


Ivan el tutorial es bastante claro. Siguiendo la continuación de otros tutoriales de la página estoy en la controversia de
que me parece que el HC-05 no se podrá utilizar para hacer un robot auto con motores DC, ya que los pines que se
Reply utilizan en los motores son utilizados para el módulo HC-05

Ivan 23 Nov 2017


Hola rené, no se que controlador de motores quieres usar, pero puedes utilizar para el bluetooth dos pines
cualesquiera que soporte la librería Software Serial, así que si deberías poder. UN saludo.
Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Carlos 08 Nov 2017
Hola tengo un hc05 pero le cambie el pin y ahora no logro recordar cual le puse , hay algun programa que me permita
conectarme a el
Reply

Ivan 08 Nov 2017


Puedes hacerlo con el comando AT AT+PSWD.

Reply

Vicent 04 Nov 2017


Hola , he conectado el módulo hc-05 en modo AT para comprovar que hay comunicación con el arduino y todo perfecto .
Mi método de activación para el modo AT ha sido , antes de conectar el pin Vcc del modulo hc-05 a 5V ,he presionado
Reply el boton anexo al mismo , manteniendo este ,he conectado el pin Vcc a 5V i después he soltado el boton . He podido
conectar-me perfectamente con el monitor serie del arduino y provar varios comandos . Después lo he vinculado (
sincronizado) con el mobil .
Para salir del modo AT he desconectado el pin KEY y el módulo hc-05 continua parpadeando lentamente . Tambien he
provado salir del modo AT desconectando el pin Vcc del módulo , parpadea rápidamente pero no conecta con el mobil (
deberia dejar de parpadear )

He configurado UART=38400
role =0 . Si pongo role=1 no puedo sincronizar-lo con el mobil.

admin 09 Nov 2017


SI entrar en detalles que descoozco de tu modulo y de lo que le hayas programado, cuando lo desconectas de tension
y lo rearrancas deberias entrar en el modo normal. SI no es asi, es que le has programado algo que no se
Reply

Erick 01 Nov 2017


Hola, quiero configurar un HC-05 como maestro pero en una Arduino Mega 2560, esto también me sirve o qué debo
hacer? Estoy muy perdido, ayuda por favor.
Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 02 Nov 2017
Hola Erick, da igual el Arduino que vayas a usar los comandos AT para configurar el módulo son los mismos. Un
saludo.
Reply

Luisa 27 Oct 2017


Buenas tardes, configuré el arduino tal como se muestra pero al intentar dar comandos AT no me los reconoce, aparece
el mensaje en consola de “Levantando el modulo HC-06” y “Esperando comandos AT:” pero al hacer AT+ intro no
Reply aparece el Ok

admin 30 Oct 2017


Hola Luisa, Los ejemplos que ponemos en nuestros tutos estan comprobados repetidamente, pero a veces hay
modulos BT de diferenctes fabricantes que pueden respondor de maneras diferentes por lo que tienes que hacer
Reply pruebas hasta dar con la clave

Abraham 06 Dic 2017


Hola! yo tenía el mismo problema con un hc05, después de probar todas las velocidades, coloqué el divisor de tensión
en RX y el modulo comenzó a responder, asi que me ha tocado el modulo que si es sensible a los 3,3 voltios.
Reply

Sergio 24 Dic 2017


¿Podrías explicarme como lo has hecho? Es decir, ¿como has dispuesto el hardware y como lo has
programado? Tengo el mismo problema.
Reply Un saludo.

Reinel 17 Oct 2017


Buenas noches.
He logrado vincular el hc-05 al arduino cambiar el nombre, pero ahora ningun celular detecta el bluetooth, y solo lo
Reply hacen cuando desvinculo el hc-05 del arduino, hay algun comando aparte de maestro y esclavo que ya intente al cambiar
que me pueda solucionar este problema? gracias

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 17 Oct 2017
Hola Reinel, Si estás usando el HC-05 como esclavo sólo puedes conectarlo a un único maestro, no puede estar
conectado a dos a la vez. Si quieres que se le conecten varios dispositivos tienes q configurarlo como maestro.
Reply

GIVE A REPLY

Message

Name (required) Email (required)

URL

Post comment
WordPress
WordPress Anti-Spam
Anti-Spam by
by WP-SpamShield
WP-SpamShield

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Copyright Prometec

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


TIENDA ARDUINO RASPBERRY PI IMPRESORA 3D FORO CONTACTO

CONTROLANDO ARDUINO CON ANDROID


Home 
 Controlando Arduino Con Android

OBJETIVOS

  Conectar los módulos Bluetooth a Arduino.

 Presentar una aplicación Android llamada ArduDroid.

 Ver como podemos usar ArduDroid para controlar Arduino desde el movil.

 Montar un circuito de ejemplo.

MATERIAL REQUERIDO.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


6.80€ +
9.60€ + IVA
IVA

ARDUINO MODULO
UNO REV 3 BLUETOOTH
HC-05
 Añadir al
carrito  Añadir al
carrito

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


2.00€ +
2.00€ +
IVA
IVA

CABLES
DUPONT
MACHO- KIT DE
HEMBRA RESISTENCIAS
VARIADAS
 Añadir al
carrito  Añadir al
carrito

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


2.00€ +
IVA

KIT 5X RGB
LEDS
 Añadir al
carrito

TRABAJANDO CON HC-05 Y ANDROID

Una vez que hemos visto cómo usar los comandos AT para programar los módulos Bluetooth, en las sesiones anteriores, podemos pasar a la parte
fácil que es usar nuestros móviles Android para controlar cualquier proyecto con BlueTooth. Es tan sencillo como conectarnos al módulo y escribir un
pequeño programa que gobierne el flujo de control.

Podríamos hacerlo con comandos de texto directos, pero es demasiado poco elegante y aquí nos gustan las cosas presentables, por lo que vamos a
usar un programa de lo más simpático, disponible para Android que se llama ArduDroid.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Está escrito por TechBitar, y podéis encontrar aquí su página Ardudroid.

Básicamente es un programa Android con botones y deslizadores, más un esquema de programa Arduino que podemos usar para enviar y recibir
comandos de una forma presentable, y que además funciona muy bien.

Para ello necesitaremos que descarguéis ArduDroid de la GooglePlay para Android y lo instaléis en vuestro teléfono.

 Siento tener que decir, de nuevo, que los módulos HC-05 y HC-06 no son capaces de conectar
con los móviles de Apple o al menos yo no lo he conseguido

Después basta con conectar cualquiera de los dos módulos a nuestros Duinos con un par de cables para GND y Vcc más Rxd y Txd.

Vamos a dedicar esta sesión a ver como conectamos uno de los módulos para la conexión normal de trabajo y cómo usar el Ardudroid para gobernar
mensajes de texto, pines digitales y ya puestos algún pin PWM.

DIAGRAMA DE CONEXIÓN

Vamos a montar inicialmente un pequeño circuito con tres diodos LED para que veamos cómo controlarlos desde el móvil, y luego iremos
complicando un poco más el montaje (No, no es una amenaza).

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


El montaje de la protoboard es trivial para gente tan experimentada:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


EL PROGRAMA DE CONTROL ARDUDROID

Ardudroid incluye un programa Arduino, que podemos utilizar como esqueleto para nuestros propios proyectos. Pero nosotros vamos a hacer algunos

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


cambios en la conexión que él hace, porque no me gusta nada que usemos los pines 0 y 1 para comunicarnos con Arduino, así que nosotros
usaremos los pines 2 y 3 para la conexión con el módulo BlueTooth.

 Creo que ya comentamos que si usamos los pines 0 y 1 nuestro código funcionara, pero anularemos la
conexión con el PC vía USB, que usa los pines 01 y 1.

 El autor, que es un hombre de mundo, no tiene problemas, porque prueba los programas con un segundo
módulo BT, y cuando tiene el programa pulido, no necesita volver a reprogramar, pero yo soy un poco más
torpe y prefiero no cerrar esa puerta mantener abierto el USB para mensajes por ejemplo.

Vamos a ir presentando el programa de control de Arduino en pequeñas dosis para evitar asustar a nadie, y que los sufridos lectores huyan
despavoridos, y de ese modo, además, podremos ir viendo poco a poco las diferentes secciones del programa, que estoy seguro ayudara a su mejor
comprensión.

En primer lugar, necesitamos saber, que el programa Ardudroid envía todos los comandos con una sintaxis sencilla. Todas las ordenes empiezan por *
y terminan en #, y si la orden incluye múltiples datos, esto vienen separados por el símbolo |

Cuando ArduDroid envía una orden típica, es algo así: *10|3|2#

Por eso, porque las órdenes se envían codificadas, vamos a empezar con algunas definiciones previas:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


#define START_CMD_CHAR '*'
#define END_CMD_CHAR '#'
#define DIV_CMD_CHAR '|'
#define CMD_DIGITALWRITE 10
#define CMD_ANALOGWRITE 11
#define CMD_TEXT 12
#define CMD_READ_ARDUDROID 13
#define MAX_COMMAND 20 // max command number code. used for error checking.
#define MIN_COMMAND 10 // minimum command number code. used for error checking.
#define IN_STRING_LENGHT 40
#define MAX_ANALOGWRITE 255
#define PIN_HIGH 3
#define PIN_LOW 2

Además usaremos la librería SoftwareSerial, para hablar con el modulo BlueTooth, mediante los pines digitales 2 y 3:

#include <SoftwareSerial.h>
SoftwareSerial BT1(3, 2); // RX | TX

Definiremos unas variables para contener los valores que leeremos del comando:

int ard_command = 0;
int pin_num = 0;
int pin_value = 0;

El cuerpo principal del loop es muy sencillo, Vamos a empezar recibiendo mensajes de texto:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


char get_char = ' '; // Para leer BT1
if (BT1.available())
{ get_char = BT1.read();
delay(25);

if (get_char != START_CMD_CHAR)
return; // Si no hay *, vuelta a empezar

ard_command = BT1.parseInt(); // Leemos la orden


pin_num = BT1.parseInt(); // Leemos el pin
pin_value = BT1.parseInt(); // Leemos valor

Recuerda que parseInt (), va leyendo caracteres hasta llegar a uno que no es un numero valido y entonces devuelve en un entero las cifras que ha
leído.

Una vez que leemos ard_command, evaluamos que tipo de comando es, y si la orden es de tipo texto, llamamos a un viejo conocido GetLine () para
conseguir el String:

if (ard_command == CMD_TEXT) // Si el comando es de texto:


{
String s = GetLine();
Serial.println(s);
}

Si lo que recibimos es una orden que corresponde al boton GetData , enviamos algo, previamente pactado, por ejemplo la lectura de A0 (Aunque no
tenemos nada conectado en este momento:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


if (ard_command == CMD_READ_ARDUDROID)
{ BT1.print(" Analog 0 = ");
BT1.println(analogRead(A0)); // Leemos A0
return; // Done. return to loop();
Y si la orden es un digitalWrite de algún pin:
if (ard_command == CMD_DIGITALWRITE)
processDW(pin_num, pin_value);
}

He preferido procesar las órdenes con funciones, fuera del cuerpo principal para que sea un poco más limpio el programa.

La función GetLine es la habitual, simplemente modificada para leer de BT1 en lugar de Serial:

String GetLine()
{ String S = "" ;
if (BT1.available())
{ char c = BT1.read(); ;
while ( c != END_CMD_CHAR) //Hasta que el caracter sea END_CMD_CHAR
{ S = S + c ;
delay(25) ;
c = BT1.read();
}
return( S ) ;
}
}

Y en cuanto a la función processDW, que maneja las órdenes digitales:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


void processDW(int pin_num, int pin_value)
{ if (pin_value == PIN_LOW)
pin_value = LOW;
else if (pin_value == PIN_HIGH)
pin_value = HIGH;
else
return; // Error

digitalWrite( pin_num, pin_value);


return;
}

Para manejar los comandos de escritura analogica, mediante PWM, tenemos, otro apartado de lo mas sencillo:

if (ard_command == CMD_ANALOGWRITE)
{ analogWrite( pin_num, pin_value );
// add your code here
return; // De vuelta alloop();
}

Aquí os pongo una copia completa del programa Prog_72_1

Y aquí teneís un minivídeo con el resultado del programa

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


RESUMEN DE LA SESIÓN

  Hemos presentado el programa ArduDroid. Una aplicación de lo más simpática para manejar vuestros
proyectos a través del móvil.

 Hemos incluido un ejemplo de circuito para manejar desde el móvil.


PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
 Hemos presentado como complementar la aplicación Android con un programa base que nos proporciona
Ardudroid, para manejar nuestros dispositivos.

Anterior Siguiente

« COMENTARIOS MÁS VIEJOS

(37) Comments

hugo 15 Nov 2017


Hay algun dato que nos proporcionoe la distancia del emisor bluetooth, por ejemplo si yo le mando un dato de mi celular
que me pudiera decir la distancia a la que esta?, muchas gracias por su atencion.
Reply

Ivan 16 Nov 2017


Hola Hugo, de momento que yo sepa, no se puede. Un saludo.

Reply

GIVE A REPLY

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Message

Name (required) Email (required)

URL

Post comment
WordPress
WordPress Anti-Spam
Anti-Spam by
by WP-SpamShield
WP-SpamShield

Copyright Prometec

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


TIENDA ARDUINO RASPBERRY PI IMPRESORA 3D FORO CONTACTO

DE ARDUINO A TU PC POR BLUETOOTH


Enviando datos a tu PC mediante Bluetooth

Home 
 De Arduino A Tu PC Por BlueTooth

OBJETIVOS

  Conectar TU PC a Arduino mediante Bluetooth.

 Gobernar el circuito de la sesión previa desde tu PC, mediante un programa sencillo.

 Enviar lecturas de datos a tu PC para su archivo y estudio.

MATERIAL REQUERIDO.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


6.80€ +
9.60€ + IVA
IVA

ARDUINO MODULO
UNO REV 3 BLUETOOTH
HC-05
 Añadir al
 Añadir al
carrito
carrito

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


2.00€ + 2.00€ +
IVA IVA

CABLES
DUPONT
MACHO- KIT DE
HEMBRA RESISTENCIAS
VARIADAS
 Añadir al
 Añadir al
carrito
carrito

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


4.00€ +
2.00€ + IVA
IVA

KIT 5X RGB ADAPTADOR


LEDS USB
BLUETOOTH 2.0
 Añadir al
carrito  Añadir al
carrito

ENVIANDO DATOS DESDE ARDUINO AL PC MEDIANTE BLUETTOTH

Una de las cosas más frecuentes cuando utilizas tu Arduino es usarlo como Data Logger, es decir como un sistema de recolección de datos
procedentes de un sistema cualquiera para su estudio o proceso posterior.

Una de las maneras más típicas es usar lector de tarjetas SD para que se pueda retirar al cabo de un tiempo, pero a nivel doméstico o a pequeña
escala es más sencillo usar un enlace Bluetooth para recibir esos datos en tu PC y almacenarlos allí directamente.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Me ha sorprendido que no hay muchos tutoriales sobre como conectar Arduino y el PC mediante Bluetooth y no entiendo porqué, la ventaja de
tener una conexión inalámbrica entre PC y Arduino es lo bastante atractiva como para que compensen los inconvenientes.

Otra ventaja d este método es que podemos gobernar nuestros circuitos Arduino directamente desde un PC de control, y eso incluye pequeños
robots o motores.

Es igual de sencillo conectar nuestro PC a los Arduinos con Bluetooth como lo ha sido hasta ahora para conectarlos a un teléfono móvil, y en
muchas ocasiones bastante más práctico.

En esta sesión vamos a instalar un adaptador >Bluetooth a nuestro PC (En el caso de que no lo tengáis incluido) y luego vincularlo al módulo BT del
Arduino.

DIAGRAMA DE CONEXIÓN

Vamos a reusar el mismo circuito que usamos en la sesión previa.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Y el esquema de la protoboard:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


CONECTANDO ARDUINO AL PC MEDIANTE BLUETOOTH

Al final deberíais ver una ventana parecida a esta:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Una vez que conectemos el adaptador Bluetooth al PC deberíamos poder pinchar en los iconos
inferiores a la derecha de Windows y ver el símbolo de Bluetooth. SI no es así basta con
desplegar los iconos ocultos pichando en la flechita:

Si hacemos doble clic en el símbolo de Bluetooth mostrara los dispositivos BT visibles alrededor.

 El procedimiento de conexión varía según la versión de Windows y el


modelo de adaptador, por lo que no es posible describir un
procedimiento único. Tendréis que ver las instrucciones del fabricante
de vuestro modulo.

 También es probable que al vincularse la primera vez os pida el código


PIN.

El icono de la izquierda, representa mi Arduino (Cuyo nombre es Charly) y si ya has conseguido vincularlo al PC, recordara los datos de conexión para
la próxima vez. El procedimiento es en todo similar a vincular unos auriculares Bluetooth.

Si hacéis doble clic en el icono os mostrara la venta de propiedades y si elegís la pestaña de Hardware, os mostrará la puerta COM que ha levantado
para él. En mi casa COM11:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Necesitamos ahora un programa de terminal serie que nos permita abrir una conexión con el adaptador BlueTooth del PC una vez vinculado a
Arduino. Yo hace años que uso un pequeño y muy resultón programa para estas ocasiones, que se llama Putty. Una búsqueda en Google de Putty
os enviara rápidamente a su página de descarga.

Es un programa con muchas opciones (Lo que no debe asustaros) y que sirve para casi cualquier cosa que envié datos en Stream, incluyendo puertas
series, TCPIP y además acepta conexiones seguras SSH, y encima es gratis.

Cuando arrancas Putty aparece esta ventana

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


En mi caso he seleccionado Serial en COM11 y 9600 de velocidad. Si pincháis en la izquierda en la sección de Logging (Registro), conviene pedirle
que guarde registro de todo el cruce de información entre el PC y Arduino vía BT, para que lo podamos ver más tarde.

En mi caso le pido que guarde todo en un fichero llamado putty.log y que pise el anterior si existe (Para no pasarme la vida diciéndole que puede
sobrescribirlo).

Si pinchamos ahora en Terminal, seleccionad que fuerce el hecho en lo que recibimos y también en lo que enviamos, y eso es todo

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Si volvéis a la sección de Session, podéis guardar la configuración con un nombre para usarla en otro momento. Ahora ya podemos pulsar el boto
Open para abrir la comunicación.

Al hacerlo veréis que el testigo piloto del módulo Bluetooth deja de parpadear quedándose fijo. Indica que se ha establecido la comunicación.

EL PROGRAMA DE CONTROL

El programa de gestión de la conexión es de lo más sencillo. Vamos a aceptar en nuestro Arduino 3 órdenes que corresponden a los pines 13,12 y 11.
Cuando recibamos un numero de pin, invertiremos el estado del mismo pasando el LED de apagado a encendido y viceversa.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Además, como queremos que nuestro Arduino nos envié datos al PC para su almacenamiento, estableceremos un programa que envié los valores de
las puertas analógicas A0,A1 y A2, aun cuando no tienen nada conectado, por lo que serán valores aleatorios.

Aquí tenéis el programa completo Prog_73_1

Como siempre cargamos la librería serie y creamos la puerta BT1 para comunicar con el Bluetooth

#include <SoftwareSerial.h>
SoftwareSerial BT1(3, 2); // RX | TX

void setup()
{ Serial.begin(9600);
BT1.begin(57600);
}

Después vamos a usar la función GetLine de nuevo para enviar líneas completas al PC desde la consola de Arduino y una versión modificada de la
misma llamada GetLineBT para hacer lo mismo a través de la puerta BT1.

if (BT1.available())
{ B= GetLineBT();
Serial.println(B);
}
if (Serial.available())
{ String S = GetLine();
BT1.println(S);
Serial.println(S);
}

Es lo de siempre, leemos lo que entra por Bluetooth y lo enviamos a la puerta serie. A su vez enviamos a BT1 lo que escribimos en la consola.

 GetlLineBT tiene una particularidad y es que no busca el fin de línea como intro o ‘\n’ sino que busca
retorno ‘\r’ pues Putty tiene la manía de terminar las líneas con ‘\r’ en lugar de ‘\n’ y no he sido capaz de
encontrar como cambiar esto.
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
 Si algún alma caritativa descubre la forma agradecería que me informara.

Para gobernar los LEDS utilizamos el siguiente código, que simplemente invierte el valor del pin digital correspondiente cuando recibe la instrucción
pertinente.

if (B =="13")
digitalWrite(13, !digitalRead(13));
if (B =="12")
digitalWrite(12, !digitalRead(12));
if (B =="11")
digitalWrite(11, !digitalRead(11));

Y por ultimo para recibir los valores de las puertas analógicas A0,A1 y A2 cada 3 segundos usamos:

if (millis() % 3000 == 0)
{ BT1.println("Analog 0 = " + String(analogRead(A0))) ;
BT1.println("Analog 1 = " + String(analogRead(A1))) ;
BT1.println("Analog 2 = " + String(analogRead(A2))) ;
BT1.println(".................");
}

Aquí tenéis un mini video con el resultado

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


RESUMEN DE LA SESIÓN

  Hemos visto como montar un adaptador Bluetooth en tu PC.

 Vimos como configurar Putty para conectar tu PC y Arduino mediante Bluetooth, incluyendo activar el
Logging para guardar registro de la información que se recibe o envía.

 Hemos presentado un pequeño programa que nos permite gobernar Arduino mediante órdenes enviadas
desde el PC y además recibe lecturas directamente.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Anterior Siguiente

Copyright Prometec

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


TIENDA ARDUINO RASPBERRY PI IMPRESORA 3D FORO CONTACTO

BLUETOOTH 4.0 LOW ENERGY


Usando bluetooth 4.0 LE con equipos Apple

Home 
 Bluetooth 4.0 Low Energy

OBJETIVOS

  Presentar el nuevo estándar de Bluetooth 4.0 o Low Energy.

 Conocer un módulo sencillo para ello, el HC-08.

 Ver como programar el intercambio de mensajes.

 Presentar las Apps que permiten esta comunicación con Apple IOS y Android

MATERIAL REQUERIDO.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


12.60€

9.60€ + + IVA
IVA

ARDUINO MODULO
UNO REV 3 BLUETOOTH
HC-10 BLE
 Añadir al
 Añadir al
carrito
carrito

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


2.00€ +
IVA

CABLES
DUPONT
MACHO-
HEMBRA
 Añadir al
carrito

BLUETOOTH LOW ENERGY BLE

Ya hace algún tiempo que estuvimos probando los módulos Bluetooth V2 con nuestros Arduinos y hay varias sesiones previas dedicadas a este tema
y a jugar con unos pequeños módulos como el HC-05 y el HC-06.

Estos módulos BlueTooth son muy sencillos de manejar y se comportan como receptores simples que nos envían por una puerta serie todo lo que
recibe y emiten mediante el BlueTooth todo lo que les enviemos a dicha puerta serie.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Vimos también que estos módulos disponían de un modo característico de entrar en modo Comandos AT, con los que podíamos programar con
mayor o menor comodidad ciertas características del módulo como la velocidad de la puerta serie y similares.

Actualmente este tipo de módulos son muy baratos, y sencillos de manejar lo que les convierte en unos componentes ideales para enviar datos a
nuestros Arduinos desde cualquiera de los móviles que llevamos en el bolsillo.

Pero había un problema. Los equipos de Apple no aceptan la conexión con este tipo de módulos porque aparentemente requieren la versión 4.0 del
Bluetooth y rechazan las versiones previas como la 2.0 que eran bastante frecuentes hasta hace relativamente poco.

En sesiones previas hicimos algunas pruebas para vincular nuestros teléfonos o tabletas Bluetooth 2.0 con Arduino, pero Apple siguiendo su
costumbre iba por libre y no había manera de conectar.

Pero con el tiempo han ido apareciendo módulos como los que conocemos que soportan el protocolo Bluetooth V4.0 o Low Energy al alcance de
todos los bolsillos y los fabricantes chinos han empezado a suminístrarlos de forma accesible, tales como los modelos HC-08 y HC-10.

Como ya hace algún tiempo conseguí uno de estos modulitos HC-08, ha llegado el momento de hacer pruebas con él y ver lo que pasa y comprobar
que podemos usar nuestros IPhone e Ipad para conectar con nuestros Arduinos.

QUE APORTA EL BLUETOOTH 4.0 O LOW ENERGY

¿Qué es el nuevo Bluetooth 4.0? Pues un nuevo protocolo diseñado pensando en disminuir todo lo posible las necesidades de energía de los
dispositivos que lo usan, y de sobre todo de la propia comunicación que tradicionalmente ha sido de consumo insaciable.

Se le suele llamar también BLE por Bluetooth Low Energy, o simplemente Bluetooth LE . No he conseguido demasiada información en internet
sobre los consumos reales que podemos esperar, en primer lugar porque hay muchos factores que pueden modificar ese consumo y en segundo lugar
porque no parece haber muchas ganas de mojarse con el tema.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Así que abundan informaciones del tipo de “ Consume mucho menos que las versiones previas ” o “ XXX ha conseguido un par de años de uso con una
batería típica” y demás tonterías. A pesar de todo, parece que hay consenso en que mejora bastante el consumo previo, pero de datos fiables nada
de nada, al menos por ahora, aunque se habla de consumos entre 10 y 20 mA

Pero en realidad lo que de verdad me interesaba era la posibilidad de usar mi IPhone o Ipad con Arduino sin tener que empeñar un ojo para pagar el
modulito BlueTooth y aquí estamos con ello.

No quiero dejar pasar la ocasión de comentar, que aparentemente además de disminuir el consumo de energía de estos módulos, también ha bajado
la distancia a la que se puede hacer una comunicación efectiva con este nuevo protocolo, de los 100m anteriores a la mitad actualmente, aunque no
he podido probarlo por mí mismo.

Tal vez si algún lector que conozca del tema nos puede ilustrar con comentarios al respecto, que serían muy bienvenidos.

EL MÓDULO BLUETOOTH HC-08

Es un pequeño modulo muy al estilo de los que ya conocemos y de patillaje muy similar, que nos convierte la información que llega vía BT a puerta
serie y viceversa:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Este módulo HC-08 se puede utilizar directamente para enviar y recibir mensajes a través del Bluetooth sin más que pinchar sus pines serie Rxd y
Txd a los correspondientes de nuestro Arduino y con el programa adecuado no necesitamos más.

Podemos hacer un pequeño montaje para entrar en modo de comandos AT y probar la comunicación con el modulo Bluetooth. Para ello basta
con arrancarlo mientras mantenemos en HIGH su pin ENABLE. La conexión es completamente similar a la que usamos con el modulo HC_06:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Con esto ya podemos empezar a programar el modulo mediante comandos AT:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


No he encontrado demasiados comandos AT para este módulo y probando he ido viendo que acepta un subset de los habituales comandos que
vimos con los módulos HC-05 y HC-06

Comando Funcion

AT Devuelve OK

AT+NAMEPrometec Establece Prometec como el nombre que publicara en BT

AT+NAME Devuelve el nombre que publica el modulo en BT

AT+VERSION Devuelve la versión del firm

AT+PASSWD1234 Establece 1234 como nueva contraseña de acceso

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


AT+PASSWD? Devuelve la contraseña actual del modulo

AT+BAUD? Devuelve la velocidad de comunicación de la puerta serie

Establece la velocidad de comunicación de la puerta serie, donde n va de 1 a 8 para velocidades de 1200,


2400, 9600, 19200, 83400, 57600 y 115200 respectivamente:

AT+BAUDn

Nota: EL modulo debe ser reseteado para que el cambio de velocidad se establezca

AT+STATUS Devuelve un resumen de situación

Seguro que me habré dejado más de un comando disponible, pero estos módulos no están demasiado bien documentados y para complicar más la
situación los diferentes fabricantes pueden cargar diferentes juegos de comandos AT dependiendo de sus gustos. Así que tendréis que probar que
comandos aceptan o no.

ESTABLECIENDO LA COMUNICACIÓN CON TU MÓVIL

La conexión del módulo es trivial y vasca con alimentarlo y conectar la puerta serie:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Podemos usar un programa sencillo para establecer la comunicación, en el que simplemente copiamos lo que llega el BT a la puerta serie y viceversa:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


#include <SoftwareSerial.h>
SoftwareSerial BT1(4,2); // RX, TX recorder que se cruzan

void setup()
{ Serial.begin(9600);
Serial.println("Enter AT commands:");
BT1.begin(9600);
}

void loop()
{ if (BT1.available())
Serial.write(BT1.read());

if (Serial.available())
{ char c = Serial.read() ;
Serial.print(c);
BT1.print(c);
}
}

Ahora vamos a necesitar una aplicación que nos permita enviar mensajes entre nuestro Arduino y digamos un IPhone por ejemplo. Uno podría
pensar que algo así no tendría dificultad, pero localizar esta aplicación me ha llevado un par de horas, durante las cuales me he frustrado con todo
tipo de aplicaciones inútiles que no hacían más que marear.

Finalmente he encontrado una que cumple bastante bien con la misión de enviar y recibir menajes de texto entre Arduino y mi IPhone 4S, se llama
JBWave y podéis descargarla de la appStore sin problemas.

 Para que no todo sea fácil y Apple pueda dar por el saco suficientemente, me he encontrado con que esta
aplicación corre bien en mi IPhone 4S, pero no en mi Ipad 3.

Aquí os dejo un pequeño video ilustrando el proceso de conexión y envió de mensajes en ambas direcciones:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


USANDO ANDROID CON BLUETOOTH 4.0 LE

Ya habíamos visto cómo usar las versiones previas de Bluetooth con teléfonos Android en sesiones anteriores, pero ya que estamos presentando la
conexión con la nueva versión Bluetooth 4.0 de baja energía, o BLE, dejaríamos la sesión un poco coja sin pasar revista al mismo tema con los
teléfonos de Google.

Esto viene causado porque la App que veíamos en la sesión de la HC-05 llamada BT SPP, no reconoce el nuevo formato y por eso debemos
presentar otra que realice las mismas funciones.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Esta nueva App se llama “ HM BLE terminal”. Es una aplicación muy similar a la que vimos en su día y a la que he usado para Apple . Podéis usar
exactamente el mismo montaje hardware y software de control, y su comportamiento es en todo similar

En este pequeño video os mostramos el use de la App con el HC-08 para pasar mensajes de texto entre nuestro Arduino y el móvil Android

Pues eso es todo por hoy, confío en que veáis que es igual de fácil usar el nuevo protocolo con los Iphone que con los Android.

RESUMEN DE LA SESIÓN

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


  Hemos presentado el modulo BlueTooth HC-08.

 Hemos visto las diferencias con el los modulos que ya conociamos como el HC-05 y HC-06.

 Hemos visto que Apps usar para transeferir mensajes mediante Android y Apple IOS.

Anterior Siguiente

Copyright Prometec

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


TIENDA ARDUINO RASPBERRY PI IMPRESORA 3D FORO CONTACTO

ÍNDICE GPRS
Los módulos GPRS

Home 
 ÍNDICE GPRS

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Presentando el módulo GPRS: llamar y enviar SMS
Recibir llamadas y SMS
Enviar y recibir llamadas y SMS
Controlar Arduino mediante llamadas y SMS
Conexión a Internet
Anexo comandos GSM/GPRS

Copyright Prometec

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


TIENDA ARDUINO RASPBERRY PI IMPRESORA 3D FORO CONTACTO

MÓDULO GSM/GPRS: LLAMAR Y ENVIAR SMS


Empezando con el módulo GPRS

Home 
 MÓDULO GSM/GPRS: Llamar Y Enviar SMS

OBJETIVOS

  Presentar la tarjeta GSM/GPRS basado en el módulo SIM900.

 Aprender a conectarlo y a ponerlo en marcha.

 Usarlo para realizar llamadas y enviar SMS.

MATERIAL REQUERIDO.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


29.00€

9.60€ + + IVA
IVA

ARDUINO GSM GPRS


UNO REV 3 ARDUINO
SHIELD
 Añadir al
 Añadir al
carrito
carrito

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


2.00€ + 4.80€ +
IVA IVA

CABLES
DUPONT
MACHO- CARGADOR
MACHO ARDUINO
Añadir al
Añadir al


carrito
carrito

GSM Y GPRS

Hemos visto varias formas de conectar nuestro Arduino al exterior, como Ethernet y wifi, pero puede que alguna vez queramos comunicarnos con él
y no tengamos acceso a ninguna de estas redes, o no queramos depender de ellas. Puede ser muy útil, por ejemplo, para colocar en una estación
meteorológica.

Para este tipo de propósitos podemos utilizar un módulo GSM/GPRS con una tarjeta SIM, de forma que podamos comunicarnos con él como si se
tratase de un teléfono móvil. Y es que esta tarjeta basada en el módulo SIM900 nos permite enviar y recibir llamadas y SMS y conectarnos a

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Internet, transformando nuestro Arduino en un teléfono móvil.

EL GSM (Global System for Global Communications ) es el sistema de comunicaciones que más se utiliza en teléfonos móviles y es un estándar en
Europa. La primera funcionalidad de esta tecnología es la transmisión de voz, pero también permite la transmisión de datos (SMS, Internet), eso sí,
a una velocidad muy baja de 9kb/s.

El GPRS (General Packet Radio Service) es una extensión del GSM basada en la transmisión por paquetes que ofrece un servicio más eficiente para
las comunicaciones de datos, especialmente en el caso del acceso a Internet. La velocidad máxima (en teoría) del GPRS es de 171kb/s, aunque en la
práctica es bastante más pequeña.

CONEXIONES Y PUESTA EN MARCHA

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


El módulo que vamos a usar para el tutorial no tiene pines para montarla directamente sobre el Arduino, pero hay modelos que sí lo permiten. De
todas formas la conexión es muy sencilla.

Esta tarjeta está basada en el módulo SIM900, y la configuraremos y controlaremos vía UART utilizando los comandos AT.

Lo primero tendremos que colocar la tarjeta SIM que vayamos a usar. El adaptador para las tarjetas es del tamaño de las SIM normales, que en su
mayoría han sido sustituidas por MicroSIM y NanoSim, así que tendremos que hacernos con una o enganchar una de estas últimas en un adaptador
(el módulo que utilizamos en la sesión y que podéis conseguir en la tienda de esta página incluye adaptadores para todos los tamaños de tarjeta) .
Con un poco de paciencia y de pericia también podríamos colocar una nano o una micro directamente, pero en correremos peligro de que se mueva y
deje de hacer contacto.

Antes de conectar nada al Arduino, vamos a colocar los jumpers que tiene la tarjeta de forma que utilicemos para comunicarnos los pines 7 y 8.

Para conectarla a nuestro Arduino tenemos dos opciones, y para las dos necesitaremos una fuente de alimentación externa, ya que con conectar el
Arduino por USB será suficiente para encender el módulo, pero no para alimentar también la tarjeta. Si conectamos la alimentación externa al shield
GPRS y alimentamos el Arduino con el USB o una fuente aparte, sólo tendremos que unir los pines 7 y 8 para la comunicación serie y el GND entre
ambas tarjetas.

 Si utilizáis un Arduino Mega, la conexión sería de los pines 7 y 8 del GPRS a los pines 10 y 11 del Mega.

 En la programación también habría que cambiar la instrucción en la que definimos la instancia Software
Serial que creamos y ponerle los pines 10 y 11 (lo recordaremos más adelante).

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Si conectamos la alimentación externa al Arduino a parte de las tres conexiones anteriores tendremos que unir los pines 5V del Arduino y del GPRS.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Para encender el shield tenemos que colocar el interruptor en la posición correcta. Las dos posiciones corresponden a cada uno de los tipos de
conexión que hemos explicado arriba. Una vez hagamos esto se encenderán dos LEDs

Para activar la alimentación de la tarjeta SIM también nos encontramos con dos opciones. Podemos hacerlo manualmente presionando el
pulsador que hay en uno de los laterales durante uno o dos segundos y veremos que se enciende otro LED, y que uno de los que se había encendido
antes empieza a parpadear una vez por segundo. Este parpadeo nos indica que está buscando la red. Cuando la encuentre y se conecte cambiará la
frecuencia de parpadeo y lo hará cada 3 o 4 segundos. Eso sí, no se conectará hasta que no metamos el PIN de la SIM, que ya veremos ahora cómo
hacerlo.

También podemos activarla por programa, pero antes tendremos que realizar una soldadura en el pad “R13” que está justo al lado de la regleta de
pines roja “J16”. Y una vez hecho esto la activaremos mandando un pulso de 1 segundo al pin 9 de la tarjeta. Así que si queréis usar este tipo de
activación tendréis que añadir un cable entre un pin digital (en nuestro caso el 9) y el pin 9 de la tarjeta que hemos conectado. Eso sí, recordad que
si está activada la tarjeta y volvemos a meter el pulso, lo que haremos será apagarla.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


REALIZANDO LLAMADAS DESDE ARDUINO

Para comunicarnos con el módulo utilizaremos comandos AT, pero lo primero que haremos será incluir la librería SoftwareSerial.h y configurar la
comunicación por los pines 7 y 8 (10 y 11 para el Arduino Mega) .

#include <SoftwareSerial.h>
SoftwareSerial SIM900(7, 8); // 10 y 11 para el Arduino Mega. Configura el puerto serie para el SIM900.

El módulo utiliza una velocidad de comunicación de 19200KHz, así que en el setup configuraremos el puerto serie para el SIM900 y para Arduino a
esa velocidad.
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Además introduciremos el PIN de la tarjeta para desbloquearla utilizando comandos AT y le daremos un poco de tiempo para que se conecte a la red.
El comando que utilizaremos es AT+CPIN=“XXXX “, donde sustituiremos XXXX por el PIN de nuestra tarjeta.

 Recordad que como vamos a meter el comando dentro de un println, tendremos que utilizar las \ antes de
cada “ para que no se comporten como un carácter especial.

Así que el setup nos quedaría así:

void setup()
{
//digitalWrite(9, HIGH); // Descomentar para activar la alimentación de la tarjeta por Software
//delay(1000);
//digitalWrite(9, LOW);
delay (5000); //Nos damos un tiempo para encender el GPRS y la alimentación de la tarjeta
SIM900.begin(19200); //Configura velocidad del puerto serie para el SIM900
Serial.begin(19200); //Configura velocidad del puerto serie del Arduino
Serial.println("OK");
delay (1000);
SIM900.println("AT+CPIN=\"XXXX\""); //Comando AT para introducir el PIN de la tarjeta
delay(25000); //Tiempo para que encuentre una RED
}

Crearemos una función en la que meteremos las instrucciones necesarias para llamar y colgar la llamada, también mediante comandos AT. Para
llamar usaremos el comando ATDXXXXXXXXX, (sustituyendo las X por el número al que queramos llamar) y para colgar ATH.

No hay que ser tacaño con el tiempo que mantenemos la llamada, porque a veces puede tardar en empezar a dar tono y sino podríamos colgar antes
de recibir nada en nuestro móvil.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


void llamar()
{
Serial.println("Realizando llamada...");
SIM900.println("ATDXXXXXXXXX;"); //Comando AT para realizar una llamada
delay(30000); // Espera 30 segundos mientras realiza la llamada
SIM900.println("ATH"); // Cuelga la llamada
delay(1000);
Serial.println("Llamada finalizada");
}

Y ya sólo tenemos que llamar a la función cuando nosotros queramos. En este ejemplo simplemente hacemos que llame una vez y se quede en
espera indefinidamente.

void loop()
{
llamar(); //Realiza la llamada
while (1);
}

Aquí os dejamos el programa completo: llamar.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


ENVIAR SMS

La programación para enviar un SMS va a ser idéntica, pero crearemos otra función que se encargará de mandar los comandos AT para enviar el
SMS.

Primero usaremos el comando AT+CMGF=1\r para indicarle al módulo GPRS que vamos a mandar un mensaje, y a continuación introducimos el
número al que va dirigido con el comando AT+CMGS = “XXXXXXXXX”.

Una vez hecho esto simplemente le enviamos el contenido del mensaje y lo finalizamos con el caracter ^Z. La función quedaría así:

void mensaje_sms()
{
Serial.println("Enviando SMS...");
SIM900.print("AT+CMGF=1\r"); //Configura el modo texto para enviar o recibir mensajes
delay(1000);
SIM900.println("AT+CMGS=\"XXXXXXXXX\""); //Numero al que vamos a enviar el mensaje
delay(1000);
SIM900.println("SMS enviado desde un Arduino. Saludos de Prometec."); // Texto del SMS
delay(100);
SIM900.println((char)26); //Comando de finalización ^Z
delay(100);
SIM900.println();
delay(5000); // Esperamos un tiempo para que envíe el SMS
Serial.println("SMS enviado");
}

Podéis descargar el programa completo aquí: mandar_sms.


PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
RESUMEN DE LA SESIÓN

En esta sesión hemos aprendido varias cosas importantes:

  Podemos hacer que nuestro Arduino se comporte como un teléfono móvil.

 Cómo conectar y configurar la tarjeta GPRS.

 A enviar llamadas y SMS a cualquier teléfono.

Anterior Índice tutoriales GSM/GPRS Siguiente


« COMENTARIOS MÁS VIEJOS

(217) Comments

Esteban 13 Ene 2018


Hola amigo, te comento por descuido he perdido la antena del modulo, y quisiera saber si al utilizar una antena de router
funcionara igual? Gracias por la respuesta.
Reply

Ivan 15 Ene 2018


Hola Esteban, supongo que sí, que te debería servir cualquier tipo de antena que te encaje con el conector. Un saludo.

Reply

stalin 30 Dic 2017


hola… muy buena la explicacion, pero une pregunta… una vez q ye tengo cargado el programa en el arduino y todas las
conexiones bien hechas, que o como hago para hacer la llamada ????? gracias
Reply

Ivan 02 Ene 2018


Hola Stalin, la llamada la debería hacer por si mismo al cargar el programa. Si quieres enviarlas cuando quieras echa un
ojo a este otro programa: https://www.prometec.net/gprs-enviar-recibir-llamadas-sms/
Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Stalin 07 Ene 2018
hola Ivan… solo una pregunta …. cuando introduzco el numero de telefono al q deseo llamar como debo
ponerlo??? pongo el codigo del pais primero o no???
Reply

Ivan 09 Ene 2018


En España, al menos, no es necesario meter el código del país delante. Un saludo.

Reply

Sergio 16 Dic 2017


Hola, ¿los pines A4 y A5 los utiliza esta tarjeta? Intento conectar mediante SLA y SCL un lcd, y no me fucniona
correctamente. En cambio si pruebo con un programa con solamente la parte del lcd no hay problema.
Reply
Gracias.

Saludos.

Ivan 19 Dic 2017


Hola Sergio, no utiliza esos pines para nada… debería de funcionar. A ver si tengo un rato para probarlo. Un saludo.

Reply

Sergio 03 Ene 2018


Hola, la verdad es que no sé porque no funciona cuando pincho la tarjeta en el arduino. Sin pincharla, el
programa me funciona correctamente, pero en cuanto la pincho ya no me funciona. Es algo raro la verdad.
Reply
Gracias!!

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 08 Ene 2018
Puede ser que la alimentación no sea suficiente. Cómo las estás alimentando?

Reply

Nahuel 04 Dic 2017


Muchas gracias por tu respuesta ivan, la cito aqui:
“3) En teoría para recibir llamadas y escucharlas vale con que estés conectado a la red. No te haría falta más código que
Reply el necesario para eso. Yo he probado y he podido escuchar bien. Igual es una tontería, pero ¿puede ser que hayas
enchufado el micrófono donde los cascos al revés?”

Te cuento, tengo el microfono conectado a la salida que dice mic, y el auricular al otro, los inverti de lugar para ver que
tal y nada, el unico momento en el que se escucha algo(en el movil desde el cual llamo) es el ruido que crea la placa al
mover el micro o el auricular, será que la configuracion de red de argentina es la que no permite que se escuche nada?
porque por lo que estuve investigando varios de aqui les pasa lo mismo, tenes idea como seguir mi investigacion para
solucionarlo?

Ivan 06 Dic 2017


hola Nahuel, no sé cómo ayudarte porque yo no he tenido ningún problema. A ver si alguien puede echarte una
mano…
Reply

Kelson 01 Dic 2017


Diego gracias, muy bueno su tutorial por a ca todo va bien…
una duda apenas:
Reply en la Shield cual de los pines es el RX (7 o 8) y cual es el TX (7 o 8)
Gracias amigo

Ivan 04 Dic 2017


Hola Kelson en el shield el 7 es Tx y el 8 Rx. Un saludo.

Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ximena Hernandez 29 Nov 2017
Hola, tengo una duda.
¿Este módulo se puede programar para enviar el mensaje a varios números? ¿O solo a uno?
Reply Gracias.

Ivan 30 Nov 2017


Hola Ximena, puedes crear un bucle for que vaya recorriendo un array donde tengas guardados los números y que
vaya enviando los mensajes uno detrás de otro.Un saludo.
Reply

cristian 25 Nov 2017


¿cuanto voltaje de alimentasion auxiliar soporta el gprs sim 900 por el jack? tengo fuente switching de 12v 4a puedo
conectarla directamente al shield sim 900 por el jack, tengo el mismo que en las imagenes comentadas pero no dicen
Reply nada del voltaje de operacion en algunos foros me dicen 5v y en otro que soporta hasta 20v no quiero dañar el gsm sim
900. Por favor me dorian decir con que voltaje alimentarlo. Gracias.

Ivan 27 Nov 2017


Hola Cristian, la verdad es que no encuentro información concreta y fiable del voltaje máximo que puede aceptar. Yo
puedo decirte que uso un alimentador de 9V y 1a, y con eso me funciona estupendamente. Un saludo.
Reply

Juan 25 Nov 2017


Hola, he seguido las instrucciones, las conexiones están iguales y mi módulo si se conecta a la red pero el numero al que
quiero enviar el mensaje no recibe nada. No llama, no envía el mensaje. Cómo puedo comprobar si el módulo está
Reply funcionando correctamente, sin necesidad del FTDI?

Ivan 27 Nov 2017


Hola JUan, lo más fácil es que llames tu al módulo, si aparece RING en el monitor serie es que está conectado a la
red, sino es que hay algún fallo. Un saludo.
Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Nahuel 23 Nov 2017
Hola! tengo exactamente el mismo shield arduino que muestran en el tutorial y tengo varias dudas/problemas que espero
puedan ayudarme,
Reply
1)Tienen el datasheet de este shield especifico?

2)Que version de firmware tiene el suyo y como podria averiguar la version del mio?

3)Yo estoy haciendo que el sim este recibiendo llamadas, el sim contesta mis llamadas, con eso bien, el unico problema
es que durante la llamada no se escucha nada, (tengo conectados unos auriculares y un microfono de pc conectados al
sim900 que funcionan correctamente y probe con varios mas para cerciorarme), no se escucha nada desde el telefono
que llama, ni desde el sim900, cual podria ser mi problema?

Les agradezco de antemano y disculpen por tantas preguntas, pero son unos de los pocos de habla hispana que saben
sobre estas cosas y ademas responden, por eso los sigo jaja

Ivan 27 Nov 2017


Hola Nahuel, a ver si te puedo ayudar en algo:

Reply 1) El datasheet del chip lo encontrarás fácilmente, pero el del shield yo al menos no lo encuentro.
2) No lo he probado así que no sé decirte. Veo por ahí que ATI sirve para obtener información del shield. Pruébalo a
ver…
3) En teoría para recibir llamadas y escucharlas vale con que estés conectado a la red. No te haría falta más código
que el necesario para eso. Yo he probado y he podido escuchar bien. Igual es una tontería, pero ¿puede ser que hayas
enchufado el micrófono donde los cascos al revés?

Cristian 13 Nov 2017


Que alimentasion sopota fuente switching 12v 4a o 9v .

Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 15 Nov 2017
En teoría hasta 12 pero yo ya he frito algún Arduino, así que te recomiendo a 9V.

Reply

Diego 09 Nov 2017


Hola Ivan,si tiene tono al hacer la llamada pero no aparece nada en el monitor,revise las conexiones y todo esta bien,
que podria ser??
Reply Me puedes ayudar esque me urge para mi proyecto final de Electronica,si mejor me puedes ayudar por el correo o
ponernos en contacto te lo agradeceria!!

Nahuel 23 Nov 2017


Puede ser que te este fallando la comunicacion serial, revisa que el monitor serial este funcionando a la misma
velocidad que con la que configuraste el sim
Reply

Fernando 06 Nov 2017


Una pregunta: para montar el chip necesitamos una placa del tipo “Gsm Gprs Sim800l Sim800 Arduino”? y conectarla con
el Arduino UNO mediante el TX SERIAL y el RX SERIAL?
Reply

Ivan 08 Nov 2017


Sí, aunque este tutorial está hecho concretamente con la SIM900. Un saludo.

Reply

Diego 02 Nov 2017


Gracias Ivan,ya lo probe, llame pero no sale nada en el monitor!! Que es lo que puede tener mal?? en que version del
arduino lo pruebo ya que lo probe ne varias versiones y solo me funciono en la version 1.5.6-r2, este es el codigo:
Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


#include

SoftwareSerial SIM900(7, 8); // Configura el puerto serial para el SIM900

void setup()
{
SIM900.begin(19200); //Configura velocidad del puerto serie para el SIM900
Serial.begin(19200); //Configura velocidad del puerto serie del Arduino
Serial.println(“OK”);
delay (1000);
SIM900.println(“AT+CPIN=\”1111\””); //Comando AT para introducir el PIN de la tarjeta
delay(25000); //Tiempo para que encuentre una RED
}

void mensaje_sms()
{
Serial.println(“Enviando SMS…”);
SIM900.print(“AT+CMGF=1\r”); //Comando AT para mandar un SMS
delay(1000);
SIM900.println(“AT+CMGS=\”54267957\””); //Numero al que vamos a enviar el mensaje
delay(1000);
SIM900.println(“SMS enviado desde un Arduino. Saludos de prometec.”);// Texto del SMS
delay(100);
SIM900.println((char)26);//Comando de finalizacion ^Z
delay(100);
SIM900.println();
delay(5000); // Esperamos un tiempo para que envíe el SMS
Serial.println(“SMS enviado”);
}

void loop()
{
mensaje_sms(); //Envia SMS
while (1); // Espera por tiempo indefinido
}

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 06 Nov 2017
Hola Diego, cuando llamas te da tono o no? Si no te da tono es que o el pin de la tarjeta está mal, la alimentación es
insuficiente o no encuentra la red móvil. Si te da tono pero no aparece nada en el monitor lo más probable es que sea
Reply algún problema en la conexión o en la velocidad del monitor serie. En ese caso revisa bien el cableado, y no te olvides
de unir las tierras de Arduino y GPRS, y asegúrate de que la velocidad del monitor serie esté puesta en 19200 baudios.
Un saludo.

Diego 01 Nov 2017


Buenas,yo lo hice todo al pie de la letra,y la cosa es es que no me envia el mensaje,y muestra de que se esta enviando
el mensaje y de que se envio pero no resivo nada,pense que era el saldo pero si tiene,que puede ser???
Reply

Ivan 02 Nov 2017


Hola Diego, prueba a llaamr a la SIM del GPRS, para ver si está todo correcto. Debería de darte tono y salir RING en
el monitor serie.
Reply

GIVE A REPLY

Message

Name (required) Email (required)

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


URL

Post comment
WordPress
WordPress Anti-Spam
Anti-Spam by
by WP-SpamShield
WP-SpamShield

Copyright Prometec

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


TIENDA ARDUINO RASPBERRY PI IMPRESORA 3D FORO CONTACTO

MÓDULO GSM/GPRS: RECIBIR LLAMADAS Y SMS


Seguimos trabajando con el módulo GPRS

Home 
 MÓDULO GSM/GPRS: Recibir Llamadas Y SMS

OBJETIVOS

  Recibir llamadas y SMS.

 Identificar quién nos llama.

 Mostrar los SMS en el monitor serie.

MATERIAL REQUERIDO.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


29.00€

9.60€ + + IVA
IVA

ARDUINO GSM GPRS


UNO REV 3 ARDUINO
SHIELD
 Añadir al
 Añadir al
carrito
carrito

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


2.00€ + 4.80€ +
IVA IVA

CABLES
DUPONT
MACHO- CARGADOR
MACHO ARDUINO
Añadir al
Añadir al


carrito
carrito

RECIBIR LLAMADAS

Ya vimos en la sesión anterior cómo conectar y poner en marcha el módulo GPRS, y si alguien probó en ese momento a llamar a la tarjeta que
tenemos colocada en el SIM900, habrá visto como da tono normalmente.

Sin embargo no habrá visto nada que indique que se está recibiendo una llamada, aunque si nos fijamos veremos como uno de los LEDs de la tarjeta
se apaga mientras se recibe. Así que lo que vamos a hacer es que nos avise mediante el monitor serie cuando las reciba.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


En principio la única diferencia hasta llegar al loop va a ser que declararemos una variable global de tipo char para guardar los caracteres que nos
lleguen del SIM900.

char incoming_char = 0; //Variable para guardar los caracteres que envía el SIM900

En el loop simplemente comprobaremos que se están enviando caracteres desde el SIM900 y los iremos mostrando por el monitor serie.

void loop()
{
if (SIM900.available() > 0)
{
incoming_char = SIM900.read(); //Guardamos el caracter que llega desde el SIM900
Serial.print(incoming_char); //Mostramos el caracter en el monitor serie
}
}

Si ahora probáis a hacer una llamada al número que tengáis en la tarjeta del SIM900 veréis que en el monitor serie mostrará la palabra “RING” una
vez por cada tono, y terminará con un “NO CARRIER”.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Pero muchas veces puede sernos muy útil saber quién nos está llamando para, por ejemplo, realizar una acción sólo si nos llama un número
determinado (cosa que veremos en la próxima sesión) . Para ello utilizaremos el comando “AT+CLIP=1\r”. Si queremos desactivarlo sólo tenemos que
volver a ponerlo a 0. Y con esto ya tendríamos el programa completo para recibir llamadas.

#include <SoftwareSerial.h>
SoftwareSerial SIM900(7, 8); // 10 y 11 para el Arduino Mega. Configura el puerto serie para el SIM900

char incoming_char = 0; //Variable para guardar los caracteres que envia el SIM900

void setup()
{
//digitalWrite(9, HIGH); // Descomentar para activar la alimentación de la tarjeta por Software
//delay(1000);
//digitalWrite(9, LOW);
delay (5000); //Nos damos un tiempo para encender el GPRS y la alimentación de la tarjeta
SIM900.begin(19200); //Configura velocidad del puerto serie para el SIM900
Serial.begin(19200); //Configura velocidad del puerto serie del Arduino
Serial.println("OK");
delay (1000);
SIM900.println("AT + CPIN = \"XXXX\""); //Comando AT para introducir el PIN de la tarjeta
delay(25000); //Tiempo para que encuentre una RED
Serial.println("PIN OK");
SIM900.print("AT+CLIP=1\r"); //Activamos la identificación de llamada.
delay(1000);
}

void loop()
{
if (SIM900.available() > 0)
{
incoming_char = SIM900.read(); //Guardamos el caracter que llega desde el SIM900
Serial.print(incoming_char); //Mostramos el caracter en el monitor serie
}
}

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


RECIBIR SMS

Para recibir también correctamente los SMS, sólo tenemos que incluir un par de comandos AT más en el setup. Uno ya lo conocemos de la sesión
anterior, que configura el módulo para poder enviar y recibir SMS “AT+CMGF=1\r”. Y también incluiremos el comando “AT+CNMI=2,2,0,0,0\r” que lo
configura para que nos envíe por el puerto serie los SMS que nos lleguen.

Así el programa completo para recibir llamadas y SMS quedaría así:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


#include <SoftwareSerial.h>
SoftwareSerial SIM900(7, 8); // Configura el puerto serial para el SIM900

char incoming_char = 0; //Variable para guardar los caracteres que envía el SIM900

void setup()
{
//digitalWrite(9, HIGH); // Descomentar para activar la alimentación de la tarjeta por Software
//delay(1000);
//digitalWrite(9, LOW);
delay (5000); // Nos damos un tiempo para encender el GPRS y la alimentación de la tarjeta
SIM900.begin(19200); //Configura velocidad del puerto serie para el SIM900
Serial.begin(19200); //Configura velocidad del puerto serie del Arduino
Serial.println("OK");
delay (1000);
SIM900.println("AT + CPIN = \"XXXX\""); //Comando AT para introducir el PIN de la tarjeta
delay(25000); //Tiempo para que encuentre una RED
Serial.println("PIN OK");
SIM900.print("AT+CLIP=1\r"); // Activamos la identificación de llamadas
delay(1000);
SIM900.print("AT+CMGF=1\r"); //Configura el modo texto para enviar o recibir mensajes
delay(1000);
SIM900.print("AT+CNMI=2,2,0,0,0\r"); //Configuramos el módulo para que nos muestre los SMS recibidos por comunicacion serie
delay(1000);
}

void loop()
{
if (SIM900.available() > 0)
{
incoming_char = SIM900.read(); //Guardamos el caracter que llega desde el SIM900
Serial.print(incoming_char); //Mostramos el caracter en el monitor serie
}
}

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Y cuando recibamos un mensaje se nos mostrará por el monitor serie tanto el número desde el que se envía como el contenido del SMS, con la
fecha y hora del envío. Y si nos fijamos, al contrario que en las llamadas, el número vendrá con el prefijo internacional, en mi caso el +34 que
pertenece a España.

Y como siempre, podéis descargar el programa completo aquí: recibir_llamadas_y_SMS.

En la siguiente sesión utilizaremos lo que hemos aprendido para que nuestro Arduino se ponga en contacto con nosotros si fuera necesario, y a que
realice ciertas órdenes utilizando llamadas y SMS, y asegurándonos de que sólo responda ante nosotros.

RESUMEN DE LA SESIÓN

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


En esta sesión hemos aprendido varias cosas importantes:

  Cómo recibir llamadas y SMS y mostrarlas por el puerto serie.

 A identificar quién nos está llamando.

 Ya sabemos recibir y enviar llamadas y SMS.

Anterior Índice tutoriales GSM/GPRS Siguiente

(44) Comments

Jesus 28 Dic 2017


Hola, yo estoy usando el SIM900 con el Arduino Leonardo, y el envío de mensaje y la realización de llamadas funciona
OK, el problema que tengo es muy similar a los comentarios anteriores ya que a la hora de la recepcion de llamadas y
Reply mensajes no recibo información en el monitor serie, y el tono de llamada si lo da, sera que debo usar el Arduino UNO, o
hay alguna configuración especial para el Leonado, gracias de antemano, saludos.

Ivan 08 Ene 2018


Pues la verdad es que debería ser igual, aunque mi experiencia con los leonardo está llena de situaciones inesperadas.
De todas formas a ver si saco un rato y reviso el tutorial por si acaso. Un saludo.
Reply

Jesús 21 Jul 2017


PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Buenas! Tengo un duda, ‘el SIM800L se programa igual que SIM900?, o sea, ¿el código explicado acá me serviría igual
para el SIM800L, o tendría que realizar algún cambio?

Reply

Alex barron 24 Jul 2017


Jesus, supiste cómo enviar y recibir sms con el 800l, tengo la mism duda…

Reply

Jesús 31 Jul 2017


Pues al parecer se programan igual, solo que el sim800l utiliza una mayor velocidad de comunicación, pero de
resto es lo mismo creo. Leí por ahí que como ambos módulos utilizan los mismo comandos AT, se programan
Reply igual.

Antonio 05 Jul 2017


Hola, buenas a todos

Reply En mi caso, recibo las llamadas, pero no recibo los SMS. La consola al principio me escupe esto:

OK
PIN OK
AT+CPIN=”****”

OK
AT+CLIP=1

OK
AT+CMGF=1

OK
AT+CNMI=2

Es raro que la última instrucción no la muestre completamente?


PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Ivan 08 Jul 2017
Hola Antonio, prueba con este otro programa que es un poco más completo a ver si te funciona. Un saludo.

Reply

Oscar 19 Jun 2017


Muchas gracias por el tutorial, me ha servido mucho para un proyecto que estoy realizando.

Reply Solo quería consultar, como puedo contestar una llamada que le haga al módulo y entablar una conversación estable
entre mi telefóno y el sim900? necesito que el módulo responda automáticamente y mantenga la llamada hasta que
desde el telefóno decida cortarla.

Espero puedan ayudarme con esta información, muchas gracias de antemano.

Ivan 19 Jun 2017


Hola ÓscarPara descolgar leo por ahí que es el comando “ATA” aunque no lo he probado. Si lo pruebas ya nos
contarás si funciona. Un saludo.
Reply

Pablo Ibaceta 11 May 2017


Buenos días, en la recepción de mensajes tengo un problema, cuando le envío al modulo SMS que contengan un acento
por ejemplo toda la trama pasa a codificarse en hexadecimal mostrado en ascii por supuesto y me es inutil toda la
Reply trama.. sabes de algún comando para que esto no suceda? Saludos

Ivan 12 May 2017


Hola Pablo, pues no lo había pensado, suponía que te saldría un caracter raro en la letra con acento y el resto bien. A
ver si le puedo echar un ojo. UN saludo.
Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Andres Suarez 10 May 2017
3. Cordial saludo desde Colombia! primeramente gracias por la excelente y detallada explicación. De verdad que valoro la
información que estoy viendo en tus tutoriales, porque es muy clara y concreta. Por otro lado, yo estoy usando un
Reply ESP8266 Versión 12E programado con el IDE de Arduino, además estoy usando una SIM808 que No viene en la Shield
( https://encrypted-tbn0.gstatic.com/images?
q=tbn:ANd9GcQuE5SBGPzEKQhF17cYLIRspw33ky6ebtd9PxptOmk85VWu22pO ). Hasta ahora no he visto tutoriales que
trabajen solo con este módulo, pero hasta ahora me he sabido defender bien. Este tutorial me FUNCIONÓ casi bien,
pero he visto que es muy probable que los inconvenientes que a veces tengo no sean por el código, ni si quiera se si los
problemas que tengo son con mi módulo. El hecho es que ya hice un programa funcional y que hala perfecto para enviar
desde un celular un mensaje de texto y que en el código de Arduino al recibir ese mensaje permita que la SIM808 lea las
coordenadas de GPS y me envíe por medio de un mensaje de texto la longitud y la latitud.
Básicamente los problemas que pude evadir, pero que deseo saber el porqué, es que a veces la SIM de la nada, pierde la
conexión a la red GPRS, es decir que el led que ya parpadeaba cada 4 segundos, de un momento a otro después de que
probé el código de este ejemplo, comienza a parpadear más de seguido y la llamada se cae y no puedo volver a llamar
porque no vuelve a coger la señal, lo único que hasta ahora puedo hacer es desconectar la alimentación de la SIM808 y
volverla a conectar, y esperar que milagrosamente algunas veces si se conecte y otras veces no. Siguiendo paso a paso
este tutorial, si logré recibir el mensaje RING en el monitor serial, además que se visualizaba el numero del que estaba
llamando (tal cual como debería suceder), pero al cuarto tono de llamada, la SIM808 pierde señal. si hay alguien que
sepa porque sucede esto, o que esté trabajando con un módulo igual al mío, sería de gran ayuda intercambiar ideas y
opiniones. Gracias por quien me pueda ayudar!

Ivan 11 May 2017


Hola Andrés, esos problemas suelen deberse a la que la alimentación del módulo es insuficiente. En mi caso alimento
por separado el módulo y el arduino, y el módulo con un alimentador de 9V y 1A. Un saludo
Reply

Fernando 29 Mar 2017


Hola Andrew, hice todo tal cual describís con mi arduino UNO. Lo único que cambie es que enciendo el gprs con el PIN 2
en lugar del 9. Para mandar msjs me funciona perfectamente, pero al recibir, no importa que le mande recibe el caracter:
Reply “ÿ”.
Sabrás que estoy haciendo mal? Puede ser que se queme solo el Tx del Módulo? El modulo es idéntico al tuyo.

Saludos!

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 30 Mar 2017
Hola Fernando, pues me parecería raro que se te haya quemado ese pin. Parece un problema de velocidad de
comunicación, pero es muy raro si te envía los mensajes correctamente. El programa que envía y recibe SMS es el
Reply mismo?

V 03 Feb 2017
Gracias por tu aporte es muy útil, quería hacer una consulta ! Estoy usando el SIM900 para activar o desactivar algo ,
cuando reciba un SMS , sé que debo usar el comando AT+ CNMI 2,2,0,0,0 , al realizarlo funcionaba correctamente y en
Reply el serial podía ver el texto del SMS q recibía el módulo pero de pronto , ya no recibe nada ! Ni ejecuta ninguna accion!
Probé el envío de mensajes y lo realiza correctamente pero no la recepción , es posible q se haya averiado únicamente
esa opción? Consideras q algo este mal en el código ? Porfa ayúdame

Ivan 04 Feb 2017


Hola Vane, cuando le envías comandos AT recibes algo por el puerto serie? Puedes probar con un programa facilillo
para enviarle los comandos a mano con el monitor serie y ver si al enviarle por ejemplo “AT” te devuelve “OK”. Si sí te
Reply devuelve el problema no estaría en la comunicación GPRS/ARduino sino que sería un problema en el GPRS. Pruébalo y
me cuentas a ver.

Miguel Angel 29 Dic 2016


Disculpa, hay alguna manera de mandar el numero de quien llama o manda el msn a una variable?

Reply

Ivan 29 Dic 2016


Hola Miguel Ángel, pues podrías guardar todo lo que te llega por el puerto serie en una variable y despúes usar un
idexof para encontrar el número de quien te ha llamado y mandarlo a una variable. Un saludo.
Reply

Miguel Angel 29 Dic 2016


muchas gracias, mira soy nuevo en esto, tendras un ejemplo de cómo hacerlo, la verdad ya busqué y no

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Reply encuentro cómo hacerlo.

Ivan 30 Dic 2016


En esta sesión hacemos algo parecido https://www.prometec.net/gprs-controlar-led/

Reply

Miguel Angel 02 Ene 2017


Muchas gracias!, me sirvió de mucho!

Juan 11 Dic 2016


Cuando se usa un puerto serie en lugar de los piner 7 y 8 o 9 y 10 (en mi caso en un mega uso los pines 14 y 15), la
escucha del puerto serie no funciona. Esto se puede arreglar no usando la librería softwareserial (no es necesaria y no
Reply funciona bien sobre pines serial reales). Se debe quitar el include y la línea con SoftwareSerial SIM900(X,Y);. Para no
tener que cambiar el código basta con meter un “#define SIM900 Serial3”. Con esto el código funciona

admin 11 Dic 2016


Asi es Juan,

Reply Si usas un Mega no conviene que utilices librerias para manejar puertos serie.

Solo la usabamos con el arduino UNO para no cortar la posibilidad de actualizar el programa

Alguien 05 Dic 2016


Buenos dias,

Reply Estoy haciendo un proyecto con la placa de “Arduino Mega 2560” y una “SIM900”. He hecho el mismo programa que nos
habeis mostrado y cuando envio el mensaje desde mi movil, en la pantalla me aparece, “OK”, “PIN OK” y ya esta, no me
aparece lo siguiente, que es desde que numero se envia el mensaje y el mensaje mismo.
He conectado dos cables por salida, uno al RX1 y el otro al TX1, como me ha dicho mi profesor, pero no se porque el

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


mensaje no se envia del todo, cual podria ser el fallo?

Saludos,

Ivan 05 Dic 2016


Nuestro programa utiliza la librería SoftwareSerial porque los Arduino Uno sólo tienen un puerto serie. De todas formas
también puedes usarla con el MEGA (está indicado en la sesión).
Reply
Pero si vas a utilizar el puerto serie número 1 del MEGA (tiene varios) no hace falta usar esa librería, simplemente
utilizarias la instrucción Serial1.xxxx dodnde nosotros usamos SIM900.xxxx, y conectar correctamente el MEGA y el
GPRS. Un saludo.

Alberto 11 Ago 2016


¡Hola!
¡¡¡¡¡¡¡Funciona!!!!!!!.
Reply Cambiando en Arduino Mega los pines 7 por el 10 y 8 por el 11 funciona tal y como indica el tutorial.

Muchas gracias Iván.


Salu2.

Ivan 11 Ago 2016


Hola Alberto, me alegro que lo hayamnos solucionado! Me lo apunto y en cuanto puedo añado la explicación al tutorial.
Un saludote!
Reply

Alberto 10 Ago 2016


Hola;
Agradecer de antemano la labor de los tutoriales pues nos instruyen de manera clara y sencilla en el universo Arduino.
Reply Comentaros que yo tambien tengo el mismo problema. Utilizo un Arduino Mega (ya que no logro subir y compilar el
programa en un arduino UNO, pero eso es otro caso a parte) y el mismo GPRS que el tutorial, he probado a encender un
LED dentro de la condición “if (SIM900.available() > 0)” y no se enciende sin embargo si que lo hace fuera de esta
condición, por lo que deduzco que el problema está en la recepciónde datos del GPRS al Arduino Mega. Probaré la
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
solución que propone Iván y os comento algo.

Salu2!.

Ivan 10 Ago 2016


Hola Alberto, la cuestión es que por lo visto el pin 8 del Arduino Mega no se puede usar con la librería Sofware Serial.
y claro como no recibe ningún dato no entra nunca en ese bucle, por lo que no puedes encender el LED dentro de él.
Reply
Prueba a usar los pines 10 y 11 del Arduino como comentaba a ver si te funciona. Un saludote!

Gabriel 09 Ago 2016


Hola, gracias por el tutorial, tengo el mismo problema que Andrew, la diferencia es que yo lo hago con hardwareSerial del
arduino mega, y uso la misma shield del tutorial, a mi tampoco me muestra el RING y los mensajes que envío desde el
Reply celular, como te aparece en el tutorial en el monitor serial, que puede ser?; hay que configurar algo mas en el shield
para recibir llamadas y mensajes? y tengo una duda si deseo programar una hora predeterminada para enviar mensajes
con la shield, o cada cierto tiempo, lo haría con un delay o un reloj? o existe un comando AT?. Gracias por la
información y el tiempo brindado.

Ivan 09 Ago 2016


Hola Gabriel, prueba la última opción que le he dado a Andrew a ver si te funciona, yo es que ahora mismo no tengo
un Mega para probarlo.
Reply
Por otra parte, la solución fácil que se me ocurre es utilizar un RTC para obtener la hora correcta y enviar el mensaje
cuando quieras. Tienes aquí una sesión sobre los RTC: https://www.prometec.net/relojes-rtc/

Un saludote!

Andrew 09 Ago 2016


Buenos días Ivan,
Esta es la shield que estoy utilizando: https://drive.google.com/open?id=1VBF2M5rVUryQtoml0c7Lwh_F1p2QygMZ8g
Reply Cuando la conecto al Mega, como te dije, funcina enciando y recibiendo, por que en el movil desde el que mando el
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
mensaje a la shield me indica “entregado”.
Lo que no tengo nada pero que nada claro es como hacer eso de los pines que me indicas. Es decir, ¿como hago si el 8
no es el adecuado?
Lamento tanta molestia, pero llevo meses con este tema hasta que vi estos tutoriales y la verdad, son de mucha ayuda,
pero en este punto estoy CIEGO.
Gracias

Ivan 09 Ago 2016


Hola Andrew, no es ninguna molestia, estamos para ayudar. Creo que el error puede venir por lo siguiente. Según he
leído por ahí dice que el Arduino Mega es compatible con la librería Software Serial en todos los pines, pero sin
Reply embargo al leer la documentación de la librería no todos lo son, y entre ellos no está el pin 8.

Prueba a utilizar los pines 10 y 11, es decir, conecta los pines 7 y 8 del GPRS a los pines 10 y 11 de Arduino Mega, y
cambia esta instrucción SoftwareSerial SIM900(7, 8); por esta SoftwareSerial SIM900(10, 11); y me cuentas a ver.

Y si no ahora que me he dado cuenta, el Arduino Mega tiene varios puertos serie, podrías utilizar cualquiera que no
sea el 1 (0 Rx y 1 Tx), aunque no se si estás familiarizado con esto.

Prueba lo que te comento primero y si no funciona probamos otras cosas. Un saludote!

Andrew 10 Ago 2016


En cuanto a lo de los Pines 7 y 8 del GPRS . . . no tengo ni idea de cuales son , por que como te mostré en
la imagen (https://drive.google.com/open?id=1VBF2M5rVUryQtoml0c7Lwh_F1p2QygMZ8g) no están
Reply numerados…¿Serán los mismos que coinciden con el 7 y 8 del Mega?

“Y si no ahora que me he dado cuenta, el Arduino Mega tiene varios puertos serie, podrías utilizar cualquiera
que no sea el 1 (0 Rx y 1 Tx), aunque no se si estás familiarizado con esto.” -> Pues no. No lo estoy y
realmente me gustaría saber a que te refieres. En la placa tengo puestos los conectores RX y TX en SWSerial.
¿?

Ivan 10 Ago 2016


Hola Andrew, a ver los pines 7 y 8 del GPRS son los que tenemos marcados en el tutorial que se
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
conectan al 7 y 8 del Arduino. En tu foto de los de abajo el que setá junto antesy el que esta justo
después de la pequeña separación que hay. Es decir el primero por la izquierda sería el 0, el
siguiente el 1… y así hasta el 7 y 8.
Reply
En cuanto a la otra cuestión: usamos la libreria software serial para simular un puerto serie usando
dos pines que no sean el 0 y el 1 del Arduino uno, que son los encargados de realizar la
comunicación serie. El Mega tiene más puertos serie (los que vienen marcados con Rx y Tx) pero
de momento vamos a dejar esto. Pruebea a ver si te funciona conectando com o te digo los pines
7 y 8 del GPRS a los pines 10 y 11 del Mega y cambiando la instrucción que te comentaba y me
cuentas a ver.

Un saludote!

Andrew 11 Ago 2016


FUNCIONA OK!!!
Gracias Ivan por tu paciencia.

Andrew 11 Ago 2016


Lo que sucede ahora es que al enviar los mandatos al grps el monitor los muestra
pero muy lento, es decir, al enviarle el SIM900.print(“AT+CLIP=1\r”); en el monitor se
muestra AT+CLIP=1 a razón de 2 segundos para mostrar cada letra.
Pero si, consigue mostrar mensaje.

Ivan 11 Ago 2016


Hola Andrew! Bueno al menos algo hemos avanzado jejeje. Pues la verdad es que no
se me ocurre que puede ser. Estás usando el programa que tenemos subido en la
sesiÓn Si no es así mira que no tengas algún delay dentro del loop o de alguna de las
funciones que pueda estar haciendo eso.

Un saludote.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Andrew 11 Ago 2016
Solucionado.
Le he quitado la linea * SIM900.print(“AT+CNMI=2,2,0,0,0\r”); * y ahora no tiene ese
retardo del que te hablaba, me muestra mensajes y realiza llamadas.

Saludones!

Andrew 08 Ago 2016


Hola. Muy buenas explicaciones. Enhorabuena.
Utilizo arduino Mega 2560 y una Sim900.
Reply Todo lo anterior a este ejemplo funciona perfectamente.
Este último ejemplo, al compilarlo, es cierto que recibe llamadas, por que se oye el tono y si descuelgo puedo hablar y
comunicar (utilizo auriculares y mic conectado a la sim900).
El caso es que no muestra en el monitor los RING ni los mensajes que se le envien, y si que los recibe por que en el
teléfono donde los envio tengo activado “recibir mensaje de recepción”.
No se que puede pasar, la verdad.

Ivan 08 Ago 2016


Hola Andrew, lo primero supongo que tendrás bien seleccionada la velocidad del monitor serie correctamente a 19200
baudios.
Reply
En caso de que así sea, ¿en la sesión anterior te realizaba correctamente las llamadas y los SMS, no? En ese caso el
problema estaría en la recepción de los mensajes desde el GPRS al Arduino, que se realiza usando el pin 8.

Yo no he probado a usarlo con un Mega, pero no debería haber problema en teoría. De todas formas cuando me
contestes eso seguimos mirando a ver. La programación la he comprobado por si acaso y funciona correctamente
(usando un UNO). Un saludo.

Andrew 08 Ago 2016


Cierto, las llamadas y los SMS los envia OK. El prolema es la recepción.
Me pierdo cuando me indicas lo del Pin 8, supongo que te refieres al Pin 8 del ¿GPRS?
Reply
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Ivan 08 Ago 2016
Hola Andrew, en teoría el shield utiliza los pines 7 y 8 del shield y del Arduino para comunicarse
entre sí. Uno para enviar datos y otro para recibir. Esos datos luego los vemos nosotros por el
Reply monitor serie que utiliza los pines 0 y 1. Creo que me he equivocado y en realidad es el pin 7 el
que envía los datos que le llegan al shield hacia Arduino.

Si envías los SMS y las llamadas correctamente significa que Arduino es capaz de enviarle órdenes
al GPRS, pero parece que en tu caso no recibe los datos que deberían llegarle desde el GPRS.

¿Estás utilizando el mismo módulo GPRS que he usado yo para la sesión? Comprueba también
que tengas bien puesto los bridges para usar los pines 7 y 8 y correctamente enchufados los
cables, no vaya a ser que esté mal colocado alguno. un saludote!

GIVE A REPLY

Message

Name (required) Email (required)

URL

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Post comment
WordPress
WordPress Anti-Spam
Anti-Spam by
by WP-SpamShield
WP-SpamShield

Copyright Prometec

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


TIENDA ARDUINO RASPBERRY PI IMPRESORA 3D FORO CONTACTO

ENVIAR Y RECIBIR LLAMADAS Y SMS


Optimizando el funcionamiento del módulo GPRS SIM900

Home 
 ENVIAR Y RECIBIR LLAMADAS Y SMS

OBJETIVOS

  Optimizar la programación del GPRS.

 Dotarlo de mayor autonomía.

 Crear una función para enviar los comandos AT

 Agrupar el envío y la recepción de llamadas y SMS en un sólo programa.

MATERIAL REQUERIDO.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


29.00€

9.60€ + + IVA
IVA

ARDUINO GSM GPRS


UNO REV 3 ARDUINO
SHIELD
 Añadir al
 Añadir al
carrito
carrito

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


2.00€ + 4.80€ +
IVA IVA

CABLES
DUPONT
MACHO- CARGADOR
MACHO ARDUINO
Añadir al
Añadir al


carrito
carrito

OPTIMIZAR EL PROGRAMA

En las sesiones anteriores dedicadas al GRPS hemos visto cómo conectarlo correctamente y los comandos AT necesarios para enviar y recibir
llamadas y SMS de una forma bastante sencilla. Sin embargo, para el que se haya fijado, aunque los comandos AT se envían correctamente y el
módulo cumple la función que buscamos, hay algunas cosillas que se pueden mejorar.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Y es que al parecer la librería SoftwareSerial no se lleva del todo bien con el módulo GPRS y los comandos AT; y al enviar simplemente estos
comandos con función SIM900.println(); algunas respuestas se quedan en el limbo.

A esto podríamos añadir que, siendo el GPRS un módulo orientado hacia proyectos autónomos y sin supervisión, no tendremos acceso al monitor
serie (hasta ahora lo hemos supervisado desde ahí) , no estaremos seguros de que las cosas estén yendo bien y estemos realmente conectados a la
red móvil.

Y por último, podría ser que durante el periodo que tengamos funcionando nuestro proyecto perdiera la alimentación del Arduino o del GPRS, o se
desconectase de la red móvil por alguna razón. Así que también vamos a implementar una serie de funciones para que sea capaz de reiniciarse y
configurarse de forma autónoma, y de que se asegure que estemos conectados a la red antes de enviar llamadas o SMS.

Para poder reiniciarlo de esta forma y dotarle de autonomía es imprescindible haber realizado la soldadura que habilita el encendido por software
del módulo GPRS mediante un pulso en el pin 9, y conectarlo al pin 9 de Arduino que usaremos para ello (ya hablamos de esto en las sesiones
anteriores).

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


FUNCIÓN PARA ENVIAR LOS COMANDOS AT

Al parecer el error al recibir algunas respuestas de los comandos AT por el monitor serie se debe a que enviamos el comando siguiente antes de
recibir la respuesta, y los “delays” no parecen solucionarlo, sino todo lo contrario (como casi siempre).

Por lo tanto crearemos una función sendATcommand2 con los siguientes objetivos:

 Enviar el comando AT.

 Esperar una respuesta del SIM900.

 Comprobar que la respuesta es correcta.

 Mostrar por el monitor serie la respuesta recibida.

La programación de la función queda de la siguiente forma:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


int enviarAT(String ATcommand, char* resp_correcta, unsigned int tiempo)
{

int x = 0;
bool correcto = 0;
char respuesta[100];
unsigned long anterior;

memset(respuesta, '\0', 100); // Inicializa el string


delay(100);
while ( SIM900.available() > 0) SIM900.read(); // Limpia el buffer de entrada
SIM900.println(ATcommand); // Envia el comando AT
x = 0;
anterior = millis();
// Espera una respuesta
do {
// si hay datos el buffer de entrada del UART lee y comprueba la respuesta
if (SIM900.available() != 0)
{
respuesta[x] = SIM900.read();
x++;
// Comprueba si la respuesta es correcta
if (strstr(respuesta, resp_correcta) != NULL)
{
correcto = 1;
}
}
}
// Espera hasta tener una respuesta
while ((correcto == 0) && ((millis() - anterior) < tiempo));
Serial.println(respuesta);

return correcto;
}

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Está función la usaremos siempre que enviemos un comando AT, y si queremos verificar la respuesta, simplemente la incluiremos dentro de un if que
verifique que nos el módulo nos haya devuelto la respuesta que buscamos.

Esta estructura condicional la usaremos para verificar que realmente estemos conectados a la red móvil, aunque podríamos usarlo en todos los
comandos AT para que, en caso de que algo falle, nos saque un mensaje por pantalla indicándonos dónde está el error. Realmente no totalmente
necesario ya que leyendo el monitor serie se puede ver dónde falla con sólo mirar las respuestas a los comandos AT.

ENCENDER EL MÓDULO POR SOFTWARE

Ya hemos hablado anteriormente acerca de cómo encender y apagar el módulo sin tener que presionar el pulsador del GPRS, enviando un pulso de
un segundo desde Arduino al pin 9 de la tarjeta. Sin embargo, imaginad que enviamos las instrucciones para encenderlo y resulta que ya estaba
encendido. Lo que haríamos sería apagarlo.

Así que vamos a crear también una función para encender el módulo pero comprobando antes que no está encendido ya. Es muy sencillo, si
enviamos el comando “AT” y nos devuelve OK es que estaba encendido. Si no devuelve nada tendremos que enviar el pulso para encenderlo.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


void power_on()
{
int respuesta = 0;

// Comprueba que el modulo SIM900 esta arrancado


if (enviarAT("AT", "OK", 2000) == 0)
{
Serial.println("Encendiendo el GPRS...");

pinMode(9, OUTPUT);
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(1000);

// Espera la respuesta del modulo SIM900


while (respuesta == 0) {
// Envia un comando AT cada 2 segundos y espera la respuesta
respuesta = enviarAT("AT", "OK", 2000);
SIM900.println(respuesta);
}
}
}

Complementariamente a esta función vamos a crear otras dos muy sencillitas, una que apague el módulo y otra que incluya estás dos que para
reiniciar el módulo, y que usaremos si perdemos la conexión a la red.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


void power_off()
{
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(1000);
}

void reiniciar()
{
Serial.println("Conexion a la red perdida. Reiniciando el modulo...");
power_off();
delay (5000);
power_on();
}

FUNCIONES PARA CONFIGURAR EL MÓDULO Y ENVIAR LLAMADAS Y SMS

También tenemos funciones que ya hemos usado anteriormente, pero que tenemos que adaptar a la filosofía de esta sesión. Es decir, enviaremos los
comandos AT utilizando la función que hemos creado y comprobaremos que estemos conectados correctamente a la red móvil.

Estas funciones son las que usamos para configurar el módulo correctamente y las que propiamente realizan el envío de las llamadas y los SMS.

void iniciar()
{
enviarAT("AT+CPIN=\"1867\"", "OK", 1000);
Serial.println("Conectando a la red...");
delay (5000);

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


//espera hasta estar conectado a la red movil
while ( enviarAT("AT+CREG?", "+CREG: 0,1", 1000) == 0 )
{
}
Serial.println("Conectado a la red.");
enviarAT("AT+CLIP=1\r", "OK", 1000); // Activamos la identificacion de llamadas
enviarAT("AT+CMGF=1\r", "OK", 1000); //Configura el modo texto para enviar o recibir mensajes
enviarAT("AT+CNMI=2,2,0,0,0\r", "OK", 1000); //Configuramos el modulo para que nos muestre los SMS recibidos por comunicacion seri
e
Serial.println("Preparado.");
}

void mensaje_sms()
{
if (enviarAT("AT+CREG?", "+CREG: 0,1", 1000) == 1) //comprueba la conexion a la red
{
Serial.println("Enviando SMS...");
enviarAT("AT+CMGF=1\r", "OK", 1000); //Comando AT para mandar un SMS
sprintf(aux_str, "AT+CMGS=\"XXXXXXXXX\"", strlen(sms)); //Numero al que vamos a enviar el mensaje
//Texto del mensaje
if (enviarAT(aux_str, ">", 10000) == 1)
{
enviarAT(sms, "OK", 10000);
}
Serial.println("SMS enviado");
}
else
{
reiniciar();
iniciar();
}
}
void llamar()
{
if (enviarAT("AT+CREG?", "+CREG: 0,1", 1000) == 1) //Comprueba la conexion a la red
{
Serial.println("Realizando llamada...");
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Serial.println("Realizando llamada...");
enviarAT("ATDXXXXXXXXX;", "OK", 1000);
delay(20000); // Espera 20 segundos mientras realiza la llamada
enviarAT("ATH", "OK", 1000); // Cuelga la llamada
Serial.println("Llamada finalizada");
}
else
{
reiniciar();
iniciar();
}
}

ESTRUCTURA DEL PROGRAMA

Una vez hemos creado las funciones que vamos a necesitar, la estructura del programa no tiene nada demasiado complicado. Con este programa
realizaremos una llamada al teclear una “l” en el monitor serie y enviaremos un SMS con la letra “s”. Evidentemente también recibiremos llamadas y
SMS y mostraremos la información de ambas en pantalla, del número de teléfono y del contenido del mensaje en el caso de que sea un SMS.

#include <SoftwareSerial.h>

SoftwareSerial SIM900(7, 8); // Configura el puerto serial para el SIM900. Para el Arduino MEGA utilizar pines 10 y 11

int respuesta;
char aux_str[50];

//Contenido del sms que enviamos. \x1A corresponde al caracter de finalizacion


char sms[] = "Mensaje enviado desde el Arduino de Prometec! \x1A \r\n";

void setup()
{
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
{
SIM900.begin(19200); //Configura velocidad del puerto serie para el SIM900
Serial.begin(19200); //Configura velocidad del puerto serie del Arduino
delay(1000);
Serial.println("Iniciando...");
power_on();
iniciar();
}

void loop()
{
if (Serial.available())
switch (Serial.read())
{
case 'l':
llamar();
break;
case 's':
mensaje_sms();
break;
}
if (SIM900.available()) {
Serial.write(SIM900.read());
}
}

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Podéis descargar aquí el programa completo: Envio_y_recepcion_de_llamadas_y_SMS.

Con este programa creemos que ya podréis afrontar vuestros proyectos con mayores garantías de éxito, otorgándoles un cierto nivel de autonomía y
confianza. La estructura de tipo switch() que hemos creado nos da la posibilidad de incluir de forma muy sencilla otros casos en los que sean las
lecturas de ciertos sensores las que activen las llamadas o los SMS, e incluso podrías incluir en estos últimos el valor de las lecturas dentro del texto
del SMS en el caso que sea necesario.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


RESUMEN DE LA SESIÓN

En esta sesión hemos aprendido varias cosas importantes:

  A enviar correctamente los comandos AT y asegurarnos de recibir la respuesta del módulo GPRS.

 A verificar la respuesta cuando lo creamos necesario.

 Asegurarnos de que estamos correctamente conectado a la red móvil.

 A encender y reiniciar el módulo por software.

 Hemos creado un programa para recibir y enviar llamadas y SMS, al que hemos dotado de capacidad
de trabajar de forma autónoma con ciertas garantías de éxito.

Anterior Índice tutoriales GSM/GPRS Siguiente

« COMENTARIOS MÁS VIEJOS

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


(58) Comments

AndreyC 22 Dic 2017


Hola Ivan, Excelente iniciativa al exponer tus conocimientos.

Reply Tengo una duda, al usar el comando AT+CGATT=1, me da error, y de ahi en adelante los comandos AT+CGATT=1 y el
AT+CIICR me dan error, de casualidad tienes alguna sugerencia,

Saludos Cordiales

Ivan 02 Ene 2018


Asegúrate que la SIM que estás usando te permite conectarte a Internet

Reply

Manuel 14 Nov 2017


Buenas gente, necesito su ayuda, estoy trabajando en una alarma gsm que funciona con un arduino uno, un par de
sensores y un modulo sim800l, hasta ahora lo que logre es que al detectar movimiento me llegue una llamada a mi
Reply celular, pero lo que se me complica es para activarla y desactivarla desde mi celular, que funcion podria utilizar?, con
activar y desactivar me refiero a mandar un sms con la palabra “Desactivar” para que no suene la alarma en caso de que
detecte movimiento.

Ivan 15 Nov 2017


Hola Manuel, echa un ojo a esta sesión donde hacemos algo parecido con un LED https://www.prometec.net/gprs-
controlar-led/
Reply

Gelman Moreno 10 Nov 2017


Hola Ivan

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Reply Muchas gracias por responder, si, efectivamente me aparece RING en el monitor serie cuando llamo al número de
SIMCARD que está en el módulo.

GIVE A REPLY

Message

Name (required) Email (required)

URL

Post comment
WordPress
WordPress Anti-Spam
Anti-Spam by
by WP-SpamShield
WP-SpamShield

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Copyright Prometec

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


TIENDA ARDUINO RASPBERRY PI IMPRESORA 3D FORO CONTACTO

CONTROLAR ARDUINO MEDIANTE LLAMADAS Y SMS


Encendiendo y apagando un LED con nuestro móvil

Home 
 CONTROLAR ARDUINO MEDIANTE LLAMADAS Y SMS

OBJETIVOS

  Encender y apagar un LED mediante llamadas y SMS.

 Crear una agenda con números autorizados para las llamadas.

 Reconocer y utilizar textos de los SMS para realizar diferentes acciones.

MATERIAL REQUERIDO.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


29.00€

9.60€ + + IVA
IVA

ARDUINO GSM GPRS


UNO REV 3 ARDUINO
SHIELD
 Añadir al
 Añadir al
carrito
carrito

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


2.00€ + 4.80€ +
IVA IVA

CABLES
DUPONT
MACHO- CARGADOR
MACHO ARDUINO
Añadir al
Añadir al


carrito
carrito

CONTROLAR ARDUINO CON NUESTRO MÓVIL

Con lo que hemos aprendido hasta ahora seguro que a muchos de vosotros ( yo incluido) se os ha ocurrido que podríamos montar un sistema que,
por ejemplo, encienda la calefacción de casa un ratillo antes de que lleguemos haciéndole una llamada con nuestro móvil, y así estemos bien a
gustito en casa según lleguemos.

Pues en esta sesión vamos a ir acercándonos a eso. Primero utilizando una llamada para encender y apagar un LED , y después para hacer lo propio
en función del SMS que le enviemos.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


UTILIZAR UNA AGENDA PARA FILTRAR LAS LLAMADAS

Primero vamos a centrarnos en las llamadas. El concepto del programa será guardar en una variable el texto que recibamos del puerto serie del
GPRS y si es una llamada, encender o apagar un LED alternativamente. Pero claro, no queremos que nadie que no seamos nosotros (u otra persona
autorizada por nosotros) se equivoque al llamar de número y ande encendiendo cosas en nuestra casa, así que crearemos una agenda con los
números que tienen nuestro beneplácito.

Además tendremos que crear una variable mensaje tipo String, donde iremos guardando los caracteres que nos vayan llegando del GPRS, con el fin
de poder luego trabajar con ellos.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


#include <SoftwareSerial.h>
SoftwareSerial SIM900(7, 8); // 10 y 11 para el Arduino Mega. Configura el puerto serial para el SIM900

char incoming_char = 0; //Variable que guarda los caracteres que envia el SIM900
String mensaje = "";
int LED = 13 ;
bool estado = false ; //Variable para guardar el estado del LED
String agenda[] = {"XXXXXXXXX" , "XXXXXXXXX"}; //Array con los numeros autorizados
int numtotal = 2; //Cantidad de numeros de telefono autorizados

Toda la parte de los programas que sirve para recibir las llamadas y los SMS correctamente va a ser el mismo que en la sesión anterior, sólo que esta
vez hemos metido toda la parte que se encarga de poner en marcha el módulo GPRS en una función a la que llamaremos inicializaSIM900 , y que
lanzaremos en el setup.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


void inicializaSIM900()
{
//digitalWrite(9, HIGH); // Descomentar para activar la alimentación de la tarjeta por Software
//delay(1000);
//digitalWrite(9, LOW);
delay (5000);
SIM900.begin(19200); //Configura velocidad del puerto serie para el SIM900
Serial.begin(19200); //Configura velocidad del puerto serie del Arduino
Serial.println("OK");
delay (1000);
SIM900.println("AT + CPIN = \"XXXX\""); //Comando AT para introducir el PIN de la tarjeta
delay(25000); //Tiempo para que encuentre una RED
Serial.println("PIN OK");
SIM900.print("AT+CLIP=1\r"); // Activa la identificación de llamada
delay(100);
SIM900.print("AT+CMGF=1\r"); // Configura el modo texto para enviar o recibir SMS
delay(1000);
SIM900.print("AT+CNMI=2,2,0,0,0\r"); // Saca el contenido del SMS por el puerto serie del GPRS
delay(1000);
}

Y la recepción de caracteres va a ser también igual en el loop, sólo que esta vez iremos guardando los caracteres en una variable, como hemos
indicado un poco más arriba.

if (SIM900.available() > 0)
{
incoming_char = SIM900.read(); //Get the character from the cellular serial port.
Serial.print(incoming_char); //Print the incoming character to the terminal.
mensaje = mensaje + incoming_char ; // Añadimos el último caracter leído al mensaje
}

Una vez tenemos el mensaje completo, vamos a ver si es una llamada, y a buscar el número de teléfono para encender un LED si está autorizado.

Para esto vamos a utilizar una función .indexof(). Esta función nos devuelve la posición, mediante un número entero, de una cadena o carácter
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
dentro de una cadena de texto dada. En el caso de que no exista devuelve “-1”. La forma de usarlo es la siguiente:

int pos = “texto”.indexOf(“caracteres a buscar”);


if (pos >= 0)
{
Acciones que queremos realizar;
}

Sabiendo esto crearemos una función identifica_llamada() para buscar primero el final de una llamada, y después el número de teléfono y si está
autorizado.

Si recordáis la sesión anterior, una llamada finaliza con “NO CARRIER” , así que lo primero que haremos será buscarlo y si existe buscaremos los
números de teléfono que hemos autorizado dentro del mensaje que hemos guardado. Si está autorizado cambiamos el estado del LED, y sino no
hacemos nada.

Y una vez hecho todo esto, borramos el contenido de la variable mensaje para dejarla libre para la siguiente llamada.

void identifica_llamada()
{
int finllamada = mensaje.indexOf("NO CARRIER"); //Buscamos el final de llamada
if (finllamada >= 0)
{
for ( int i = 0; i < numtotal; i++) { int pos = mensaje.indexOf(agenda[i]); //Buscamos el número en la agenda if (pos >=
0)
{
estado = ! estado ; // cambiamos el estado
digitalWrite(LED, estado) ;
Serial.println("\nEl numero esta autorizado");
}
}
mensaje = "" ; //Bórralo para la próxima vez
}
}

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Así el setup y el loop quedarían de la siguiente forma:

void setup()
{
pinMode( LED, OUTPUT) ; // LED como salida
inicializaSIM900();
}

void loop()
{
if (SIM900.available() > 0)
{
incoming_char = SIM900.read(); //Guardamos el carácter del GPRS
Serial.print(incoming_char); //Mostramos el carácter en el monitor serie
mensaje = mensaje + incoming_char ; // Añadimos el carácter leído al mensaje
}
identifica_llamada ();
}

Podéis descargar el programa completo aquí: Encender_LED_llamada.

Cuando hagáis pruebas os recomiendo dejar sonar más de un tono, por si acaso se perdiera algún carácter durante el envío y no recojamos bien el
número de teléfono. Con cada tono se manda una vez el número que nos está llamando, y así nos aseguramos de que alguna de las veces llegue
bien. No pasa muchas veces, pero todos conocemos las leyes de Murphy…

DIFERENCIAR Y RECONOCER TEXTOS EN LOS SMS

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


En el caso del SMS va a ser muy parecido, pero vamos a reconocer el texto del mensaje y en función de lo que le enviemos encenderá o apagará el
LED. De esta manera sabremos en todo momento el estado del mismo, ya que con la llamada lo encendíamos o lo apagábamos, pero de momento
no teníamos forma de saber si estaba encendido o apagado (aunque también podríamos solucionar esto).

Con el SMS ya no vamos a necesitar buscar el final de la llamada ni autorizar números, porque nadie se va a equivocar y mandar un SMS con el texto
concreto a nuestro Arduino por equivocación (ya me parece bastante raro que alguien mande un SMS), aunque si buscáis máxima seguridad no os
sería muy difícil incluir también esa comprobación. Así que podemos prescindir de las variables que creábamos para ello.

Por lo demás el programa es exactamente igual, salvo la función final, que quedaría así:

void identifica_SMS()
{
int led_on = mensaje.indexOf("Encender LED"); //Buscamos el texto en el SMS
int led_off = mensaje.indexOf("Apagar LED"); //Buscamos el texto en el SMS
if (led_on >= 0)
{
digitalWrite( LED, HIGH) ;
Serial.println("\nLED ENCENDIDO");
mensaje = "" ; //Bórralo para la próxima vez
}
if (led_off >= 0)
{
digitalWrite( LED, LOW) ;
Serial.println("\nLED APAGADO");
mensaje = "" ; //Bórralo para la próxima vez
}
}

Y el programa completo lo tenéis aquí: Encender_LED_SMS.

Ahora podéis combinar ambos si queréis que reaccione ante las dos cosas. Y si, como a mí, os siguen cobrando los SMS y no estáis por la labor de
pagar más, os propongo que contéis los tonos de la llamada y en función de cuántos sean, encendáis o apaguéis el LED. Recordad que con cada
tono el GPRS nos envía una cadena de caracteres “RING”.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


RESUMEN DE LA SESIÓN

En esta sesión hemos aprendido varias cosas importantes:

  A controlar un LED a distancia usando nuestro móvil.

 Hemos presentado y explicado la función .indexof().

 A hacer un filtro en las llamadas para autorizar sólo algunos números basándonos en una agenda.

 A diferenciar textos en los SMS y actuar en consecuencia.

Anterior Índice tutoriales GSM/GPRS Siguiente

« COMENTARIOS MÁS VIEJOS

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


(72) Comments

DANNY 18 Dic 2017


Hola. Estoy haciendo un proyecto electrónico y me he quedado estancado y necesito ayuda por favor necesito saber
como hacer para que cuando este en una llamada con el sim900 quisiera que encienda leds diferentes cundo le mande 1
Reply o 2 o 3 o 4 o 5 o 6 o 7 o 8 o 9 o 0 por medio del teclado de mi telefono personal con el cual estoy en una llamada con
el sim900

Ivan 19 Dic 2017


Hola Danny, no sé si es posible hacer eso- A ver si alguien sabe algo.

Reply

DANNY 24 Dic 2017


si se puede, porque lo he visto en una alama comunitaria instalada en mi zona y solo que en vez de leds como
mi proyecto este suena diferentes sonidos por un altavoz. bueno si alguien sabría como hacerlo, pues le
Reply estaría agradecido que me ayude

Ivan 02 Ene 2018


Intentaré sacar un rato para echarle un ojo, si te enteras de algo dinos porfa!

Reply

Enrique bravo 03 Nov 2017


muy buen tutorial, pero quisiera saber si el código funcionaria con un sim A7 que incluye un gps y quisiera utilizarlo, que
necesitaría para utilizarlo
Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 06 Nov 2017
Hola Enrique, no encuentro información sobre el sim A7, más allá del galaxy A7.

Reply

Jesus Angel Gonzalez Miranda 16 Oct 2017


Hola. Gracias por la ayuda que da usted en su página para que los demás podamos utilizar sus conocimientos.
Tengo un problema que llevo semanas intentar solucionar.
Reply He conectado un módulo SIN800L al Arduino Uno. Los alimento de forma esterna. Todo me funciona genial, tanto enviar
como recibir SMS.
Pero el problema viene cuando también conecto un sensor de movimiento PIR al arduino, también alimentado
externamente.
El PIR lo conecto al pin digitar 2.
El problema es que cuando recibo un SMS el pin 2 se pone HIGH y no se por qué. Y además el SMS no lo leo en la
variable Comando hasta que no ha ejecutado el código que está en la ALARMA del PIR.
aquí dejo el código del Void para que lo vea:

void loop()
{
//Comprueba el SIM800 a ver si hay SMS +++++++++++++++++++++++++++++++++++
if (SIM800.available()){
Comando=SIM800.readString();
Serial.println(“COMANDO LEIDO: ” + Comando);

//Si recibe cualquier SMS que no es ATH lo reenvía al teléfono de llamadas.


if (Comando!=”” && Comando.indexOf(“ATH”)<0){
mensaje_sms(Comando);
}
Comando="";
}

//Si no recibe ningún SMS testea el sensor de movimiento +++++++++++++++++


if (Comando==""){
if (digitalRead(vPinMovimiento) == HIGH){
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Serial.println("ALARMA MOVIMIENTO");
delay(1000);
digitalWrite(vPinMovimiento, LOW);
}
}

// Limpia el buffer del SIM800 ++++++++++++++++++++++++++++++++++++++++++


if (SIM800.available()) Serial.write(SIM800.read());
}

Si yo le envío un SMS desde con mi móvil, siempre siempre lo promero que hace es escribir ALARMA MOVIMIENTO y
luego me reenvia el SMS.
Me activa el pin 2 y no lee el comando del SMS.
Es como si al recibir un SMS hubiese movimiento en el PIR y eso NO es así.
He hecho muchas variaciones del código pero siempre funciona igual. Llevo semanas con este problema.
¿Sabe que podría ser?
Muchas gracias por su tiempo.

Ivan 17 Oct 2017


Hola Jesús Ángel, supongo que estás usando los pines 7 y 8 del Arduino así que no entiendo muy bien porque te
ocurre eso.Has probado a poner el PIR en algún otro pin a ver si te ocurre lo mismo?
Reply

felipe 14 Sep 2017


hola , primero felicitarlos por tan buena explicación , quisiera saber como puedo agregar los números autorizados por
medio del puerto serial o por medio de un sms
Reply

Ivan 19 Sep 2017


Hola Felipe, tendrías que leer lo que entre por el puerto serie o por SMS (sería un poquito más complicado desde el
SMS) y agregarlo a la primera posición vacía del array. Yo haría que al leer algún carácter guarde en un array de char
Reply los siguientes 9 caracteres, y de ahí los metes a la agenda.Intenta hacerlo y si tienes alguna duda concreta nos dices,
de todas formas si tengo algo de tiempo lo intentaré probar.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Danny 24 Dic 2017
siii hazlo por sms, ayudanos please

Reply

Ivan 02 Ene 2018


A ver si puedo sacar un rato para ello!

Reply

Jacobo Cordova 03 Ene 2018


Hice algo similar espero les pueda ayudar
//———————————————————–
Reply //Arriba en las declaraciones
String agenda[] = {“xxxxxxxxx” , “”, “”}; //Array con los numeros autorizados
int numMax = 3; //Cantidad posible de numeros de telefono autorizados
int numtotal = 1; // numeros actualmente registrados
///———————————————————————-
// En vez de identifica_sms() he creado la funcion
// chequea_sms(); que para agregar un numero debe leer en el mensaje
// Agregar 999999999 y entonces agrega ese numero

void chequea_SMS()
{
int agregar = mensaje.indexOf(“Agregar”);
if (agregar >= 0)
{
String nuevo = “”;
for (int i = 0; i < 9; i++)
{
nuevo += mensaje.charAt(agregar + 8 + i);
}
agenda[numtotal] = nuevo;
Serial.println(“Numero agregado: ” + nuevo);

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


numtotal++;

}
mensaje = "" ; //Bórralo para la próxima vez
}

Sergio 17 Ago 2017


Hola, cuando mencionas lo del pin 9, simplemente hay que soldar los dos contactos de la foto no?

Reply Saludos y muchas gracias!!

Ivan 19 Ago 2017


Eso es, para usar el encendidopor software del pin 9 tienes que soldar los contactos que comentamos. un saludo.

Reply

Alexis 06 Ago 2017


buena tarde, subi el codigo y timbra al llamar pero me saloe un error.
OK
Reply PIN OK
AT + CPIN = “0000”

ERROR
AT+CLIP=1

OK
AT+CMGF=1

OK
AT

A esto no enciende el led (lo conecte al pto 13 y a gnd y no encendio)

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 07 Ago 2017
Hola Alexis, el programa debería funcionar tal cual, así que lo más probable es que tengas algún fallo en las conexiones
o que no hayas metido el número desde el que llamas dentro del String Agenda donde guardamos los números que
Reply queremos que puedan encender o apagar la luz. Un saludo.

Peña 22 Jul 2017


Perdona, olvida mi mensaje de hace unos días.

Reply Ya vi como funciona el programa, ojos que no ven……

Gracias!!

Ivan 23 Jul 2017


Estupendo, un saludo.

Reply

Jesús 19 Jul 2017


Muy buenas! Necesito ayuda de algun alma caritativa xD Resulta que me encuentro en estos momentos en la etapa de
“Proyecto Comunitario” de la carrera de Ing. Electrónica, y estoy haciendo un sistema de alarma para una grupo de
Reply casas, basado en arduino y por motivos varios se me hace imposible probar el sistema en fisica con el Sim900, el arduino
y demas componentes, asi que no se a ciencia cierta si el codigo que he realizado esta bien o no, cabe destacar que soy
novato aun en la programacion de arduino, y me ha tocado enfrascarme en este proyecto xD. El sistema se supone debe
realizar lo siguiente:

-Se tendrán varios numeros registrados y activada la identificacion de llamada del modulo GSM, esto para la agenda
telefonica.
-Si se recibe un llamada de uno de los numeros registrados se activara la alarma (altavoces y luces estroboscopicas).
-También se podran recibir msjs e identificar su contenido a fin de poder activar “reinicios parciales o totales” del
sistema:
a) Si se envia un mensaje que diga “Matenimiento”, parpadeara 3 veces un LED verde.
b) “Reset Programa”, reiniciara el programa.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


c) “Reset Sistema”, reiniciara el arduino mediante el pin de “RESET” que este posee.
d) “Reset GSM”, reiniciara el SIM900

-Una vez listo cualquier reinicio el sistema enviara un msjs de “Reinicio Completo”.
-El codigo tambien posee comandos de “WatchDog” como mecanismo de seguridad.
-Adicional, existen lineas de comando para mostrar la calidad de la señal o cobertura del GSM mediante el monitor serial
en la PC, a la hora de instalar el sistema.
-Asi mismo, poseera 3 leds indicadores de estados, un rojo para indicar que el arduino esta encendido, otro naranja para
indicar que el GSM esta encendido, y el verde anteriomente mencionado que estara siempre activado e indicara que el
codigo esta funcionando; este ultimo parpadera 3 veces al recibir un msjs que diga “Manteniento”, lo cual servira para
probar el GSM. EL codigo es el siguiente; cabe mencionar que lo he hecho en base a lo visto en las varias paginas de
este foro, pero necesito que alguien me diga si esta planteado, si asi como esta brinda todas las funciones que plantee,
y en si, que me digan si el codigo funciona para lo que ya describi del sistema, y de no ser asi, que me ayuden a
corregirlo por favor, de antemano muchas gracias!:

#include
#include
#include
SoftwareSerial SIM900(7, 8);
char incoming_char = 0;
String mensaje = “”;
int LED = 10;
int RELE = 11;
int RESET = 12;
char inSerial[256];
bool estado = false ;
String agenda[10] = {“+584267989946” , “+584249202682”};
int numtotal = 10;

void ShowSerialData()
{
wdt_reset();
if (Serial.available() > 0)
{ int i = 0;
while (Serial.available() > 0) {
inSerial[i] = (Serial.read());

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


i++;
}
inSerial[i] = ‘\0’;
Serial.print(inSerial);
}
wdt_reset();
}

void setup()
{
wdt_disable();
wdt_enable(WDTO_8S);
digitalWrite( LED, HIGH) ;
digitalWrite( RESET, HIGH) ;
delay(200);
pinMode( LED, OUTPUT) ;
pinMode( RESET, OUTPUT) ;
pinMode( RELE, OUTPUT) ;
pinMode(9, OUTPUT);
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay (5000);
SIM900.begin(19200);
Serial.begin(19200);
SIM900.print(“AT+CLIP=1\r”);
wdt_reset();
delay(1000);
SIM900.print(“AT+CMGF=1\r”);
delay(1000);
SIM900.println(“AT+CPIN=\”1234\””);
wdt_reset();
delay(7000);
wdt_reset();
delay(7000);
wdt_reset();

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


delay(7000);
wdt_reset();
delay(7000);
wdt_reset();
Serial.println(“AT+CSQ”);
delay(1000);
ShowSerialData();
}

void identifica_llamada()
{
wdt_reset();
int finllamada = mensaje.indexOf(“NO CARRIER”);
if (finllamada >= 0)
{
for ( int i = 0; i = 0)
{
wdt_reset();
for ( int j = 0; j > 3 ; j++) {
digitalWrite( LED, HIGH) ;
delay(200);
digitalWrite( LED, LOW) ;
delay(200);
}
wdt_reset();
digitalWrite( LED, HIGH) ;
mensaje = “” ;
}

if (reset1_on >= 0)
{
wdt_reset();
reiniciarGSM();
resetFunc();
enviar_sms();
delay(100);

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


for ( int j = 0; j > 3 ; j++) {
digitalWrite( LED, HIGH) ;
delay(200);
digitalWrite( LED, LOW) ;
delay(200);
}
wdt_reset();
digitalWrite( LED, HIGH) ;
mensaje = “” ;
}

if (reset2_on >= 0)
{
wdt_reset();
reiniciarGSM();
digitalWrite( RESET, LOW); //Este pin debe conectarse al pin de reset del arduino mediante una resistencia de 1Kohm
enviar_sms();
delay(100);
wdt_reset();
}

if (resetGSM >= 0)
{
wdt_reset();
reiniciarGSM();
}
wdt_reset();
}

void loop()
{
wdt_reset();
if (SIM900.available() > 0)
{
incoming_char = SIM900.read();
mensaje = mensaje + incoming_char ;

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


}
wdt_reset();
identifica_llamada ();
wdt_reset();
identifica_SMS();
wdt_reset();
}

Erik 17 Jul 2017


HOLA AMIGO me podrias decir que es lo que va en el AT+CPIN xxxx con que es lo que se sustituye las xxxx

Reply

Ivan 21 Jul 2017


Hola Erik, lo que ponemos ahí es el pin de la tarjeta SIM para desbloquearla. UN saludo.

Reply

Peña 17 Jul 2017


Hola Ivan.
Muy bien explicado, gracias.
Reply
Tengo una duda de como funciona la lectura del serial SIM900.

En el setup() pongo en mi caso:


SIM900.print(“AT+CMGR=1n”); //Imprime el SMS numero 1 en el puerto SIM900

Luego desde el loop() se guarda todo lo que se haya escrito en el serial SIM900 dentro de la variable:
incoming_char = SIM900.read();

Y luego se pasa lo que hay en incoming_char a la variable mensaje:


mensaje = mensaje + incoming_char ; // Añadimos al mensaje el ultimo caracter leido

Y al final se llama a la funcion de identificar:


PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
identifica_SMS();

Todo funciona correctamente, en la salida del Monitor Serial me muestra lo siguiente, como se esperaba:
OK
AT+CMGR=1
+CMGR: “REC READ”,”+34000000000″,””,”17/07/16,10:13:37+08″
Apagar LED
LED APAGADO

Mi duda es que esto solo se muestra una vez y se para, cuando debería mostrarse cada vez que el loop reinicie o sea si
incoming_char = SIM900.read(); está dentro del loop(), cada vez que el loop se reinicie, debería guardar lo que se lee en
el serial SIM900.

No se si lo que lee en el serial SIM900 una vez leido se borra automáticamente y el loop ya no guarrda nada en la
variable incoming_char.

Perdona el ladrillo, espero se entienda la duda que tengo.


Saludos.

Ivan 21 Jul 2017


Hola Peña, a ver si me acuerdo de como funcionaba jejeje. En principio creo que al final de la función
identificar_llamada() borramos lo que teníamos guardado en el mensaje, así que cada vez que la llamamos borramos el
Reply contenido. No sé si con esto te contesto bien, si no me dices y te ayudo lo que puedo. Un saludo.

Cristian 15 Jul 2017


Hola buenas, fijate que estoy medio loco que ya no se que hacer con esto, pues les cuento, tengo el arduino con la
sim900, lo tengo conectado a la pc con el monitor y efectivamente cuando envio el mensaje me enciende/apaga el led
Reply segun sea el caso, ahora el inconveniente que tengo es que cuando lo desconecto de la pc y lo llevo al banco de
pruebas ya no me funciona, ya hice varias pruebas y lo curioso es que si lo conecto al monitor serial de la pc, me trabaja
muy bien pero cuando ya no lo tengo conectado ya no trabaja, alguien ha tenido este inconveniente?

ya probe con fuentes de alimentacion independientes y tambien una de 5V*2A.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Saludos.

Ivan 17 Jul 2017


Hola Cristian, pues he mirado un poco el código por encima y no se me ocurre por qué puede pasar. Ahora mismo no
puedo probarlo pero en unos días cuando pueda te digo algo. Un saludo.
Reply

GIVE A REPLY

Message

Name (required) Email (required)

URL

Post comment
WordPress
WordPress Anti-Spam
Anti-Spam by
by WP-SpamShield
WP-SpamShield

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Copyright Prometec

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


TIENDA ARDUINO RASPBERRY PI IMPRESORA 3D FORO CONTACTO

CONECTARSE A INTERNET MEDIANTE GPRS


Realizar una conexión HTTP mediante Arduino y el módulo GRPS

Home 
 Conectarse A Internet Mediante GPRS

OBJETIVOS

  Seguir ampliando las funcionalidades del módulo GPRS.

 Aprender a configurar el GPRS para poder conectarnos a Internet.

 Realizar una conexión TCP con servidor.

 Enviar una petición HTTP a un servidor.

MATERIAL REQUERIDO.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


29.00€

9.60€ + + IVA
IVA

ARDUINO GSM GPRS


UNO REV 3 ARDUINO
SHIELD
 Añadir al
 Añadir al
carrito
carrito

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


2.00€ + 4.80€ +
IVA IVA

CABLES
DUPONT
MACHO- CARGADOR
MACHO ARDUINO
Añadir al
Añadir al


carrito
carrito

CONFIGURAR LA CONEXIÓN A INTERNET

Si habéis seguido las sesiones que hemos dedicado hasta ahora al GPRS, no vais a tener ningún problema con esta. Y si no las habéis leído, os
recomendamos que lo hagáis, porque vamos a pasar muy por encima las cosas que ya hemos explicado y vamos a reutilizar (con algunos cambios) la
mayoría de las funciones que ya hemos usado antes. Concretamente vamos a basarnos en el programa que utilizamos en la sesión dedicada a Enviar
y recibir llamadas y SMS.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


De hecho las funciones que hemos usado para encender, apagar, reiniciar y enviar lo comandos AT y recibir las respuestas vamos a dejarlas tal cual.

int enviarAT(String ATcommand, char* resp_correcta, unsigned int tiempo)


{

int x = 0;
bool correcto = 0;
char respuesta[100];
unsigned long anterior;

memset(respuesta, '\0', 100); // Inicializa el string


delay(100);
while ( SIM900.available() > 0) SIM900.read(); // Limpia el buffer de entrada
SIM900.println(ATcommand); // Envia el comando AT
x = 0;
anterior = millis();
// Espera una respuesta
do {
// si hay datos el buffer de entrada del UART lee y comprueba la respuesta
if (SIM900.available() != 0)
{
respuesta[x] = SIM900.read();
x++;
// Comprueba si la respuesta es correcta
if (strstr(respuesta, resp_correcta) != NULL)
{
correcto = 1;
}
}
}
// Espera hasta tener una respuesta
while ((correcto == 0) && ((millis() - anterior) < tiempo));
Serial.println(respuesta);

return correcto;
}

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


void power_on()
{
int respuesta = 0;

// Comprueba que el modulo SIM900 esta arrancado


if (enviarAT("AT", "OK", 2000) == 0)
{
Serial.println("Encendiendo el GPRS...");

pinMode(9, OUTPUT);
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(1000);

// Espera la respuesta del modulo SIM900


while (respuesta == 0) {
// Envia un comando AT cada 2 segundos y espera la respuesta
respuesta = enviarAT("AT", "OK", 2000);
SIM900.println(respuesta);
}
}
}

void power_off()
{
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(1000);
}

void reiniciar()
{
Serial.println("Reiniciando...");
power_off();
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
delay (5000);
power_on();
}

La función void iniciar(); en la que configuramos el módulo GPRS, la vamos a tener que cambiar para enviar los comandos AT que necesitamos para
conectarnos correctamente a Internet. Lo primero es que vamos a necesitar conectarnos a la red GPRS.

Aunque no lo hemos dicho claro hasta ahora, os habréis dado cuenta que en cuanto activamos la tarjeta y metemos el PIN correcto el módulo se
conecta a la red de forma automática. No hay más que esperar y comprobar que realmente lo haya hecho con el comando AT+CREG?.

Sin embargo para conectarnos a la red GPRS y adjuntarnos al servicio de paquetes que nos posibilite conectarnos a Internet tendremos que utilizar el
siguiente comando:

AT+CGATT=1 //Conectamos a la red GPRS

Una vez hecho esto tendremos que buscar en Internet el nombre del punto de acceso o APN , usuario y contraseña de la operadora que estemos
usando. Una búsqueda rápida y en Google y lo encontraréis sin problemas.

 Un APN (Access Point Name) es el nombre de un punto de acceso que hay que configurar para que nuestro
dispositivo se pueda conectar a Internet usando las redes de nuestra operadora.

AT+CSTT="Nombre del Punto de Acceso o APN","usuario","contraseña" // Definimos el APN, usuario y clave a utilizar

Y ahora usaremos un par de comandos para activar la conexión GPRS en función de lo que hemos configurado con el comando AT+CSTT, y
obtendremos nuestra dirección IP.

AT+CIICR // Activamos el perfil de datos inalámbrico


AT+CIFSR // Para obtener nuestra direccion IP

Y con esto ya tenemos todos los comandos que usaremos para configurar e iniciar el módulo:
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
void iniciar()
{
enviarAT("AT+CPIN=\"1867\"", "OK", 1000); //Introducimos el PIN de la SIM
Serial.println("Conectando a la red...");
delay (5000);

//Espera hasta estar conectado a la red movil


while ( enviarAT("AT+CREG?", "+CREG: 0,1", 1000) == 0 )
{
}

Serial.println("Conectado a la red.");
enviarAT("AT+CGATT=1\r", "OK", 1000); //Iniciamos la conexión GPRS
enviarAT("AT+CSTT=\"ac.vodafone.es\",\"vodafone\",\"vodafone\"", "OK", 3000); //Definimos el APN, usuario y clave a utilizar
enviarAT("AT+CIICR", "OK", 3000); //Activamos el perfil de datos inalámbrico
enviarAT("AT+CIFSR", "", 3000); //Activamos el perfil de datos inalámbrico
}

 Hemos quitado los comandos AT que configuraban el módulo para el envío y recepción de llamadas y SMS
para simplificarlo; pero podéis integrarlos en esta misma función para juntar todas las funcionalidades.

Añadiendo alguna de las funciones de las que hemos comentado que se repetían de la sesión anterior, ya tenemos terminado el setup .

void setup()
{
SIM900.begin(19200); //Configura velocidad del puerto serie para el SIM900
Serial.begin(19200); //Configura velocidad del puerto serie del Arduino
delay(1000);
Serial.println("Iniciando...");
power_on();
iniciar();
}

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


REALIZAR LA PETICIÓN HTTP

Una vez hemos realizado correctamente la configuración, vamos a realizar la petición Http. El proceso va a ser prácticamente el mismo que para
mandar que para mandar un SMS. Lo primero cambiaremos la variable en la que teníamos el texto del SMS por la dirección Http a la que queremos
conectarnos de esta forma:

#include <SoftwareSerial.h>
SoftwareSerial SIM900(7, 8); // Configura el puerto serial para el SIM900. Para el Arduino MEGA utilizar pines 10 y 11

int respuesta;
char aux_str[50];

//Contenido de la dirección Http


char direccion[] = "GET /prueba-http/ HTTP/1.1\r\nHost: www.prometec.net\r\nConnection: close\r\n\r\n";

En ella indicamos el Host, en este caso www.prometec .net, y la página a la que queremos acceder: /prueba-http/ dentro del Host. Es decir sería lo
equivalente a acceder a www.prometec.net/prueba-http/.

 Hemos creado esta página para hacer las pruebas. Simplemente contiene el título “PRUEBA PARA
CONEXIONES HTTP” y el mensaje “¡Enhorabuena! Has conseguido realizar una conexión HTTP sin utilizar
un navegador. Saludos desde Prometec.”

 Aunque cuando hagamos la petición veréis que una página web contiene un montón más de cosas, y más si
está realizada en WordPress como la nuestra.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Vamos a programar una función en la que tras comprobar que estamos conectados a la red, iniciaremos una conexión TCP al Host que elijamos (en
este caso www.prometec.net) y enviaremos la petición a la dirección que hemos guardado en la variable char direccion[].

Utlizaremos estos dos comandos AT:

AT+CIPSTART //indicamos el tipo de conexión (TCP/UDP), la dirección IP y el puerto al que se realiza la conexión.
AT+CIPSEND //preparamos el envío de datos. Cuando esté listo devolverá el código ">" como inductor para el comienzo del envío.

Y la función nos queda de esta forma:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


void PeticionHttp()
{
if (enviarAT("AT+CREG?", "+CREG: 0,1", 1000) == 1) //Comprueba la conexion a la red
{
enviarAT("AT+CIPSTART=\"TCP\",\"www.prometec.net\",\"80\"", "CONNECT OK", 5000); //Inicia una conexión TCP
// Envíamos datos a través del TCP
sprintf(aux_str, "AT+CIPSEND=%d", strlen(direccion));
if (enviarAT(aux_str, ">", 10000) == 1)
{
enviarAT(direccion, "OK", 10000);
}
}
else
{
reiniciar();
iniciar();
}
}

Y ya en el loop() vamos a crear una estructura de tipo switch para enviar la petición cuando escribamos “h” en el monitor serie. Además incluiremos
la opción ce cerrar la conexión utilizando la tecla “q”:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


void loop()
{
if (Serial.available())
switch (Serial.read())
{
case 'h':
PeticionHttp();
break;
case 'q':
// Closes the socket
enviarAT("AT+CIPCLOSE", "CLOSE OK", 10000); //Cerramos la conexion
enviarAT("AT+CIPSHUT", "OK", 10000); //Cierra el contexto PDP del GPRS
delay(10000);
break;
}
if (SIM900.available()) {
Serial.write(SIM900.read());
}
}

Ya estamos preparados para cargar el sketch en nuestro Arduino, y si está todo correcto deberíamos ver cómo se va configurando en el monitor
serie:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Si ahora escribimos “h” en el monitor serie y pulsamos “Intro”, veremos cómo empiezan a llegar un montón de datos. La gran mayoría de ellos no nos
interesan y corresponden a la programación de la página, que además, al ser de tipo WordPress tiene un montón de cosas. Pero si os fijáis veréis
como tenemos lo que nos interesaba, y de esta forma podemos verificar que la conexión ha ido bien.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Aquí os dejamos el programa completo para que lo podáis descargar: gprs_internet.

RESUMEN DE LA SESIÓN

En esta sesión hemos aprendido varias cosas importantes:

  A configurar el módulo GPRS para conectarse a Internet.

 Hemos realizado una conexión TCP con un servidor.


PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
 A enviar una petición Http.

 Hemos realizado una conexión Http sin utilizar un navegador, utilizando nuestro Arduino.

 Podemos utilizar nuestro Arduino para conectarnos a Internet desde cualquier lugar en el que tengamos
cobertura de red móvil

Anterior Índice tutoriales GSM/GPRS Siguiente

(40) Comments

HEC 26 Dic 2017


Hola…Quisiera saber el procedimiento para mandar una cadena de caracteres a un servidor usando el codigo mas basico
posible, apenas empiezo a usar el Arduino, espero que me puedan orientar por favor…Saludos
Reply

Ivan 03 Ene 2018


Hola HEC, tenemos pendiente el tutorial para subir a un servidor datos desde este módulo. Quizás este pueda
orientarte un poco mientras tanto. https://www.prometec.net/esp8266-subir-valores/
Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Alberto 17 Dic 2017
Buenos dias, me he descargado el programa y lo he conectado y no consigue que me funcione. Y tampoco me sale nada
en el monitor…. No hace nada. No se donde puede estar el error
Reply

Ivan 19 Dic 2017


Hola Alberto asegúrate que los cables para la comunicación serie TX y Rx estén bien conectados y que la velocidad del
monitor serie es 19200.
Reply

Alberto 16 Dic 2017


Buenos dias, lo primero muchas gracias por estos aportes. No soy capaz de conseguir que se comuniquen. En el monitor
de Arduino no me sale nada, Solo interrogaciones y simbolos raros… No se porque sera. No soy capaz de ver donde
Reply esta el error

Ivan 19 Dic 2017


Si te salen símbolos raros en el monitor serie lo más normal es que tengas masl puesta la velocidad del monitor serie.
Recueerda que tiene que ser a 19200. Un saludo.
Reply

Gaston 22 Nov 2017


Hola! Muchas gracias por el tuto!

Reply Quería preguntar, hay alguna forma de usar el internet para no consumir datos móviles, es decir, gratis? Saludos y
muchas gracias!!

Ivan 23 Nov 2017


Hola Gaston, que yo sepa no la hay.

Reply

Francisco 14 Oct 2017


PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Hola.
Muy buen tutorial
Mi consulta es que si puedo crear peticiones a la misma placa desde internet (como servidor) para envierle datos
Reply Que funcione como sender para enviar los datos a otro servidor y como reciever para recivir datos y generar acciones
Para un sistema de automatización
¿Se puede?
¿Que librerias necesito?

Ivan 17 Oct 2017


Hola Francisco, yo lo he usado para subir datos a un servidor y no he tenido problema. También deberías poder usarlo
para recibir desde un servidor. Tenemos pendientes esos tutoriales, a ver si sacamos tiempo para hacerlos. Un saludo.
Reply

Rodrigo Pinto 24 Sep 2017


Estimado mi consulta es la siguiente:
después de hacer las configuraciones para generar conexión y todo, puedo utilizar algo como la librería restclientmaster?
Reply para asi poder subir o descargar info con el método GET/POST ? a unos archivos php alojados en un hosting junto a una
base de datos?

El tema es que yo lo tengo hecho con arduino ethernet, o el famoso nodemcu, pero ahora necesito este módulo, que
me entrega una conexión directa a internet.

Ojala puedas orientarme, o darme tus apreciaciones, de ante mano gracias.

Ivan 01 Oct 2017


Hola Rodrigo, la librería que comentas facilita mucho el trabajo, pero he usado el GPRS para subir datos mediante
GET/POST a una base de datos mysql con phpmyadmin. ¿Dónde tienes el problema al intentarlo?
Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Mario velasquez 06 Sep 2017
Buena tarde
Muchas gracias por tantos aportes, me han servido mucho
Reply En este momento me encuentro trabajando este tuto y me ha presentado problemas con la conexión
inicialmente se me quedaba en este ciclo y no salía
while ( enviarAT(“AT+CREG?”, “+CREG: 0,1″, 1000) == 0 )
{}
luego limité el ciclo para que se saliera y lo dejé en 5 minutos
pero me encuentro con el siguiente error
dentro del while genera:
AT+CREG?
+CREG: 0,5
cuando pasa del ciclo y hago la conexión me genera esto:

Conectado a la red.
AT+CGATT=1
OK

AT+CSTT=”lte.avantel.com.co”,”Avantel LTE”,””
ERROR

AT+CIICR
ERROR

Qué puede ser?


Gracias

Ivan 07 Sep 2017


Hola MArio, creo que tiene que ver con tu tarjeta, el 5 que te devuelve quiere decir que está en Roaming, y debería de
devolverte un 1. Puedes probar con otra tarjeta?
Reply

johnny 02 May 2017


Buen día, gracias por compartir tus conocimientos.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Uso el módulo GPRS para enviar datos a un servidor TCP/IP, el tiempo total que toma para establecer conexión con mi
servidor lo considero muy alto, mi pregunta es ¿hay alguna manera de mantener una conexión GPRS permanente, es
decir, tener una IP local asignada permanentemente y solo ejecutar los comandos que establecen conexión con mi
Reply servidor.

AT+CIPSTART=”TCP”,”116.228.221.51”, “8500” // Iniciar conexión con mi servidor


AT+CIPSEND // enviar dato al servidor

P.D. deseo mantener una conexión permanente con la red GPRS (IP local asignada), no una conexión TCP permanente
con mi servidor.
Gracias por su respuesta.

Ivan 05 May 2017


Hola Johnny, pues la verdad no sé muy bien que decirte, debería de ser posible, pero si es cierto que a mí también se
me cierra la conexión con la red GPRS. Tengo pensado hacer un tutorial en cuanto pueda de subir datos con este
Reply módulo a un servidor, trataré de investigar sobre ello y te comento lo que sea. Un saludo.

Johnny 05 May 2017


Gracias por responder, estaré atento a cualquier post sobre el tema.
Me falta hacer pruebas con algún chip (SIM) con APN privado o M2M, acá en Perú aún no tenemos acceso a
Reply ese tipo de SIM Card (o de momento sí pero solo es un servicio para empresas), pero tal vez tú si puedas
hacerlo.
En cualquier caso, para mi es un tema que siempre está dando vueltas en mi cabeza, así que si llego a saber
algo ya estaré respondiendo bajo este mismo comentario.
Gracias.

JuanGT 09 Abr 2017


Hola, tengo una duda con respecto a la PIN y con el APN, cuando lo corrí el programa al principio me tomaba bien el
PIN pero no el APN, si mi APN no lleva usuario ni contraseña como pondría la cadena de caracteres? y la otra pregunta,
Reply si es cierto que con 3 veces que ponga mal el pin (que no lo he hecho) como puedo ponerle el puk para que me vuelva a
recibir el pin. Saludos y gracias de ante manos

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 16 Abr 2017
Hola Juan, por lo que leo aunque no me queda muy claro el puk se mete con el mismo comando que el pin, pero tienes
además que añadir un nuevo pin a la tarjeta. Esto pone más o menos: AT+CPIN=, Si el password que se requiere es el
Reply PUK se requiere también el segundo pin para reemplazar el pin anterior de la tarjeta.

Si tu apn no lleva usuario ni contraseña supongo que bastará con pasarle Strings vacíos “”, pero no puedo probarlo
porque mi SIM si me los pide.

Un saludo.

Vince 08 Abr 2017


Hola Ivan, primero de todo gracias por tu enfasis en responder a todas las preguntas.
Hace un mes hice una pregunta acerca de como cambiar los datos para entrar a cualquier otra página y me respondiste
Reply que tu conseguiste hacerlo con google.
Bueno resulta que yo no pude y creo que es básicamente porque Arduino no puede enviar peticiones a páginas con
https, tan solo a paginas http como prometec y muchas otras en las que google no es una de ellas.
Como conseguiste que te funcionase? Luego yo quiero enviar datos a un servidor, heroku exactamente, pero ellos
también usan https. Alguna solución si realmente no se puede hacer con https??
Muchas gracias.

Jorge Salazar Alcaraz 28 Mar 2017


Buen día. Actualmente me asignaron un proyecto y estoy vuelto loco con ésto del FONA Adafruit. ¿No sé si existirá o
tendrán algún tutorial para realizar un código básico para Arduino conectado un FONA SIM800H para realizar un método
Reply HTTP GET y, aparte, un método HTTP POST en un servidor básico? Agradecería bastante que me pudieran apoyar con
esta información.

Ivan 29 Mar 2017


Hola Jorge, nunca he usado ese módulo, pero tiene el mismo chip que el módulo GSM/GPRS con GPS que hemos
utilizado y parece que se maneja igual que el SIM900. EL código debería valerte para hacer la petición http.
Reply ¿Quéproblemas estás teniendo?

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ricardo Fiallos 15 Mar 2017
Una pregunta.

Reply Los comandos AT son para cualquier operadora? Tiene algun tipo de restriccion por pais?

Saludos

Ivan 18 Mar 2017


Hola Ricardo, los comandos AT sirven para comunicar el Arduino con el módulo GPRS, y son los mismos para cualquier
operadora. Un saludo.
Reply

Vince 14 Mar 2017


Hola! todo muy bien, pero si en vez de entrar a prometec.net/prueba-http/ quisiéramos entrar en alguna otra pagina por
ejemplo esta,
Reply https://www.google.es/?gfe_rd=cr&ei=P8MmVKa7IsWA8QedoYGwBg&gws_rd=ssl#q=fvnerfvjernvjoefv&*
de Google, que debería cambiar, he probado lo lógico pero no lo he conseguido, supongo que el problema está aquí

char direccion[] = “GET /prueba-http/ HTTP/1.1\r\nHost: https://www.prometec.net\r\nConnection: close\r\n\r\n”;


¿Como escribimos la dirección exactamente?

enviarAT(“AT+CIPSTART=\”TCP\”,\”www.prometec.net\”,\”80\””, “CONNECT OK”, 5000); //Inicia una conexión TCP


En esta me imagino que cambiando la url por http://www.google.es ya estaría bien no?
Bueno, muchas gracias por todo, hacéis unos tutoriales muy buenos, espero el de recoger datos de un sensor con
ganas!
Un saludo

Ivan 15 Mar 2017


Hola Vince, no tendría más que sustituir

Reply enviarAT(“AT+CIPSTART=\”TCP\”,\”www.prometec.net\”,\”80\””, “CONNECT OK”, 5000); //Inicia una conexión TCP

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


por

enviarAT(“AT+CIPSTART=\”TCP\”,\”www.google.es\”,\”80\””, “CONNECT OK”, 5000); //Inicia una conexión TCP

Y en la petición http poner la dirección a la que quieres hacerla, terminado siempre en /, o sea:

char direccion[] = “GET /search?q=fvnerfvjernvjoefv&*&cad=h/ HTTP/1.1\r\nHost:


http://www.google.es \r\nConnection: close\r\n\r\n”;

Yo lo he probado y me ha funcionado perfectamente. Un saludo.

Deuxto 18 Feb 2017


Hola, he conseguido hacer lo que se consigue con esta serie de tutoriales, he conseguido enviar desde mi arduino
mediante una placa GPRS y comandos AT enviar datos recogidos de unos sensonres y enviarlos a una base de datos en
Reply mi ordenador instalando un servidor en él. La duda que tengo ahora, es como enviar desde mi servidor informacion al
arduino, ya que quisiera cambiar parámetros en el arduino como el tiempo que hay entre cada medida o activar un motor
desde una pagina web , enviando una peticion http al arduino, pero no se que comando AT existen o si tengo que utilizar
otra cosa.

Gracias!

Otra duda, he conseguido sincronizar la hora del sistema mediante el comando AT :AT+CNP, y lo muestro por pantalla
con AT+CCLK?, pero no se como almacenar el valor que me da AT+CCLK? para despues con la libreria Time.h poner en
hora mi arduino y despues sacar el tiempo en el que cada sensor toma la muestra para así poder hacer un seguimiento
en el tiempo de como varía.

Ivan 18 Feb 2017


Hola Deuxto, es un proyecto de lo más interesante y precisamente pensábamos publicar algo al respecto porque es
muy útil. La verdad que no puedo contestarte así a la ligera, pero intentaremos publicar una sesión tratando ese tema
Reply lo antes que podamos. Un saludo.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Jorge 23 Feb 2017
Hola Deuxto, en el proyecto que estoy realizando necesito mandar datos a un servidor web. ¿Podrías mostrarnos cómo
lo has conseguido? Y si lo has hecho con la placa GPRS que proponen en esta página. Un saludo
Reply

Ivan 25 Feb 2017


Hola Jorge, intentaremos subir un tutorial tratando ese tema las próximas semanas. Un saludo.

Reply

hecpas 12 Mar 2017


Hola Deuxto, me interesa el tema de enviar desde mi arduino los datos recogidos por los sensores a un servidor, ya
que lo necesito para mi proyecto, debo de almacenar datos de temperatura y humedad entre otros. Podrias mostrar
Reply como lo has conseguido?

Un saludo.

Héctor 05 Feb 2017


Hola, mi problema es el siguiente, necesito enviar los datos que recojo mediante unos sensores (humedad, temperatura,
etc) a un servidor para después recogerlos y mostrarlos bien en una pagina web o en una app. Como lo podría hacer?
Reply Gracias de antemano y un saludo.

admin 06 Feb 2017


Hola hector, Puedes enviar los datos de tu modulo como un mensaje TCPIP al servidor web a traves del modulo GSM,
pero aun no hemos hecho este tutoria
Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Maxi 27 Dic 2016
necesito enviar y recibir datos entre dos modulos sim900 mediante gprs, como puedo hacerlo?
Muchas gracias
Reply

Ivan 27 Dic 2016


Puedes hacerlo mediante SMS, si quieres hacerlo por internet, supongo que tendrías que crear un servidor y coger y
mandar os datos allí. Un saludo.
Reply

Juancho 23 Dic 2016


Buenas, muchas gracias por el tutorial pero tengo un problema que no consigo resolver, mi tarjeta sim no tiene pin
entonces pruebo a poner 0000 y me da error de pin, incluso lo pongo en blanco y me sigue dando error en el pin, alguna
Reply duda de que pin poner o que codigo para que me conecte automatico? me estoy volviendo loco y no se que hacer
gracias.

Ivan 24 Dic 2016


Hola Juancho, pues en teoría sólo tendrías que prescindir de la instrucción en la que metemos el PIN. Un saludo.

Reply

sebas 21 Dic 2016


Excelente amigo he seguido desde el indice GSM/GPRS y me ha salido perfecto, tengo una pregunta existe alguna
posibilidad de usar el modulo GPRS como sistema GPS ?
Reply

Ivan 21 Dic 2016


Hola Sebas, por lo que yo sé no con este, pero hay módulos que integran ambos sistemas. Estamos pendientes de
publicar algo al respecto. Un saludo.
Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


sebas 27 Ene 2017
otra pregunta se puede alimentarlo con 12v?

Reply

GIVE A REPLY

Message

Name (required) Email (required)

URL

Post comment
WordPress
WordPress Anti-Spam
Anti-Spam by
by WP-SpamShield
WP-SpamShield

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Copyright Prometec

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


TIENDA ARDUINO RASPBERRY PI IMPRESORA 3D FORO CONTACTO

ANEXO COMANDOS AT PARA GSM/GPRS Y GPS


Comandos AT más usados SIM808 y SIM900

Home 
 ANEXO COMANDOS AT PARA GSM/GPRS Y GPS

Os dejamos una tabla con los comandos AT más usados en los módulos GSM/GPRS y GPS SIM900 y SIM808.

AT Comprueba estado del módulo.

AT+CPIN=”XXXX” Introducir el PIN de la SIM. Cambiar XXXX por el PIN.

AT+CREG? Comprueba la conexión a la red.

ATDXXXXXXX; Realiza una llamada. Sustituir XXXXXXXXX por el nº al que queramos llamar.

ATA Descuelga una llamada.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


ATH Finaliza la llamada.

Configura el modo texto para enviar o recibir mensajes. Devuelve “>” como
AT+CMGF=1
inductor.

AT+CMGS=”XXXXXXXXX” Nº al que vamos a enviar el mensaje.

AT+CLIP=1 Activamos la identificación de llamada.

AT+CNMI=2,2,0,0,0 Configuramos el módulo para que muestre los SMS por el puerto serie.

AT+CGATT=1 Conectamos a la red GPRS.

AT+CSTT=”APN”,”usuario”,”contraseña” Definimos APN. usuario y contraseña

AT+CIICR Activamos el perfil de datos inalámbrico

AT+CIFSR Obtenemos nuestra IP

AT+CIPSTART=”TCP”,”direccionIP”,”puerto” Indicamos el tipo de conexión, dirección IP y puerto al que realizamos la conexión

AT+CIPSEND Preparamos el envío de datos. Devuelve “>” como inductor.

AT+CIPCLOSE Cerramos la conexión.

AT+CIPSHUT Cierra el contexto PDP del GPRS

AT+CGPSPWR=1 Activar el GPS.

AT+CGPSSTATUS? Comprueba que el GPS ha encontrado la red.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Obtiene los datos del GPS: Modo,Latitud,Longitud,Altitud,HorarioUTC,Tiempo
AT+CGPSINF=0
de respuesta,Número de satélites,Velocidad,Curso

para obtener los datos del GPS usando la especificación de la NMEA: Horario
AT+CGPSOUT=32 UTC,Estado,Latitud,Longitud,Velocidad en nudos,Ángulo de derrota en
grados,Fecha,Variación magnética,Datos del Cheksum

AT+CGPSPWR=0 Cerrar el GPS.

(46) Comments

Cesar García 22 Dic 2017


Gracias Ivan por tu respuesta, resulta que le cambie la velocidad al modulo TX RX pero ahora no recuerdo la nueva
velocidad como puedo restaurar a la velocidad original? muchas gracias por tu respuesta
Reply saludos

Ivan 02 Ene 2018


Hola César, con este comando AT+IPR? puedes preguntarle la velocidad a la que está el módulo.

Reply

Aioros1995 22 Dic 2017


Hola Iban, muchas gracias por tus aportes, nos han servido de mucho.

Reply Queria consultarte lo siguiente:


Estoy trabajando en uns sistema de GPS, con exactamente el mismo modulo y el mismo arduino, pero en mi caso
requiero activar el internet del modulo, y enviar unos datos a Firebase, no sabes si esto es posible?, o si talvez tienes
alguna guia que me pueda orientar,

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Muchas gracias por cualquier comentario que me puedes brindar. Saludos

Ivan 22 Dic 2017


Hola! Tenemos pendiente el tutorial para subir datos a un servidor con este módulo, de momento quizás estos puedan
orientarte un poco.
Reply
Por una parte aquí usamos el módulo para conectarnos a internet y hacer una petición http:
https://www.prometec.net/gprs-internet/
Por otra aquí usamos un módulo WiFi para subir datos a un servidor. La manera de hacerlo con el GPRS es muy
parecida, la URL la tendrías que componer de la misma forma: https://www.prometec.net/esp8266-subir-valores/

A ver si te sirve de algo. Un saludo.

Augusto 15 Dic 2017


Hola Ivan, como has estado? de antemano te agradezco por compartir tus conocimientos con nosotros, Oye tengo una
consulta, tengo una sim808, estoy necesitando utilizar el gps, siempre que hago el comando para pedir la localización me
Reply responde “Location No Fix”, otros comandos como por ejemplo recibir mensajes de texto lo hacen perfectamente, los
comandos AT funcionan bien, incluso lo del mismo gps como CGPSPWR y CGPSSTATUS, pero siempre me dice “no Fix”
no sé que pueda hacer, lo tengo conectado a una fuente de 12V – 1.5A, será que eso afecta?

Ivan 19 Dic 2017


Hola Augusto, a veces tarda un buen rato en encontrarla, y si estás en casa o una oficina puede no hacerlo. Prueba a
sacarlo por la ventana a ver si así consigues que encuentre la red. Un saludote.
Reply

juanjose 10 Dic 2017


Hola. Soy nuevo por aquí. Tengo en mente una aplicación, en la que realizo una llamada, y necesito saber si es
descolgada o no, pero no se como detectarlo.
Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 13 Dic 2017
Hola Juan José, así de primeras no se me ocurre cómo podría hacerse. A ver si alguien puede echarnos una mano con
ello. UN saludo.
Reply

cesar fuentes 23 Nov 2017


Hola Ivan.
Excelente tus posteos, felicitaciones. Ahora quiero comentarte mi problema, adhquiri dos sim900 una nunca logra
Reply conectarse a la red y la otra habeces logra hacerlo. Uso fuente externa de 2 A. para la sim900 y arduino uno lo alimento
desde mi laptop, cuando tengo arduino uno como TTl y se conecta a la sim900 me entrega los siguientes comentarios
RDY . +CFUN1. +CPIN: READY. Call Ready. en monitor serie envió comando AT y no obtengo retorno del sim, podrías
ayudarme ya que quiero enviar y recibir sms desde la sim. Saludos

Ivan 23 Nov 2017


Hola César, si el SIM900 te envía mensajes pero no te contesta a los enviados desde el Arduino, puedes tener un
problema en la conexión del Tx del Arduino al Rx del SIM900, un problema en la velocidad de comunicación o que el
Reply programa que usas para enviar y recibir los comandos AT no sea correcto. Aquí tienes un ejemplo del programa
https://www.prometec.net/sim808/

Ricardo 01 Dic 2017


Verifica tu fuente, leí que se recomienda 2A con 5V

Reply

Ile 20 Nov 2017


Buen dia Ivan Tengo una sim808 adafruit pero cada que ingreso un comando aparece Failed to enable, la sim esta
conectado sobre Arduino Uno. pero estoy alimentando al arduino con una fuente externa, rx y tx estan conectados en
Reply los pines 2 y 3 para hacer esto posible uso la libreria softwarserial. A que se deber esto?
Gracias por tu ayuda .

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 23 Nov 2017
Hola Ile, lo lo he usado nunca así que no sé bien qué decirte. Los comandos AT deberían funcionar, así que el
problema creo que debería venir en las conexiones o en la velocidad de comunicación del módulo. Un saludo.
Reply

Octavio 16 Nov 2017


Hola, buenas Ivan muchas gracias por compartir tus conocimientos un saludo muy cordial, tengo una duda es posible
evitar el estar metiendo comandos AT para realizar llamadas y que estas tengan de actuador un botón o un censor
Reply tengo un modulo sim800L, de ante mano muchas gracias

Ivan 16 Nov 2017


Hola Octavio, no tendrías más que hacer un condicional if y poner la condición que te parezca, por ejemplo que
pulsemos el botón. Dentro del if le pones el comando AT y listo. Un saludo.
Reply

Nestor 15 Nov 2017


Buen día de antemano gracias por los comandos, sabes si abra alguna manera de enviar comandos AT sobre TCP/IP?

Reply Saludos!

Ivan 17 Nov 2017


La verdad es que ni idea Nestor, concretando un poco ¿que es lo que tienes en mente hacer?

Reply

ile 29 Oct 2017


hola, gracias por compartir tus conocimientos, tengo una sim808, le cargue un programa por error con arduino y ahora
no deja de reiniciarse, ayuda por favor.
Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 31 Oct 2017
Hola Ile, no puedes cargar un programa en la SIM808. Si se te reinicia todo el rato puede ser un problema de falta de
alimentación.
Reply

ile 14 Nov 2017


muchas gracias por tus aportes Ivan =)

Reply

Ivan 15 Nov 2017


Gracias a ti por seguirnos! Un saludo.

Reply

Mariano 27 Oct 2017


Buenas tardes, que cómando se utiliza para enviara códigos USSD?

Reply

Ivan 31 Oct 2017


La verdad es que nos abía que eran los códigos USSD, y no veo ningún comando para enviarlos. Un saludo.

Reply

Ivan 31 Oct 2017


La verdad es que nos sabía que eran los códigos USSD, y no veo ningún comando para enviarlos. Un saludo.

Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Stella 20 Oct 2017
Bom dia,
o que seria o 3000? Na linha : enviarAT(“AT+CSTT=\”ac.vodafone.es\”,\”vodafone\”,\”vodafone\””, “OK”, 3000);
Reply Obrigada.

Ivan 23 Oct 2017


Hola Stella, creo recordar que es el tiempo que le damos al módulo hasta recibir la respuesta. Un saludo.

Reply

Jonathan 09 Oct 2017


Hola teso puedes indicarme cual es el comando para hacer llamadas simultaneas

Reply

Ivan 10 Oct 2017


Yo no encuentro ninguno que puedas servirte, pero puedes hacer una detrás de otra. un saludo.

Reply

carloncho 26 Sep 2017


Para activar los tonos DTMF que comandos hay que utilizar

Reply

Ivan 01 Oct 2017


Esto es lo que he econtrado:

Reply AT+VTD=xx
This command is optional, and is used to set the DTMF tone duration in 100mS steps.
AT+VTS=x

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


To send the actual DTMF code, you have to call this command for every digit sent. To send, for instance “*1234#”,
you have to send:
AT+VTD=*;+VTD=1;+VTD=2;+VTD=3;+VTD=4;+VTD=#

Fabian 20 Sep 2017


Buenas Tardes

Reply Hace un tiempo vengo trabajando con un sim900 conectado a un arduino Mega. De momento he logrado conectarme a
Internet y enviar datos con un chip de una compañía, y no he tenido problemas. Por temas de costos, adquirí un chip de
otra compañía, pero resulta que esta ultima, para conectarse a Internet, requiere activar el roaming o itinerancia de
datos. Mi consulta es ¿Existirá algún comando que me permita activar el roaming desde el sim900?

Desde ya, muchas gracias


saludos

Ivan 22 Sep 2017


Hola Fabian, no he encontrado manera. Creo que tienes que hablar con la operadora para activarlo.

Reply

emmanuel 19 Sep 2017


hola muchachos como estan? espectacular todo el post, queria consultar una cosilla, me sirvio bastante todo lo q
enseñaste, estoy haciendo un sistema de monitoreo de 8 sensores de temperatura ds18b20 y bueno junto con un arduino
Reply un shield sim900, lector de memoria micro SD, y un RTC DS3231, y lcd 20×4, tengo la mitad realizada ya guardo mis
datos de temperatura en una micro sd y leo cada una hs la temperatura y bajando los datos guardados de la sd veo los
datos en excel, pero viendo este post que es tambien lo que necesitaba, quiero saber como puedo mandar sms, una vez
que con el rtc guarde los datos, osea como puedo modificar el texto en funcion a la variable de temperatura que va
cambiando, desde ya muchisimas gracias

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 19 Sep 2017
Hola Emmanuel, si estas usando este programa para el envio de sms https://www.prometec.net/gprs-enviar-recibir-
llamadas-sms/ tendrías que crear un char como este char sms[] = “Mensaje enviado desde el Arduino de Prometec!
Reply \x1A \r\n”; pero sustituyendo el texto por la lectura del sensor, respetando las comillas y los \x1A \r\n.

Para ello vas a tener que convertir primero el int o el float que te devuelva el sensor a char.

Arturo 09 Jun 2017


hola, quisiera conectar el sim808 a un servidor para que pueda enviar datos obtenidos del arduino, como podria
configurarlo?
Reply

Ivan 10 Jun 2017


Hola Arturo seguimos teniendo pendiente ese tutorial. Mientras tanto estos pueden ayudarte
https://www.prometec.net/gprs-internet/
Reply https://www.prometec.net/esp8266-subir-valores/

Échales un ojo y cualquier duda nos comentas.

Teso 07 Jun 2017


Hola, sigo muchísimos de vuestros tutoriales para un proyecto domótico bastante completo y hasta ahora estoy
alucinando con lo bien testeados que tenéis vuestros trabajos y ya que es la primera vez que os escribo quiero felicitaros
Reply por ello. Mi consulta es si sabéis de algún comando para ver si existe una llamada entrante y también alguno para
descolgar esa misma llamada. Gracias de antemano. Un cordial saludo.

Teso 07 Jun 2017


En el tuto aparece el comando para activar la identificación de llamada pero no veo nada de como gestionarla ni
identificarla.
Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 07 Jun 2017
Hola Teso, el comando hace que te llegue por el puerto serie el teléfono. Para gestionarlo tendrías que hacerlo
ya con programación normakl, coger esos datos y hacer lo que creas conveniente con ellos. Aquí hacemos
Reply algo de eso: https://www.prometec.net/gprs-controlar-led/

Ivan 08 Jun 2017


Hola Teso, lo que podrías hacer es leer el puero serie y si recibes un “RING” sabes que está entrando una llamada.

Reply Para descolgar leo por ahí que es el comando “ATA” aunque no lo he probado. Si lopruebas ya nos contarás si
funciona. Un saludo.

Juanpe 22 Jul 2017


Sí, es ATA.
Por ejemplo, se puede usar así: enviarAT(“ATA”, “OK”, 1000);
Reply

Ivan 23 Jul 2017


Gracias por el aporte Juanpe. Lo añadimos a la lista de comandos. Un saludo.

Reply

Marlo Delgado 05 May 2017


Buenas noches tengo el mismo problema del GPS que no se activa y ya hice lo que recomendaste y aun así persiste

Reply

Ivan 05 May 2017


Los demás comandos AT te los responde correctamente? Me refiero a los que no necesitan del GPS, claro.

Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Addy Rocha 30 Mar 2017
Buen día, al momento de poner el comando AT+CGPSPWR=1, nos marca Error, igual se está alimentando el modulo con
una fuente de 12v a 2A, conexiones de comunicación bien establecidas. Al igual que la tierra.
Reply
Sabes a que se puede deber este error?

De antemano muchas gracias por tu ayuda. Saludos

Ivan 30 Mar 2017


Comprueba que tienes la antena GPS bien conectada y acercala lo máximo posible a una evntana a ver si lo solucionas
y me cuentas. Un saludo.
Reply

GIVE A REPLY

Message

Name (required) Email (required)

URL

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Post comment
WordPress
WordPress Anti-Spam
Anti-Spam by
by WP-SpamShield
WP-SpamShield

Copyright Prometec

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


TIENDA ARDUINO RASPBERRY PI IMPRESORA 3D FORO CONTACTO

ANEXO COMANDOS AT PARA GSM/GPRS Y GPS


Comandos AT más usados SIM808 y SIM900

Home 
 ANEXO COMANDOS AT PARA GSM/GPRS Y GPS

Os dejamos una tabla con los comandos AT más usados en los módulos GSM/GPRS y GPS SIM900 y SIM808.

AT Comprueba estado del módulo.

AT+CPIN=”XXXX” Introducir el PIN de la SIM. Cambiar XXXX por el PIN.

AT+CREG? Comprueba la conexión a la red.

ATDXXXXXXX; Realiza una llamada. Sustituir XXXXXXXXX por el nº al que queramos llamar.

ATA Descuelga una llamada.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


ATH Finaliza la llamada.

Configura el modo texto para enviar o recibir mensajes. Devuelve “>” como
AT+CMGF=1
inductor.

AT+CMGS=”XXXXXXXXX” Nº al que vamos a enviar el mensaje.

AT+CLIP=1 Activamos la identificación de llamada.

AT+CNMI=2,2,0,0,0 Configuramos el módulo para que muestre los SMS por el puerto serie.

AT+CGATT=1 Conectamos a la red GPRS.

AT+CSTT=”APN”,”usuario”,”contraseña” Definimos APN. usuario y contraseña

AT+CIICR Activamos el perfil de datos inalámbrico

AT+CIFSR Obtenemos nuestra IP

AT+CIPSTART=”TCP”,”direccionIP”,”puerto” Indicamos el tipo de conexión, dirección IP y puerto al que realizamos la conexión

AT+CIPSEND Preparamos el envío de datos. Devuelve “>” como inductor.

AT+CIPCLOSE Cerramos la conexión.

AT+CIPSHUT Cierra el contexto PDP del GPRS

AT+CGPSPWR=1 Activar el GPS.

AT+CGPSSTATUS? Comprueba que el GPS ha encontrado la red.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Obtiene los datos del GPS: Modo,Latitud,Longitud,Altitud,HorarioUTC,Tiempo
AT+CGPSINF=0
de respuesta,Número de satélites,Velocidad,Curso

para obtener los datos del GPS usando la especificación de la NMEA: Horario
AT+CGPSOUT=32 UTC,Estado,Latitud,Longitud,Velocidad en nudos,Ángulo de derrota en
grados,Fecha,Variación magnética,Datos del Cheksum

AT+CGPSPWR=0 Cerrar el GPS.

(46) Comments

Cesar García 22 Dic 2017


Gracias Ivan por tu respuesta, resulta que le cambie la velocidad al modulo TX RX pero ahora no recuerdo la nueva
velocidad como puedo restaurar a la velocidad original? muchas gracias por tu respuesta
Reply saludos

Ivan 02 Ene 2018


Hola César, con este comando AT+IPR? puedes preguntarle la velocidad a la que está el módulo.

Reply

Aioros1995 22 Dic 2017


Hola Iban, muchas gracias por tus aportes, nos han servido de mucho.

Reply Queria consultarte lo siguiente:


Estoy trabajando en uns sistema de GPS, con exactamente el mismo modulo y el mismo arduino, pero en mi caso
requiero activar el internet del modulo, y enviar unos datos a Firebase, no sabes si esto es posible?, o si talvez tienes
alguna guia que me pueda orientar,

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Muchas gracias por cualquier comentario que me puedes brindar. Saludos

Ivan 22 Dic 2017


Hola! Tenemos pendiente el tutorial para subir datos a un servidor con este módulo, de momento quizás estos puedan
orientarte un poco.
Reply
Por una parte aquí usamos el módulo para conectarnos a internet y hacer una petición http:
https://www.prometec.net/gprs-internet/
Por otra aquí usamos un módulo WiFi para subir datos a un servidor. La manera de hacerlo con el GPRS es muy
parecida, la URL la tendrías que componer de la misma forma: https://www.prometec.net/esp8266-subir-valores/

A ver si te sirve de algo. Un saludo.

Augusto 15 Dic 2017


Hola Ivan, como has estado? de antemano te agradezco por compartir tus conocimientos con nosotros, Oye tengo una
consulta, tengo una sim808, estoy necesitando utilizar el gps, siempre que hago el comando para pedir la localización me
Reply responde “Location No Fix”, otros comandos como por ejemplo recibir mensajes de texto lo hacen perfectamente, los
comandos AT funcionan bien, incluso lo del mismo gps como CGPSPWR y CGPSSTATUS, pero siempre me dice “no Fix”
no sé que pueda hacer, lo tengo conectado a una fuente de 12V – 1.5A, será que eso afecta?

Ivan 19 Dic 2017


Hola Augusto, a veces tarda un buen rato en encontrarla, y si estás en casa o una oficina puede no hacerlo. Prueba a
sacarlo por la ventana a ver si así consigues que encuentre la red. Un saludote.
Reply

juanjose 10 Dic 2017


Hola. Soy nuevo por aquí. Tengo en mente una aplicación, en la que realizo una llamada, y necesito saber si es
descolgada o no, pero no se como detectarlo.
Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 13 Dic 2017
Hola Juan José, así de primeras no se me ocurre cómo podría hacerse. A ver si alguien puede echarnos una mano con
ello. UN saludo.
Reply

cesar fuentes 23 Nov 2017


Hola Ivan.
Excelente tus posteos, felicitaciones. Ahora quiero comentarte mi problema, adhquiri dos sim900 una nunca logra
Reply conectarse a la red y la otra habeces logra hacerlo. Uso fuente externa de 2 A. para la sim900 y arduino uno lo alimento
desde mi laptop, cuando tengo arduino uno como TTl y se conecta a la sim900 me entrega los siguientes comentarios
RDY . +CFUN1. +CPIN: READY. Call Ready. en monitor serie envió comando AT y no obtengo retorno del sim, podrías
ayudarme ya que quiero enviar y recibir sms desde la sim. Saludos

Ivan 23 Nov 2017


Hola César, si el SIM900 te envía mensajes pero no te contesta a los enviados desde el Arduino, puedes tener un
problema en la conexión del Tx del Arduino al Rx del SIM900, un problema en la velocidad de comunicación o que el
Reply programa que usas para enviar y recibir los comandos AT no sea correcto. Aquí tienes un ejemplo del programa
https://www.prometec.net/sim808/

Ricardo 01 Dic 2017


Verifica tu fuente, leí que se recomienda 2A con 5V

Reply

Ile 20 Nov 2017


Buen dia Ivan Tengo una sim808 adafruit pero cada que ingreso un comando aparece Failed to enable, la sim esta
conectado sobre Arduino Uno. pero estoy alimentando al arduino con una fuente externa, rx y tx estan conectados en
Reply los pines 2 y 3 para hacer esto posible uso la libreria softwarserial. A que se deber esto?
Gracias por tu ayuda .

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 23 Nov 2017
Hola Ile, lo lo he usado nunca así que no sé bien qué decirte. Los comandos AT deberían funcionar, así que el
problema creo que debería venir en las conexiones o en la velocidad de comunicación del módulo. Un saludo.
Reply

Octavio 16 Nov 2017


Hola, buenas Ivan muchas gracias por compartir tus conocimientos un saludo muy cordial, tengo una duda es posible
evitar el estar metiendo comandos AT para realizar llamadas y que estas tengan de actuador un botón o un censor
Reply tengo un modulo sim800L, de ante mano muchas gracias

Ivan 16 Nov 2017


Hola Octavio, no tendrías más que hacer un condicional if y poner la condición que te parezca, por ejemplo que
pulsemos el botón. Dentro del if le pones el comando AT y listo. Un saludo.
Reply

Nestor 15 Nov 2017


Buen día de antemano gracias por los comandos, sabes si abra alguna manera de enviar comandos AT sobre TCP/IP?

Reply Saludos!

Ivan 17 Nov 2017


La verdad es que ni idea Nestor, concretando un poco ¿que es lo que tienes en mente hacer?

Reply

ile 29 Oct 2017


hola, gracias por compartir tus conocimientos, tengo una sim808, le cargue un programa por error con arduino y ahora
no deja de reiniciarse, ayuda por favor.
Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 31 Oct 2017
Hola Ile, no puedes cargar un programa en la SIM808. Si se te reinicia todo el rato puede ser un problema de falta de
alimentación.
Reply

ile 14 Nov 2017


muchas gracias por tus aportes Ivan =)

Reply

Ivan 15 Nov 2017


Gracias a ti por seguirnos! Un saludo.

Reply

Mariano 27 Oct 2017


Buenas tardes, que cómando se utiliza para enviara códigos USSD?

Reply

Ivan 31 Oct 2017


La verdad es que nos abía que eran los códigos USSD, y no veo ningún comando para enviarlos. Un saludo.

Reply

Ivan 31 Oct 2017


La verdad es que nos sabía que eran los códigos USSD, y no veo ningún comando para enviarlos. Un saludo.

Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Stella 20 Oct 2017
Bom dia,
o que seria o 3000? Na linha : enviarAT(“AT+CSTT=\”ac.vodafone.es\”,\”vodafone\”,\”vodafone\””, “OK”, 3000);
Reply Obrigada.

Ivan 23 Oct 2017


Hola Stella, creo recordar que es el tiempo que le damos al módulo hasta recibir la respuesta. Un saludo.

Reply

Jonathan 09 Oct 2017


Hola teso puedes indicarme cual es el comando para hacer llamadas simultaneas

Reply

Ivan 10 Oct 2017


Yo no encuentro ninguno que puedas servirte, pero puedes hacer una detrás de otra. un saludo.

Reply

carloncho 26 Sep 2017


Para activar los tonos DTMF que comandos hay que utilizar

Reply

Ivan 01 Oct 2017


Esto es lo que he econtrado:

Reply AT+VTD=xx
This command is optional, and is used to set the DTMF tone duration in 100mS steps.
AT+VTS=x

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


To send the actual DTMF code, you have to call this command for every digit sent. To send, for instance “*1234#”,
you have to send:
AT+VTD=*;+VTD=1;+VTD=2;+VTD=3;+VTD=4;+VTD=#

Fabian 20 Sep 2017


Buenas Tardes

Reply Hace un tiempo vengo trabajando con un sim900 conectado a un arduino Mega. De momento he logrado conectarme a
Internet y enviar datos con un chip de una compañía, y no he tenido problemas. Por temas de costos, adquirí un chip de
otra compañía, pero resulta que esta ultima, para conectarse a Internet, requiere activar el roaming o itinerancia de
datos. Mi consulta es ¿Existirá algún comando que me permita activar el roaming desde el sim900?

Desde ya, muchas gracias


saludos

Ivan 22 Sep 2017


Hola Fabian, no he encontrado manera. Creo que tienes que hablar con la operadora para activarlo.

Reply

emmanuel 19 Sep 2017


hola muchachos como estan? espectacular todo el post, queria consultar una cosilla, me sirvio bastante todo lo q
enseñaste, estoy haciendo un sistema de monitoreo de 8 sensores de temperatura ds18b20 y bueno junto con un arduino
Reply un shield sim900, lector de memoria micro SD, y un RTC DS3231, y lcd 20×4, tengo la mitad realizada ya guardo mis
datos de temperatura en una micro sd y leo cada una hs la temperatura y bajando los datos guardados de la sd veo los
datos en excel, pero viendo este post que es tambien lo que necesitaba, quiero saber como puedo mandar sms, una vez
que con el rtc guarde los datos, osea como puedo modificar el texto en funcion a la variable de temperatura que va
cambiando, desde ya muchisimas gracias

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 19 Sep 2017
Hola Emmanuel, si estas usando este programa para el envio de sms https://www.prometec.net/gprs-enviar-recibir-
llamadas-sms/ tendrías que crear un char como este char sms[] = “Mensaje enviado desde el Arduino de Prometec!
Reply \x1A \r\n”; pero sustituyendo el texto por la lectura del sensor, respetando las comillas y los \x1A \r\n.

Para ello vas a tener que convertir primero el int o el float que te devuelva el sensor a char.

Arturo 09 Jun 2017


hola, quisiera conectar el sim808 a un servidor para que pueda enviar datos obtenidos del arduino, como podria
configurarlo?
Reply

Ivan 10 Jun 2017


Hola Arturo seguimos teniendo pendiente ese tutorial. Mientras tanto estos pueden ayudarte
https://www.prometec.net/gprs-internet/
Reply https://www.prometec.net/esp8266-subir-valores/

Échales un ojo y cualquier duda nos comentas.

Teso 07 Jun 2017


Hola, sigo muchísimos de vuestros tutoriales para un proyecto domótico bastante completo y hasta ahora estoy
alucinando con lo bien testeados que tenéis vuestros trabajos y ya que es la primera vez que os escribo quiero felicitaros
Reply por ello. Mi consulta es si sabéis de algún comando para ver si existe una llamada entrante y también alguno para
descolgar esa misma llamada. Gracias de antemano. Un cordial saludo.

Teso 07 Jun 2017


En el tuto aparece el comando para activar la identificación de llamada pero no veo nada de como gestionarla ni
identificarla.
Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 07 Jun 2017
Hola Teso, el comando hace que te llegue por el puerto serie el teléfono. Para gestionarlo tendrías que hacerlo
ya con programación normakl, coger esos datos y hacer lo que creas conveniente con ellos. Aquí hacemos
Reply algo de eso: https://www.prometec.net/gprs-controlar-led/

Ivan 08 Jun 2017


Hola Teso, lo que podrías hacer es leer el puero serie y si recibes un “RING” sabes que está entrando una llamada.

Reply Para descolgar leo por ahí que es el comando “ATA” aunque no lo he probado. Si lopruebas ya nos contarás si
funciona. Un saludo.

Juanpe 22 Jul 2017


Sí, es ATA.
Por ejemplo, se puede usar así: enviarAT(“ATA”, “OK”, 1000);
Reply

Ivan 23 Jul 2017


Gracias por el aporte Juanpe. Lo añadimos a la lista de comandos. Un saludo.

Reply

Marlo Delgado 05 May 2017


Buenas noches tengo el mismo problema del GPS que no se activa y ya hice lo que recomendaste y aun así persiste

Reply

Ivan 05 May 2017


Los demás comandos AT te los responde correctamente? Me refiero a los que no necesitan del GPS, claro.

Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Addy Rocha 30 Mar 2017
Buen día, al momento de poner el comando AT+CGPSPWR=1, nos marca Error, igual se está alimentando el modulo con
una fuente de 12v a 2A, conexiones de comunicación bien establecidas. Al igual que la tierra.
Reply
Sabes a que se puede deber este error?

De antemano muchas gracias por tu ayuda. Saludos

Ivan 30 Mar 2017


Comprueba que tienes la antena GPS bien conectada y acercala lo máximo posible a una evntana a ver si lo solucionas
y me cuentas. Un saludo.
Reply

GIVE A REPLY

Message

Name (required) Email (required)

URL

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Post comment
WordPress
WordPress Anti-Spam
Anti-Spam by
by WP-SpamShield
WP-SpamShield

Copyright Prometec

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


TIENDA ARDUINO RASPBERRY PI IMPRESORA 3D FORO CONTACTO

OBTENER NUESTRAS COORDENADAS CON EL SHIELD GPS


Cómo conectar y obtener nuestra posición

Home 
 Obtener Nuestras Coordenadas Con El Shield GPS

OBJETIVOS

  Conocer el shield GPS.

 Aprender a comunicarlo con Arduino.

 Obtener nuestra localización.

MATERIAL REQUERIDO

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


9.60€ + 26.00€

IVA + IVA

ARDUINO UNO GPS SHIELD


REV 3
 Añadir al
 Añadir al carrito
carrito

EL SHIELD GPS

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


A estas alturas todos estamos ya familiarizados con el uso del GPS y como ha ayudado a facilitarnos la vida. Este sistema nos permite determinar
con gran exactitud la posición de una persona, vehículo, etc… en cualquier parte de la Tierra. Fue desarrolado por el ministerio de defensa de EEUU
y para ello pusieron en órbita 24 satélites para cubrir toda la superficie del planeta. Para conseguir nuestra posición necesitamos conectarnos al
menos a 3 de estos satélites.

El Shield GPS de DuinoPeak está diseñado para convertirse en una interfaz sencilla y practica para dotar de posicionamiento GPS a
proyectos Arduino. Incluye una antena de GPS activa y nos permite seleccionar los pines que queremos usar para la comunicación serie entre D0 y
D7.
Además incluye un lector de tarjetas SD para grabar los datos que se registran del GPS mediante interfaz SPI, aunque esto lo dejaremos para la
próxima sesión. Y como nos suele gustar, tenemos una librería que nos facilita el trabajo muchísimo.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Para conectarlo no tenemos más que colocarlo con cuidado encima del Arduino para que todos los pines entren donde deben. Además tenemos que
conectar los jumpers de arriba a la derecha en los pines que queramos usar para la comunicación serie. Nosotros vamos a usar el pin 2 del GPS
como Tx y el 3 como Rx. Podéis verlo más claro en la siguiente imagen.

EL SHIELD GPS

Lo primero que vamos a hacer para empezar a trabajar con el shield es descargar su respectiva librería TinyGPSPlus-0.95. La librería incluye varios
ejemplos que podemos ejecutar directamente, aunque tendremos que hacerle alguna pequeña modificación. Para probarlo vamos a abrir el ejemplo
DeviceExample, que sirve para obtener nuestra localización y la fecha y hora actual.
Al principio del programa incluimos las librerías y declaramos los pines para la comunicación serie y la velocidad del GPS. Si habéis colocado los
jumpers como nosotros tendréis que cambiar los pines Rx y Tx por el 2 y el 3 respectivamente.

Por otra parte, la velocidad por defecto es de 4800 para el GPS, y nosotros no hemos conseguido hacerlo funcionar con ella. La única con la que
hemos conseguido que todo vaya bien 9600 baudios. Total, que tenemos algo como esto:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


#include <TinyGPS++.h>
#include <SoftwareSerial.h>

static const int RXPin = 2, TXPin = 3;


static const uint32_t GPSBaud = 9600;

// The TinyGPS++ object


TinyGPSPlus gps;

// The serial connection to the GPS device


SoftwareSerial ss(RXPin, TXPin);

En el setup lo relevante es que tenemos que vamos a cambiar la velocidad del puerto serie también a 9600:

Serial.begin(9600);
ss.begin(GPSBaud);

En el loop comprobamos que nos llegue algo por el puerto serie que hemos conectado al shield, y si llega llamamos a la función displayInfo, con la
que mostramos los datos del GPS.

void loop()
{
// This sketch displays information every time a new sentence is correctly encoded.
while (ss.available() > 0)
if (gps.encode(ss.read()))
displayInfo();

if (millis() > 5000 && gps.charsProcessed() < 10)


{
Serial.println(F("No GPS detected: check wiring."));
while(true);
}
}

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


RESUMEN DE LA SESIÓN

En esta sesión hemos aprendido varias cosas importantes:

  Cómo conectar el shield y el Arduino correctamente.

 A obtener las coordenadas de nuestro GPS.

Anterior Siguiente

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


No Comments

GIVE A REPLY

Message

Name (required) Email (required)

URL

Post comment
WordPress
WordPress Anti-Spam
Anti-Spam by
by WP-SpamShield
WP-SpamShield

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Copyright Prometec

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


TIENDA ARDUINO RASPBERRY PI IMPRESORA 3D FORO CONTACTO

UTILIZAR EL DATA LOGGER DEL SHIELD GPS


Creando una hoja de cálculo con los datos de GPS

Home 
 Utilizar El Data Logger Del Shield GPS

OBJETIVOS

  Utilizar el data logger del shield GPS.

 Crear ficheros y grabar los datos del GPS en una SD.

 Obtener la distancia a un objetivo.

MATERIAL REQUERIDO

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


9.60€ + 26.00€

IVA + IVA

ARDUINO UNO GPS SHIELD


REV 3
 Añadir al
 Añadir al carrito
carrito

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


+
Out of
8.00€ Stock

IVA

POWERBANK
2.600 MAH
Leer más

USANDO EL DATA LOGGER Y LA TARJETA SD

Ahora que sabemos usar el shield para obtener los datos del GPS, vamos a centrarnos en otras características que nos ofrece. Concretamente en la
capacidad para grabar los datos en una tarjeta SD. Y como extra vamos a calcular la distancia desde nos encontramos al lugar que le indiquemos.
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Lo primero que tenemos que hacer es incluir las librerías y declarar las variables e instancias que vamos a usar después. La mayoría se repiten del
ejemplo anterior, y las que no lo hacen, son las que necesitamos para usar el data logger y la tarjeta SD.

Para poder usar el data logger tenemos que declarar una variable para indicar el chip que estamos usando. No os voy a engañar, cuando lo
intentamos no conseguimos encontrar información concreta de cuál es, pero un poco de prueba y error nos dio la solución, es el chip 8 . A parte de
eso, tenemos que dar nombre al archivo que usaremos para guardar los datos en la tarjeta, con la extensión .CSV .

#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <SD.h>
const int chipSelect = 8;

static const int RXPin = 2, TXPin = 3;


static const uint32_t GPSBaud = 9600;

File dataFile;
char filename[] = "LOGGER00.CSV";

// The TinyGPS++ object


TinyGPSPlus gps;

// The serial connection to the GPS device


SoftwareSerial ss(RXPin, TXPin);

// For stats that happen every 5 seconds


unsigned long last = 0UL;

En el setup tenemos que inicializar el GPS y la SD. Al hacerlo creamos un nuevo archivo en la SD y le damos un nombre con números correlativos,
para no borrar siempre el archivo anterior cuando vayamos a grabar uno nuevo.

Si hemos conseguido abrir la SD y grabar el archivo correctamente, escribimos las cabeceras de los campos que queremos mostrar y las mostramos
también en el monitor serie: latitud, longitud, altitud, velocidad, fecha, hora y distancia al objetivo que le marquemos.

 Vamos a utilizar una “,” como separador para los campos para poder importarlos luego a una hoja de
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Excel.

void setup()
{
Serial.begin(9600);
ss.begin(GPSBaud);

Serial.print(F("Initializing SD card. "));


// make sure that the default chip select pin is set to
// output, even if you don't use it:
pinMode(chipSelect, OUTPUT);

// see if the card is present and can be initialized:


if (!SD.begin(chipSelect)) {
Serial.println(F("Card failed."));
// don't do anything more:
return;
}
Serial.println(F("Card initialized."));

// create a new file with a new filenumber


for (uint8_t i = 0; i < 100; i++) {
filename[6] = i/10 + '0';
filename[7] = i%10 + '0';
if (! SD.exists(filename)) {
// only open a new file if it doesn't exist
dataFile = SD.open(filename, FILE_WRITE);
break; // leave the loop
}
dataFile.close();
}
if (! dataFile) {
Serial.println("couldnt create file");
}
Serial.print("Logging to: ");
Serial.println(filename);
Serial.println("");
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Serial.println("");

//_________________________Write Log File Header__________________________________________________


File dataFile = SD.open(filename, FILE_WRITE);
if (dataFile)
{
dataFile.print(F("Latitud"));
dataFile.print(",");
dataFile.print(F("Altitud"));
dataFile.print(",");
dataFile.print(F("Velocidad"));
dataFile.print(",");
dataFile.print(F("Fecha"));
dataFile.print(",");
dataFile.print(F("Hora"));
dataFile.print(",");
dataFile.println(F("Distancia al objetivo"));
dataFile.close();
}
Serial.print(F("Latitud"));
Serial.print(",");
Serial.print(F("Longitud"));
Serial.print(",");
Serial.print(F("Velocidad"));
Serial.print(",");
Serial.print(F("Fecha"));
Serial.print(",");
Serial.print(F("Hora"));
Serial.print(",");
Serial.println(F("Distancia al objetivo"));
}

Y ya en el loop obtenemos los datos del GPS y los vamos escribiendo en la SD. Una vez tengamos nuestra posición, le indicamos la posición objetivo
y calculamos la distancia a la misma. Hemos puesto como objetivo las coordenadas de Madrid.

void loop()
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
{
// Dispatch incoming characters
while (ss.available() > 0)
gps.encode(ss.read());

if (gps.location.isUpdated())
{

Serial.print(gps.location.lat(), 6);
Serial.print(F(","));
Serial.print(gps.location.lng(), 6);
Serial.print(F(","));
File dataFile = SD.open(filename, FILE_WRITE);
dataFile.print(gps.location.lat(), 6);
dataFile.print(F(","));
dataFile.print(gps.location.lng(), 6);
dataFile.print(F(","));
dataFile.close();
}

else if (gps.speed.isUpdated())
{

Serial.print(gps.speed.kmph());
Serial.print(F(","));
File dataFile = SD.open(filename, FILE_WRITE);
dataFile.print(gps.speed.kmph());
dataFile.print(F(","));
dataFile.close();
}

else if (gps.date.isUpdated())
{

Serial.print(gps.date.day());
Serial.print(F("/"));
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Serial.print(F("/"));
Serial.print(gps.date.month());
Serial.print(F("/"));
Serial.print(gps.date.year());
Serial.print(F(","));
File dataFile = SD.open(filename, FILE_WRITE);
if (gps.date.day()<10){ // Add a zero, if necessary, as above
dataFile.print(0);
}
dataFile.print(gps.date.day());
dataFile.print(F("."));

if (gps.date.month()<10){ // Add a zero, if necessary, as above


dataFile.print(0);
}
dataFile.print(gps.date.month());
dataFile.print(F("."));

dataFile.print(gps.date.year());
dataFile.print(F(","));
dataFile.close();
}

else if (gps.time.isUpdated())
{
Serial.print(gps.time.hour());
Serial.print(F(":"));
Serial.print(gps.time.minute());
Serial.print(F(":"));
Serial.print(gps.time.second());
Serial.print(F(","));
File dataFile = SD.open(filename, FILE_WRITE);
if (gps.time.hour()<10){ // Add a zero, if necessary, as above
dataFile.print(0);
}
dataFile.print(gps.time.hour());
dataFile.print(F(":"));

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


if (gps.time.minute()<10){ // Add a zero, if necessary, as above
dataFile.print(0);
}
dataFile.print(gps.time.minute());
dataFile.print(F(":"));

if (gps.time.second()<10){ // Add a zero, if necessary, as above


dataFile.print(0);
}
dataFile.print(gps.time.second());
dataFile.print(F(","));
dataFile.close();
}

else if (millis() - last > 1000)


{
// Serial.println();
if (gps.location.isValid())
{
static const double MADRID_LAT = 40.4893538, MADRID_LON = -3.6827461; //custom location
double distanceToMadrid =
TinyGPSPlus::distanceBetween(
gps.location.lat(),
gps.location.lng(),
MADRID_LAT,
MADRID_LON);
double courseToLondon =
TinyGPSPlus::courseTo(
gps.location.lat(),
gps.location.lng(),
MADRID_LAT,
MADRID_LON);

File dataFile = SD.open(filename, FILE_WRITE);


dataFile.println(distanceToMadrid/1000, 6);
dataFile.close();
Serial.println(distanceToMadrid/1000, 6);
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Serial.println(distanceToMadrid/1000, 6);
}

last = millis();

}
}

Aquí os dejamos el programa completo: GPS_con_data_logger

Si abrimos el monitor serie podemos ver como funciona el GPS. Primero veremos si es capaz de acceder a la tarjeta y el nombre del archivo que va a
crear. A partir de ahí nos irá dando los datos que hemos obtenido del GPS.

Podéis meter los datos que hemos obtenido en el localizador de coordenadas de Google para ver si funciona correctamente. En nuestro caso la
precisión ha sido altísima:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


UTILIZANDO LOS DATOS DE LA TARJETA SD

Para probar el GPS en condiciones vamos a soltarlo del ordenador, colocarle una power bank (las baterías que se suelen usar para cargar los
móviles) y vamos a salir a dar una vuelta, a ver si todo funciona en condiciones.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Bueno, ya estamos de vuelta… Así que ahora vamos a sacar la tarjeta SD del shield a conectarla a nuestro PC. Si la abrís podréis ver los diferentes
archivos que hemos ido guardando.

Ahora abrimos una hoja nueva de Excel donde vamos a importar los datos que hemos guardado. Para ello vamos a “Datos”->”Obtener datos
externos”->”Desde texto”

Entonces os preguntará como son los campos. Le decimos que están delimitados. Y en la siguiente ventana le decimos que están delimitados por
Comas.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Entonces se os abrirá una hoja excel, con las cabeceras que hemos creado y todos los datos que hemos ido guardando. Probablemente tendréis que
borrar la primera línea, que es lo que ha ido guardando hasta que ha obtenido la localización GPS.

Ahora podéis utilizar estos datos con alguna de las aplicaciones que hay para dibujar el recorrido en un mapa usando Google Maps, o para lo que se
os ocurra. Pero eso os lo dejamos para vosotros.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


RESUMEN DE LA SESIÓN

En esta sesión hemos aprendido varias cosas importantes:

  Hemos aprendido a usar el data logger del shield GPS.

 Guardamos los datos en una tarjeta SD.

 Hemos importado los datos a una hoja Excel.

Anterior Siguiente

Copyright Prometec

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


TIENDA ARDUINO RASPBERRY PI IMPRESORA 3D FORO CONTACTO

SIM808: GSM/GPRS + GPS


Localización GPS, llamadas, mensajes e Internet

Home 
 SIM808: GSM/GPRS + GPS

OBJETIVOS

  Presentar el módulo GSM/GPRS y GPS SIM808.

 Aprender cómo conectarlo a nuestro Arduino.

 Trabajar con los comandos AT.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


 Aprender a obtener las coordenadas GPS y la hora en UTC.

MATERIAL REQUERIDO.

Arduino Uno o similar. Un PC con el entorno de Arduino correctamente instalado y


configurado.

Un módulo GSM/GPRS GPS SIM808.

Algunos macho-hembra de Protoboard.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Una fuente de alimentación para Arduino.

EL MÓDULO SIM808: GSM/GPRS + GPS

Este módulo está basado en el chip SIMCOM SIM808 y nos ofrece, además de las funcionalidades de envío y recepción de datos GSM/GPRS (la de
los teléfonos móviles 2g), la tecnología GPS de navegación por satélite. O sea que, gracias a este módulo y utilizando una tarjeta SIM, seremos
capaces de enviar y recibir llamadas y SMS , conectarnos a Internet y conocer nuestras coordenadas y el horario UTC (Tiempo Universal
Coordinado).

Y por supuesto tiene conexión para cascos y micrófono para que podamos hablar con quien nos llame o cuando llamemos nosotros.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Para comunicarnos con este tipo de módulos utilizamos los comandos AT, unos viejos conocidos de esta página.

 Toda la parte de comunicaciones GSM/GPRS es semejante a la que tratamos con el SIM900.

 Así que si queréis, os recomendamos echar un ojo a sus respectivas sesiones Módulo GSM/GPRS SIM900.

CONEXIONES Y PUESTA EN MARCHA

Vamos a empezar por colocar en el módulo SIM808 la tarjeta SIM que vayamos a usar, que se pone en la parte de abajo de la placa. Es para tarjetas
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
SIM de las grandes, así o usáis una de esas o necesitaréis de un adaptador.

También deberíamos poner en el módulo las dos antenas que vienen con él, la del GPRS y la del GPS. En las conexiones de la placa vienen marcado
donde se conecta cada una de ellas.

Y ahora nos toca conectarlo al Arduino, para lo que usaremos los pines Tx y Rx de la tarjeta (transmisión y recepción de datos) , que conectaremos a
los pines 7 y 8 del Arduino respectivamente. Pueden ser otros pines cualesquiera, siempre que los soporte la librería Software Serial que vamos a
utilizar. Además uniremos las tierras y utilizaremos una fuente de alimentación externa para el módulo SIM808, ya que a la hora de comunicar este
tipo de módulos consume mucho y no será suficiente con la alimentación del Arduino.

 Recordad que las conexiones Rx y Tx del módulo y del SIM808 deben ser cruzadas, es decir, el Rx
de uno al Tx del otro y viceversa para que se puedan comunicar de forma efectiva.

 Y que no se os olvide unir las tierras de todos los componentes que uséis, o no funcionará.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Para encender el módulo utilizaremos el LED de encendido, y veremos como se ilumina un LED. Y para activar la alimentación a la tarjeta SIM
tendremos que pulsar el pulsador un par de segundos. Al hacerlo veremos como se encienden dos LEDs, uno fijo y otro que parpadear una vez por
segundo. Mientras esté así significa que no ha encontrado la red móvil, cosa que solucionaremos metiendo el PIN como veremos más adelante.

COMANDOS AT PARA EL GSM/GPRS

Para poder comunicarnos vía comandos AT tendremos que cargar un programa para la comunicación serie como hemos hecho tantas veces
anteriormente. Crearemos una instancia llamada SIM808 y seleccionaremos los pines del Arduino que queramos usar para comunicarnos (Rx y Tx) .
Nosotros hemos elegido el 7 y el 8, pero podéis usar cualquiera que sea compatible con la librería. También podéis cambiar la velocidad de

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


comunicación, pero debe ser la misma para el puerto serie y para la instancia que hemos creado. Nosotros hemos elegido 19200 porque es la que
usa el SIM900, de forma que podamos usar los programas que ya tenemos de esas sesiones.

#include <SoftwareSerial.h>
SoftwareSerial SIM808(7, 8); //Seleccionamos los pines 7 como Rx y 8 como Tx

void setup()
{
SIM808.begin(19200);
Serial.begin(19200);
delay(100);
}

void loop()
{
//Envíamos y recibimos datos
if (Serial.available() > 0)
SIM808.write(Serial.read());
if (SIM808.available() > 0)
Serial.write(SIM808.read());
}

Una vez hayamos cargado el programa abrimos el monitor serie y seleccionamos la velocidad correcta. El primer comando AT nos servirá
simplemente para saber si el módulo responde y que por lo tanto la comunicación funciona. Y este comando es simplemente AT, lo escribimos y
pulsamos INTRO. Debería respondernos con un OK; si no deberíamos repasar que esté todo en orden: conexiones, encendido y velocidad correcta.

Comprobado esto, ya podemos meter el PIN de la tarjeta SIM, que se hace mediante el comando AT+CPIN=”XXXX”; donde tendréis que sustituir
XXXX por el pin que corresponda, en mi caso 1867, o sea, AT+CPIN=”1867″. Obtendremos un mensaje de respuesta indicando si el PIN es correcto, y
en caso de que lo sea, el LED que parpadeaba una vez por segundo pasará a hacerlo cada 3 segundos (más o menos), indicando que ha encontrado
la red móvil.
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Y ahora ya estamos en disposición de enviar y recibir llamadas y conectarnos a Internet. Para comprobar que efectivamente podéis llamaros al
numero de teléfono de la SIM que hayáis puesto en el módulo, o usar el comando ATDXXXXXXXXX; (sustituyendo las X por el número de teléfono y
respetando el “;”) para llamar a quien queráis. Y si le conectáis unos cascos y un micrófono al módulo podréis hablar como si fuera un teléfono
normal.

Os dejamos una tabla con los comandos AT más utilizados con este tipo de módulos y enlaces a las sesiones de SIM900 donde ya tratamos eso,
porque los comandos AT son los mismos y la programación también.

Anexo comandos GSM/GPRS


Presentando el módulo GPRS: llamar y enviar SMS
Recibir llamadas y SMS
Enviar y recibir llamadas y SMS

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Controlar Arduino mediante llamadas y SMS
Conexión a Internet

COMANDOS AT PARA EL GPS

La parte del GPS se controla igual, mediante comandos AT, y vamos a verlos usando el mismo programa que en el apartado anterior. Primero
activaremos el GPS mediante el comando AT+CGPSPWR=1. Y después preguntaremos por el estado del GPS hasta que veamos que ya nos ha
posicionado utilizando AT+CGPSSTATUS?. Cuando nos devuelva “Location 3D Fix” ya podremos seguir, lo que suele llevar unos 30 segundos la
primera vez.

Ahora ya estamos en posición de obtener los datos del GPSusando el comando AT+CGPSINF=0 que nos devolverá algo como esto: “+CGPSINF:
0,4316.645000,257.667700,14.800000,20170117141311.000,0,9,1.796440,198.850006″; que siguiendo ese orden corresponden a:

1. Modo: 0.
2. Latitud: 43º 16′ 64.5″.
3. Longitud: 2º 7′ 66 77″.
4. Altitud 14.8
5. Fecha en UTC: 20170117141311, o sea, 17 de enero de 2017 a las 14:13:11.
6. Tiempo de respuesta: 0.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


7. Número de satélites: 9.
8. Velocidad: 1.796440 en nudos.
9. Curso: 198.850006.

También podemos usar AT+CGPSOUT=32 para obtener los datos del GPS pero usando la especificación de la NMEA (National Marine Electronics
Association), que define la interfaz entre varios equipos electrónicos marítimos. Con este comando recibiremos estos datos hasta que cerremos el
GPS usando AT+CGPSPWR=0.

Estos datos corresponden a:

1. Horario UTC: 14:25:34.


2. Estado: A=Activo, V=Vacío.
3. Latitud: 43º 16′ 68.54″ N.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


4. Longitud: 2º 57′ 64.83″ W.
5. Velocidad en nudos: 0.40.
6. Ángulo de derrota en grados: 1236.98.
7. Fecha: 17/01/17
8. Variación magnética.
9. Datos del Cheksum.

Y si queréis comprobarlo buscad en Google “posición por coordenadas” o algo parecido e introducir los datos de latitud y longitud que hemos
obtenido. No es que tenga una precisión del 100% pero no está mal. Al menos a mí me ha localizado con un margen de error aceptable.

RESUMEN DE LA SESIÓN
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
En esta sesión hemos aprendido varias cosas importantes:

  Hemos presentado los módulos GSM/GPRS + GPS basados en el chip SIM808.

 Sabemos como conectarlo y ponerlo en marcha.

 A utilizar la parte GSM/GPRS para enviar y recibir llamadas y mensajes y conectarnos a Internet.

 A obtener los datos del GPS: localización, horario y fecha UTC…

Anterior Siguiente

« COMENTARIOS MÁS VIEJOS

(85) Comments

Germán Castaños 07 Ene 2018


Saludos! Muy buenos sus tutoriales, les consulto, es posible encender a través del Arduino Uno este módulo SIM808 a
traves de algunos de sus pines, tal como se puede encender el SIM900? Realmente no tengo mucha documentación de
Reply esta tarjeta, mi idea es minimizar el hecho de presionar botones, pues por esta razón deseo activarlo a través de algún
pin. Espero sus comentarios, muy agradecido por los aportes que puedan brindar

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 08 Ene 2018
Hola Germá, hasta donde yo sé no se puede, al menos no directamente. Lo que puedes hacer es cortocircuitar los dos
pines del pulsador y conectarlo a un pin de Arduino y a tierra. De esa forma puedes activarlo con un pulso desde ese
Reply pin.

Germán Castaños 11 Ene 2018


Gracias Iván, si, eso lo había pensado. Pero decidí experimentar y a partir del SIM808 intentaré producir una
placa a medida, aunque esta parece buena he visto que se desperdician capacidades, claro, aún no he
Reply determinado todo del todo, no tengo nada de documentación. Tendrás tú alguna? He buscado, pero solo
encuentro de otras placas con este SIM. La mía es exactamente la que muestras. Muy agradecido por la
información

Ivan 15 Ene 2018


Hola Germán, la verdad es que no hay mucha y la que hay no es demasiado clara. Busca sim808
shield datasheet en google a ver si encuentras algo que te pueda valer. Un saludo.
Reply

José Juan 05 Ene 2018


Hola Ivan
he visto que conoces mucho sobre este modulo y pues quiero preguntarte sobre el SIM808 en una de las esquinas trae
Reply un pequeño motorcito “vibrador” ¿como lo puedo activar?

Ivan 08 Ene 2018


Yo no lo he conseguido hacer funcionar tampoco, a ver si me entero de algo o alguien ha podido activarlo…

Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Enrique 28 Dic 2017
Hola, muchas gracias por el tutorial, ¿de cuánto es la precisión aceptable?
Compré un Tarot TL2970 y me daba un error de unos 30km…
Reply Un saludo.

Ivan 02 Ene 2018


Cuando lo he probado, unos 100 metros. Si necesitas gran precisión este módulo GPS la tiene
https://www.prometec.net/indice-gps-duinopeak/
Reply

Juan Jose 23 Dic 2017


Hola, me gustaria saber como poder hacer un servidor web en mi arduino, usando la Sim808 como conexion a internet.
He levantado webservers a traves de ethernet y de wifi, pero no se si con este modulo podria hacer lo mismo ni como
Reply hacerlo. Muchas gracias!!

Ivan 02 Ene 2018


Hola Juan José, no estoy muy seguro de que pueda hacerse. A ver si puedo mirarlo en un rato.

Reply

José 16 Dic 2017


Hola prometec, gracias a ustedes he aprendido mucho..
Esta vez tengo un problema mayor acabo de adquirir un sim808 como el de este ejemplo, sin embargo no puedo hacer
Reply que funcione, tengo una fuente de alimentación externa de 6vcd 2amp. Coloqué puentes entré tierras Arduino y SIM808.
Ya revise muchas veces los pines RX y TX, , agregué correctamente el PIN 1111, e incluso cambié de chip pero nada
funciona..pueden ayudarme por favor..

José 16 Dic 2017


Mi problema es el siguiente:
El led de estados del GPRS se queda esperando el servicio de red.
Reply Uno de los leds. Permanece encendí mientras que el otro se encuentra blinkeando por 1 Segundo., Es todo lo que hace
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
durante mucho tiempo ya no se que hacer. Alguna manera de poner resetear el módulo ??
De antemano muchas gracias

Ivan 19 Dic 2017


Hola José, te responde a los comandos AT?

Reply

JOSE 21 Dic 2017


Hola Ivan gracias por contestar

Reply No, no me responde a los comandos AT.

Ivan 22 Dic 2017


Hola Jose, entonces lo más probable es que o tengas mal las conexiones o la
velocidad del monitor serie. Comprueba ambas cosas.

Ivan 19 Dic 2017


Hola José, Donde tienes el probema. No te responde a los comandos AT? No te puedes conectar a la red?

Reply

Eduardo 20 Nov 2017


Hola disculpa este módulo no puede funcionar de forma independiente sin el Arduino?

Reply

Ivan 23 Nov 2017


Hola Eduardo, no puede funcionar por sí mismo. Un saludo.

Reply
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Víctor 16 Nov 2017
Buenas noches, me queda una duda… còmo puedo hacer para que la latitud y longitud me aparezcan como número
flotante en vez de estar en formato NEMA?… Por favor… ayuda estoy usando el SIM808
Reply

Ivan 16 Nov 2017


Hola Víctor prueba con AT+CGPSINF=0

Reply

Joan 06 Nov 2017


Hola buenas tardes,

Reply En mi caso solo estaría interesado en los datos GPS del módulo para poder comunicarlos a un centro de control de
semáforos para saber porque calle viene un vehículo. Seria posible usar el módulo sin la SIM? Y en caso afirmativo como
seria posible transmitir estos datos al centro de control de los semáforos?

Muchas gracias!

Ivan 08 Nov 2017


Hola Joan, sí sólo quieres usar el GPS te recomiendo este módulo, que es más exacto y además tiene datalogger
https://www.prometec.net/producto/gps-shield/
Reply
Supongo que la central está muy lejos de los semáforos, ¿no? En ese caso o lo haces con un GPRS o por Wifi o
ethernet si tienes posibilidad. Si estuviera cerca podrías hacerlo por radiofrecuencia. Un saludo.

Kevin 02 Nov 2017


Hola Buenas Tardes…
Muchas Gracias por la página, ha sido de muchísima ayuda para mi trabajo de grado…
Reply Quisiera saber si hay algún tutorial disponible para enviar coordenadas (Latitud, Longitud,Altura) del modulo SIM 808 a
una dirección Ip en Internet en donde esta alojado un servicio o página web, la idea es hacer un Tracking o rastreo en

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Tiempo Real de un vehiculo al que se le instale el modulo SIM 808..
Muchas Gracias por tan valiosa ayuda…

Ivan 06 Nov 2017


Hola Kevin, tenemos pendiente el tutorial, esperamos subirlo en no demasiado tiempo… De forma resumida tienes que
hacer un GET o POST a la página donde quieres subir los datos con la estructura de la dirección de esta sesión
Reply (aunque aquí lo subimos desde un esp8266) https://www.prometec.net/esp8266-subir-valores/

Carlos Andres 01 Nov 2017


Hola Prometec Gracias Por Todas Sus Ayudas
Tengo un problema.
Reply Tengo este URL https://api.thingspeak.com/update?api_key=FWSRSN6FP3KZZF5P&field1=50&field2=20 en donde
puedo enviar datos a thingspeak a un canal que yo he creado. Pruebo esto en un buscador de un celular o un PC y
funciona perfectamente. Pero al realizarlo con el Arduino UNO y el SIM 808 obtengo lo siguiente:

Estoy generando los comandos y viendo su respuesta a través del monitor serie del ID de arduino.

¿Cual podrá ser la razón por la que esta pasando esto?

Me gustaría que me orientaran frente a este tema. Muchas Gracias Por SU Pronta Respuesta

Ivan 08 Nov 2017


Hola Carlos, sólo te ocurre al intentar subir los datos a thingspeak o al tratar de conectarte a cualquier página web?

Reply

Ander 31 Oct 2017


Buenos días.

Reply Ante todo gracias por tu web, sirve de mucha ayuda y está todo muy bien explicado y ordenado. Una pasada el curro que
te pegas, eskerrik asko!

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


En algunas webs he podido encontrar información acerca de esta placa (SIM808), donde se indica que esta placa
también tiene bluetooth. Teníamos pensado hacer un proyecto para el cual necesitaríamos un SIM808 para GPS y GSM,
y un HC-O6 para conectividad bluetooth con el móvil. ¿Sería posible utilizar esta misma placa, para el GSM + GPS +
Bluetooth?

Gracias por la respuesta. Un saludo.

Ivan 02 Nov 2017


Hola Ander, la que nosotros vendemos y hemos usado para el tutorial no tiene bluetooth, pero deberías poder poder
usar un bluetooth a parte. Eso sí te recomendaría usar un Arduino Mega que tiene varios puerto serie. Un saludo.
Reply

Carlos 30 Oct 2017


Gracias Por Cada Una De Sus Respuestas
Me gustaría saber si esta tarjeta también se puede encender por software. ¿como funciona su pulsador de 3 pines?
Reply ¿Cuentan con alguna información acerca de los PCB de la SIM808 EVB V 3.2 para analizar alguna posible solución?

Muchas Gracias Por Su Respuesta.

Ivan 31 Oct 2017


Hola Carlos, en principio no se puede, pero puedes cortocircuitar el pulsador con un pin de Arduino y usarlo para
encenderlo por software. Un saludo.
Reply

Carlos 17 Oct 2017


Buen Día Muchas Gracias Por Todos Estos Aportes.

Reply SI yo deseo enviar los datos del GPS, mas halla de separar las cadenas y organizar los datos, como se pueden enviar
dichos datos a un servidor. ¿Que comandos se deben utilizar? ¿que se debe tener en cuenta?

Muchas Gracias Por La Respuesta

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 18 Oct 2017
Hola CArlos, tienes que usar el comando GET o POST. Tenemos una sesión en la que subimos datos desde un
ESP8266 pero el concepto es el mismo. Echa un ojo a este par de sesiones a ver si te pueden ayudar:
Reply
https://www.prometec.net/esp8266-subir-valores/
https://www.prometec.net/gprs-internet/

Juanky 13 Oct 2017


Hola, buenas tardes, un favor podrías enviarme el código que ocupaste, por favor, gracias.

Reply

Ivan 17 Oct 2017


Lo tienes en la parte COMANDOS AT PARA EL GSM/GPRS

Reply El programa simplemente lee los comandos AT que luego le enviaremos por el puerto serie.

Xavier 06 Oct 2017


Buenas tardes,
Buenas tardes,
Reply
he conectado la SIM808 a un arduino nano en los pines 7 y 8, al correr el código se varía el tiempo de envio de mensaje
que está puesto con millis cada 30 segundos y lo hace cuando quiere, a los 5 seg, a los 2, etc… También me ocurre que
el arduino se reinicia sólo de vez en cuando.
La alimentación es independiente para cada uno.

Cuando corre el código sin conectar la SIM, lo hace correctamente, guardando los tiempos y sin reiniciarse.
A que puede ser debido?

Saludos

Ivan 10 Oct 2017


PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Hola Xavier, ¿cómo estás alimentando el SIM808? Recuerda también unir las tierras del Arduino y del SIM808.
Normalmente si se reinicia al alimentar la SIM suele ser por falta de alimentación. Un saludo.

Reply

Geronimo 28 Sep 2017


Hola me gusto la informacion pero tengo una duda podria hacerlo con un modulo gps gprs sim900 arduino? los comando
de todo y le procedimiento es compatible con este modulo?
Reply Le agradeceria su respuesta gracias.
Saludos

Ivan 01 Oct 2017


Hola Gerónimo, los comandos son iguales pero el sim900no tiene GPS. Puedes conectarle un módulo GPS a parte si lo
necesitas. Un saludo.
Reply

GIVE A REPLY

Message

Name (required) Email (required)

URL PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


URL

Post comment
WordPress
WordPress Anti-Spam
Anti-Spam by
by WP-SpamShield
WP-SpamShield

Copyright Prometec

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


TIENDA ARDUINO RASPBERRY PI IMPRESORA 3D FORO CONTACTO

ANEXO COMANDOS AT PARA GSM/GPRS Y GPS


Comandos AT más usados SIM808 y SIM900

Home 
 ANEXO COMANDOS AT PARA GSM/GPRS Y GPS

Os dejamos una tabla con los comandos AT más usados en los módulos GSM/GPRS y GPS SIM900 y SIM808.

AT Comprueba estado del módulo.

AT+CPIN=”XXXX” Introducir el PIN de la SIM. Cambiar XXXX por el PIN.

AT+CREG? Comprueba la conexión a la red.

ATDXXXXXXX; Realiza una llamada. Sustituir XXXXXXXXX por el nº al que queramos llamar.

ATA Descuelga una llamada.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


ATH Finaliza la llamada.

Configura el modo texto para enviar o recibir mensajes. Devuelve “>” como
AT+CMGF=1
inductor.

AT+CMGS=”XXXXXXXXX” Nº al que vamos a enviar el mensaje.

AT+CLIP=1 Activamos la identificación de llamada.

AT+CNMI=2,2,0,0,0 Configuramos el módulo para que muestre los SMS por el puerto serie.

AT+CGATT=1 Conectamos a la red GPRS.

AT+CSTT=”APN”,”usuario”,”contraseña” Definimos APN. usuario y contraseña

AT+CIICR Activamos el perfil de datos inalámbrico

AT+CIFSR Obtenemos nuestra IP

AT+CIPSTART=”TCP”,”direccionIP”,”puerto” Indicamos el tipo de conexión, dirección IP y puerto al que realizamos la conexión

AT+CIPSEND Preparamos el envío de datos. Devuelve “>” como inductor.

AT+CIPCLOSE Cerramos la conexión.

AT+CIPSHUT Cierra el contexto PDP del GPRS

AT+CGPSPWR=1 Activar el GPS.

AT+CGPSSTATUS? Comprueba que el GPS ha encontrado la red.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Obtiene los datos del GPS: Modo,Latitud,Longitud,Altitud,HorarioUTC,Tiempo
AT+CGPSINF=0
de respuesta,Número de satélites,Velocidad,Curso

para obtener los datos del GPS usando la especificación de la NMEA: Horario
AT+CGPSOUT=32 UTC,Estado,Latitud,Longitud,Velocidad en nudos,Ángulo de derrota en
grados,Fecha,Variación magnética,Datos del Cheksum

AT+CGPSPWR=0 Cerrar el GPS.

(46) Comments

Cesar García 22 Dic 2017


Gracias Ivan por tu respuesta, resulta que le cambie la velocidad al modulo TX RX pero ahora no recuerdo la nueva
velocidad como puedo restaurar a la velocidad original? muchas gracias por tu respuesta
Reply saludos

Ivan 02 Ene 2018


Hola César, con este comando AT+IPR? puedes preguntarle la velocidad a la que está el módulo.

Reply

Aioros1995 22 Dic 2017


Hola Iban, muchas gracias por tus aportes, nos han servido de mucho.

Reply Queria consultarte lo siguiente:


Estoy trabajando en uns sistema de GPS, con exactamente el mismo modulo y el mismo arduino, pero en mi caso
requiero activar el internet del modulo, y enviar unos datos a Firebase, no sabes si esto es posible?, o si talvez tienes
alguna guia que me pueda orientar,

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Muchas gracias por cualquier comentario que me puedes brindar. Saludos

Ivan 22 Dic 2017


Hola! Tenemos pendiente el tutorial para subir datos a un servidor con este módulo, de momento quizás estos puedan
orientarte un poco.
Reply
Por una parte aquí usamos el módulo para conectarnos a internet y hacer una petición http:
https://www.prometec.net/gprs-internet/
Por otra aquí usamos un módulo WiFi para subir datos a un servidor. La manera de hacerlo con el GPRS es muy
parecida, la URL la tendrías que componer de la misma forma: https://www.prometec.net/esp8266-subir-valores/

A ver si te sirve de algo. Un saludo.

Augusto 15 Dic 2017


Hola Ivan, como has estado? de antemano te agradezco por compartir tus conocimientos con nosotros, Oye tengo una
consulta, tengo una sim808, estoy necesitando utilizar el gps, siempre que hago el comando para pedir la localización me
Reply responde “Location No Fix”, otros comandos como por ejemplo recibir mensajes de texto lo hacen perfectamente, los
comandos AT funcionan bien, incluso lo del mismo gps como CGPSPWR y CGPSSTATUS, pero siempre me dice “no Fix”
no sé que pueda hacer, lo tengo conectado a una fuente de 12V – 1.5A, será que eso afecta?

Ivan 19 Dic 2017


Hola Augusto, a veces tarda un buen rato en encontrarla, y si estás en casa o una oficina puede no hacerlo. Prueba a
sacarlo por la ventana a ver si así consigues que encuentre la red. Un saludote.
Reply

juanjose 10 Dic 2017


Hola. Soy nuevo por aquí. Tengo en mente una aplicación, en la que realizo una llamada, y necesito saber si es
descolgada o no, pero no se como detectarlo.
Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 13 Dic 2017
Hola Juan José, así de primeras no se me ocurre cómo podría hacerse. A ver si alguien puede echarnos una mano con
ello. UN saludo.
Reply

cesar fuentes 23 Nov 2017


Hola Ivan.
Excelente tus posteos, felicitaciones. Ahora quiero comentarte mi problema, adhquiri dos sim900 una nunca logra
Reply conectarse a la red y la otra habeces logra hacerlo. Uso fuente externa de 2 A. para la sim900 y arduino uno lo alimento
desde mi laptop, cuando tengo arduino uno como TTl y se conecta a la sim900 me entrega los siguientes comentarios
RDY . +CFUN1. +CPIN: READY. Call Ready. en monitor serie envió comando AT y no obtengo retorno del sim, podrías
ayudarme ya que quiero enviar y recibir sms desde la sim. Saludos

Ivan 23 Nov 2017


Hola César, si el SIM900 te envía mensajes pero no te contesta a los enviados desde el Arduino, puedes tener un
problema en la conexión del Tx del Arduino al Rx del SIM900, un problema en la velocidad de comunicación o que el
Reply programa que usas para enviar y recibir los comandos AT no sea correcto. Aquí tienes un ejemplo del programa
https://www.prometec.net/sim808/

Ricardo 01 Dic 2017


Verifica tu fuente, leí que se recomienda 2A con 5V

Reply

Ile 20 Nov 2017


Buen dia Ivan Tengo una sim808 adafruit pero cada que ingreso un comando aparece Failed to enable, la sim esta
conectado sobre Arduino Uno. pero estoy alimentando al arduino con una fuente externa, rx y tx estan conectados en
Reply los pines 2 y 3 para hacer esto posible uso la libreria softwarserial. A que se deber esto?
Gracias por tu ayuda .

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 23 Nov 2017
Hola Ile, lo lo he usado nunca así que no sé bien qué decirte. Los comandos AT deberían funcionar, así que el
problema creo que debería venir en las conexiones o en la velocidad de comunicación del módulo. Un saludo.
Reply

Octavio 16 Nov 2017


Hola, buenas Ivan muchas gracias por compartir tus conocimientos un saludo muy cordial, tengo una duda es posible
evitar el estar metiendo comandos AT para realizar llamadas y que estas tengan de actuador un botón o un censor
Reply tengo un modulo sim800L, de ante mano muchas gracias

Ivan 16 Nov 2017


Hola Octavio, no tendrías más que hacer un condicional if y poner la condición que te parezca, por ejemplo que
pulsemos el botón. Dentro del if le pones el comando AT y listo. Un saludo.
Reply

Nestor 15 Nov 2017


Buen día de antemano gracias por los comandos, sabes si abra alguna manera de enviar comandos AT sobre TCP/IP?

Reply Saludos!

Ivan 17 Nov 2017


La verdad es que ni idea Nestor, concretando un poco ¿que es lo que tienes en mente hacer?

Reply

ile 29 Oct 2017


hola, gracias por compartir tus conocimientos, tengo una sim808, le cargue un programa por error con arduino y ahora
no deja de reiniciarse, ayuda por favor.
Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 31 Oct 2017
Hola Ile, no puedes cargar un programa en la SIM808. Si se te reinicia todo el rato puede ser un problema de falta de
alimentación.
Reply

ile 14 Nov 2017


muchas gracias por tus aportes Ivan =)

Reply

Ivan 15 Nov 2017


Gracias a ti por seguirnos! Un saludo.

Reply

Mariano 27 Oct 2017


Buenas tardes, que cómando se utiliza para enviara códigos USSD?

Reply

Ivan 31 Oct 2017


La verdad es que nos abía que eran los códigos USSD, y no veo ningún comando para enviarlos. Un saludo.

Reply

Ivan 31 Oct 2017


La verdad es que nos sabía que eran los códigos USSD, y no veo ningún comando para enviarlos. Un saludo.

Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Stella 20 Oct 2017
Bom dia,
o que seria o 3000? Na linha : enviarAT(“AT+CSTT=\”ac.vodafone.es\”,\”vodafone\”,\”vodafone\””, “OK”, 3000);
Reply Obrigada.

Ivan 23 Oct 2017


Hola Stella, creo recordar que es el tiempo que le damos al módulo hasta recibir la respuesta. Un saludo.

Reply

Jonathan 09 Oct 2017


Hola teso puedes indicarme cual es el comando para hacer llamadas simultaneas

Reply

Ivan 10 Oct 2017


Yo no encuentro ninguno que puedas servirte, pero puedes hacer una detrás de otra. un saludo.

Reply

carloncho 26 Sep 2017


Para activar los tonos DTMF que comandos hay que utilizar

Reply

Ivan 01 Oct 2017


Esto es lo que he econtrado:

Reply AT+VTD=xx
This command is optional, and is used to set the DTMF tone duration in 100mS steps.
AT+VTS=x

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


To send the actual DTMF code, you have to call this command for every digit sent. To send, for instance “*1234#”,
you have to send:
AT+VTD=*;+VTD=1;+VTD=2;+VTD=3;+VTD=4;+VTD=#

Fabian 20 Sep 2017


Buenas Tardes

Reply Hace un tiempo vengo trabajando con un sim900 conectado a un arduino Mega. De momento he logrado conectarme a
Internet y enviar datos con un chip de una compañía, y no he tenido problemas. Por temas de costos, adquirí un chip de
otra compañía, pero resulta que esta ultima, para conectarse a Internet, requiere activar el roaming o itinerancia de
datos. Mi consulta es ¿Existirá algún comando que me permita activar el roaming desde el sim900?

Desde ya, muchas gracias


saludos

Ivan 22 Sep 2017


Hola Fabian, no he encontrado manera. Creo que tienes que hablar con la operadora para activarlo.

Reply

emmanuel 19 Sep 2017


hola muchachos como estan? espectacular todo el post, queria consultar una cosilla, me sirvio bastante todo lo q
enseñaste, estoy haciendo un sistema de monitoreo de 8 sensores de temperatura ds18b20 y bueno junto con un arduino
Reply un shield sim900, lector de memoria micro SD, y un RTC DS3231, y lcd 20×4, tengo la mitad realizada ya guardo mis
datos de temperatura en una micro sd y leo cada una hs la temperatura y bajando los datos guardados de la sd veo los
datos en excel, pero viendo este post que es tambien lo que necesitaba, quiero saber como puedo mandar sms, una vez
que con el rtc guarde los datos, osea como puedo modificar el texto en funcion a la variable de temperatura que va
cambiando, desde ya muchisimas gracias

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 19 Sep 2017
Hola Emmanuel, si estas usando este programa para el envio de sms https://www.prometec.net/gprs-enviar-recibir-
llamadas-sms/ tendrías que crear un char como este char sms[] = “Mensaje enviado desde el Arduino de Prometec!
Reply \x1A \r\n”; pero sustituyendo el texto por la lectura del sensor, respetando las comillas y los \x1A \r\n.

Para ello vas a tener que convertir primero el int o el float que te devuelva el sensor a char.

Arturo 09 Jun 2017


hola, quisiera conectar el sim808 a un servidor para que pueda enviar datos obtenidos del arduino, como podria
configurarlo?
Reply

Ivan 10 Jun 2017


Hola Arturo seguimos teniendo pendiente ese tutorial. Mientras tanto estos pueden ayudarte
https://www.prometec.net/gprs-internet/
Reply https://www.prometec.net/esp8266-subir-valores/

Échales un ojo y cualquier duda nos comentas.

Teso 07 Jun 2017


Hola, sigo muchísimos de vuestros tutoriales para un proyecto domótico bastante completo y hasta ahora estoy
alucinando con lo bien testeados que tenéis vuestros trabajos y ya que es la primera vez que os escribo quiero felicitaros
Reply por ello. Mi consulta es si sabéis de algún comando para ver si existe una llamada entrante y también alguno para
descolgar esa misma llamada. Gracias de antemano. Un cordial saludo.

Teso 07 Jun 2017


En el tuto aparece el comando para activar la identificación de llamada pero no veo nada de como gestionarla ni
identificarla.
Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Ivan 07 Jun 2017
Hola Teso, el comando hace que te llegue por el puerto serie el teléfono. Para gestionarlo tendrías que hacerlo
ya con programación normakl, coger esos datos y hacer lo que creas conveniente con ellos. Aquí hacemos
Reply algo de eso: https://www.prometec.net/gprs-controlar-led/

Ivan 08 Jun 2017


Hola Teso, lo que podrías hacer es leer el puero serie y si recibes un “RING” sabes que está entrando una llamada.

Reply Para descolgar leo por ahí que es el comando “ATA” aunque no lo he probado. Si lopruebas ya nos contarás si
funciona. Un saludo.

Juanpe 22 Jul 2017


Sí, es ATA.
Por ejemplo, se puede usar así: enviarAT(“ATA”, “OK”, 1000);
Reply

Ivan 23 Jul 2017


Gracias por el aporte Juanpe. Lo añadimos a la lista de comandos. Un saludo.

Reply

Marlo Delgado 05 May 2017


Buenas noches tengo el mismo problema del GPS que no se activa y ya hice lo que recomendaste y aun así persiste

Reply

Ivan 05 May 2017


Los demás comandos AT te los responde correctamente? Me refiero a los que no necesitan del GPS, claro.

Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Addy Rocha 30 Mar 2017
Buen día, al momento de poner el comando AT+CGPSPWR=1, nos marca Error, igual se está alimentando el modulo con
una fuente de 12v a 2A, conexiones de comunicación bien establecidas. Al igual que la tierra.
Reply
Sabes a que se puede deber este error?

De antemano muchas gracias por tu ayuda. Saludos

Ivan 30 Mar 2017


Comprueba que tienes la antena GPS bien conectada y acercala lo máximo posible a una evntana a ver si lo solucionas
y me cuentas. Un saludo.
Reply

GIVE A REPLY

Message

Name (required) Email (required)

URL

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Post comment
WordPress
WordPress Anti-Spam
Anti-Spam by
by WP-SpamShield
WP-SpamShield

Copyright Prometec

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


TIENDA ARDUINO RASPBERRY PI IMPRESORA 3D FORO CONTACTO

LOS MÓDULOS DE RADIO NRF2401


Usando radios para comunicar nuestros Arduinos

Home 
 Los Módulos De Radio NRF2401

OBJETIVOS

  Presentar los módulos de radio NRF2401.

 Describir la forma de conectarlos a nuestros Arduinos o similares.

 Presentar un par de programas sencillos que nos permitan usarlos en nuestros proyectos para enviar y
recibir órdenes o datos.

 En este primer ejemplo de programa la comunicación será unidireccional. .

MATERIAL REQUERIDO.
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
9.60€ + 3.60€ +
IVA IVA

ARDUINO
UNO REV 3 NRF24L01
 Añadir al  Añadir al
carrito carrito

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


2.00€ +
IVA

CABLES
DUPONT
HEMBRA-
HEMBRA
 Añadir al
carrito

LAS CONEXIONES DE RADIO

Hemos visto en anteriores sesiones, que poder usar conexiones inalámbricas nos ofrece unas posibilidades a las que resulta difícil renunciar cuando
te acostumbras, y hemos hecho pruebas de conexiones tanto WIFI como Bluetooth.
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Las WIFI nos permiten conectarnos a Internet con facilidad y podemos publicar páginas Web con valores de nuestros sensores y Arduinos o
simplemente acceder a estos Duinos y pasarles parámetros u órdenes. EL BlueTooth es ideal si queremos controlar nuestros Arduinos sin más
controlador que un móvil que ya llevamos habitualmente en el bolsillo.

Pero tanto el BT como el WIFI tienen unas limitaciones considerables en lo que se refiere a la distancia a la que podemos usarlo. No pasa más allá
de 20 metros y eso en condiciones óptimas, pero no es raro que necesitemos más distancia, digamos 50 m, 0 200 m, y porque no un kilómetro.

Como siempre, cuando hay una necesidad en el mercado, surge alguien dispuesto a ofrecer una solución en forma de electrónica, y en esta ocasión
vamos a presentar una solución magnifica para el tipo de problema que planteamos. Un medio de dar órdenes a un Arduino o similar, a una distancia
que puede variar entre 50 metros y hasta digamos un kilómetro.

En esta sesión vamos a presentar y dar los primeros pasos con unos magníficos dispositivos de radio basados en el chip de Nordic semiconductor
NRF24, y que podemos encontrar en multitud de módulos de diferentes fabricantes, compatibles entre sí, por muy poco dinero, que es lo que nos
gusta en esta casa.

Este dispositivo NRF2401, integra en un único chip, toda la electrónica y bloques funcionales precisos, para establecer comunicaciones RF ( Radio
Frecuencia) entre dos o más puntos a diferentes velocidades, (Hasta 2 Mb/seg) con corrección de errores y protocolo de reenvió cuando es
necesario, sin intervención del control externo, lo que nos permite aislarnos de tobo el trabajo sucio y complicado relacionado con la transmisión
física.

Las características más destacadas son:

 Muy baratos, unos pocos dólares.

 Operan en la banda de 2.4Ghz, que es de libre uso a nivel mundial.

 Velocidad configurable de 250kb, 1 Mb o 2Mb por segundo.

 Muy bajo consumo en Stand By (Cuando no se usan).

 El alcance depende de si hay visión directa entre los nodos, o por el contrario hay obstáculos, pero nos
ofrece un mínimo de unos 20 m hasta un máximo e 80m en óptimas circunstancias, en el modelo básico con
la antena integrada.

 Podemos encontrar modelos con antenas más eficaces por un coste un poco superior (no mucho no os
asustéis) que aumentan de forma importante el alcance hasta casi un km.
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
 Si no queremos complicarnos la vida son muy fáciles de usar y configurar y además son los enlaces más
baratos que podemos encontrar para vincular nuestros Arduinos.

 Compatibles con todo un rango de modelos de diferentes tipos y fabricantes.

LAS ONDAS DE RADIO

A finales del siglo XIX, James C. Maxwell estableció las leyes del electromagnetismo que describen la propagación de las ondas electromagnéticas y
la relación que existe entre los campos magnéticos y la electricidad (de ahí el nombre) estableciendo una de las teorías básicas que regulan el
funcionamiento del mundo moderno.

Todas la ubicuas emisiones de RF que nos rodean actualmente, fueron descritas por Maxwell y sus ecuaciones hace ya más de 100 años, y eso
incluye las emisiones de radio en AM y FM , las de televisiones, tanto analógicas como digitales, la conexión de tu teléfono móvil y hasta las
conexiones WIFI y Bluetooth de las que hemos hablado previamente.

Las primeras emisiones de radio viables se atribuyen en 1901 Guillermo Marconi y son el precedente de toda la tecnología de radio actual
apoyándose en los trabajos de Maxwell y Heinrich Hertz de quien deriva la unidad de medida de la frecuencia Hercios en español (Hertz en inglés)

 La descripción de una onda de RF se realiza por su frecuencia, en Hercios, que indica el número de pulsos
por segundo a los que bate la señal, y por su amplitud que indica la intensidad.

Ya hemos hablado antes del espectro de frecuencia y vamos a destacar que en la práctica llamamos RF a las señales de frecuencia inferior a los
300Ghz

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Como podéis ver, el espectro de radiofrecuencias parece el camarote de los hermanos Marx, con los servicios de radio, TV, telefonía y demás por lo
que es importante que los dispositivos que usemos emitan en el rango de frecuencias libres , es decir, en las que se permite que cualquiera emita y
reciba, sin interferir con la operación normal de emisiones que operan los servicios sometidos a regulación.

Nuestros humildes módulos NRF2401 emiten a 2.4 GHz , lo que es banda libre y no requieren de ningún permiso para usarse en ninguna parte del
mundo ( Por mucho que os quieran meter miedo con esto ). Pero a cambio, no tenemos garantía de que no haya alguien más emitiendo en esta banda
en las cercanías, lo que puede producir interferencias con nuestra emisiones.

 Cuando sintonizas tu emisora FM en el dial, digamos 103.4, es porque la emisora paga a la administración
para ser la única que pueda emitir legalmente en esa frecuencia y de ese modo impida la interferencia de
otros servicios comerciales.

 Por eso el espectro de radiofrecuencias está sometido a un estricto control administrativo, en todos los
países, para evitar que señales en competencia interfieran entre si anulando la posibilidad de transmitir
información valida.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


DIAGRAMA DE CONEXIÓN DE UN MÓDULO NRF2401

Estos módulos usan el bus SPI para acelerar la conexión con el micro controlador por lo que vamos a ver la descripción de los pines necesarios para
su conexión, en vista superior:

Hay dos librerías básicas para el manejo de los NRF2401s en Arduino, la NRF24 que es la que vamos a usar aquí (Porque me parece más sencilla) y
la librería MIRF.

PIN NRF2401 ARDUINO UNO MEGA

GND 1 GND GND

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


PIN NRF2401 ARDUINO UNO MEGA

VCC 2 3.3 3.3

CE 3 9 9

CSN 4 10 53

SCK 5 13 52

MOSI 6 11 51

MISO 7 12 50

IRQ 8 2 –

 Es importante recalcar que estos módulos funcionan a 3.3V; EL fabricante previene contra conectarles a 5V
so pena de achicharrarlos.

 La librería MIRF espera que hagas unas conexiones de pines diferentes, así que no te conviene usar este
diagrama de conexión si pretendes utilizarla.

 Tenéis que comprender que los modelos UNO y MEGA usan diferentes pines para el control del bus SPI y
luego para rematar la faena, según la librería cambian de nuevo.

Vamos con el esquema de conexión de protoboard:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Para poder emitir y recibir con estos módulos vamos a necesitar dos Arduinos configurados con estas conexiones a los que llamaremos emisor y
receptor, porque inicialmente los programas van a ser distintos.

Empezaremos haciendo la prueba más sencilla posible. Uno de ellos, el emisor, radia una serie de números y el otro, el receptor, los recibe y
muestra en la consola serie.

 Aunque estos módulos consumen muy poco en uso o en Stand by, pueden absorber en el arranque más de
lo que la fuente de 3.3V de Arduino puede proporcionar, lo que impide que arranque correctamente o que
tenga un funcionamiento errático, especialmente en el caso del emisor.

 Si buceáis en Internet, veréis cantidad de páginas recomendándoos usar unos condensadores entre los
pines tal y cual.

 Aunque tomar precauciones nunca sobra, los vagos somos incapaces de hacer algo así, mientras no se

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


demuestre que es imprescindible.

 En mi caso he comprobado que la manera más sencilla de evitar problemas (Que los he tenido) ha sido
asegurarme de que el emisor tiene una alimentación correcta y abundante, mediante un alimentador
externo de los típicos. Esta sencilla precaución ha hecho que en mi caso los problemas se reduzcan hasta
desaparecer.

PROGRAMANDO LAS RADIOS

Vamos a montar un primer ejemplo en el que crearemos dos programas diferentes que corren en dos Arduino diferentes. El primero será el programa
emisor, que radiará números en secuencia desde 0 hasta el 255, y el segundo el programa receptor, que nos permitirá comunicarnos en una única
dirección inicialmente.

Vamos con el programa emisor y para ello necesitamos la librería RF24-master, cuya última versión siempre podéis encontrar en
https://github.com/maniacbug/RF24. Empezamos con unos cuantos includes, necesarios para el NRF2401 y para el bus SPI:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>

Después tenemos que crear una instancia de la radio, indicándole los pins de control, y la siguiente línea indica el pipe a utilizar, que podemos
imaginar como uno de los diferentes canales en los que la radio puede operar.

RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;

 El pipe es un numero de 64 bits, lo que indicamos con el tipo uint64_t , entero sin signo de 64 bits, y por si
no estuviera suficientemente claro, le indicamos al compilador que se trata de un LL al final del número, o
sea LongLong = 64 bits.

Y ahora basta con inicializarla en el setup:

void setup(void)
{ Serial.begin(9600);
radio.begin();
radio.openWritingPipe(pipe);
}

En el programa principal, simplemente vamos incrementando una variable para luego transmitirla por la radio

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


int msg[1] ;

void loop(void)
{ for (int x=0;x<2255;x++)
{ msg[0] = x ;
radio.write(msg, 1);
}
}

Aqui os dejo el programa completo Prog_79_1_Emisor

En cuanto al programa receptor Prog_79_1_Receptor, tenemos que empezar incluyendo las mismas librerías, y un array mínimo para el entero a
recibir, e instanciamos la radio como radio

#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>

RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int msg[1];

El setup es casi el mismo.

void setup(void)
{ Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}

Pero en vez de usar radio radio.openWritingPipe(pipe) para escribir, usamos radio.openReadingPipe(1,pipe) para poder leer y después
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
radio.startListening() nos permite comenzar la escucha. Y ya solo falta el setup con el programa que recibe:

void loop(void)
{ if (radio.available())
{ int done = radio.read(msg, 1);
Serial.println(msg[0]);
}
}

Se nos ha vuelto a perder la parte difícil, porque no me digáis que no es sencillo y elegante. El tema no da para más. Si corréis los programas en
Arduinos diferentes, la salida del receptor debería ser algo así:

Programa por el que no ganaremos ningún premio, pero que ilustra a la perfección como emitir datos numéricos uno a uno entre emisor y receptor
mediante radio frecuencia. Si habéis llegado hasta aquí, enhorabuena acabáis de emitir por radio, vuestro primer mensaje.

Bueno, está bien. Enviar un carácter esta chupado, pero ¿Que pasa si hay que enviar un String completo, seguro que la cosa se complica?

Pues sí. Para enviar un mensaje de texto tenemos que cambiar un par de cosas. Primero definir un array de char suficiente para que quepa el
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
mensaje:

char msg[16]="Prometec.net.\n" ;

Y después cambiar el loop para que envié los 16 caracteres

void loop(void)
{
radio.write(msg, 16);
}

Y por supuesto hay que cambiar el programa del receptor

void loop(void)
{ if (radio.available())
{ int done = radio.read(msg, 16);
Serial.println(msg);
}
}

Basta con llamar a radio.write o radio.read con el array como parámetro y pasarle el número de caracteres que queremos enviar o recibir. Aquí tenéis
el emisor y el receptor modificados.

Emisor_String

Receptor_String

He visto en Internet un programa que me encantó, porque lo que hace es colocar un LED rojo y uno Verde en los pines 3 y 5 de Arduino y después
emite números entre 0 y 255 en el emisor mientras en el receptor corre un programa que controla que los números se reciban en el orden adecuado.

Cuando es así, ilumina brevemente la luz verde, en caso contrario la roja. Lo bueno de esto es que os sirve como ejemplo de si tenéis una buena
recepción o no, ya que según el baile de los LEDs tenéis una idea bastante aproximada de los errores de trasmisión que tenéis en vuestra zona.
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Usad el programa Prog_79_1_Emisor para el emisor y este programa en el receptor Prog_79_4.

RESUMEN DE LA SESIÓN

  Presentamos las unidades de radio NRF2401, que son ideales para muchos proyectos, porque son
buenas, bonitas y baratas.

 Vimos como conectarlas a nuestros Arduinos con confianza usando el SPI y un par de pines.

 Descargamos y usamos la librería RF24 para el manejo de las radios y vimos los comandos básicos para
enviar y recibir.

 Hicimos un montaje de prueba con una comunicación en una única dirección.

Anterior Siguiente

« COMENTARIOS MÁS VIEJOS

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


(204) Comments

Frank 18 Dic 2017


Una pregunta amigo tengo un “NRF24L01+PA+LNA SMA Antenna” y tengo una duda sobre cuanto amperios debo
suministrarle el voltaje que genero esta cerca de 3.3v y 1a pero no se si sera lo correcto, saludos.
Reply

Ivan 19 Dic 2017


Hola Frank, trabaja a 3.3V.

Reply

Carlos Gómez 20 Nov 2017


Hola, puedo usar este modulo RFID con tags pasivos como los tipo sticker? Cuál recomiendan usar?

Reply

Ivan 23 Nov 2017


Hola Carlos, supongo que te refieres a estos https://www.prometec.net/arduino-rfid/ No sé si funcionarán, porque se
leen a diferente frecuencia, pero puedes probarlo a ver. UN saludo.
Reply

EDUARDO ALVAREZ MALDONADO 31 Oct 2017


buenas tardes antes de todo le mando un enorme saludo desde México y le pido su permiso para poder usar la
información de su tutorial como referencia para un vídeo que realizare y subiere a youtube
Reply

Ivan 02 Nov 2017


Hola Eduardo, estupendo. Pásanos el enlace para verlo en cuanto se pueda. Un saludo.

Reply

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Jordi 19 Oct 2017
Hola, tengo implantado en casa un sistema de domótica creado por mi, con arduinos + shield ethernet que actuan de
servidores web en cada parte de la casa donde tengo persianas. El problema es que tenco alguna parte de la casa no
Reply cableada y tengo que recurrir a plc para obtener señal ethernet.
Utilizo cable ethernet para evitar señales de wifi en las habitaciones con persianas ya que me da miedo tanta onda
electromagnética (con wifi ya es suficiente).
Mi pregunta es, disculpad mi ignorancia, si la señal de radio del NRF2401 es continua (estamos expuestos cada segundo)
o solo cuando arduino envia una señal al receptor?
Gracias y felicidades por el blog

admin 19 Oct 2017


Hola Jordi, No e sfacil responderte porque el fabricante no da muchas explicaciones, pero como norma general, tratara
de que comuniquen lo minimo para evitar consumos (Que siempre son altos en RF) por lo que parece seguro afirmar
Reply que normalmente no emitiran

Jordi 19 Oct 2017


Muchisimas gracias, un saludo

Reply

joaquin 07 Sep 2017


Hola!
Como siempre gracias por los tutoriales. Son de mucha ayuda. Aún así tengo un par de consultas de los sketch
Reply anteriores: en el primero de ellos se dice que vamos a radiar del 0 al 255; sin embargo el sketch indica 2255. Al principio
creí que podía ser una errata, pero funciona enviando los números del 0 a 255?!?! alguien puede indicar por qué no va
hasta el 2255?
La segunda consulta es respecto del “receptor string”: qué función tiene el “int done”? por qué no tiene que ser un
“char”? en qué momento se almacena el valor de “msg” para que pueda imprimirse por Serial?
Un millón de gracias por vuestras respuestas. Saludos!

David 30 Ago 2017


PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Hola. Tanto el arduino mega como el uno y el nano tienen puerto ICSP. Por que no conectar ahí el módulo nrf2401 ?? No
es para esto?

Reply

Ivan 30 Ago 2017


Efectivamente puedes usar los pines de ahí que necesites.

Reply

AUDATO 23 Ago 2017


Los #include son mismo del ejemplo, PROGRAMANDO LOS RADIOS.

Reply

AUDATO 23 Ago 2017


Gracias por tu respuesta…. te enviare el programa y al compilar en la instruccion ” bool done = radio.read(datos, 3);”,
presenta lo siguiente:
Reply
if ( radio.available() )
{
//Leemos los datos y los guardamos en la variable datos[]
bool done = radio.read(datos, 3);

//reportamos por el puerto serial los datos recibidos


Serial.print(“Dato0= ” );
Serial.print(datos[0]);

exit status 1
void value not ignored as it ought to be

envio programas >>>>>


EMISOR

// EMISOR
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
#include
#include
#include
#include

RF24 radio(9, 10);


const uint64_t pipe = 0xE8E8F0F0E1LL;

//vector con los datos a enviar


float datos[3];

void setup()
{
//inicializamos el puerto serie
Serial.begin(9600);

//inicializamos el NRF24L01
radio.begin();// Basically turn on communications with the device

//Abrimos el canal de Lectura


radio.openWritingPipe(pipe);//Set up the two way communications with the named device

}
void loop()
{

datos[0] = 1; //le puse valores fijos para asegurarme que funcionara


datos[1] = 2;
datos[2] = 3;

//reportamos por el puerto serial los datos enviados


radio.write(datos, 3);
Serial.print(“Datos enviados: “);
Serial.print(datos[0]);
Serial.print(” , “);
Serial.print(datos[1]);

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Serial.print(” , “);
Serial.println(datos[2]);
delay(1000);
}
—————————————
RECEPTOR

//RECEPTOR

#include
#include
#include
#include

RF24 radio(9, 10);


const uint64_t pipe = 0xE8E8F0F0E1LL;

//vector para los datos recibidos


float datos[3];

void setup()
{
//inicializamos el puerto serie
Serial.begin(9600);

//inicializamos el NRF24L01
radio.begin();

//Abrimos el canal de Lectura


radio.openReadingPipe(1, pipe);

//empezamos a escuchar por el canal


radio.startListening();//Give the module a kick
}
void loop()
{

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


uint64_t pipe;
// if ( radio.available() )
if ( radio.available() )
{
//Leemos los datos y los guardamos en la variable datos[]
bool done = radio.read(datos, 3);

//reportamos por el puerto serial los datos recibidos


Serial.print(“Dato0= ” );
Serial.print(datos[0]);
Serial.print(” V, “);
Serial.print(“Dato1= ” );
Serial.print(datos[1]);
Serial.print(” ms, “);
Serial.print(“Dato2= ” );
Serial.println(datos[2]);
}
else
{
Serial.println(“No hay datos de radio disponibles”);
}
delay(1000);
}

SALUDOS A TODOS …….CUALQUIER COMENTARIO SERA PROVECHOSO PARA TODA LA COMUNIDAD DE


PERSONAS QUE USAN ARDUINO. GRACIAS.

GIVE A REPLY

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Message

Name (required) Email (required)

URL

Post comment
WordPress
WordPress Anti-Spam
Anti-Spam by
by WP-SpamShield
WP-SpamShield

Copyright Prometec

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


TIENDA ARDUINO RASPBERRY PI IMPRESORA 3D FORO CONTACTO

COMUNICACIÓN DÚPLEX CON NRF2401


Enviando y recibiendo datos por RF con nuestros Arduinos

Home 
 Comunicación Dúplex Con NRF2401

OBJETIVOS

  Seguimos probando los módulos de radio NRF2401.

 Vemos porque no podemos enviar y recibir a la vez con ellos.

 Presentar un par de programas sencillos que nos permitan usarlos en nuestros proyectos para enviar y
recibir órdenes o datos en ambas direcciones y en ambos módulos.

MATERIAL REQUERIDO.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


9.60€ + 3.60€ +
IVA IVA

ARDUINO
UNO REV 3 NRF24L01
 Añadir al  Añadir al
carrito carrito

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


2.00€ +
IVA

CABLES
DUPONT
HEMBRA-
HEMBRA
 Añadir al
carrito

LAS CONEXIONES DE RADIO

En la sesión anterior establecimos una comunicación RF muy básica entre un emisor y un receptor de radio controlado con nuestros Arduinos.

Era un ejemplo muy sencillo, de hecho, procuramos que fuera la mínima expresión para facilitar la comprensión del ejemplo y para combatir el miedo
irracional que las comunicaciones de radio parece producir en muchos aficionados competentes.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Nunca entendí porqué. Parece que esa aura fantasmal que impregnaba las comunicaciones de radiofrecuencia a principios del siglo XX sigue vivo en
el XXI.

Pero en realidad, gracias a ingenieros anónimos, como los que nos ofrecen las NRF24L01 , son muy fáciles de utilizar sin más que un pequeño
empujón de ayuda, algo que por cierto estaría bien que nos dieran los ejemplos que vienen con la librería (Que hace falta ser egiptólogo para
descifrarlos)

Y es una pena, porque estos modulitos cumplen la regla de las 3 Bs, Bueno, bonito y Barato y esto no es frecuente.

Por eso vamos a seguir incluyendo tutoriales de uso de estos módulos RF, y como no podía ser de otra manera, teníamos que ampliar el tutorial a un
ejemplo que hiciera comunicación bidireccional (Dúplex) de modo que un emisor envíe una secuencia de datos, que se reciben en un segundo nodo y
nos responde para saber que ha llegado el mensaje.

Pero antes de empezar con el ejemplo tenéis que saber que el módulo NRF24L01 es un transceptor y no un emisor receptor.

Un equipo emisor receptor puede enviar mensajes de radio y recibirlos simultáneamente porque ambos circuitos, aunque muy similares, están
aislados uno del otro y pueden operarse independientemente.

Estos equipos se venden y están disponibles en el mercado, ¿Pero sabéis que? Cuestan pasta. Por eso cuando alguien quiere ahorrar unos euritos en
la radio y dado que el emisor y el receptor son bastante similares, se monta un circuito con partes comunes . De este modo podemos emitir o
recibir ( Observad el uso de la disyuntiva no copulativa ) pero, y este es el truco, no a la vez.

 No confundir con transponder o tranpondedor que es una cosa diferente. Aunque también es un sistema de
radio, el transponder emite una señal y espera una respuesta, que dependiendo de la que sea puede poner
o no en marcha una serie de acciones automáticas, como abrir la puerta de tu coche, o reclamar la
identificar un avión en vuelo con su posición.

Por eso nuestros módulos NRF2401, pueden estar en modo recepción o en modo emisión, pero no en ambos. Aunque eso sí, podemos cambiar de
uno a otro a voluntad, muy al estilo de las radios de aficionados que indican con un “corto” la intención de cambiar de modo.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


LAS INSTRUCCIONES BÁSICAS

Aunque ya vimos algunas en la pasada sesión, vamos a insistir con ellas. Lo primero es incluir algunas librerías:

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

Y después inicializamos los pines de control del módulo (Además, claro, de los de control SPI, de los que se encarga la librería):

RF24 radio(9,10);

En la última sesión dijimos que los pipes se pueden entender más o menos como canales de comunicación que no se interfieren unos con otros y
definimos uno para enviar nuestros mensajes.

Como lo que queremos ahora es generar una comunicación en ambos sentidos, vamos a necesitar dos canales o pipes, por el primero hablará uno y
escuchará el otro, y por el segundo funcionará al revés. Pero recordad que no podemos hacerlo a la vez.

const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };

Son un par de enteros de 64 bits y no os preocupéis mucho por ellos. Para iniciar la radio hacemos:

radio.begin();

Normalmente cuando envías un mensaje por radio, uno espera que llegue bien a la primera, pero la realidad suele tener su propia opinión y hacer de
las suyas. Por eso es buena idea que si no recibimos un mensaje correctamente, se reenvíe para garantizar la entrega.
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
El problema es cuantas veces hacemos este reenvío y cada cuanto tiempo. Por ese tenemos una instrucción como esta:
 Hay una relación muy estrecha entre las señales de radio frecuencia, la electricidad y el electromagnetismo
y generalmente cuando se produce una, también aparecen las otras.

 Hay cantidad de fenómenos naturales que generan señales de RF espurias, como tormentas y rayos o
tormentas solares incidiendo en las capas superiores de la atmosfera, pero también se generan por la
actividades humanas tales como arrancar cualquier cosa eléctrica, como motores o lámparas fluorescentes.

 Hay todo un muestrario de fenómenos que te producirán interferencias RF, antes o después y es mejor
prevenirlo.

radio.setRetries(15,15);

Fija en el primer parámetro la pausa entre reintentos, en múltiplos de 250µS, por eso 0 son 250µS y 15 son 400µS.(La radio funciona a velocidad de
vértigo)

El segundo parámetro indica cuantos reintentos se deben hacer hasta dejarlo, con un máximo de 15.

 Si bajamos estos valores, la velocidad de comunicación sube, pero también los errores y pueden perderse
datos. Por eso si la velocidad no es una cuestión decisiva (Y con Arduino rara vez lo será) es preferible
dejarlo en 15,15 y listo.

También te interesa saber que independientemente de la longitud del mensaje que tú quieras enviar, el módulo lo partirá en paquetes de una longitud
dada. Si no especificas un tamaño, el modulo usara 32 Bytes.

A esta longitud se le llama carga útil del paquete o PayLoad , y en caso de que haya un error en cualquiera de los bits de la transmisión, todo el
paquete debe ser reenviado de nuevo (Pero no te preocupes que el NRF2401 lo gestione en automático por ti).

setPayloadSize (número de Bytes)

 Si tienes muchos errores de transmisión, puedes bajar este número para evitar reintentos, pero ten en
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
cuenta que el paquete conlleva una carga propia entre las radios y psi lo bajas mucho, puedes estar
enviando muchos más datos de control que de mensajes y esto es un desperdicio.

Por ultimo tendremos que abrir los canales de comunicación o pipes, uno para emitir y el otro para recibir

radio.openWritingPipe(pipes[0]);
radio.openReadingPipe(1,pipes[1]);

Y a partir de ahora, ya podemos empezar a escribir lineas de código.

PRGRAMANDO LA COMUNICACIÓN DE UN PAR DE MÓDULOS NRF2401

Montaremos de nuevo un par de Arduinos conectados mediante los NRF2401, con el mismo esquema que en la sesión anterior y que repito aquí
para vagos y gente con muchas cosas que hacer:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


De nuevo tendremos dos roles diferenciados. Uno será el emisor y el otro el receptor. Comencemos con el programa del emisor Prog_79B_Emisor:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

RF24 radio(9,10);
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };

void setup(void)
{ pinMode(10, OUTPUT);
Serial.begin(9600);
radio.begin();

radio.setRetries(15,15); // Maximos reintentos


//radio.setPayloadSize(8); // Reduce el payload de 32 si tienes problemas
radio.openWritingPipe(pipes[0]);
radio.openReadingPipe(1,pipes[1]);
}

Nada nuevo en el setup. Veamos el loop:

void loop(void)
{
radio.stopListening(); // Paramos la escucha para poder hablar
unsigned long time = millis();
Serial.print("Enviando ") ; Serial.println(time) ;
bool ok = radio.write( &time, sizeof(unsigned long) );

if (ok)
Serial.println("ok...");
else
Serial.println("failed");

radio.startListening(); //Volvemos a la escucha

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Dejamos de escuchar en la radio para poder emitir. Leemos el valor de millis (O de cualquier otro parámetro que queramos enviar, como una
temperatura) y lo enviamos para después testear si la emisión ha sido o no correcta.

unsigned long started_waiting_at = millis();


bool timeout = false;
while ( ! radio.available() && ! timeout ) // Esperamos 200ms
if (millis() - started_waiting_at > 200 )
timeout = true;

Esperamos la confirmación de que han recibido el mensaje en destino, durante 200 ms. Y al salir comprobamos si se acabó el tiempo, o hemos
recibido un mensaje.

Si ha disparado el timeout imprimimos un mensaje de error, y en caso contrario procesamos el mensaje recibido.

if ( timeout )
Serial.println("Error, No ha habido respuesta a tiempo");
else
{ // Leemos el mensaje recibido
unsigned long got_time;
radio.read( &got_time, sizeof(unsigned long) );

Serial.print("Respuesta = ");
Serial.println(got_time);
}
delay(500);

Creo que no tendréis problemas con este programa. Vamos con el receptor Prog_79_B_receptor.

El setup es exactamente igual que en el emisor con una pequeña diferencia clave, los pipes de comunicación se invierten, ya que si el emisor
escucha por un canal, el receptor necesariamente tiene que hablar por él y viceversa, para que se puedan poner de acuerdo.

Por eso, el receptor empieza a escuchar en el setup y define los pipes de lectura y escritura invertidos con relación al emisor:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


radio.begin();
radio.startListening();
radio.openWritingPipe(pipes[1]);
radio.openReadingPipe(1,pipes[0]);

Y para el loop del receptor tenemos:

if ( radio.available() ) // Si hay datos disponibles


{
unsigned long got_time;
bool done = false;
while (!done) // Espera aqui hasta recibir algo
{
done = radio.read( &got_time, sizeof(unsigned long) );
Serial.print("Dato Recibido =");
Serial.println(got_time);
delay(20); // Para dar tiempo al emisor
}
radio.stopListening(); // Dejamos d escuchar para poder hablar

radio.write( &got_time, sizeof(unsigned long) );


Serial.println("Enviando Respuesta");

// Volvemos a la escucha para recibir mas paquetes


radio.startListening();
}

Aquí os pongo un pequeño video mostrando el resultado de la comunicación:

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


He hecho una prueba usando estos programas dejando el emisor en mi PC y colocando el receptor en mi portátil, para ver moviéndome por casa,
hasta donde me he podido alejar sin perder la señal.

El resultado ha sido bastante pobre, ya que en cuanto colocas paredes de por medio la comunicaron se pierde con rapidez a partir de 10 metros, lo
que no resulta extraño dado que estoy usando módulos con antena integrada.

Normalmente a estos módulos se les asigna un alcance de 20 o 25 m sin obstáculos y esta distancia disminuye rápidamente a medidas que la señal
encuentra obstáculos, ya que la potencia de emisión es muy baja y por tanto, el resultado de la prueba concuerda con esta idea.

Si queremos ampliar el radio de cobertura tendremos que pasar a usar antenas amplificadas, similares a estas:

Estos módulos incluyen, no solo un adaptador de antena, además llevan integrado un amplificador de señal para potenciar la emisión y recepción
de señal, con lo que la distancia útil de transmisión crece hasta unos 100 metros (Según he visto en Internet ).

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


En las pruebas que hemos hecho nosotros usando un par de estos módulos, puedes conectar cualquier punto de una casa de tamaño medio sin
problemas, pero no los hemos podido probar en el campo.

Por último y para cerrar esta sesión, comentar que también existe disponibles adaptadores USB con NRF2401 incluido, lo que nos permite enviar y
recibir mensajes desde nuestro PC a estos módulos.

De hecho tengo uno de un fabricante chino, pero me temo que Windows se niega tercamente a reconocerlo y la página del fabricante es un desastre
en el que soy incapaz de encontrar ningún driver para él.

Pero vale la pena comentar, que disponer de un medio de interactuar con estas radios desde nuestros portátiles es una utilidad que amplia
enormemente las posibilidades de comunicación y control de nuestros Arduinos.

Seguiré insistiendo con él y si consigo arrancarlo, os lo hare saber.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


RESUMEN DE LA SESIÓN

  Seguimos profundizando en los módulos NRF24L01.

 Hemos visto más comandos disponibles en la librería que nos ayudaran a minimizar los problemas de
interferencias y reenvíos.

 Escribimos unos programa básicos para comunicar dos de estos módulos y establecer un canal de ida y
vuelta

Anterior Siguiente

Copyright Prometec

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
void setup()
{ Serial.begin (9600);
pinMode (13, OUTPUT) ;
pinMode (12, OUTPUT) ;
for (int i = 7 ; i < 12 ; i++)
pinMode(i, INPUT) ;
}

void loop()
{
if (digitalRead(7) ) // Si hay dato valido
{ Serial.print("Valid trans. \t");
if (digitalRead(8))
Serial.print( "Boton A, pulsado");
if (digitalRead(9))
Serial.print( "Boton B, pulsado");
if (digitalRead(10))
{
Serial.print( "Boton C, pulsado");
digitalWrite (12, ! digitalRead(12)) ;
delay (500) ;
}
if (digitalRead(11))
{
Serial.print( "Boton D, pulsado");
digitalWrite (13, ! digitalRead(13)) ;
delay (500) ;
}
Serial.println("\t");
}
}
Anterior Siguiente
TIENDA ARDUINO RASPBERRY PI IMPRESORA 3D FORO CONTACTO

LOS KITS DE INICIO XBEE


COmunicaciones inalambricas por RF

Home 
 Los Kits De Inicio Xbee

ADAFRUIT MOTOR SHIELD V2

  Presentar los modulos de XBee.

 Presentar los kit de inicio XBee y Arduino.

 Comentar los cursos online disponibles.

 Hacer un revision del kit.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


LOS KITS DE INICIO XBEE

Como ya os comentaba unos días atrás, Digi International Spain tuvo la amabilidad de enviarme un par de kits de incio de XBee que voy revisando
con menos velocidad de lo que a mí me hubiera gustado, porque al final no voy sobrado de tiempo (Para nada, en serio ) pero con los que poco a
poco voy avanzando.

Me ha parecido interesante comentaros aquí la buena sensación que me ha causado tanto los kits como la magnífica documentación que DIGI pone
libremente a disposición de quien tenga interés, en su web.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Para quien no este familiarizado con Xbee de DIGI, comentaros que es probablemente la solución estándard por excelencia en comunicaciones por
radio frecuencia RF, tanto en punto a punto como en multipunto o en Mesh.

No es precisamente un tema sencillo. No tanto por la complicación del tema en


sí, sino por su amplitud, y la oferta de producto por parte de DIGI es
sencillamente avasalladora y cubre tantos aspectos y rincones que introducirse en
el mundo Xbee no es tarea sencilla especialmente al principio.

Por eso es muy de agradecer los curso de formación que se pueden seguir en su
web (En seguida os digo donde impacientes ) y los kits de inicio que vende para
poder seguir esos cursos de modo que puedas arrancar en el sorprendente mundo
de las comunicaciones XBee, de un modo guiado y con garantías ( Esto me suena )

Para los que tengáis interés en echar una ojeada, y desde luego os lo recomiendo
si os interesa el tema, la página principal de entrada a la documentación y
tutoriales de Xbee es esta: http://docs.digi.com

Aquí encontrareis abundante documentación sobre lo que es XBee y los tipos de módulos disponibles, así como entradas a los cursos de formación
guiados. Tomarlo con calma porque hay una cantidad espectacular de información

En mi caso, me enviaron un par de kits de los que más directamente tienen que ver con Arduino:

 Xbee Arduino Compatible Coding Platform

 Wireless Connectivity Kit.

Vamos a ver un poco los kits y lo que se pretende con ellos

XBEE ARDUINO COMPATIBLE CODING PLATFORM


PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
Este curso está pensado para iniciarnos en el mundo Xbee a través de Arduino y Processing, por lo que dispone de 5 lecciones con Processing
que son las que aún no he hecho (Porque Processing siempre me da pereza) y otras 5 con Arduino directamente

Para los que no lo conozcáis, Processing es un lenguaje Open Source diseñado para artistas y creadores gráficos en principio que ha acabado
siendo, poco menos que el lenguaje oficial de Arduino, cuando buscas conectar tu Arduino y un PC para lo que sea (Ademas la comunidad Processing
y la de Arduino somos muy colegas de siempre)

El IDE de Arduino ha evolucionado como un fork del de Processing y si un día de esos que no sabéis que hacer, lo descargáis e instaláis, os
sorprenderá ver… que parece que estas en Arduino (En realidad es al revés)

SI queréis echar una ojeada al curso Arduino, aquí tenéis la entrada

https://docs.digi.com/display/XBeeArduinoCodingPlatform/Kit+contents

 Ojo con una cosa, me ha pasado un par de veces que cuando entras te pierdes y no
encuentras por donde seguir, especialmente con el Chrome. Y es que tenéis un pulsador
disimulado en la pagina, que pone y quita el menú de la izquierda y para que no sea fácil, sale
quitado por defecto, así que seguramente tendréis que pulsarlo.

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


El kit viene magníficamente provisto de material:

QTY. PART PICTURE OF PART

1 Arduino Leonardo compatible

1 XBee Shield

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


QTY. PART PICTURE OF PART

3 Series 1 802.15.4 XBee Modules

2 XBee breadboard adapters

1 XBee USB adapter

1 2-axis joystick

6 Push-buttons

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


QTY. PART PICTURE OF PART

3 Solderless breadboards

2 Breadboard power supplies

Bundle Jumper wires

18 LEDs

2 10kΩ potentiometers

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


QTY. PART PICTURE OF PART

1 Package of 330Ω resistors

2 9V Battery clips

1 Micro USB cable (for Arduino board)

Mini USB cable (for XBee USB adapter


3
and the breadboard power supplies)

2 9V Batteries

No es frecuente encontrar Kits tan bien provistos de material y empieza con un Arduino Leonardo para apoyar las prácticas e incluye todo lo
necesario, tal como un Shield XBee, para montar los módulos RF en nuestros Arduinos de un modo cómodo para conectar un par de
ellos rápidamente.

También trae unos adaptadores para protoboard para los módulos XBee, imprescindibles para algunas prácticas y tres módulos Xbee de la Serie 1.

 Conviene decir aquí que XBee tienes varias líneas de producto, entre ellas la Serie 1, la más
PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API
sencilla y con ciertas limitaciones, pero también la más sencilla de manejar y de iniciarse, para
después pasar a la Serie 2, no solo más potente sino también más versátil y después la Serie
2 PRO con alcances importantes .

No tendría sentido ponernos a hablar de todas las posibilidades que hay en Xbee ( Y yo no sería la persona más indicada ) porque el abanico de
posibilidades es inmenso y por eso, me parece un acierto un kit de inicio con la Serie 1, la más sencilla, pero que ya ilustra la forma de trabajar con
ella y descubre algunas posibilidades muy interesantes.

Me han gustado los tutoriales. Son claros y concisos y te van llevando por un itinerario bien pensado, para que veas posibilidades, mientras que en los
laterales tienes información adicional con la que extender lo que vas viendo, aunque rápidamente te pierdes porque el tema es inmenso.

Te muestra diferentes aspectos del tema Xbee, como la programación inicial de los módulos mediante el Xbee USB adapter y te presenta la
herramienta imprescindible para configurar los módulos Xbee: el XCTU

Varios ejemplos usan la librería Xbee para Arduino y te muestra muy por encima ( Porque aquí hay mucha tela que cortar ) ejemplos de comunicación
entre los Arduino mediante los módulos XBee usando la API de la librería.

Como no quiero enrollarme mucho, y para no ponerme pesado, el resumen es que me ha gustado el curso y que tengo que ir leyendo con calma la
inabordable cantidad de información que tenemos en la web de DIGI y que si os interesa en serio el tema de las comunicaciones inalámbricas
profesionales, tenéis aquí, un magnifico arranque de una forma ordenada.

WIRELESS CONNECTIVITY KIT

Mientras que la plataforma Xbee Arduino está pensada para que los aficionados a Arduino, o sea los que estáis leyendo esto, se inicien en XBee
desde una plataforma en la que nos sentimos confortables, para los que se inician de cero sin experiencia en ningún micro controlador,
probablemente sea más interesante seguir el curso y kit que ahora nos ocupa, el “ Wireless connectivity kit ”

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Se basa en la plataforma de desarrollo de Grove y consiste en un par de módulos que permiten la inserción de los sensores y actuadores estándar
con el conector Grove y no requieren controlador externo, ya que el propio XBee incluye un procesador propio interno ( Sorpresa, e incluso creo que
se le puede controlar mediante comandos AT)

El contenido del kit es un poco menor que en del kit previo, pero puede también ser muy interesante para los que ya disponéis de Arduinos y
similares y queréis entrar directamente a conocer la plataforma XBee

2 XBee Grove Development Boards

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


2 Series 1 802.15.4 XBee Modules

2 Micro USB cables

2 XBee stickers

El contenido del curso, es tan magnifico e imprescindible como el anterior y desde luego os lo recomendaría tanto a los que dispongáis este kit como
a los que simplemente queréis husmear las posibilidades de conectividad de los XBee.

No dejéis de echarle un vistazo porque creo que si el tema de las comunicaciones inalámbricas os interesan, encontrareis rápidamente que XBee
puede no ser la solución más barata del mercado, pero es una que resuelve todas las posibilidades con un modelo común y una plataforma de
software que sorprende por su potencia en cualquier situación.

Aqui os dejo un mini vídeo de presentación del kit;

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Un saludo y espero que lo que os he contado pueda servir como presentación para que algunos os intereséis por un tema que tiene mucho presencia
en todos los proyectos de comunicaciones de un cierto nivel, por varios motivos.

Anterior Siguiente

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


Copyright Prometec

PDF created on http://www.htm2pdf.co.uk via the HTML to PDF API


#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN);

MFRC522::MIFARE_Key key;

byte nuidPICC[3];

Serial.begin(9600);
SPI.begin(); // Init SPI bus
rfid.PCD_Init(); // Init MFRC522

for (byte i = 0; i < 6; i++)


{ key.keyByte[i] = 0xFF;
}

if ( ! rfid.PICC_IsNewCardPresent())
return;

if ( ! rfid.PICC_ReadCardSerial())
return;

if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&


piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
piccType != MFRC522::PICC_TYPE_MIFARE_4K)
{
Serial.println(F("Your tag is not of type MIFARE Classic."));
return;
}
if (rfid.uid.uidByte[0] != nuidPICC[0] ||
rfid.uid.uidByte[1] != nuidPICC[1] ||
rfid.uid.uidByte[2] != nuidPICC[2] ||
rfid.uid.uidByte[3] != nuidPICC[3] )
{
Serial.println(F("A new card has been detected."));
Serial.println(F("The NUID tag is:"));
Serial.print(F("In hex: "));
printHex(rfid.uid.uidByte, rfid.uid.size);
Serial.println();
Serial.print(F("In dec: "));
printDec(rfid.uid.uidByte, rfid.uid.size);
Serial.println();

rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
Anterior Siguiente

También podría gustarte