Como manejar el puerto serie en c#

[singlepic id=2 w=320 h=240 float=right]Para manejar el puerto serie en C# es una tarea relativamente sencilla, esto por permitirá conectarnos a infinidad de dispositivos electrónicos que utilizan este medio para comunicarse con el ordenador. La forma mas habitual de conectar nuestro programa con cualquier dispositivo electrónico (Arduino, …, etc.) suele ser mediante el puerto serie, ya sea por el tradicional RS232 o un puerto USB que funciona como un puerto serie. Para poder conectar nuestros programas hechos en c# con estos dispositivos, este nos facilita un control para poder realizar este tipo de comunicaciones. Este control es el “SerialPort”. Para poder utilizarlo tenemos dos maneras, 1º arrastrándolo desde la barra de controles hasta nuestro programa o, la otra forma de crearlo es desde nuestro propio código C#. Como la primera es obvio lo que hay que hacer, paso a explicar la segunda forma.

Inicialización del control Serial Port por código en C#.

Lo primero que tenemos que hacer es añadir un nuevo “using” para agregar todos objetos relacionados con el manejo de puertos, System.IO.Ports, una vez que ya tengamos esto insertado en nuestro codigo, ya podemos pasar ha definir la variable que contendrá nuestro control Serial Port, de la siguiente manera.

// Creamos la variable para el manejo del puerto serie
SerialPort spPuertoSerie = new SerialPort(
           "COM1", 9600, Parity.None, 8, StopBits.One);

De esta forma creamos el objeto “spPuertoSerie”, que le hemos paso como parametros:

  • Nombre del puerto: el puerto al que nos queremos conectar, en el ejemplo “COM1”.
  • Velocidad de transmisión: la velocidad de trasmisión.
  • Paridad: Sirve para verificar si hay errores en la transmisión. Existen cuatro tipos posibles de paridad: par (even), impar (odd), marcada (mark) y espaciada (space). También esta permitido no usar paridad (none), como en el ejemplo.
  • Bits de datos: Es la cantidad de datos que se van ha enviar en cada paquete. Este valor puede ser 5, 7 u 8. Valor más habitual es el 8.
  • Bits de parada: Indica el final del paquete, Los valores permitidos son 1, 1.5 o 2. También vale para la sincronización de la comunicación.

También podemos crear nuestro objeto de una manera mas sencilla, si no conocemos los parámetros de la comunicación.

// Creamos la variable para el manejo del puerto serie
SerialPort spPuertoSerie = new SerialPort();

Para pasar los parámetros lo podemos hacer de esta otra forma:

// Parametros para iniciar el puerto serie
spPuertoSerie.PortName = "COM1";
spPuertoSerie.BaudRate = 9600;
spPuertoSerie.Parity = Parity.None;
spPuertoSerie.StopBits = StopBits.One;
spPuertoSerie.DataBits = 8;

Después de tener ya creado nuestro objeto que se va ha encargar de la comunicación, solo falta abrir la comunicación de la siguiente manera.

// Abrir la comunicación
spPuertoSerie.Open();

Parta cerrar la comunicación del puerto serie lo haremos de la siguiente forma.

// Cerrar la comunicación
spPuertoSerie.Close();

Y con esto ya tenemos resuelto el problema de la comunicación con los dispositivos mediante el puerto serie. Ahora solo queda la recepción y envió de los datos. Pero eso sera en otro post.

Espero que te sirva de ayuda.

Raspberry Pi, un pequeño gran ordenador

En mi búsqueda de información sobre arduino, aparecía habitualmente asociado a otro nuevo hardware, es el ordenador Raspberry Pi. Este aparato es nada mas ni nada menos que un ordenador, todo incluido, pero lo más sorprendente es su tamaño es el mismo que cualquier tarjeta de crédito.

¿Que características tiene el Raspberry Pi?

[singlepic id=17 w=320 h=240 float=center]El Raspberry Pi esta basado en el sistema todo en uno de Broadcom BCM2835, este chip posee un procesador ARM1176JZF-S a unos 700 Mhz, tiene una opción turbo que puede aumentar hasta 1 Ghz. Un procesador grafico o GPU VideoCore IV y memoria de 512 MB. De “disco duro” viene con una ranura para instalar una tarjeta del tipo SD. Tiene salida HMDI, version 1.3 y 1.4, y una resolución de hasta 1080p, es decir, FullHD, ademas tiene disponible un conector de tipo RCA de vídeo compuesto, para poder conectarlo ha cualquier pantalla o televisor que no tengan disponible el conector HMDI. También tiene dos ranuras de USB versión 2.0 y un mini jack para conectar la salida de audio, aunque el audio tambien puede salir por el conector HMDI. El aparato se sirve sin fuente de alimentación, para alimentarlo tiene disponible una ranura microUsb. Hay dos modelos, el modelo A, que no trae el conector RJ45, pero se puede instalar uno del tipo usb-ethrtnet, y la memoria es de 256 MB, este se puede comprar por unos 25€ y el modelo B, que tiene conector RJ45 y memoria de 512 MB, por unos 33€.

¿Que sistema operativo y software utiliza del Raspberry Pi?

[singlepic id=16 w=320 h=240 float=right]Se puede instalar cualquier sistema operativo que soporte tecnología ARM, el fabricante tiene su propio sistema, esta basado en una distribución de Debian, Raspbian, esta se puede comprar con el propio Raspberry Pi, aunque se puede instalar cualquier versión de linux que soporte la tecnología del procesador, como el sistema operativo RISC OS o la distribucion ARCH LInux. En el tema del software, el Raspberry Pi, soportar cualquier programa que el propio sistema operativo pueda ejecutar y las características del programa admita. Si se instala la versión propia del fabricante, hay disponible una tienda la PI Store, de donde nos podemos descargar programas, sean de pago o gratuitos. Entre las que podemos descargar esta el LibreOffice, una suite ofimática de código libre y muy extendida en la actualidad.

La mayoría de estos sistemas se diseñan para trabajos específicos con aplicaciones especificas, en este aspecto el Raspberry Pi admite cual lenguaje de programación que soporte el sistema, como pueda ser C, Java, etc, pero los creadores del aparato recomiendan la utilización de lenguajes programación como Python, Tiny BASIC o Perl.

Por el precio que tiene estoy valorando la idea de hacerme con uno para poder probarlo más a fondo, ademas por la información que he visto por Internet es el sistema perfecto para el trabajo con Arduino. En cuanto tenga uno ya daré mi opinión sobre el.

Si has probado alguno, ¿Que tal funciona el aparato?

Arduino, ¿que es y para que vale esa cosa?

Desde hace mucho tiempo había oído hablar de este aparato, que si era hardware de código libre, que si era muy fácil de manejar, que te permitía controlar multitud de componentes electrónicos  etc.  Como siempre me ha gustado manejar cosas mediante el ordenador, me decidí a probarlo.

Pero, ¿que es Arduino?

[singlepic id=12 w=320 h=240 float=right]Según la Wikipedia “Arduino es una plataforma de hardware libre, basada en una placa con un microcontrolador y un entorno de desarrollo, diseñada para facilitar el uso de la electrónica en proyectos multidisciplinares”. Es decir, es una placa que nos permite conectar determinados componentes electrónicos, procesar los datos que nos dan y realizar determinadas tareas con esa información, posee entradas y salidas tanto analógicas como digitales. En el caso del Arduino no tenemos por que tenerlo siempre conectado al ordenador, dispone una entrada de corriente propia que lo hace autónomo, ademas de tener su propia memoria donde poder almacenar tanto la información que va generando, como el programa para manejar esa información. Y si le añadimos algún modulo extra, la información nos la puede mandar al ordenador a través del Internet. Pero lo primero que me llamo la atención, al buscar más información de este aparato, fue su precio, en la pagina de Rs-Online, por ejemplo, se puede comprar uno por unos 21€, o en la pagina de BricoGeek por 22€,  o en la pagina de Cookig Hacks, el mas caro de las tres, pero con una amplia gama de accesorios disponibles, por 24€. Por ese precio no hay que pensárselo demasiado para querer probarlo. La otra cosa que me llamo la atención era la cantidad de módulos y accesorios que hay disponibles. El modulo que mas me impresiono fue  el de Ethernet, con este modulo podemos conectar el arduino directamente a la red mediante un clave de red normal, y poder ver la información a través de la red, al conectar el ardunio con este modulo, este nos instala un servidor web donde podremos ver toda la información en una pagina web, también podemos personalizar estas paginas, para poder ver la información como nosotros queramos. Otros módulos que hay disponibles nos permite conectar un módem GPRS, un módem WIFI, bluetooth, etc.

¿Que características tiene la versión básica de Arduino?

[singlepic id=13 w=320 h=240 float=right]La versión que he decido comprar es la que podemos decir que es la basica, el Ardunio UNO, en mi casa la versión rev.3. Este viene con un procesador Atmega328, tiene 14 entradas/salida, de las que 6 podemos utilizar como salida PWM, no se muy bien lo que son este tipo de salidas, pero por lo visto se pueden manejar motores de paso a paso con ellas, si no estoy equivocado, tengo que buscar mas información sobre ello. Cambien tiene 6 entradas analógicas  un oscilador de 16 Mhz, conexión al ordenador por USB, pulsador de reset y un conectar para poder alimentarlo se necesidad de estar conectado al ordenador y por si los componentes instalados en el consumen mas de lo que nos ofrece el conector USB. Ofrece también conectores para poder alimentar la electrónica que añadamos de 5 y 3.3 voltios.

¿Que podemos hacer con el Arduino?

[singlepic id=15 w=320 h=240 float=right]No hace falta buscar mucho para ver la amplia gama de posibilidades que nos ofrece este aparato, desde el aprendizaje de electrónica o robótica, hay muchos centros de enseñanza que lo utilizan para dar clases con ellos, hasta realizar todo un complejo sistema de domótica que pueda controlar cualquier cosa de nuestra casa, oficina, etc. La aplicación que mas me ha impresionado a sido una impresora que imprime en 3D, eso demuestra que el limite que tiene el arduino es la imaginación que la persona que trabaja con el tiene.

Así, viendo lo versatilidad que ofrece, la amplia información que hay disponible sobre él y el precio que tiene. Tendremos que hacernos con uno.

¿Que te parece el aparato?

Catástrofe en el blog

Debido ha un cumulo de coincidencias todo el contenido del blog se ha perdido, por lo visto ha habido un fallo con el servidor, por lo que me ha dicho mi proveedor, hubo un fallo en el disco duro principal[singlepic id=14 w=320 h=240 float=right] y al entrar en funcionamiento el de respaldo este también fallo, por lo visto fue provocado por un fallo en la fuente de alimentación, que cosas más raras me pasan. Y para que no que hay las cosa, el fichero con la copia de seguridad esta mal, a esto puedo encontrarle una explicación un poco más lógica, por la hora que tiene el fichero de la copia, por lo visto cuando se estaba haciendo la copia es cuando debió fallar el servidor, así que el fichero se quedo a medias. Todo el trabajo que he realizado durante estos últimos años, recopilando información sobre trabajos de electrónica, trucos y curiosidades de programación, análisis de aparatos, etc, se ha esfumado por no decir algo más fuerte.

Intentare buscar copias de seguridad antiguas, buscar en la cache de google y demás cosas, para poder recuperar algo del trabajo de estos últimos años. Aunque lo veo muy difícil recuperar todo el contenido, las copias antiguas que tengo, es de cuando cambio de versión del software del blog, y no se como llevaran las versiones viejas con la nueva.

Aprovechando el desastre he cambiado la imagen del blog, he implementado otra forma de hacer las copias de seguridad para que no me vuelva a pasar otro desastre igual, aunque como se suele decir “En casa de herrero cuchillo de palo”, seguro que volveré a tropezar el la misma piedra otra vez.

Es pero que os gusten la nueva imagen, espero vuestros comentarios .

Conectarse ha una base de datos MySql con C#

Para conectarse ha una base de datos en MySql lo primero que tenemos que hacer es agregar la siguiente linea a nuestro programa

using MySql.Data.MySqlClient;

Con esto agregamos todos las funciones que necesitamos para poder manejar la conexión con el servidor de MySql.

Lo siguiente que tendremos que hacer sera crear las variables que nos permitirá manejar la conexión con el servidor de MySql deseado.

MySqlConnection dbConexion1 = new MySqlConnection();

Ahora lo que tenemos que hacer es pasarle los parámetros como la dirección del servidor de base de datos, el nombre de la base datos ha la que queremos tener acceso, el nombre de usuario de la cuenta y su correspondiente contraseña. Esto se puede hacer de la siguiente manera:

String sConexion;
sConexion1 = "Server=192.168.1.4;Database=BaseDeDatos;Uid=Usuario;Pwd=contrasenya;";

Creamos una variable string, luego le pasamos los valores anteriores con el siguiente formato:

  • Server: Nombre o dirección del servidor de MySql
  • Database: Nombre de la base de datos a la que queremos tener acceso.
  • Uid: Nombre del que tiene acceso a esa base de datos.
  • Pwd: Contraseña asignada a ese usuario.

Estos campos los tendremos que separar en la cadena que le pasemos a la variable con “;”.

Ahora solo tendremos que pasar la variable string  que acabamos de crear , al parámetro correspondiente en la variable de la conexión

dbConexion1.ConnectionString = sConexion1;

Despues de esto solo nos queda decirle al conector que se conecte al servidor.

dbConexion1.Open();

Si esto no produce ningún error, como usuario no reconocido, contraseña incorrecta, servidor desconocido, etc, ya tendremos acceso a la base de datos de MySql.

La verdad es que es muy sencillo, ¿A ti que te parece?

Como cambiar el nombre de las columnas de un DataGridView en C#

Siguiendo con lo explicado en el post (Leer ficheros XML a través de DataSet (c#)) al final del post se muestra un ejemplo de como leer un fichero xml con un dataset y se mostraba el contenido en un DataGribView. En este ejemplo los nombres que aparecen en las cabeceras de las columnas son los nombres de los campos que están en el fichero. Para modificar estos nombres solo hay que utilizar la siguiente función implementada dentro del objeto DataGridView

dataGridView1.Columns[0].HeaderText = "TextoAMostrarEnLaCabecera";

El numero entre corchetes en Columns, en el ejemplo 0, es el numero de la columna que vamos a cambiar el texto del encabezado. Las columnas empiezan ha enumerarse desde el 0, es decir la primera columna es la 0.

Ejemplo de funcionamiento.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Xml_DataSet_1
{
    public partial class fLeerXmlDataSet : Form
    {
        // Objeto dataset para manejar el fichero
        // no le ponemos nombre de la base de datos para poder abrir cualquier fichero
        DataSet dsLeerFicheroXML = new DataSet();

        public fLeerXmlDataSet()
        {
            InitializeComponent();
        }

        private void bAbrirFicheroXml_Click(object sender, EventArgs e)
        {
            // Limpiamos el contenido anterior
            dsLeerFicheroXML.Clear();

            // Creamos el objeto para abrir el fichero
            OpenFileDialog odAbrirFicheroXML = new OpenFileDialog();
            // Le ponemos un filtro para ver solamente los ficheros XML
            odAbrirFicheroXML.Filter = "Ficheros Xml|*.xml";

            // Montramos el dialogo para abrir el fichero XML
            if (odAbrirFicheroXML.ShowDialog() == DialogResult.OK)
            {
                // Si se ha pulsado el boton de OK
                // Le pasamos el nombre del fichero al DataSet para abrirlo
                dsLeerFicheroXML.ReadXml(odAbrirFicheroXML.FileName);
                // Le pasamos el contenido de la primera tabla del fichero al DataGridView
                dgvLeerFicheroXML.DataSource = dsLeerFicheroXML.Tables[0];

                // cambiamos el nombre de las columnas del DataDridView
                for (int vCont = 0; vCont < dgvLeerFicheroXML.ColumnCount; vCont++)
                {
                    dgvLeerFicheroXML.Columns[vCont].HeaderText = "Columna " + (vCont + 1).ToString();
                }
            }
        }
    }
}

Fácil, No?

Leer ficheros XML a través de DataSet (c#)

Para leer un fichero xml en c# se puede utilizar los componentes de manejo de base de datos. Esto facilita enormemente su manejo.

Ejemplo de un fichero XML.

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<NombreBaseDeDatos>
  <NombreTabla1>
    <NombreCampo1>Campo 1 Registro 1 Tabla 1</NombreCampo1>
    <NombreCampo2>Campo 2 Registro 1 Tabla 1</NombreCampo2>
    <NombreCampo3>Campo 3 Registro 1 Tabla 1</NombreCampo3>
    <NombreCampo4>Campo 4 Registro 1 Tabla 1</NombreCampo4>
  </NombreTabla1>
  <NombreTabla2>
    <NombreCampo1>Campo 1 Registro 1 Tabla 2</NombreCampo1>
    <NombreCampo2>Campo 2 Registro 1 Tabla 2</NombreCampo2>
    <NombreCampo3>Campo 3 Registro 1 Tabla 2</NombreCampo3>
    <NombreCampo4>Campo 4 Registro 1 Tabla 2</NombreCampo4>
  </NombreTabla2>
  <NombreTabla1>
    <NombreCampo1>Campo 1 Registro 2 Tabla 1</NombreCampo1>
    <NombreCampo2>Campo 2 Registro 2 Tabla 1</NombreCampo2>
    <NombreCampo3>Campo 3 Registro 2 Tabla 1</NombreCampo3>
    <NombreCampo4>Campo 4 Registro 2 Tabla 1</NombreCampo4>
  </NombreTabla1>
</NombreBaseDeDatos>

Formato como se guarda la información en el fichero XML. El fichero en si es la base de datos, este puede contener una base de datos o varias, dentro de este están las posibles tablas que pudiera tener esa base de datos. Y estas a su vez contendrá los registros que tenga cada una de las tabla con sus respectivos campos.

Lectura de fichero XML

Para leer el fichero XML lo primero tendremos que crear un objeto del tipo “DataSet” para que maneje el fichero. Hay dos formas de crearlo, sabiendo como se llama  nuestra base de datos o no.

Sin saber como se llama la base de datos:

// Crear el objeta DataSet sin conocer el nombre de la base de datos
DataSet dataSet1 = new DataSet();

Esto permite ver cualquier contenido del fichero.

Conociendo como se llama la base de datos:

// Crear el objeta DataSet conociendo el nombre de la base de datos
DataSet dataSet1 = new DataSet("NombreDeLaBaseDeDatos");

De esta otra forma solo se podrán manejar los datos que estén dentro de esa base de datos. Teniendo creado el objeto DataSet solo queda asignarle el nombre que tiene el fichero XML.

dataSet1.ReadXml("RutayNombreDelFicheroXML");

Con esto ya tenemos configurado nuestra DataSet para leer los datos del fichero. A partir de aqui, se maneja de la misma forma que cualquier otro DataSet que funcione con cualquier otro tipo de base de datos.

Ejemplo de funcionamiento.

Se lee el fichero y se muestra en un DataGridView

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Xml_DataSet_1
{
    public partial class fLeerXmlDataSet : Form
    {
        // Objeto dataset para manejar el fichero
        // no le ponemos nombre de la base de datos para poder abrir cualquier fichero
        DataSet dsLeerFicheroXML = new DataSet();

        public fLeerXmlDataSet()
        {
            InitializeComponent();
        }

        private void bAbrirFicheroXml_Click(object sender, EventArgs e)
        {
            // Limpiamos el contenido anterior
            dsLeerFicheroXML.Clear();

            // Creamos el objeto para abrir el fichero
            OpenFileDialog odAbrirFicheroXML = new OpenFileDialog();
            // Le ponemos un filtro para ver solamente los ficheros XML
            odAbrirFicheroXML.Filter = "Ficheros Xml|*.xml";

            // Montramos el dialogo para abrir el fichero XML
            if (odAbrirFicheroXML.ShowDialog() == DialogResult.OK)
            {
                // Si se ha pulsado el boton de OK
                // Le pasamos el nombre del fichero al DataSet para abrirlo
                dsLeerFicheroXML.ReadXml(odAbrirFicheroXML.FileName);
                // Le pasamos el contenido de la primera tabla del fichero al DataGridView
                dgvLeerFicheroXML.DataSource = dsLeerFicheroXML.Tables[0];
            }
        }
    }
}