Introduccion a la programacion en RaspberryPi

Standard

rasp1

 

En la actualidad, para raspbian se puede programar en mucho lenguajes como JAVASCRIPT, PHYTON, C/C++, Etc. Aunque los más usados normalmente son python y C, en parte porque están implícitos en raspbian, son lenguajes universales y básicos en programación.

rasp2

Los sistemas operativos, en este caso GNU/Linux, puede ser manejado por medio de entornos gráficos. Sin embargo no es la única forma de operar un sistema. También podemos manejarlo por medio de líneas de comandos que se ingresan por medio de una terminal (también llamada consola) y que funciona como una interfaz entre el usuario y el sistema operativo.

Los comandos ejecutados en la consola, son operadores o funciones que se utilizan para acceder a directorios o archivos del sistema o para realizar tareas específicas (copiar, mover, o visualizar archivos).

  • La terminal en raspbian es la forma más básica y fácil de programar, configurar e incluso instalar programas, actualizaciones, bibliotecas, etc, sin contar que raspbian es una versión reducida de debian, por lo que existen funciones que solo pueden ser utilizadas por medio de la propia terminal.

rasp3

Para esta practica necesitaremos:

  • Raspberry
  • 1 Led
  • 1 Resistencia.

Ejemplo con terminal:

  • Lo primero es haber conectado y energizado nuestra raspberry (con raspbian ya instalado).  Por defecto el usuario: pi, PASWORD: raspbian
  • Después de habernos autenticado se escribe el comando startx, y nos mostrará lo siguiente.

rasp4

  • Lo siguiente es armar un circuito sencillo para probar los puertos. El led irá a un pin gnd y al pin 17 y nos deberá quedar algo como esto:

rasp5

 

  • Ahora la manera en la que vamos a acceder a los GPIO es como si fuesen directorios. Podemos utilizar comandos como ‘ls‘, ‘cat‘ o ‘echo‘, entre otros, para conocer la estructura y contenidos de los directorios.

Ahora mismo no tenemos ningún pin accesible. Ni de entrada, ni de salida. Tenemos que crearlo nosotros mismos. Queremos tener acceso al GPIO 17, así que introducimos el siguiente comando:

1
echo 17 > /sys/class/gpio/export

Tras esto, el sistema ha creado un archivo con una estructura GPIO que corresponde al número 17.

  • A continuación, tenemos que informar a la Raspberry Pi si el pin va a ser de salida o de entrada. Como lo que queremos es encender un LED, el GPIO 17 será de salida. Entonces introducimos el siguiente comando:
1
echo out > /sys/class/gpio/gpio17/direction

Con esto, el sistema ya sabe que el pin será de salida. Ahora tendremos que darle valores. Existen dos posibles: ‘0’ y ‘1’.

  • Para encender el LED
1
echo 1 > /sys/class/gpio/gpio17/value
  • Para apagar el LED
1
echo 0 > /sys/class/gpio/gpio17/value
  • Una vez que hayamos acabado de encender y apagar el LED, tendremos que eliminar la entrada GPIO creada, es decir, el GPIO 17. Para ello introduciremos el siguiente comando:
1
echo 17 > /sys/class/gpio/unexport
  • Con lo anterior hemos aprendido a crear , y eliminar la configuración de un GPIO, como también ponerlo en el estado que se desea utilizando la terminal de linux.

Ahora hablaremos un poco de “C”

Dispone de las estructuras típicas de los lenguajes de alto nivel pero, a su vez, dispone de construcciones del lenguaje que permiten un control a muy bajo nivel

Algunas propiedades:

  • Un núcleo del lenguaje simple, con funcionalidades añadidas importantes, como funciones matemáticas y de manejo de archivos, proporcionadas por bibliotecas.
  • Es un lenguaje muy flexible que permite programar con múltiples estilos.
  • Un sistema de tipos que impide operaciones sin sentido.
  • Acceso a memoria de bajo nivel mediante el uso de punteros

Ejemplos en C:

  • Ante todo, limpiamos nuestra terminal con el comando “clear”.
  • Vamos a la carpeta raiz de nuestro usuario -> cd /home/pi
  • Verificamos que estamos realmente ahí -> pwd
  • Creamos la carpeta curso para colocar el código escrito/generado -> mkdir Ejemplo
  • Verificamos que la carpeta está correctamente creada -> ls -l
  • Entramos en la carpeta -> cd Ejemplo
  • Verificamos (opcionalmente) de nuevo nuestra ubicación -> pwd
  • Verificamos (opcionalmente) de nuevo nuestra ubicación -> pwd
  • Ahora creamos un fichero vacio -> touch hola.c
  • Verificamos que se ha creado y está vacío (ocupa 0 bytes) -> ls -l
  • lo editamos (usamos el mini editor nano) -> nano hola.c

Escribimos “algo original” en nuestro primer programa:

#include 

int main() {
printf(“Hola Mundo desde mi Raspi...\n”);
return 0;
}

rasp6

  • Salimos y guardamos (Ctrl-X y Enter)
  • Verificamos que hola.c ya no ocupa 0 bytes -> ls -l

opcionalmente podemos verificar rápidamente el contenido -> more hola.c

Lo cual nos mostraría algo como esto:

rasp7

Compilamos el programa hola.c así (es un ejemplo) ->

1
gcc -o holaPi hola.c
  • Vemos que en la línea de comandos hemos indicado:

gcc => llamada al compilador C del Linux

-o holaPi => indicamos el nombre de salida del archivo ejecutable

hola.c => indicamos el nombre del archivo fuente a compilar

Vemos qué es lo que se ha generado en /Ejemplo -> ls –l

Y, por fin, ejecutamos nuestro primer programa ->   ./holaPi

Y por ultimo veremos Phyton el cual es otro de los lenguajes mas utilizados en esta clase de sistemas

¿Qué es Phyton?

Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en una sintaxis que favorezca un código legible.

Es orientado a objetos, preparado para realizar cualquier tipo de programa, desde aplicaciones Windows a servidores de red, Es un lenguaje interpretado, lo que significa que no se necesita compilar el código fuente para poder ejecutarlo, lo que ofrece ventajas como la rapidez de desarrollo e inconvenientes como una menor velocidad.

Ejemplo phyton:

  • Instalaremos la biblioteca para poder controlar los GPIO con Python. Está alojada en SourceForge la cual debimos haber descargado previamente, pero podemos descargarla en la Raspberry Pi con el siguiente comando:
  • 1
    
    wget 'http://downloads.sourceforge.net/project/raspberry-gpio-python/RPi.GPIO-0.5.4.tar.gz‘

    Una vez descargada, vamos a descomprimir el archivo comprimido:

  • 1
    
    tar zxvf RPi.GPIO-0.5.4.tar.gz

    En caso de tenerlo en una usb, primero vamos a la usb

  • 1
    
    sudo fdisk –l

    Crearemos una nueva carpeta dentro del directorio /media. La llamaremos PenDrive. Actualmente no hay nada en esta carpeta:

rasp8

  • Creamos la carpeta con el siguiente comando:
1
sudo mkdir /media/PenDrive

rasp9

El archivo fstab está dentro del directorio /etc (/etc/fstab). Sirve básicamente para guardar la configuración del montaje permanentemente. Lo abriremos con nano, usando el siguiente comando:

1
sudo nano /etc/fstab

Nos aparecerá lo siguiente

rasp10

A continuación, introduciremos una nueva línea, teniendo en cuenta que la separación entre cada campo se realiza con el tabulador. Además, al tener un formato FAT32, usaremos vfat en el tercer campo. Esta línea es la siguiente:

/dev/sda1: dirección de mi pendrive

/media/PenDrive: ruta de montaje

vfat: formato FAT32.

Aplicaremos los cambios con el comando mount. Vamos a ver sus opciones:

1
mount –help

Nos fijamos en una opción en particular: -a. Con esta opción montamos todo lo que tengamos en el fichero /etc/fstab, que es el que hemos modificado en el punto 3.

rasp11

      Finalmente, ejecutamos el comando

rasp12

¡Con este último paso, ya tenemos nuestro pendrive listo!

  • Ahora iremos a nuestra usb, con el siguiente comando
1
cd /home/pi/Direccion de nuestra usb

Siguiendo con el tutorial de phyton:

  • Una vez descargada, o estando dentro de nuestra usb vamos a descomprimir el tarball:
  • 1
    
    tar zxvf RPi.GPIO-0.5.4.tar.gz

    Entramos en el directorio que acabamos de descomprimir:

1
cd RPi.GPIO-0.5.4/

Ahora toca instalar la biblioteca. Por si no tenemos el paquete python-dev, introducimos el siguiente comando:

1
sudo apt-get install python-dev
  • Cuando acabe la instalación del paquete anterior, procedemos a instalar la librería:
1
sudo python setup.py install
  • En este tercer paso, vamos a escribir un pequeño programa en Python que haga que se enciendan y apaguen los LEDs de forma intermitente. Creamos nuestro archivo de phyton:
1
sudo nano blink.py
  • Los pines serán de salida, pues tenemos que encender LEDs. Como ya hemos hecho en el montaje, utilizaremos los GPIO 17 y 27. La forma de tratar los pines, su declaración y el encendido y apagado:
import RPi.GPIO as GPIO

import time

GPIO.setmode(GPIO.BCM)

GPIO.setup(17, GPIO.OUT) ## GPIO 17 como salida

GPIO.setup(27, GPIO.OUT) ## GPIO 27 como salida

La función se llamará ‘blink‘.

def blink():

print "Ejecucion iniciada..."

iteracion = 0

while iteracion < 30: ## Segundos que durara la funcion

GPIO.output(17, True) ## Enciendo el 17

GPIO.output(27, False) ## Apago el 27

time.sleep(1) ## Esperamos 1 segundo

GPIO.output(17, False) ## Apago el 17

GPIO.output(27, True) ## Enciendo el 27

time.sleep(1) ## Esperamos 1 segundo

iteracion = iteracion + 2 ## Sumo 2 porque he hecho dos parpadeos

print "Ejecucion finalizada"

GPIO.cleanup() ## Hago una limpieza de los GPIO

blink() ## Hacemos la llamada a la funcion blink

1
sudo python blink.py

Espero verlos pronto, deja tus dudas o comentarios abajo.

rasp13

 

Leave a Reply

Your email address will not be published. Required fields are marked *