domingo, 26 de agosto de 2012

Instalando Raspbian en Raspberry Pi

Una de las primeras cosas que haremos será instalar la distribución oficial del RPi para hacerlo funcionar. A diferencia de la instalación de un sistema operativo en un PC convencional, la instalación en el RPi es mediante un volcado directo del sistema a la tarjeta de memoria (que hará de disco principal del sistema). Aún así, los pasos son incluso más sencillos que en una instalación “normal”.

En mi caso he utilizado Windows 7 para instalar RaspBian, aunque se puede hacer en cualquier otro SO (MacOs, Linux).

  1. Accedemos a la sección de descargas de la página oficial de RPi: http://www.raspberrypi.org/downloads Una vez allí elegimos la opción Raspbian, que es la que nos recomiendan y la descargamos, ya sea mediante un Torrent o por descarga directa.image
  2. Si estamos utilizando Windows, descargamos el programa Win32DiskImager, que nos permitirá grabar la imagen en la tarjeta de memoria.
  3. Introducimos la tarjeta de memoria en un lector de tarjetas en nuestro PC y apuntamos la letra que le asigna Windows.
  4. Ejecutamos Win32DiskImager (no necesita instalación) y seleccionamos la imagen de Raspbian que hemos descargado previamente y la letra que Windows asignó a nuestra tarjeta (es importante no confundirse ya que podríamos equivocarnos e instalar Raspbian en el disco duro del PC y perder nuestros datos). Pulsamos en Write y esperamos a que termine de copiar los archivos.
  5. Una vez terminado el proceso de copia, sacamos la tarjeta del PC, la metemos en el RPi, y ya podríamos usarlo.

Radio Wifi con Raspberry Pi y Arduino

Hace tiempo que me llegó el mini ordenador Raspberry Pi. Llevaba bastantes meses siguiendo el proyecto y me pareció muy interesante, por lo que en cuanto salió a la venta compré uno para cacharrear con él cuando tuviese más tiempo.

Aunque para un uso normal como PC, Raspberry Pi (de ahora en adelante RPi) queda algo corto de potencia para tareas comunes como navegar por Internet (Su CPU es un ARM a 700MHz), su pequeño tamaño, bajo consumo y bajo precio lo hacen ideal para un montón de proyectos: Servidor de archivos, NAS, PC para dejar compartiendo torrents 24 horas (su consumo ronda 1W, incluso algo menos) y muchísimas cosas más.

Mi proyecto es construirme una radio que permita reproducir emisoras online. Mi idea es utilizar el Raspberry Pi con su distribución Linux oficial e instalarle algún reproductor que permita reproducir streams de audio (emisoras) de manera sencilla. Dado que el RPi tiene una salida de audio analógica (mini-jack), la idea es que sea él el que se encargue de reproducir y conectarle unos altavoces antiguos para amplificar la señal y poder oírla.

RPi también tiene un puerto de red para poderlo conectar a Internet con un cable estándar. Sin embargo, dado que no queremos limitar nuestra radio a estar cerca de un router, la conexión a internet será mediante Wifi. Concretamente con un adaptador USB 2.0 Ovislink EVO-W541USB que tenía por casa.

¿Y qué pinta el Arduino en esta radio? Pues debido a su facilidad para conectarlo a Pantallas LCD, botones y otras interfaces nos servirá de puente para conectar un display LCD que nos muestre la información de lo que esté sonando, las emisoras, etc. También nos servirá para controlar la radio, ya sea a través de botones o a través de un mando a distancia y un receptor de infrarrojos (lo he usado en un proyecto anterior y responde a la perfección). En cuanto a los displays, la mayoría de ellas son de caracteres, y utilizan en chip HD44780 para su control. Arduino tiene librerías que nos facilitan trabajar con este tipo de pantallas, por lo que no será difícil utilizarlas.

En mi casa tengo varias de estas pantallas de diferentes tamaños y colores. En cuanto a tamaños tengo unas de 16 caracteres y 2 líneas, y otras de 20 caracteres y 4 líneas. Aún no he decidido cuál de ellas voy a usar, aunque me inclino por la grande, ya que me permitiría incluir más información y algún icono adicional para indicar por ejemplo la cobertura del Wifi, el bitrate de la transmisión, etc.

Por último queda saber cómo se conectarán el Arduino y el RPi. En este caso la conexión la haremos emulando un puerto serie a través de USB. Haremos un programa en Python que se encargue de enviar los datos a representar en la pantalla desde el RPi al Arduino y que reciba de éste las pulsaciones de los botones o del mando a distancia y procese las órdenes.

sábado, 14 de abril de 2012

Ejemplo de messageBox en Swing

Con éste código se puede lanzar de manera sencilla un Message Box (Ventana emergente) en Swing. Este tipo de ventanas se utilizan mucho para informar al usuario de una aplicación de posibles errores o avisos importantes.

El código en cuestión es:

JOptionPane.showMessageDialog(mainWindow,
                              "File cannot be saved.",
                              "Save error",
                              JOptionPane.ERROR_MESSAGE);

Donde mainWindow es el contenedor Swing (JPanel, JFrame, JDialog, etc.) desde donde se lanza el MessageBox, de modo que éste aparecerá centrado respecto a dicho contenedor. Lo siguiente es el mensaje que queremos mostrar, seguido del título de la ventana y del tipo de ventana (en este caso he seleccionado JOptionPane.ERROR_MESSAGE, lo que adapta la ventana con un icono de error y un botón de Aceptar.

El resultado de dicho código sería:

Captura

jueves, 29 de diciembre de 2011

Instalar JFreeChart en Netbeans

Para mi PFC necesito mostrar determinados datos mediante gráficas. Java tiene muchas opciones para hacer esto. Al principio pensé en usar simplemente Java2D, pero más tarde barajé la opción de trabajar con alguna biblioteca con un mayor nivel de abstracción.

JFreeChart es una biblioteca que simplifica muchísimo la tarea de mostrar gráficas. El proceso es sencillo: Primero construimos un objeto Dataset, con el que podremos introducir los datos del gráfico, después creamos un objeto ChartFactory, e invocamos al método createXChart() con el que podremos establecer el título de la tabla, el Dataset asociado y otros parámetros (leyenda, ejes, etc.).

Para instalar la librería en NetBeans 7 haremos lo siguiente:

1. Descargamos los archivos necesarios:

Última versión de JFreeChart

Ant (necesario para generar la documentación Javadoc)

NetBeans (Yo utilizo la versión SE)

2. Descomprimimos JFreeChart en un directorio (yo hice una carpeta “Libraries” para guardar todas las librerías).

3. (Opcional) Descomprimimos Ant. En Windows es necesario añadir las variables de entorno ANT_HOME para que apunte al directorio donde esté Ant. También es necesario añadir al PATH de Windows el directorio Bin de Ant y el directorio Bin de JDK. Una vez hecho esto, mediante línea de comandos accedemos a la carpeta donde hemos descomprimido JFreeChart y dentro de esta, a la subcarpeta Ant:

Captura

4. (Opcional) Ejecutamos el comando para generar la documentación Javadoc:

Captura2

Si todo ha ido bien, al cabo de unos segundos (pueden ser bastantes) el sistema mostrará “BUILD SUCCESSFUL”, indicando que la documentación se ha generado correctamente:

Captura3

3. En NetBeans pulsamos en Tools > Libraries para añadir JFreeChart. Para ello pulsamos en el botón “New Library…”

En Library name escribimos el nombre que queremos darle a la librería (en mi caso he optado por JFreeChart-1.0.14).

En Library Type seleccionamos Class Libraries y pulsamos OK.

Ahora nuestra librería aparecerá en la lista izquierda de la ventana. Sólo nos queda añadir las referencias de la misma:

En la pestaña Classpath, pulsamos “Add JAR/Folder…” y seleccionamos los archivos jcommon y jfreechart, que se encuentran en la subcarpeta lib de JFreeChart:

Captura4

Captura5

En la pestaña Sources añadimos la subcarpeta source de JFreeChart:

Captura6

Si hemos seguido los pasos opcionales, tendremos generada la documentación en Javadoc, así que en en la pestaña Javadoc añadimos la subcarpeta Javadoc (no estará si no hemos generado la documentación, pero no es necesaria para el funcionamiento de la librería):

Captura7

Terminamos pulsando en OK, y ya tendremos todo instalado.

Para probar que todo funcione correctamente podemos utilizar el código que escribí para probarlo:

package jfcexample;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;

/**
*
* @author Manuel
*/
public class First {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
       
        // Creamos el DataSet
        DefaultPieDataset dataset = new DefaultPieDataset();
       
        // Establecemos unas categorías de ejemplo
        dataset.setValue("Ej1",43.2);
        dataset.setValue("Ej2",27.9);
        dataset.setValue("Ej1",79.5);
       
        // Creamos la tabla
        JFreeChart chart = ChartFactory.createPieChart(
                "Sample Pie Chart",
                dataset,
                true,
                true,
                false
                );
       
        // Mostramos la tabla
        ChartFrame frame = new ChartFrame("Test",chart);
        frame.pack();
        frame.setVisible(true);
    }
}

Si todo está correcto, al ejecutarlo deberíamos obtener lo siguiente:

Captura8

NOTA: Aunque si no seguimos los pasos opcionales no tendremos la documentación en Javadoc, siempre podemos consultarla online en la página oficial.

martes, 14 de junio de 2011

Leer datos de Excel con Python

Para mi PFC necesito leer datos directamente de ficheros Excel. He encontrado una librería que nos facilita la tarea: xlrd.

Dicha librería sólo sirve para tareas de lectura. Si queremos escribir existe otra equivalente, que en este caso se llama xlwt.

Ambas son compatibles con ficheros Excel 97, 2000, XP y 2003.

Para abrir una archivo de Excel, basta con hacer:

excel = xlrd.open_worbook("hoja.xls")

Ahora podemos seleccionar una hoja por su nombre:

hoja = excel.sheet_by_name("hoja 1")

Aunque también podríamos hacerlo por índices.

Dejo un ejemplo completo con las funciones más básicas:


import xlrd


''' Return a xlrd.sheet object with the Excel sheet information.
   
    Arguments:
    filename -- Location of Excel file.
    sheetname -- The name of the Excel page ie:"Testing".
'''
def open_xls(filename,sheetname):
    # Open the workbook
    wb = xlrd.open_workbook(filename,formatting_info=True)
   
    # Select the sheet
    sh = wb.sheet_by_name(sheetname)
   
    # Returns the sheet
    return sh


''' Returns a list of ParetoFront individuals fitness in with format
    [Obj1Fitness,Obj2Fitness].
   
    Arguments:
    sheet -- The Excel sheet returned from open_xls() function.
    iteration -- The iteration to obtain the Pareto Front.
'''
def get_pf(sheet,iteration):
    ind_fitness = list()
   
    # Iterate through rows
    for rownum in range(sheet.nrows):
        # Select only individuals in given iteration
        if sheet.cell_value(rownum,0) == iteration:
            # Save [Obj1NSGA2,Obj2NSGA2] of PF individuals
            if sheet.cell_xf_index(rownum,1) != sheet.cell_xf_index(rownum,2):
                ind_fitness.append([sheet.cell_value(rownum,5),sheet.cell_value(rownum,4)])
   
    return ind_fitness
           
   
def main():
    sheet = open_xls("BestsFinal.xls","Training")
    print get_pf(sheet,2)

    return 0

if __name__ == '__main__':
    main()

domingo, 12 de junio de 2011

Crear enlaces simbólicos en Windows

Para complementar la entrada anterior, comento como crear enlaces simbólicos en Windows (al parecer, este método sólo es válido con Windows Vista o 7).

Primero abrimos una consola de administrador (Inicio, escribimos cmd y con el botón derecho en el programa seleccionamos "Ejecutar como administrador").

A continuación podemos hacer el enlace, la sintaxis es:

mklink /D (directorio-destino) (directorio-enlazado)

Por ejemplo, ayer necesitaba que toda mi música estuviera disponible desde el directorio C:\jukloud\static\songs . Mi primera idea fue copiar todo mi directorio de música a dicha carpeta. Pero simplemente basta con hacer:

mklink /D C:\jukloud\static\songs "F:\Mi Musica"

Las comillas del último directorio son necesarias porque tiene espacios.

La única cosa a tener en cuenta es que el directorio destino NO debe existir previamente, ya que será creado como directorio simbólico con la orden mklink.

lunes, 6 de junio de 2011

Crear enlaces simbólicos en Linux

Hoy he actualizado Iceweasel (Firefox en Debian) a su versión 4. Firefox, sin embargo está en una versión anterior en los repositorios, por lo que mi idea ha sido borrar firefox y hacer un enlace simbólico a Iceweasel, consiguiendo así que cualquier programa que llamase a Firefox, llamase ahora a Iceweasel.

Para ello, la sintaxis es la siguiente:

sudo ln -s (origen) (destino)

Que en mi caso era:
 
sudo ln -s /usr/bin/iceweasel /usr/bin/firefox

Con esto creamos un enlace simbólico llamado firefox en /usr/bin, que es donde antes de desinstalarlo estaba el ejecutable de Firefox 3. Ahora al escribir firefox en consola, llamará al enlace, que a su vez ejecutará /usr/bin/iceweasel.

Nota: Si en algún momento queremos deshacer el enlace, bastará con ejecutar:

sudo unlink /usr/bin/firefox