Conectando el Beaglebone a internet utilizando un modem 3G

El concepto «internet de las cosas» esta asociado a una idea principal «interconexión», esta interconexión puede o no ser hacia Internet, muchas veces nuestras «cosas» solo se conectarán entre si para intercambiar datos y nunca se conectarán a la red global Internet. En este artículo veremos lo contrario, conectaremos nuestro ya conocido Beaglebone a Internet utilizando un modem 3G.

En artículos anteriores ya vimos como conectar un Arduino a la red utilizando una Ethernet Shield, y como guardar estos datos en una base de datos remota MySQL, también vimos como conectar un Beaglebone utilizando la tarjeta ethernet que viene en su placa y  utilizando una «mini» tarjeta de red wifi USB.  Pero, para nuestras macabras intenciones esto no es suficiente.

Para «cosas» que no se mueven una conexión cableada basta, como por ejemplo un refrigerador, lavadora, televisor. Para «cosas» que se mueven o robots, una red wifi es suficiente, basicamente nuestro robot tendria conectividad dentro de un radio hogareño de unos 100 metros, pero ¿qué pasa cuando el robot se sale de cobertura wifi? bueno, para eso podemos usar una red 3G, esto nos permitirá tener un robot que pueda moverse casi por cualquier lugar donde un celular tenga cobertura 2G o 3G (me imagino un drone bastante simpático cuando pienso en esto).

Bueno, manos a la obra, y como esto es una receta, aqui los ingredientes:

Ingredientes

– Beaglebone rev. A5 con Ubuntu 12.04 (ver nuestro artículo anterior)

– Cable de red UTP

– Cable USB (El que viene en el kit del Bleaglebone)

– Modem 3G con simcard activa

– Computador o Notebook con Linux (si yo soy linuxero)

Paso 1: Instalar wvdial en nuestro Beaglebone

La versión de Ubuntu compilada para Beaglebone no posee todos los paquetes, por lo que será necesario instalar el paquete wvdial que nos permite utilizar el modem 3G con comandos AT.

Esta instalación debe realizarse con el Beaglebone conectado a Internet utilizando su tarjeta ethernet para que pueda descargar los paquetes.

La instalación se realiza utilizando nuestro ya conocido comando apt-get

ubuntu@omap:~$ sudo apt-get install wvdial
[sudo] password for ubuntu: 
Reading package lists... Done

...
Aqui un montón de información que no es muy útil...ya.. si es útil.
...

ldconfig deferred processing now taking place
ubuntu@omap:~$

Con esto deberíamos estar listos!

Paso 2: Conectarnos al Beaglebone utilizando el puerto serial micro USB

¿Por qué utilizamos el puerto micro USB y no directamente nos conectamos por la tarjeta ethernet? Simple, cuando logremos la conexión a Internet nuestro Beaglebone puede «confundirse» y podemos perder control si estamos conectados por la red, por eso, para prevenir nos conectamos directamente al puerto serial.

Primero debemos conectar nuestro Beaglebone al computador utilizando el cable USB que viene dentro del kit. Este cable también le entrega la «alimentación» Para conectarnos utilizaremos la aplicación «screen» pero antes debemos ver que puerto esta utilizando nuestro  Beaglebone, para esto utilizaremos los comandos «dmesg» y «grep».

joniuz@joniuz-notebook:~$ dmesg | grep FTDI
[19188.846173] USB Serial support registered for FTDI USB Serial Device
[19188.846295] ftdi_sio 2-3.1:1.0: FTDI USB Serial Device converter detected
[19188.846631] usb 2-3.1: FTDI USB Serial Device converter now attached to ttyUSB0
[19188.846644] ftdi_sio 2-3.1:1.1: FTDI USB Serial Device converter detected
[19188.846974] usb 2-3.1: FTDI USB Serial Device converter now attached to ttyUSB1
[19188.846992] ftdi_sio: v1.6.0:USB FTDI Serial Converters Driver
joniuz@joniuz-notebook:~$

Como podemos ver, el Beaglebone abre dos conexiones FTDI a nuestro notebook, utilizaremos la segunda conexión para conectarnos con la aplicación «screen» (si utilizan Window$ puedes usar Putty o Hyperterminal).

joniuz@joniuz-notebook:~$ screen /dev/ttyUSB1 115200

[Presionar Enter]

Ubuntu 12.04 LTS omap ttyO0

omap login: ubuntu
Password: 
Last login: Fri Dec 31 18:13:26 CST 1999 on ttyO0
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-psp7 armv7l)

 * Documentation:  https://help.ubuntu.com/
ubuntu@omap:~$

Y voilá! estamos conectados.

Paso 3: Configurar wvdial

Como ya tenemos instalado wvdial ahora debemos configurarlo con los parámetros para que se conecte a nuestro proveedor de Internet (en este caso Entel, sí deberíamos cobrar por la publicidad)

Para configurar el wvdial se debe editar el archivo, pero antes debemos subir nuestros privilegios a root con el comando «sudo su -«, este comando te permite seguir conectado como root ingresando tu propia contraseña, para editar el archivo utilizaremos «vi» (si! como hacker de verdad!)

ubuntu@omap:~$ sudo su -
[sudo] password for ubuntu: 
root@omap:~# vi /etc/wvdial.conf

En el archivo wvdial.conf configuraremos los comandos AT para que el modem «llame» a nuestro proveedor y establezca la sesion PPP, es muy importante en esta configuración los parámetros de la APN que van en el string de inicialización del modem «Init5», para el caso de Entel es «imovil.entelpcs.cl», en Movistar o Claro, este parámetro cambia (Ya actualizaré este artículo con los parámetros de las APNs utilizadas por los distintos proveedores aquí en Chile).

Otro parámetro importante es el puerto en el cual esta conectado nuestro Modem. como el Beaglebone solo tiene un puerto USB, éste siempre debería ser «Modem = /dev/ttyUSB0».

El archivo wvdial.conf debe quedar así:

[Dialer Defaults]
Carrier Check = off
Init1 = ATZ
Init2 = ATQ V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init5 = ATZ+cgdcont=1,"IP","imovil.entelpcs.cl"
Password = entelpcs
Ask Password = 0
Check Def Route = 1
Phone = *99#
Idle Seconds = 0
Modem Type = Analog Modem
Stupid Mode = 1
Compuserve = 0
Baud = 460800
Auto DNS = off
Dial Command = ATDT
Modem = /dev/ttyUSB0
ISDN = 0
Username = entelpcs
[Dialer entel]
Stupid Mode = on
Password = entelpcs
Auto Reconnect = off
Username = entelpcs
Phone = *99#

Salimos del modo edición y grabamos.

Para conectar el Bleaglebone a Internet usar el comando «wvdial entel» donde el parámetro «entel» hace referencia a la seccion del archivo de configuración que empieza por «[Dialer entel]»

root@omap:~# wvdial entel
--> WvDial: Internet dialer version 1.61
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATQ V1 E1 S0=0 &C1 &D2 +FCLASS=0
ATQ V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Sending: ATZ+cgdcont=1,"IP","imovil.entelpcs.cl"
ATZ+cgdcont=1,"IP","imovil.entelpcs.cl"
OK
--> Modem initialized.
--> Sending: ATDT*99#
--> Waiting for carrier.
ATDT*99#
CONNECT
--> Carrier detected.  Starting PPP immediately.
--> Starting pppd at Fri Dec 31 19:06:05 1999
--> Pid of pppd: 967
--> Using interface ppp0
--> pppd: [08]�#@P�[02]
--> pppd: [08]�#@P�[02]
--> pppd: [08]�#@P�[02]
--> pppd: [08]�#@P�[02]
--> pppd: [08]�#@P�[02]
--> local  IP address 186.11.6.47
--> pppd: [08]�#@P�[02]
--> remote IP address 10.64.64.64
--> pppd: [08]�#@P�[02]
--> primary   DNS address 200.63.56.6
--> pppd: [08]�#@P�[02]
--> secondary DNS address 200.63.56.4
--> pppd: [08]�#@P�[02]

Cuando nos entrega IP y los DNS podemos decir que «estamos conectados»

Como el proceso wvdial queda corriendo en nuestra sesión perdemos la capacidad de ejecutar comandos, entonces es una buena opción considerar el caracter «&» al final de la instrucción para que el proceso quede corriendo en «background» y poder así seguir ejecutando comandos en nuestra terminal.

Como el proceso no esta en backgroud, si queremos terminar nuestra sesión de internet, simplemente presionamos [Ctrl] + [c] y el proceso termina.

^CCaught signal 2:  Attempting to exit gracefully...
--> Terminating on signal 15
--> pppd: [08]�#@P�[02]
--> Connect time 0.1 minutes.
--> pppd: [08]�#@P�[02]
--> pppd: [08]�#@P�[02]
--> pppd: [08]�#@P�[02]
--> Disconnecting at Fri Dec 31 19:06:14 1999
root@omap:~#

Tarea para la casa, hacer que el Beaglebone se conecte automáticamente cuando se inicie (deberíamos hacer concursos no? que Manuel regale stickers!)

Author: José Zorrilla

Ingeniero Civil Informático, Universidad de Santiago de Chile. Master of Professional Engineering University of Sydney. En Chile trabajó empresas de servicios internet y telcos como IBM, VTR y Entel. Le gusta la fotografía y el armado de drones, tiene estudios de violín, guitarra eléctrica y sintetizadores que enciende cuando tiene algo de tiempo.

17 thoughts

  1. APNs:
    web.tmovil.cl (bam) user: web pass: web
    wap.tmovil.cl (wap) user: wap pass: wap
    bam.clarochile.cl (plan) user: clarochile pass: clarochile
    bap.clarochile.cl (prepago) user: clarochile pass: clarochile
    imovil.virginmobile.cl sin user ni pass

  2. Gracias Marcianisto!

    Actualizaremos el artículo con la información de los APNs de cada proveedor de banda ancha móvil chileno.

    Seria interesante conocer las APNs de países vecinos y probar si el script de conexión funciona.

  3. Muy buena la pagina, me gustaría saber que tal es la estabilidad de la BeagleBone con los modems BAM, si se cae la conexión, o con que compañía ha funcionado mejor, también si puede actuar como router y darle a un PC conectividad a Internet a través del puerto Etehernet.

    Muchas gracias!
    Saludos!

    1. César, el BeagleBone en si es muy estable, si usas el parámetro «Auto Reconnect = on» puedes hacer que en caso de perder la conexión intente auto reconectarse.

      Con respecto a las compañías la experiencia de usuario es la misma que con cualquier módem, si la compañía es mala no le puedes pedir milagros al BeagleBone.

      Efectivamente el BeagleBone se puede usar como un router para compartir internet, pero no fue diseñado pensando en ese uso. La potencia del BeagleBone esta en sus conectores P8 y P9, en ellos puedes conectar lo que desees con 92 pines disponibles, el BeagleBone esta diseñado para conectar cosas como sensores, motores, servos y con ellos crear robots, casas inteligentes, equipos gps, lavadoras que twitten y todo lo que se te ocurra, si lo quieres usar como un router mejor compra uno con la especificación 3g, le instalas una sim de la compañía que desees y listo! te saldrá mucho mas barato.

      Puedes ver una guía de cableado en el siguiente enlace

      http://www.internetdelascosas.cl/guia-de-cableado-para-beaglebone/

  4. Hola joniuz , tengo 2 modems , alcatel x060a a3 ,zte mf100 ,un tablet A10 cortex a8( WOO comet PAD-703 ),android 4.0 , es si hay alguna manera de usar el tablet como celular ,conectando el modem 3G al tablet, busque y me parece que los modem , tiene una linea de voz y otra de datos,pero los fabricantes dentro del firmware ,bloquean la linea de voz ,¿ hay alguna manera de usar el tablet como celular?(no por coneccion internet ni wifi ,(no Viber, no skype ,nogoogle talk,..),lo mas cerca que encontre es esto :http://odicha.wordpress.com/2009/06/30/chan_sebi-1-que-como-y-por-que/ , http://luisjoseb.blogspot.com/2011/12/guia-para-extraer-el-modem-de-un.html ,gracias por tu respuesta.Saludos.

  5. Hola!!! genial lo que haz hecho, pero tengo una duda, lo que pasa es que tengo que hacer algo similar pero con el Raspberry PI… supongo que trabaja de forma similar. pero por casualidad sabes el consumo eléctrico de los modem 3G???

  6. Hola amigo te escribo desde colombia, feli itaciones x la copa america quedo en chile, quiero pedirte el favor me indiques como hacer q la raspberry cuando enciende, inicie automaticamente la conexion de internet con el modem de 3G, con q programa se puede hacer o si necesito crear un script y alojarlo en la carpeta init. Por fa tu ayuda para un proyecto de la universidad. Gracias. Saludos desde Colombia

    1. Hola Dario! gracias por las felicitaciones… con respecto a tu consulta efectivamente debes crear un script en la carpeta /etc/init.d/ hay varios tutoriales al respecto. Otra forma mas simple es agregar la linea wvdial proveedor_isp en el archivo /etc/rc.local que se ejecuta cuando la Raspberry Pi se inicia. Recuerda cambiar el parametro Auto Reconnect = On para que se reconecte en caso de perder la conexion.

      Saludos

  7. Hola excelente proyecto, por ahí mensionas que se realizó un tutorial «como conectar un Beaglebone utilizando la tarjeta ethernet que viene en su placa» existe ese tutorial? ya que estoy aprendiendo a usar el ethernet de esa placa.
    Saludos y felicitaciones por la página.

    1. Estimado Jaime, al instalar el sistema operativo (basado en Linux) el Beaglebone usa nativamente la tarjeta ethernet incorporada para conectarse a internet. Luego con cualquier lenguaje avanzado puedes utilizar servicios internet como paginas web, conexion a bases de datos, etc.
      Saludos

  8. Hola, gracias por tu tutorial, tengo un problema y creo que debe ser algo bien tonto, pero sea como sea, etoy colgado con ello:

    Seguí los pasos que propones y Consigo IP, DNS1 y 2, todo ok, pero al intentar hacer un ping loco (digamos ping 8.8.8.8) me muestra que la red es inaccesible o se queda pegado y luego me muestra un desepcionante «100% lost»

    Qué podrá ser?
    Y gracias de nuevo por compartir la info, estuve harto tiempo buscando como conenctar este bicho.

    1. Hola Claudio
      Este tutorial ya va a cumplir 4 años y hay algunas cosas que ya estan obsoletas, como por ejemplo la versión de sistema operativo que usa el Beaglebone. Qué versión estas usando? si ejecutas un «ifconfig -a» te muestra la interfaz del modem activa? y por último, el modem que usas es de prepago o tiene un plan?
      Saludos
      JZ

  9. te felicito- tengo 58 años y empesare con arduino a ver si a fin de año tengo mi casa automatizada por mi mismo hoy es 13-02-2016

    1. Hola Jorge, la edad no es impedimento para nada, y menos para aprender cosas nuevas. Como sugerencia, mas que Arduino, te recomiendo probar tambien con Raspberry Pi y Python que son mucho mas poderosos, especialmente en automatizacion y smarthouse.
      Saludos
      JZ

Deja una respuesta

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