miércoles, 30 de enero de 2013

Librería RS485 C# / Python

Presentamos en esta oportunidad una librería desarrollada por el laboratorio a partir de la librería para RS232 de Teunis van Beelen.
Nuestra librería nos brinda un manejo del puerto serial de la PC para poder conectarlo a un bus RS485.

La conversión RS232 a RS485 puede realizarse mediante el siguiente circuito, en el cual se utiliza el pin RTS del puerto serie para controlar la Transmisión/Recepción sobre el bus RS485.
RS485


El proyecto consiste en una librería dinámica ( ".dll" para Windows y ".so" para Linux ) escrita en lenguaje C la cual maneja el puerto serie de la PC y controla el pin RST para controlar la condición de transmisor / receptor del bus RS485.

La librería puede compilarse sobre Windows con MinGW y sobre Linux con GCC.

Esta librería dinámica puede ser utilizada en cualquier lenguaje que soporte exportar este tipo de librerías, se da como ejemplo, una clase wrapper de nuestra librería en  C# ( exportando la dll sobre Windows ) y en lenguaje Python ( exportando la shared library sobre Linux )


Ejemplo uso en Python


Para utilizar la librería desde python, solo basta copiar a nuestro proyecto los dos archivos:

  • librs485_linux_i386.so
  • Rs485.py

Luego importamos la clase y abrimos el puerto serial (en este caso ttyUSB0) creando un objeto del tipo Rs485: 
from Rs485 import *

port = Rs485(0,115200) #ttyUSB0 - 115200
if port.openPort() == False :
    print("Error opening serial port")

Luego podemos enviar una trama creando un objeto bytarray de python:
ba = bytearray()
ba.append(1)
ba.append(2)
ba.append(3)
ba.append(4)
port.sendPacket(ba,4) #Enviamos 4 bytes

Para recibir bytes, utilizaremos el método "receivePacketWithTimeout"
while True:
 ba = port.receivePacketWithTimeout(5000) # Esperamos 5 segundos
 if len(ba) > 0 :
  print("Bytes received:"+str(len(ba)))

Para descargar el proyecto, click aquí

jueves, 24 de enero de 2013

Preparando Fedora 17 para desarrollar

Instalando Openssh en Fedora 17
yum install openssh-server
chkconfig sshd on

Instalando MySQL en Fedora 17
yum install mysql-server
service mysqld start
chkconfig --levels 235 mysqld on
/usr/bin/mysql_secure_installation
yum install mysql-query-browser

Instalando APACHE Server en Fedora 17
yum install httpd
service httpd start
chkconfig httpd on

Instalando PHP y PhpMyAdmin en Fedora 17
yum install php php-common
yum install phpmyadmin

Instalando Tomcat 6 en Fedora 17
yum -y install tomcat6 tomcat6-webapps tomcat6-admin-webapps
service tomcat6 start
chkconfig tomcat6 on


Instalando Herramientas de desarrollo C/C++ (Equivalente a "Build Essentials" en Debian) 
yum groupinstall "Development Tools" "Development Libraries"


martes, 22 de enero de 2013

Arquitectura de Android OS - Curso Android Nivel 1


¿Qué es Android?

Android es un sistema operativo desarrollado por Google para Dispositivos Móviles el cual posee una gran comunidad de desarrolladores. Fue desarrollado inicialmente por Android Inc., una firma comprada por Google en 2005. Este sistema operativo esta basado en Linux y posee una Java Core Library basada en Apache Harmony.

A pesar de utilizar la librerías de Apache Harmony, la JVM es diferente, y es llamada “Dalvik Virtual Machine” (DVM). Debido a que esta maquina virtual es diferente, el bytecode estandard de Java no peude ser ejecutado directamente por la DVM, sino que debe ser convertido a archivos “.dex”.

Arquitectura del sistema operativo

Como puede observarse en la figura, el sistema se compone en 4 capas:
  • Kernel de Linux : El kernel es el núcleo del sistema operativo, posee todas las librerías de bajo nivel que permiten la interacción con el hardware, las librerías para el manejo del display, cámara, módem Wifi, GSM, Audio y memorias están en esta capa.

  • DVM y Librerías : En esta capa se encuentra la máquina virtual de Dalvik, junto con las librerías que utiliza (las que provienen de Apache Harmony) y las librerías de nivel “medio” programadas en C y C++ que proveen un nivel de abstracción con respecto a las librerías de bajo nivel que se encuentran en el kernel.

  • Application Framework : Son librerías programadas en lenguaje Java las cuales proveen al desarrollador de aplicaciones Android un fácil acceso a el hardware del dispositivo, evitando al programador tener que utilizar las librerías de nivel medio o bajo. Estas librerías serán las que utilizaremos a lo largo del curso para desarrollar aplicaciones.
  • Aplicaciones : La última capa del sistema operativo son las aplicaciones, aquí se encontrarán los programas que desarrollaremos, y como puede observarse, todo con lo que interactuamos en un dispositivo móvil, es una aplicación: Cuando marcamos un numero de teléfono, estamos utilizando una aplicación que se encarga de interactuar con el hardware del módem telefónico, cuando revisamos nuestra agenda de contactos, estamos utilizando una aplicación que lee la información de una memoria y nos la muestra en pantalla; inclusive la lista de iconos de las aplicaciones que tenemos instaladas en el “home” de nuestro teléfono, también es una aplicación.

    Detalles sobre la DVM

    La maquina virtual que utiliza Android esta optimizada para trabajar con sistemas embebidos, esto quiere decir es es rápida en procesadores chicos y posee pocos requerimientos de memoria.

    La DVM es energéticamente mas eficiente: El bytecode para DVM es más compacto, esto implica menos instrucciones, y eso se traduce en menos ciclos de CPU, que conlleva un menor consumo de batería.

    Como se mencionó anteriormente, no puede ejecutarse código de java standard sobre esta maquina virtual directamente, el proceso que se lleva a cabo es el siguiente:

    • Se escribe el programa en Java
    • Se compila a bytecode de Java estandard para aprovechar todas las optimizaciones que éste posee.
    • Se “traduce” el bytecode de Java (.class) al bytecode para la DVM (.dex).

    Esto también trae como ventaja el poder reutilizar archivos .class ya compilados.


Introducción a la programación - Curso Android para no programadores


Introducción a la Programación

Comenzaremos por definir que es una computadora, y como podemos utilizarla para que realice tareas por nosotros.

Computadora

Una computadora, es más que un dispositivo que nos permite navegar en Internet para acceder a redes sociales, escribir un texto o enviar e-mails, para un programador, una computadora es un dispositivo capaz de ejecutar ordenes a una gran velocidad. ¿Qué son estas ordenes? No son más que cálculos entre ciertos valores. Sin entrar en grandes detalles, podemos dividir una computadora en dos partes: una memoria de datos y un procesador.
En la memoria de datos se guardarán los datos con los que el procesador realizará cálculos.

Por ejemplo: tenemos dos valores almacenados en la memoria : 5 y 7, el procesador tiene la capacidad de “leer” esos dos valores y realizar un calculo con ellos, por ejemplo, sumarlos.

La pregunta es ¿Cómo llega una computadora que solo puede sumar valores, a permitirme navegar por Internet, o ver una película o escuchar un mp3? La respuesta es que, obviamente, la única operación que realiza un procesador no es la suma, y que tampoco realiza una sola operación, sino un conjunto ordenado de ellas, y este conjunto es lo que se conoce como un programa.

Programa.

Un programa informático es un conjunto de instrucciones que una vez ejecutadas realizarán una o varias tareas en una computadora. Sin programas, estas máquinas no pueden funcionar.” (Wikipedia)

De modo que nuestra tarea como programadores, valga la redundancia, es escribir programas. Estos programas realizarán tareas, al comienzo más simples ( desde sumar dos números hasta una simple calculadora), y luego mas complejas.

Ejemplo de nuestro primer programa:

ValorA = 5
ValorB = 7
Resultado = ValorA + ValorB

Para explicar este pequeño programa, introduciremos el concepto de “Variable”. Una variable, es una porción de memoria de nuestra computadora, en donde podremos almacenar un valor.

 En nuestro programa, representamos estas porciones de memoria con un nombre definido por el programador, en este caso, tenemos 3 variables:

  • ValorA
  • ValorB
  • Resultado

En la primera se almacenará el valor 5, en la segunda el valor 7 y en la tercera, la operación “suma” entre las dos primeras.

Cabe destacar que en un programa, cada línea se ejecuta por el procesador en orden descendente, es decir:

  1. ValorA = 5
  2. ValorB = 7
  3. Resultado = ValorA + ValorB

Al ejecutarse la primera línea, el procesador almacena el valor 5 en la porción de memoria llamada “ValorA”:

Memoria de datos
ValorA 5
ValorB -
Resultado -
... ...

Al ejecutarse la segunda línea, el procesador almacena el valor 7 en la porción de memoria llamada “ValorB”:

Memoria de datos
ValorA 5
ValorB 7
Resultado -
... ...

y al ejecutarse la tercer línea, el procesador realiza la operación suma entre los valores almacenados en las porciones de memoria “ValorA” y “ValorB” y almacena el resultado en la porción de memoria llamada “Resultado”:

Memoria de datos
ValorA 5
ValorB 7
Resultado 12
... ...

Lenguaje de programación

Una vez comprendido qué es un programa, nos resta preguntarnos ¿Cómo se escribe un programa? Es decir, no podemos pretender que una computadora nos entienda cuando le decimos:

ValorA = 5
ValorB = 7
Resultado = ValorA + ValorB

Porque del mismo modo que nosotros escribimos este programa sin ninguna consideración, otra persona podría haber escrito:

ValorA vale 5
ValorB vale 7
Resultado es igual a (ValorA mas ValorB)

Como podemos observar, necesitamos definir ciertas reglas de cómo escribir un programa, para que cualquiera que lo escriba, lo haga de la misma forma, y a su vez, esta forma tiene que poder ser interpretada por la computadora. Estas reglas de escritura, conforman un lenguaje de programación.

Como se podrán imaginar, no existe solo un lenguaje de programación, sino que a lo largo de la historia de la computación, se fueron desarrollando una gran cantidad, cada uno posee sus reglas de escritura, y el programador que escriba en cada lenguaje deberá respetarlas para que el programa funcione.

Ejemplos de nuestro pequeño programa en algunos lenguajes de programación:

Java:
public class Main {
    public static void main(String[] args) {
        int valorA;
        int valorB;
        int resultado;
        valorA=5;
        valorB=7;
        resultado=valorA+valorB;
    }
}

Python:
valor_a = 5
valor_b = 7
resultado = valor_a + valor_b

PHP:
<?php
$valor_a = 5;
$valor_b = 7;
$resultado = $valor_a + $valor_b;
?>

C:
int main(int argsc, char ** argsv) {
    int valorA;
    int valorB;
    int resultado;
    valorA=5;
    valorB=7;
    resultado=valorA+valorB;
}

Cada lenguaje tiene su sintaxis y pueden diferir ampliamente, durante el curso se estudiará el lenguaje Java, necesario para escribir las aplicaciones para Android.


Compilación

Debido a la gran diferencia de sintaxis que poseen los diferentes lenguajes, nos preguntamos ¿Cómo una computadora puede comprender las sentencias escritas? La respuesta es que no lo hace, el conjunto de ordenes que nosotros escribimos al programar, deben ser traducidos a un conjunto de ordenes que el procesador comprende, este conjunto de ordenes es conocido como el set de instrucciones del procesador. Estas instrucciones no son más que números que el procesador sabe interpretar para saber qué operación debe realizar.

El “traductor” de nuestro lenguaje al set de instrucciones del procesador ( también conocido como lenguaje de máquina) es un programa que se llama “Compilador”.
El compilador, transformará lo que el programador escribe en un conjunto de números que el procesador puede interpretar y ejecutar. También será el encargado de verificar que lo que el programador escribió cumple con las reglas del lenguaje, es decir, existe un compilador para cada lenguaje.



Proceso de programación

Haremos un resumen de los pasos necesarios para obtener un programa que realice una tarea:

  1. Elegir un lenguaje de programación para escribir nuestro programa.
  2. Escribir el programa en un archivo de texto respetando las reglas del lenguaje elegido.
  3. “Compilar” nuestro archivo de texto para obtener un archivo ejecutable que el procesador puede interpretar.
Este archivo que nos devuelve el compilador, será nuestro programa.

Este programa obtenido, será diferente para cada tipo de procesador (X86,ARM,PowerPC,etc.) y también será diferente para cada sistema operativo (Windows,Linux,MAC OS,Android)