Configurar Raspberry Pi como AP

Introducción

En el proyecto que estoy desarrollando actualmente, he necesitado configurar una raspberry Pi como cliente wifi y como access point. Es decir, necesito conectarme a un router wifi (cliente) y que clientes se conecten al wifi que está emitiendo la rapsberry (AP).

En la teoria podemos usar el propio adaptador integrado de la raspberry para ambos funcionamientos, sin embargo yo no he logrado hacerlo funcionar y he necesitado usar una antena wifi externa [1]. Para la realización de este artículo he seguido el  post de imti[2]; al seguir ese tutorial he visto que algunas cosas explicadas no me han funcionado y he necesitado realizarlas de otra manera.

Desarrollo

Configuración Wifi

El adaptador usado es plug&play en raspbian jessie lite (Release date:2017-07-05) por lo que no hará falta instalar ningún driver, tan sólo necesitaremos realizar la configuración de la red wifi. Para ello editaremos el fichero /etc/network/interfaces y añadiremos la siguiente información:

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

iface eth0 inet manual

allow-hotplug wlan1
iface wlan1 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

auto wlan0
iface wlan0 inet dhcp
# wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

auto uap0
iface uap0 inet static
address 192.168.50.1
netmask 255.255.255.0
network 192.168.50.0
broadcast 192.168.50.255
gateway 192.168.50.1

Nota: En mi caso particular he decidido usar el rango de IP 192.158.50.0. En caso de querer usar otro rango se deberá cambiar las direcciones indicadas en el artículo por el deseado.

Con esta configuración hemos establecido que el dispositivo wlan1 (adaptador externo) será el encargado de conectarse al wifi (líneas 9 a 11), el dispositivo wlan0 (adaptador integrado) no se conectará (líneas 13 a 15), y crearemos el adaptador virtual uap0 que será el encargado de gestionar el punto de acceso (líneas 17 a 23).

Una vez reiniciamos el sistema, comprobaremos que la conexión ha tenido efecto.

pi@zero:~ $ ifconfig

uap0 Link encap:Ethernet HWaddr b8:27:eb:59:34:1f
inet addr:192.168.50.1 Bcast:192.168.50.255 Mask:255.255.255.0
inet6 addr: fe80::adf4:9d27:853b:3999/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:117 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:22430 (21.9 KiB)

wlan0 Link encap:Ethernet HWaddr b8:27:eb:59:34:1f
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

wlan1 Link encap:Ethernet HWaddr 00:0f:00:31:5d:26
inet addr:192.168.5.167 Bcast:192.168.5.255 Mask:255.255.255.0
inet6 addr: fe80::236c:b228:5d96:b0c4/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4737 errors:0 dropped:3 overruns:0 frame:0
TX packets:244 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:637377 (622.4 KiB) TX bytes:30171 (29.4 KiB)

También podemos comprobar que el dispositivo wlan1 se ha conectado a la red indicada en el fichero wpa_supplicant.conf

pi@zero:~ $ iw dev wlan1 link
Connected to 06:18:d6:87:52:40 (on wlan1)
SSID: The Papaya Group freq: 2412
RX: 3507059 bytes (26364 packets)
TX: 44181 bytes (392 packets)
signal: -47 dBm
tx bitrate: 60.0 MBit/s MCS 3 40MHz short GI
bss flags: short-preamble
dtim period: 1
beacon int: 100

Una vez que tenemos realizada de forma correcta la configuración wifi, necesitaremos instalar los programas necesarios.

Instalación hostapd y DNSmasq

Necesitaremos dos programas para poder realizar la gestión del AP con la raspberry. Estos programas son:

  • Hostapd: encargado de realizar el punto de acceso como tal y que los clientes se puedan conectar a él.
  • DNSmasq: encargado de realizar la gestión de las ips de los clientes que se conecten.

Ambos programas están incluidos por defecto en los repositorios de raspbian, por tanto, para instalarlos bastará con instalarlos desde apt-get:

sudo apt-get install hosted dnsmasq

Ficheros de configuración

El siguiente paso será realizar la configuración de cada uno de los programas instalados. Empezaremos editando el fichero de hostapd que será el encargado de crear el AP para que nos conectemos a él. Para ello, crearemos el fichero /etc/hostapd/hostapd.conf y añadiremos la siguiente información:

interface=uap0
ssid=zeroAP
hw_mode=g
channel=11
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=zeroAp
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

Podremos cambiar el parámetro asid (línea 2) con el ssid que queramos que nos aparezca; y el parámetro wpa_passphrase (linea 9) con la contraseña que queramos que tenga el AP.

Deberemos indicar a hostapd cual es el fichero de configuración que necesita usar. Editaremos el fichero /etc/default/hostapd añadiendo la siguiente línea:

DAEMON_CONF="/etc/hostapd/hostapd.conf"

Una vez realizada la configuración del AP, será necesario configurar DNSmasq, para poder realizar las gestiones a nivel de direcciones IP de los clientes. De esta manera, se podrán asignar IP a los clientes que se conecten mediante DHCP. Para configurar DNSmasq editaremos el fichero /etc/dnsmasq.conf

interface=lo,uap0
no-dhcp-interface=lo,wlan0
bind-interfaces
server=8.8.8.8
domain-needed
bogus-priv
dhcp-range=192.168.50.50,192.168.50.150,12h

Configuración de inicio

Una vez que se han configurado los programas de manera individual será necesario hacer la configuración para que los programas se inicien automáticamente.

Hostapd

Crearemos el fichero /usr/local/bin/hostapdstart y añadiremos la siguiente información:

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
iw dev wlan0 interface add uap0 type __ap
sysctl net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s 192.168.50.0/24 ! -d 192.168.50.0/24 -j MASQUERADE
ifup uap0
service hostapd restart
hostapd /etc/hostapd/hostapd.conf > /dev/null 2>& 1

Una vez editamos, le daremos permisos 775:

sudo chmod 775 /usr/local/bin/hostapdstart

Editaremos el fichero /etc/rc.local añadiendo la siguiente línea:

/bin/bash /usr/local/bin/hostapdstart

Es importante añadir la línea justo antes de la línea de exit 0.

DNSmasq

Para iniciar DNSmasq, crearemos el fichero /etc/rc.local/HOSTAPD y añadiremos la siguiente información:

#! /bin/sh
# /etc/init.d/HOSTAPD
## BEGINN INIT INFO
# Provides: DNSmasq service
# Required-Start: $all
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Simple script to start DNSmasq at boot
# Description: A simple script which will start / stop a program a boot / shutdown.
### END INIT INFO
# If you want a command to always run, put it here
# Carry out specific functions when asked to by the system
case "$1" in
start)echo "Starting dnsmasq"
# run application you want to startcase "$1" in
start)
sleep 1
dnsmasq > /dev/null 2>& 1
;;
stop)
echo "Stopping DNSmasq"
# kill application you want to stop;;
*)
echo "Usage: /etc/init.d/DNSmasq {start|stop}"
exit 1
;;
esac
exit 0

Necesitaremos modificar los permisos del fichero, ya actualizar el fichero rc para que ejecute el nuevo script creado:

sudo chmod 755 /etc/init.d/HOSTAPD
sudo update-rc.d HOSTAPD defaults

Con esto, ya tendremos configurado el inicio automático de ambas aplicaciones al encender la raspberry.

Una vez terminado reiniciaremos la raspberry pi y cuando se inicie, nos aparecerá el AP creado.

Figura 1: AP creado con la raspberry pi.

Referencias

  1. antena wifi externa
  2. http://imti.co/post/145442415333/raspberry-pi-3-wifi-station-ap

Crear entorno virtual bajo Conda(python)

Introducción

Conda es un gestor de paquetes y de entornos virtuales multiplataforma que nos permite instalar, ejecutar y actualizar los paquetes y sus dependencias, de esta manera podremos configurar y cambiar entre distintos entornos en nuestro ordenador[1].

A grandes rasgos, un entorno virtual o ‘virtual environment’  es una carpeta en la que se encuentran los ejecutables de python y las distintas versiones de las librerías que vayamos a usar. De este modo, podremos estar desarrollando varias aplicaciones con distintas versiones de las librerías, incluso del propio interprete de python, gracias a los entornos virtuales.

Con conda se instalan multitud de librerías y aplicaciones secundarias que son usadas habitualmente en el desarrollo con python[2].

A continuación se explicará el proceso que hay que seguir para poder crear un entorno virtual usando Conda así como una lista con los comandos más usados en la gestión de los entornos virtuales.

Instalación

Lo primero será comprobar si tenemos conda actualizado:

:~$  conda update conda

En caso de tener que actualizar algún paquete, pulsaremos la tecla Y para confirmar la actualización.

Posteriormente comprobaremos cuales son las versiones de python que tenemos instaladas en nuestro sistema.

:~$ conda search ‘^python$’

Una vez que sabemos cual es la versión que queremos, crearemos el entorno virtual:

:~$ conda create -n nombredeentorno python=x.x anaconda

Donde sustituiremos x.x por la versión antes buscada.

Una vez creado, el siguiente paso será activarlo para poder usarlo:

:~$ source activate nombredeentorno

Una vez que terminemos de usar el entorno deveremos descativarlo:

:~$ source deactivate

Otros comandos

A continuación se detallan otros comandos relacionados con el mantenimiento de los entornos virtuales[3].

Listar todos los entornos virtuales creados:

:~$ conda info —envs

Comprobar el entorno virtual activado:

:~$ conda info —envs

Eliminar un entorno virtual:

:~$ condo remove —name nombredeentorno —all

Comprobar las versiones de las librerías instaladas:

:~$ conda list -e

Referencias

  1. http://conda.pydata.org/docs/install/quick.html#os-x-miniconda-install
  2. https://docs.continuum.io/anaconda/pkg-docs
  3. http://conda.pydata.org/docs/using/envs.html#managing-environments

Editar ficheros de un servidor remoto desde Atom

Introducción

Ultimamente estoy desarrollando aplicaciones para la raspberry. Al principio editaba los ficheros de forma local con el entorno gráfico de raspbian, sin embargo el editor de python que trae de serie es demasiado simple, sin resaltado de sintaxis ni corrección de errores.

Por ello, decidi usar el editor Atom y el paquete para poder conectarse a un servidor FTP, remote-ftp. Atom, al igual que otros editores de texto como Sublime Text, permite instalar paquetes para añadir funcionalidades extra.

El sistema operativo Raspbian para raspberry pi trae instalado un servidor ssh/sftp por ello, junto con el paquete para Atom nos conectaremos a la raspberry y editaremos los ficheros

Instalación

Nos dirigimos al apartado install dentro de las preferencias de Atom y en el cuadro de búsqueda introducimos “remote-ftp” e instalamos el paquete.

Captura de pantalla 2016-03-25 a las 16.09.19

  1. Lo siguiente será abrir la carpeta que contenga nuestro proyecto existente o crear uno nuevo(File -> Open folder…)
  2. Al ser la primera vez que usamos remote-ftp deberemos crear un fichero de configuración (Packages -> Remote-ftp -> Create SFTP config file) y se nos generará el fichero .ftpconfig dentro de nuestro proyecto.Captura de pantalla 2016-03-25 a las 16.32.18Deberemos rellenar la siguiente información:
    • host: Dirección ip del servidor.
    • port: Puerto del protocolo sftp.
    • user, password: Usuario y contraseña del servidor.
    • remote: Ruta del directorio del proyecto que estamos editando.
    • hosthash: Por defecto es un parámetro vacío, en caso de obtener un error en la conexión con el servidor. deberemos poner  “sha1” o “md5” [1].
  3. Una vez editamos el fichero de configuración nos conectaremos al servidor Package -> Remote-ftp > Connect
    Captura de pantalla 2016-03-25 a las 16.41.33De esta manera se nos abrirá la barra con los ficheros del servidor remoto y  podremos editar los ficheros del servidor en nuestro editor de textos local teniendo así de manera automática un backup en nuestro ordenador.Captura de pantalla 2016-03-25 a las 16.42.50

 

Referencias

  1. https://github.com/mgrenier/remote-ftp/issues/321

Como trabajar con un fork en github

Un fork en programación, es coger el código fuente de un programa y empezar un desarrollo paralelo al original. Hoy os voy a explicar como trabajar con un fork en la herramienta de desarrollo github. Voy a dar por hecho que todo el mundo tiene cuenta y sabe usar github.

Como ejemplo vamos a poner el repositorio del Clone-wars que tiene Obijuan:

Nos vamos a la página del proyecto y le damos al botón Fork   y se nos creará una copia en nuestra cuenta

  • Nos decargamos el repositorio forkeado de NUESTRO github (git@github.com:darkomen/Clone-wars.git)

Para ello desde un terminal, nos vamos al directorio donde queramos tener la carpeta y ejecutamos

git clone git@github.com:darkomen/Clone-wars.git

A partir de este momento es muy importante diferenciar entre nuestro fork, y el repositorio original

  • Nos metemos en la carpeta Clone-wars

cd Clone-wars/

  • Añadirmos un remote del repositorio de obijuan y lo llamamos upstream

git remote add upstream https://github.com/Obijuan/Clone-wars.git

  • SIEMPRE antes de hacer ninguna modificación actualizamos el repositorio

git pull upstream master

con eso actualizaremos el repositorio, en caso de no haber cambios, nos dirá que está todo actualizado.

Si queremos añadir algo nuevo al fork, primero lo deberemos añadir a nuestro repositorio

git add fichero

git commit -m ‘Cambios realizados’

git push origin master

Con estos tres comandos tendremos subido el fichero a nuestro repositorio, ahora nos dirigimos a la página de github de nuestro repositorio. Pulsaremos en el botón Pull Request 

y nos aparecerá una página donde deberemos rellenar la información de la actualización que hemos realizado, al completarla le daremos a finalizar, y le mandaremos la información a Obijuan indicándole de que hemos añadido una mejora.

Este caso es uno en concreto usando el repositorio de Clone-wars, sobra decir que el funcionamiento es parejo con cualquier otro repositorio que usemos de git.

Wiki: Calibración de Skeinforge

Skeinforge es el programa que se encarga de traducir los ficheros stl a códigos, que la impresora interpreta como los movimientos que debe hacer para crear la pieza.

Este programa debido a su función, es bastante complejo de configurar. He creado un pequeño tutorial con los parámetros más fundamentales a la hora de calibrar la impresora.

Wiki: Calibración de Skeinforge

Programando una librería para Arduino

He programado dos librerías para el control del miniskybot, o cualquier robot con ruedas motrices.

La primera librería simplifica el uso de los servos de tracción para controlar el motor. Con la librería se incluye un ejemplo documentado

La segunda librería crea un objeto tipo robot, en el que se le indica los motores que se dispone y su configuración, se simplifican las órdenes para poder manejar el robot.

Enlace:

Librería Rueda

Librería Robot

Documentación librerias 

[Processing] Controlando servos desde processing

Como dije en la entrada anterior, processing es un mundo a descubrir. Cacharreando menos de una hora, he conseguido hacer el programa para controlar la velocidad de giro de un servo.
El programa en processing es muy simple, se trata de un control slide que varía de -100 a 100 y esta información se la manda al arduino.

 

Lo bueno de processing es que esta aplicación se puede exportar a cualquier entorno, desde linux, windows a mac.

He subido los ficheros a mi repositorio, aquí tienes el programa para processing y aquí el de arduino.

 

 

Me queda por investigar mucho sobre esto, y poder controlar más variables desde processing hacía arduino, pero bueno para haber estado una hora escasa no está nada mal.

Processing

Hablando con un compañero de la universidad, me ha comentado la existencia de Processing. Yo ya lo había oído antes, es el lenguaje en el cual está basado arduino. Pero lo que no sabía es la potencia de desarrollo que tiene. Manteniendo el lenguaje de arduino es increiblmente sencillo el realizar programas MULTIPLATAFORMA.Se desarrolla la aplicación y se puede exportar un ejecutable a cualquier entorno, ya sea windows, linux o mac. Tengo pendiente el ponerme a desarrollar algo sobre todo para comunicar arduino y el ordenador de una forma mucho más sencilla y amena.
He abierto en el wiki una entrada, para ir poniendo ahí toda la documentación que vaya obteniendo y tenerlo a mano como todo lo que está en el wiki.

Usar gmail en lugar del webcartero de UC3M

Si soléis usar el webcartero de la UC3M habréis podido comprobar que la interfaz de usuario deja mucho que desear, sobre todo si lo comparamos con servicios como Gmail.

Otro de los inconvenientes de usar webcartero es que, obviamente, tienes que meterte en la página para ver si tienes algún correo, y en muchos casos puede pasar días hasta que te acuerdes de meterte.

En este artículo vamos a explicar cómo usar todas las funcionalidad de webcartero en nuestra cuenta de gmail. Son bastantes los pasos que hay que realizar, pero realmente merece la pena la comodidad que se tiene una vez configurado.

Lo primero que hacemos es meternos en la web de preferencias del correo. Nos aparecerán dos textos para meter nuestro NIA y la contraseña. Los introducimos y aceptamos.

A continuación nos aparecerá una página con dos opciones, una de ellas es Redireccion de la cuenta de correo. Al activarla nos pedirá a qué dirección de correo queremos reenviar los correos electrónicos. Aquí usamos una característica de gmail, que es el crear una cuenta de correo virtual. En el texto de email, pondremos nuestra cuenta de gmail añadiento “+uni”.

Ejemplo: si nuestra dirección en gmail es pepito@gmail.com, en el texto pondremos pepito+uni@gmail.com


Una vez hecho esto, nos vamos a nuestra dirección de gmail. En la parte superior de gmail, donde la barra de búsqueda, pulsamos en Crear un Filtro:

Y nos saldrán las opciones para configurar el filtro que vamos a crear, lo único que tenemos que rellenar es el campo: De: Ahí pondremos @uc3m.es. De este modo todos los correos que lleguén de los servidores de la UC3M los podremos filtrar. Y pulsamos Paso siguiente.

Nota: si quisiéramos añadir más direcciones de correo para que las filtre, sólo tendríamos que poner: @uc3m.es OR usuario@servicio.com

Ahora elegiremos qué queremos hacer con los correos filtrados.

Tendremos que marcar las opciones que se muestran en esta imagen. Lo que hacemos es, archivarlo, ponerle el email en la etiqueta Universidad y decir que nunca vaya a Spam. De este modo tendremos todos los correos organizados en la etiqueta universidad.

De este modo hemos conseguido recibir los correos de la uni en nuestra cuenta de gmail. Hay que tener especial cuidad por que  los correos en webcartero se borran y la única copia disponible es la que tenemos en gmail, así que mucho cuidado con borrar los correos electrónicos, por eso se marca la opción de nunca manda a spam.

Ahora vamos a configurar gmail para poder Enviar correos con la dirección de @alumnos.uc3m.es. Nos vamos a preferencias de gmail en la parte superior derecha. Nos dirigimos a la pestaña Cuentas e importación. Y nos centramos en el apartado Enviar Mensaje Como:

Pulsamos en el botón Enviar correo desde otra dirección y nos aparecerá un asistente para meter nuestro nombre y la dirección de correo. Metemos nuestro nombre y la dirección de correo TUNIA@alumnos.uc3m.es y pulsamos siguiente. Este paso el más importante de todos, tenéis que poner los datos tal cual en la imagen, a excepción del Nombre de Usuario que será el NIA y Contraseña que cada uno pondrá el suyo. Para terminar pulsamos Añadir cuenta.


A continuación recibiremos un mail con un código de confirmación que deberemos añadir.Ahora a cada uno ya le debería a parecer la cuenta de @alumnos.uc3m.es disponible para mandar correos. Marcamos la opción de Responder desde la misma direccion a la que se ha enviado el mensaje.

Si ahora creamos un nuevo email, gmail nos da la posibilidad de elegir desde qué cuenta queremos enviar el correo. Tendremos que fijarnos bien cuando mandemos un mail a un profesor que la cuenta sea la de @alumnos.uc3m.es

Un valoir añadido de esta configuración es que si tenemos un móvil con Android podremos enviar correos con la dirección de la uc3m desde el movil:

El último paso que queda,pero no explico, sería el de añadir las direcciones de email de los profesores a nuestros contactos en gmail.

Espero que os haya servido de ayuda, llevo usando este sistema desde que entré en la uni y ví que webcartero no me gustaba. De este modo siempre recibirás los correos de la universidad y tienes la opción de, si tienes un móvil android, poder enviar los correos más rápidamente. Si tenéis cualquier duda o problema no dudéis en dejar un comentario.