babuTuzsa

June 6th, 2010

babuTuzsa es un sketch de Arduino que consulta la web de autobuses urbanos Tuzsa e imprime en un LCD
las próximas llegadas a la parada que hay debajo de mi casa.

Los componentes que he utilizado son:

* Seeeduino mega

* Shield ethernet

*LCD 8*2

* Un potenciometro , cables

Las herramientas de desarrollo utilizadas:

* Arduino IDE-018
* Ethernet Library
* LiquidCrystal

La idea de hacer esto la he sacado de: http://img291.imageshack.us/img291/9710/img1296a.jpg

Y he partido de varios sketchs de ejemplo:

* WebClient de Ethernet library.

* scroll de LiquidCrystal.

* Para parsear el html he partido de un post de Xtalker en los foros de arduino:

Post Xtalker

El sketch lo puedes descargar de, úsalo como quieras:

webClient_tuzsa

El código es bastante cerdo y no es demasiado flexible, aunque a mi me vale :P

Una foto:

babu tuzsa

Aunque no os conozco de nada, mil gracias a Xtalker por su código y al autor de la foto por la inspiración :-P

Dealextreme NAS 652

May 22nd, 2010

NAS 652 es un dispositivo “network attached storage” que se puede comprar en Dealextreme [1]. Incorpora 2 puertos USB, un puerto Ethernet, está basado en ARM.

Existe un grupo de google que ha desarrollado un firmware alternativo para este dispositivo: SnakeOS [2]

Tengo pensado usarlo para conectar a internet un arduino. Los principales motivos: el precio (39$ del NAS frente a los ~30$ que suele costar un shield ethernet) y poder dotar de SSL al arduino.. Aunque otras cosas que me gustan: httpd, mysqld, p2p…

Una vez descargado el sdk de snakeOS [3] disponemos de 983040 bytes para el kernel.. Siguiendo la documentación de snakeOS no resulta complicado recompilar el kernel para añadirle el soporte USB_SERIAL que necesito. Dejo el .config que he utilizado:

str8132_defconfig_jffs2

El próximo paso es compilar un programa en c que lea de la linea serie (ttyUSBx) y envia los datos a pachube…

Muchas gracias a la gente de snakeOS por currarse el firmware!!!!

[1] http://www.dealextreme.com/details.dx/sku.20383
[2] http://code.google.com/p/snake-os/wiki/FAQ
[3] http://code.google.com/p/snake-os/downloads/detail?name=snakeos-sdk_1.1.tar.bz2&can=2&q=

OpenWRT cross compilation

May 20th, 2010

En esta receta se describe como instalar un firmware de OpenWRT a una placa ubiquity routerstation, y a compilar/instalar nuestros programas: cross-compilation (compilación cruzada).

1/ Instalamos el firmware.

Descargamos el firmware (backfire 10.03) de [2], el archivo es el siguiente:
openwrt-ar71xx-ubnt-rs-jffs2-factory.bin
Subiremos el firmware mediante atftp , en [1] hay una documentación detallada:

atftp
connect 192.168.1.1
mode octet
trace
timeout 1
put openwrt-xxx-x.x-xxx.bin

Una vez finalizado, creamos una clave de root (para acceder por ssh) y actualizamos el sistema:

telnet 192.168.1.1
passwd
exit
ssh root@192.168.1.1
opkg update && opkg upgrade

2/ Instalación del SDK:

hacemos un checkout del svn:

svn co svn://svn.openwrt.org/openwrt/branches/backfire

entramos en la carpeta que contiene la copia local, y ejecutamos:

make menuconfig

marcamos (M):

* target profile: ubiquity routerstation
* target system: atheros AR71xx
* build sdk
* build the openWRT based toolchain
* image configuration
* en libraries: libpcap (si marcamos ademas: ncurses, zlib, readline nos ahorrará trabajo, marcaremos todas las dependencias de paquetes que vamos a compilar despues..)
guardamos cambios.

ejecutamos make

tarda bastante rato..

al finalizar tendremos el SDK creado en:

./build_dir/target-mips_r2_uClibc-0.9.30.1/OpenWrt-SDK-ar71xx-for-Linux-i686-gcc-4.3.3+cs_uClibc-0.9.30.1

3/ Copia local del repositorio de paquetes:

svn co svn://svn.openwrt.org/openwrt/packages

Tendremos carpetas con los paquetes openwrt. Cada uno dispone de un Makefile y de una carpeta de parches (opcional).

4/ Cross compilation:

Supongamos que hemos hecho un programa llamado “gorosito”[3] que lee su configuración de un archivo xml ( usando libxml2) y realiza consultas sobre una base de datos mysql ( libmysqlclient)

instalamos ambas librerias en nuestro PC, apt-get install libxml2, urpmi libxml2 …

compilamos libxml2 (libs/libxml2) y libmysqlclient(libs/mysql) para openwrt. Para ello copiamos las 2 carpetas de la copia local de paquetes en la carpeta packages de dentro del sdk.

Ejecutamos make dentro del sdk. Al finalizar tendremos:

./bin/ar71xx/packages/ ————-> aqui tendremos los dos paquetes ipk listos para instalar en la placa.

./staging_dir/target-mips_r2_uClibc-0.9.30.1/usr/include/ ————-> cabeceras .h de las librerias que acabamos de compilar

./staging_dir/target-mips_r2_uClibc-0.9.30.1/usr/lib/ ———-> las librerias

Ahora compilaremos nuestro programa, dentro de la carpeta packages del sdk:

mkdir -p gorosito/patches
mkdir -p gorosito/src

En src copiamos los fuentes de nuestro programa en c (.c y .h) y creamos un Makefile:

CFLAGS_= $(CFLAGS) -c -I/usr/include/libxml2 -I/usr/include/mysql
LDFLAGS_= $(LDFLAGS)
SOURCES=airexml.c main.c basedatos.c
OBJECTS=$(SOURCES:.c=.o)
EXECUTABLE=gorosito

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS_) $(OBJECTS) -o $@

.c.o:
$(CC) $(CFLAGS_) $< -o $@

En este Makefile lo importante son las CFLAGS_ que apuntan a las cabeceras de las librerías en nuestro ordenador.

Dentro de ./gorosito/ creamos otro Makefile:

include $(TOPDIR)/rules.mk

# Name and release number of this package
PKG_NAME:=gorosito
PKG_RELEASE:=1

# This specifies the directory where we’re going to build the program.
# The root build directory, $(BUILD_DIR), is by default the build_mipsel
# directory in your OpenWrt SDK directory
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)

include $(INCLUDE_DIR)/package.mk

# Specify package information for this program.
# The variables defined here should be self explanatory.
define Package/gorosito
SECTION:=utils
CATEGORY:=Utilities
DEPENDS:=+libxml2 +libmysqlclient
TITLE:= Gorosito
endef
define Package/gorosito/description
gorosito rocks
endef

# Specify what needs to be done to prepare for building the package.
# In our case, we need to copy the source files to the build directory.
# This is NOT the default. The default uses the PKG_SOURCE_URL and the
# PKG_SOURCE which is not defined here to download the source from the web.
# In order to just build a simple program that we have just written, it is
# much easier to do it this way.
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef

define Build/Compile
$(MAKE) -C $(PKG_BUILD_DIR) \
$(TARGET_CONFIGURE_OPTS) \
CFLAGS=”$(TARGET_CFLAGS) -I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/usr/include/libxml2 -I$(STAGING_DIR)/usr/include/mysql” \
LDFLAGS=”$(TARGET_LDFLAGS) -L$(STAGING_DIR)/usr/lib/libxml2 -lxml2 -lz -L$(STAGING_DIR)/usr/lib/mysql -L$(STAGING_DIR)/usr/lib -lmysqlclient”
endef
# Specify where and how to install the program. Since we only have one file,
# the gorosito executable, install it by copying it to the /bin directory on
# the router. The $(1) variable represents the root directory on the router running
# OpenWrt. The $(INSTALL_DIR) variable contains a command to prepare the install
# directory if it does not already exist. Likewise $(INSTALL_BIN) contains the
# command to copy the binary file from its current location (in our case the build
# directory) to the install directory.
define Package/gorosito/install
$(INSTALL_DIR) $(1)/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/gorosito $(1)/bin/
endef
# This line executes the necessary commands to compile our program.
# The above define directives specify all the information needed, but this
# line calls BuildPackage which in turn actually uses this information to
# build a package.
$(eval $(call BuildPackage,gorosito))

En este Makefile lo importante son las dependencias y los CFLAGS y LDFLAGS del bloque Compile.

Una vez hecho esto, dentro del sdk ejecutamos: make V=99.

Al finalizar tendremos el paquete listo: ./bin/ar71xx/packages/gorosito_1_ar71xx.ipk

Por último lo instalamos en la placa:

scp ./bin/ar71xx/packages/gorosito_1_ar71xx.ipk root@192.168.1.1:
ssh root@192.168.1.1
opkg install gorosito_1_ar71xx.ipk
gorosito

Una documentación más detallada sobre esto puede encontrarse en [4]. He preferido redactar una receta por los problemas que me fui encontrando al aplicar [4] con la version backfire.

[1] http://wiki.openwrt.org/doc/howto/tftp
[2] http://downloads.openwrt.org/backfire/10.03/ar71xx/
[3] http://www.google.es/images?hl=es&q=gorosito
[4] http://wiki.openwrt.org/doc/howto/creatingpackages

plantöfono

April 13th, 2010

plantöfono: máquina para escuchar a las plantas.

próximamente.

Mysql InnoDB errno: 121 & errno: 150

March 26th, 2010

Al definir claves ajenas pueden aparecer estos errores (121 y 150) y se deben a constraints repetidas en la misma base de datos, o claves ajenas con diferentes tipos (INT vs UNSIGNED,..)

SHOW ENGINE INNODB STATUS;

^^ Muestra información sobre el último error.

http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html

pachube v0idstalker

March 17th, 2010

Hay disponible una actualización de pachulib. Incluye una pequeña aplicación en c para monitorizar un listado de máquinas, y actualizar su feed en pachube. El código es bastante cerdo, prometo ordenarlo algún día, como este maldito blog, también me gustaría portar pachulib a wrt… cualquier día :P

v0idtalker/pachulib http://sourceforge.net/projects/pachulib/

BabuGarden 2

February 19th, 2010

Babugarden dispone de un nuevo sensor, un termohigrómetro HSM-20G.
Los siguientes gadgets proceden de pachublog, se actualizan cada 15min.
En este momento, los sensores no están calibrados, y el ajuste hay que revisarlo con mayor detenimiento. El propósito actual no es más que testear el sistema de monitorización.

El software es gpl y está disponible para su descarga:

babugarden:software de pc

babugarden:sketch del arduino

Actualización babulogger

February 17th, 2010

Hay disponible en sourceforge una actualización de babulogger que permite eliminar ficheros almacenados en la microSD. La interfaz todavía no dispone de un botón para ello.. por ahora hay que enviar por línea serie el comando “dt*” (elimina todos lo ficheros LOGGER*.CSV). Para ello se ha dejado de usar la librería Fat16 por sdFatlib. Ambas fueron desarrolladas por Bill Greiman, muchas gracias por las librerías :-)

BabuGarden

February 15th, 2010

Buscando un sol a una chamaedorea y una drácena… Por su aspecto no están muy bien de salud. He montado 2 sensores para medir la humedad de la tierra de cada planta ( clavos galvanizados, diy moisture sensor, se pueden encontrar muchas referencias en la red). También he usado una LDR para monitorizar la luz de la habitación donde se encuentran las plantas.. Un thermistor de 10k mide la temperatura. Un arduino lee los sensores una vez por minuto y envía los datos por línea serie a un asus eeepc. El asus corre un demonio que lee de la linea serie, inserta los datos a una mysql local, y actualiza los datastreams en pachube.
(mediante pachulib).

Durante esta semana, voy a estar testeando el sistema. El feed está disponible en pachube

La intención es acabar construyendo un sistema para monitorizar aspectos que puedan ser vitales para la planta y automatizar su sistema de riego.. BabuGarden. No tengo pensado utilizar luz artificial y me gustaría añadir algunas plantas más.

TODO-LIST:

* termohigrómetro
* piranómetro diy ??
* sensor de ph ??
* bomba-acuario o electroválvula ??
* relés
* arduino ethernet

Gráficas online de las últimas 24 horas:

babu-bot

February 7th, 2010

pop-bot es un kit de robótica basado en arduino.
babu-bot

Código de ejemplo, babubot: el robot dispone de un sensor de IR montado sobre un servo para detectar si algo se acerca por su espalda y comenzar la huida si es necesario. Lleva 2 switches en la parte delantera para detectar colisiones frontales.