Sunteți pe pagina 1din 39

CURSO:

RASPBERRY PI: Introducción,


Programación en C y Python.

O Bluetooth

python

Organizador:

*MEE
ESPOL STUDENT BRANCH
Con el cuepiclo de:

AdateI
$
Dirigido a:

• Estudiantes y Profesionales de Ingeniería que deseen


ampliar sus conocimientos de electrónica, software y
hardware libre mediante el uso de ordenadores de placa
única - Raspberry Pl.

Duración:

• 8 Horas

Expositor:

• Ing. Gerardo Chavez.


., -P o iilO Vo 5 UO 6Vz ". ~
,
Ú, c4d
Contenido:
Conociendo el Raspberry PI
4 p

,o1 • ¿Qué es Raspberry Pl y para qué sirve?


9 6 0-06
90-0
• Especificaciones Técnicas y Puertos disponibles.
• Distribución de Puertos GPIO (General Purpose
lnput/Output).
10
4
LS 0-01000 Instalación y Configuración de Sistema Operativo RASPBIAN.

• Que necesitaremos: lSO Raspbian y Kit Raspberry Pl


• Montaje de SO Raspbian en SD
• Primer Encendido y Configuraciones Básicas
• Cambio de Clave
• Configuración de Pantalla, Lenguaje y Teclado
• Configuración de Red Inalámbrica WiFI.
• Acceso Remoto VNC
• Introducción al Entorno grafico para RASPBIAN

Control Básico de GPIO (General Purpose Input/Output).

• Control de los GPIO desde Línea de Comando.


• Taller 1: Parpadeo de LED en Script BASH.

Introducción a Programación en Python.

• Librerías de Programación Python para Raspberry PI


• Descarga e Instalación de Librerías
• Funciones Disponibles

Introducción a Programación en C.

• Librería de Programación C para Raspberry Pl


• Descarga e Instalación de Librerías
• Funciones Disponibles

Taller 2: Control de Entradas/Salidas


0 tZ e O go

Taller 3: Manejo de Puerto Serial UART


oJ :
uIn 60-010--O o.-
0—

2(Ç 0
oo
??il?000l
I 2r ODA a
CONOCIENDO EL RASPBERRY PI
L ei u ce
¿Qué es Raspberry PI y para qué sirve? cVt tU ( tx-

La necesidad de reducir la brecha digital, los altos costos de fabricación de hardware, la


La
constante búsqueda de incrementar la portabilidad y las nuevas tendencias como loT o
uf
Internet de las cosas, son los detonantes que en los últimos años han impulsado el
desarrollo de soluciones de hardware y software libre basados en ordenadores de placa /
única (Single Board Computer), y eso es precisamente los que es Raspberry PI, es un
ordenador de placa unica.

Al momento de hablar sobre ordenadores de placa única es necesario dejar en claro que
estos son básicamente un ordenador o computadora en miniatura que cumplen con el
requisito principal de contar con todas las prestaciones básicas de un ordenador de
escritorio, cuyos componentes se encuentren contenidos en una sola placa del tamaño
de la palma de tu mano, es importante recalcar que debido a esta limitante en tamaño,
sus capacidades se verán reducidas en comparación de los ordenadores actuales pero a
pesar de eso se contara con las capacidades de procesamiento y almacenamiento
suficientes para soportar una amplia gama de aplicaciones o desarrollos de software y
electrónica.

Raspberry PI

Este es el más famoso SBC en la actualidad, esto principalmente a que fue una de las
primeras en producirse y distribuirse de forma masiva a un precio relativamente bajo la
misma que presenta características lo suficientemente robustas para incluso reproducir
video Fui¡ HD lOSOp y en sus última versión contar con acceso Wifi 802.11n y Bluetooth
4.1

BROADCOM
A O Bluetooth

HDU SUPERSPEED
Aplicaciones

Los ordenadores de placa única han tenido una amplia acogida sobre todo en el área de
desarrollos basados en software libre debido a que el Raspberry Pl soporta una amplia
gama de distribuciones basadas en Linux con lo cual se cuenta con una plataforma
bastante atractiva para desarrolladores y entusiastas de la tecnología, entre los
proyectos más llamativos tenemos los siguientes:

• Media Center: https://youtu.be/HFidG51glFl


• Teléfono Celular: https://youtu.be/8eaiNsFhtl8
• Estación Meteorológica: https://youtu.be/tJ8aZwKCH6qs
• Consola retro de video juegos: https://youtu.be/tm6nl26Mp5E
• Escáner 3D: https:J/youtu.be/sCIHYRsx56A
• MiniPC Portatil: https://youtu.be/E89s2h9swlc
• Game Boy: https://Voutu.be/EPTp6WSrC6c
• Ordenador para Carro: https://youtu.be/uRbOgYOAAHO

Especificaciones Técnicas y Puertos disponibles.

El Raspberry Pl ha evolucionado desde sus inicios llegando a contar con características


cada vez superiores brindando una mejory más robusta plataforma, en su última versión
hasta la fecha conocida como Raspberry Pl 3 tenemos a nivel de hardware las siguientes
características.

Raspberry Pl 3
S0C Broadcom BCM2837
4x ARM Cortex-A53, 1.2GHz
CPU
64-bit quad-core ARMv8
Broadcom VideoCore IV y 1080p30 H.264/MPEG-
GPU
4 AVC3
Memoria (SDRAM) 1 GB LPDDR2
USB 2.0 4 puertos
Conector MIPI CSI que permite instalar un
Entradas de Video
módulo de cámara desarrollado por la RPF
HDMI, 3.5mm Audio jack, Interfaz DSI
Salidas de Audio y Video
para panel LCD
Pines 40-pin header
Almacenamiento MicroSD
10/100 Ethernet (RJ-45), Wifi 802.11n y
Conectividad de Red
Bluetooth 4.1
Tamaño 85.60mm x 53.98mm
Peso 45g
Fuente 5 V vía Micro USB o GPIO header
Consumo 800 mA, (4.0 W)
Raspbian, Ubuntu (Mate, Snappy), Windows 10
Sistemas Operativos
lOT, OSMC, Librelec, Pinet, RISC OS, entre otros
Puertos de Comunicación

Uno de los puntos de interés a nivel de hardware son sin lugar a dudas los puertos de
comunicación con los que cuenta Raspberry PI, de manera general podemos observar
en la siguiente figura que tenemos a disposición:

• l Puerto HDMl
• 4xUSB2.0
• DSI Display Connector para Pantalla LCD
• CSI Connector para Cámara
• 40 Pines GPIO (UART, I/O, 12C, SPI, 3V3, 5V, Gnd)
• Conector de audio Jack 3,5 mm
• Puerto Ethernet 10/100
• Wifi 802.11n y Bluetooth 4.1

Sin embargo para las aplicaciones del presente curso nos enfocaremos en las
prestaciones de los 40 pines GPIO, esto debido a que de manera introductoria se busca
orientar al desarrollo de proyectos de electrónica a nivel académico, con lo cual se podrá
contar con las bases en cuanto a funcionamiento y usabilidad al momento de explorar
los límites del Raspberry Pl y nuestro ingenio.

Raspberry Pi 3 Dimensions ..e leIT'Ie nt 4 x USB 2


Model B 85.6mm x 56mm X ZIMM
Ports

40 Pm
Extended GPIO
10/100
Broadcom LAN Port
BCM2837 64bit
Quad Core CPU
at 1.2GHz,
1GB RAM
3.5mm 4-pole
On Board osite Video
Bluetooth 4.1 ComRudio
and
Wi-Fi Output Jack

MicroSD CSI Camera Port


Card Siot

Fuli Size HDMI


Micro USB Power Input. Video Output
DSI Display Port Upgraded switched
power source that can
handie up to 2.5 Amps
0 00
0

0-0
00

Distribución de Puertos GPIO (General Purpose lnput/Output).

GPIO (General Purpose lnput/Output) es, como su propio nombre indica, un sistema de
Entrada/Salida de propósito general, es decir, una serie de conexiones que se pueden
usar como entradas o salidas para usos múltiples.
)—01 0-06
6 0-0

0 o/_0
01 Los GPIO representan la interfaz entre Raspberry Pi y el mundo exterior. Y con ellos
podrás hacer multitud de proyectos, desde hacer parpadear un LED hasta otros mucho
más sofisticados. Pero para eso debes conocer sus características y como se programan.

Írs Todos los pines son de tipo "unbuffered", es decir, no disponen de buffers de protección,
así que deberás tener cuidado con las magnitudes (voltajes, intensidad,...) cuando
!._? 0-01000
___#-0 •' 00-0
o conectes componentes a ellos para no dañar la placa debido a que no todos los pines
tienen la misma función:
if4 • Pines de alimentación: Son puertos de 5v, 3v3
(limitados a 5OmA) y tierra (GND o Ground), que 3V3
10 0 gv
aportan alimentación a estos voltajes para tus
circuitos, estos sirven como una fuente de
0PI02
00 5V

alimentación, aunque también puedes utilizar otras


GPIO3
00 Ground

fuentes (pilas, fuentes de alimentación externas,


etc).
GPIO4
00 GPIOI4

Ground
00 GPIOIS

• DNC (Do Not Connect): Pines de alimentación: Son


o, GPIOIO

0
puertos de 5v, 3v3 (limitados a 5OmA) y tierra (GND
GPIO2? Ground
o Ground), que aportan alimentación a estos
voltajes para tus circuitos, estos sirven como una GPIOZ2 GP1023

fuente de alimentación, aunque también puedes


3V3
Go OPIO24

o.
utilizar otras fuentes (pilas, fuentes de alimentación
GPIOIO Ground
externas, etc).

• GPIO normales: Pines de alimentación: Son puertos


GPIO9
00 0P1025

de 5v, 3v3 (limitados a 50mA) y tierra (GND o GP 1011


• 0 OPIOS

Ground), que aportan alimentación a estos voltajes


para tus circuitos, estos sirven como una fuente de
Ground

ID SO
o OPIO7

ID SC
alimentación, aunque también puedes utilizar otras
fuentes (pilas, fuentes de alimentación externas, OPIOS Ground

etc).
OPIOS 0P1012

• GPIO especiales: Pines de alimentación: Son GPIOI3 Ground


puertos de 5v, 3v3 (limitados a SOmA) y tierra (GND
GPIOI9 GPIO16
o Ground), que aportan alimentación a estos
voltajes para tus circuitos, estos sirven como una GPIO2G GPIO2O

fuente de alimentación, aunque también puedes


Ground GP 1021
utilizar otras fuentes (pilas, fuentes de alimentación
externas, etc).
INSTALACIÓN Y CONFIGURACIÓN DE SISTEMA OPERATIVO
RASPBIAN.

¿Qué necesitaremos?: ¡SO Raspbian y Kit Raspberry PI

Pues bien, hasta el momento hemos hablado de las bondades, características y


proyectos que se han desarrollado con Raspberry PI, pero si estamos dando los primeros
pasos es necesario retroceder y aprender lo más básico, que es en lo que este curso se
enfocara

ISO Raspbian

Primero, hemos aclarado a que nos referimos por ordenador de placa única, pero debido
a que estamos hablando de ordenadores es necesario definir un componente muy
importante, este es el sistema operativo, dependiendo del sistema operativo que
usemos, la manera en que manejemos el Raspberry Pl variara en mayor o menor grado,
esto debido a que en la página oficial de Raspberry tenemos una amplia gama de SO que
pueden ser usados entre ellos incluso una distribución de Windows loT.

DOWI&DS COMMUTY HL(.P FORUMS RESOURCES

DOWNLOADS

R.spbl.n is the Foundasons offici& supported Operasng System. Doweoed it


here. or use NOOBS. our pasy installer for Raspbian a-id mo-e

e.
O..,

THIRD PARTY OPERATING SYSTEM IMAGES

h -d pet mages ere itC aLb

01,Z: »
teUNTU MATE SNePPY*.mUNTU ccee
u.
da
W,\ttOiy$ 10.07 COPS OOMC

re
Para este curso usaremos la distribución conocida como RASPBIAN, la misma que provee
un entorno similar al de un ordenador y que permitirá instalar aplicaciones y programas
de terceros que explicaremos más adelante.

7
Kit Raspberry PI

Los componentes proporcionados en el Kit de este curso son los siguientes:

• Monitor
• RaspBerry Pl 3 con Case Transparente
• Tarjeta SD 8GB
• Fuente 5V DC 2.5A
• Teclado, Mouse y Adaptador HDMI a VGA
• ProtoBoard y Componentes Electrónicos

NOTA IMPORTANTE: Tomar las precauciones necesarias para evitar dañar la


Raspberry Pl por descargas de electricidad estática, además no se debe energia llo~sqn
,
equipos hasta que el instructor lo indique.

Montaje de SO Raspbian en SD

Ante todo es necesario aclarar que al comprar un Raspberry Pl lo que se obtiene es el


equivalente a una computadora sin disco duro ni sistema operativo, en pocas palabras
es solo una PCB con muchos puertos de conexión hasta el momento inútiles, para esto
es necesario instalar un sistema operativo y proveer de un dispositivo que haga de disco
duro, para esto usaremos una memoria SD, para instalar un SO en la memoria SD
necesitaremos los siguientes componentes.

• Una Tarjeta SD: Será necesaria una tarjeta de 4GB como mínimo.
• Etcher Burn: Esto en caso de usar Windows, existen aplicaciones similares para
Linux y Mac.
Ajo& eO kV
Instalación Paso a Paso

1. Descargar y descomprimir RASPBIAN de la página:


https://www.raspberrvpi.orgjdownloads/
N3 4db
2. Descargar Etcher desde: https://etcher.io/
3. Instalar Etcher ejecutándolo como administrador.
4. Insertar una tarjeta SD y realizar el proceso de escritura del ¡SO de RASPBIAN
descargado previamente.

o
QNeedHp? *

o
SELEC1 IMAGE
9
SELECT DRIVE
el*,
BURN IMAGE

o o o 11

2016-02-26-raspbin-jessie img O - 15.5 GB

PFÁi 1f

lo resinio &iiftt n

Primer Encendido y Configuraciones Básicas

Llegado este punto contaremos con una tarjeta SD con RASPBIAN lista para ser montada
en el Raspberry PI, para esto colocamos la tarjeta SD en la ranura, conectamos la fuente
de alimentación, un teclado USB y esperamos hasta que el sistema operativo termine el
proceso de arranque mostrándonos la siguiente pantalla:
DLOØO
g0??Oo9
6o-o
0e
1—o001
0-0
00

Cabe indicar que este primer arranque será realizado con varías configuraciones por
defecto, sin embargo es necesario realizar algunos cambios básicos de idioma, teclado,
hora y fecha como se indica a continuación:

Ir a Inicio> Preferencias > Configuración de Raspberry PI

96 90-0

Od o/_0
Programación

Oficina

Internet
00
Íçi Juegos

LY oo1 000 Accesorios

HeIp

Add / Rernove Softvare


-
Appearance Settirtgs
Run
íQ AUdPO Device Settings
Shutdown

Main Menu Editor

, Teclado y ratón

Cambio de Clave: El usuario creado por defecto es "pi" y no tiene contraseña, si se


desea agregarle seguridad de acceso al RaspBerry Pl es necesario crear una clave y
deshabilitar el check de "Ingreso Automático"

Coguacron de Raspbery Di

$ stema lnmtaces RenmentbI,zacon

1 Clave. Cambar Clave

1 aspoerTyp

ociar en Escotorro Consola

ingreso automatico Li Ingresar como usuario 1 .

ed al inicial Esperar red

:plash Scieen: Activo Desactivado (9jQ»


vesolulon: Set Rasolutrori

oerscan Activo - Desactivado

Cancelar Acepto-

Entre clave nueva:

Can

Configuración de Resolución de Pantalla: La configuración por defecto para


resolución de pantalla es "Default 720x480", la resolución por defecto no afecta si el
equipo tiene conectado un monitor al momento del encendido ya que detecta la mejor
resolución compatible, esta configuración tiene relevancia cuando se accede de manera
remota al Raspberry Pl mediante VNC, proceso que se explicara más adelante, se
recomienda configurar al menos la resolución "DT mode 16 1024X768 60Hz 4:3"

)fiÇJraClÓe de Ras Set Rmc4u1on

es desamo Localizaoon

Clave

Moscoame aspberryp

racIr Qn Escntono Cosaria

irtgreno autortialco gfesr corno Usuaro

Red al increl Defaul 720x480 Esperar red

Spintt Screen DIIT esode 4 64Cu48Q COez 43 Desacteado

ReSouTiOts DMT sucre 9 800e600 60lz 43 Set Resoluton, n.


1 líi5-

Overscart
DMTmodelC 1024768601z43
DMTlsore85 1280x720 60-It 169
Desacivado \E? 5011U(1
Cancelar Aceptar
D*T mode 35 12800024 6~ 54

Revolaron
DMTmode82 1920x108066Q 169

J LLAI Q ¿.. tm'


Se

Configuración de Hora y Fecha: Las versiones de Raspbian no cuentan con una


opción grafica de configuración para la Fecha y Hora, debido a esto deberemos realizar
esta configuración Básica mediante línea de comandos, Ir a Barra de Inicio> LXTerminal
y ejecutamos el siguiente comando:

pi@raspberrypi: sudo date 1027113017

Donde los 2 primeros números corresponden al mes, los 2 siguientes al día del mes, los
4 siguientes representan la hora y minutos, y los 2 últimos el año.

Configuración de Red Inalámbrica WiFi: La versión de Raspberry Pl 3 utilizada en


este curso, cuenta con conectividad inalámbrica y Bluetooth lo cual resulta de gran
utilidad para una amplia gama de aplicaciones y desarrollos, para configurar el acceso
inalámbrico nos debemos dirigir a la esquina superior derecha y daremos click izquierdo
sobre el icono de WiFi, habilitamos el acceso inalámbrico y seleccionamos una SSID,
luego de esto será necesario ingresar las respectivas credenciales.

9* L°
Tum Off Wi-Fi

ACMAN
ae7 1 a u

AlurnnoAsstido
ARR IS-40B2
carlos alvarez
Clato_NOVAWAYSA00051 90521

o? .o :t : :
Ø_OO—O 1
o
9 9s_0, 90-0
10 60-010—O O—
J oo :O o Qv
11

09 o/J/L0-v
L1 0
Lo-oo 6*-o
009
-0 o
-o
-o

j0.0
00

Si necesitamos es acceder a las configuraciones avanzadas de red podemos dar click


derecho sobre el icono de WiFi y seleccionar "Wireless & Wired Network Settings", en
esta sección podremos configurar direcciones IP estáticas en caso de ser necesarias.

1 2 % 14:45
o_6 009
0.06
g 6 90-0
Añadir/quitar elementos del panel
ç0 0-0
Ehmtnar Wireless & Wired Netviork del panel

Configuración del panel


Crear un panel nuevo

_Y 0-01000 Acerca de
0

Configuración de Teclado: Para la configuración del teclado Ir a Inicio >


Preferencias > Teclado y Ratón, en la opción Keyboard Layout podremos escoger el tipo
de teclado que usaremos as¡ como configurar la velocidad del raton.

Programación >

Oficina

nternet )

Juegos )

Accesorios

dAdd / Remove Software


Appearance Settngs
"Run.
Audio Device Sett:nqs
Shutdown.,
Configuración de Rasobemj P

1
Ó9 Main Menu Editor

09L
0---o —:
1 o 60-0 0-0 0-

12
Configuración de Lenguaje: La configuración del lenguaje la tendremos disponible
en Inicio> Preferencias > Configuración de Raspberry PI > Localización, en esta sección
también podremos editar las configuraciones de Zona horaria y teclado.

• , •Configuración de Ras Loca

. ifcj.ac:r. Raspb

Sistema Interfaces Rendimiento Localización

Local. OWI quiai L)C

Zona horaria: Ajustar Zona horana

Teclado. Configurar teclado

WiFi Country Set WiFr Countr,

Idioma. es (Spanish)

País: EC (Ecuador)

Conjunto de caracteres UTF-8


Cancelar Aceptar
Cancelar Aceptar

Acceso Remoto VNC: En la mayoría de ocasiones es conveniente poder programar y


controlar el Raspberry Pl de manera remota, con lo cual evitamos la necesidad de tener
un monitor, teclado y raton conectados al Raspberry PI, para esto usaremos la
herramienta Virtual Network Computing (VNC), el cual es un sistema gráfico que permite
controlar de forma remota el escritorio de una computadora (que ejecuta el servidor
VNC) desde otro dispositivo (que ejecuta VNC Viewer).

VNC Viewer transmite el teclado y el mouse al servidor VNC, con esto podremos ver el
escritorio del Raspberry Pi dentro de una ventana en nuestra computadora o dispositivo
móvil. 1 ~- ( t,
vtJC
Para contar con esta herramienta es necesario realizar las siguientes configuraciones:

1) Instalar VNC server en Raspberry PI: este paso no será necesario realizar ya que
la versión de Raspbian usada en este curso ya tiene por defecto instalado un
servidor VNC
2) Habilitar servicio VNC Server: Para esto iremos a Inicio > Preferencias >
Configuración de Raspberry PI > Interfaces y habilitaremos el servicio VNC

sistema Inierfaces i Rendimiento Localización


Támara. Activo • Desactivado

3SH Activo ?. Desactivado

Activo Desactivado

SPI: Activo ' Desactivado


2C: Activo !' Desactivado

Senal: .1; Activo !Desactivado

1-Wire: '. Activo f Desactivado


emoteGPtO: Activo !Desactivado

Cancelar Aceptar

3) Determinar la IP del Raspberry PI: Para identificar la IP asignada al Raspberry Pl


será necesario acceder a la aplicación LXTerminal, incluida por defecto en el
sistema operativo Raspbian, y ejecutar el comando "ifconfig", este nos mostrará
en pantalla las configuraciones de Red.

Archivo Editar Pestañas Ayuda


ettiO: f1ags0991JP, BROADCAST, MULTICAST' nitu 1500
ether b8:27:eb:42:fO:2f txqueuelen 1000 (Ethernet)
RX packets O bytes 0 (0.0 8)
RX errors O dropped O overruns O frame O
TX packets O bytes 0 (0.0 8)
TX errors O dropped O overruns O carrier O collisions O

lo: f1ag573cUP,LO0PBAcK,RuNNINij. mtu 65536


inet 127.0.0.1 netinask 255.0.0.0
inet6 ::1 prefíxien 128 scopeid Ox10:riost>
bao txquetielen 1 (Local loophack)
RX packets 318 bytes 26360 (25.7 KiB)
RX errors O dropped O overruns O frame O
TX packets 318 bytes 26360 (25.7 KiB)
TX errors O dropped O overrun O carrier O co11ision; O

.8. 4 4
0: :de4:16b2:. scopei
etitr o8:27:eb:17:a5:7a tAqLuin 1OUO (Ethernet)
RX packets 383432 bytes 37123123 (35.4 Mí8)
RX errors O dropped 112 overruns O frame O
TX packets 63672 bytes 74281998 (70.8 MiB)
IX errors O dropped O overruns O carrier O co1l.isi.n. L

píçraspberrypi:- $ •
4) Descargar e Instalar VNC Viewer: Realizar la descarga de la aplicación para
Windows, MacOS, iOS, Linux o Android desde la página
nttps://www.realvnccom/en/connect/download/viewer/ y acceder usando la
IP identificada en el paso anterior, el usuario "Pl" y la contraseña "ntdr96ae"

ii

¿ignin..
_]

Swipe left for more keys

1234567890

u 1 o p

k 1 ñ

b o m

123

15
o. 0

00

CONTROL BÁSICO DE GPIO (GENERAL PURPOSE


INPUT/OUTPUT).

Control de los GPIO desde Línea de Comando.


—o1 0-06
9 6 90-0 Esta es sin duda la sección de mayor interés para los desarrollos de proyectos de
electrónica, pues bien les agradara saber que Raspberry Pl permite controlar de manera
4
,000
muy flexible sus puertos I/O, pero antes de esto es necesario comprender como se
comporta el sistema operativo en lo que respecta al control de estos GPIO.

Íi Recordemos que Raspberry Pl usa como sistema operativo RASPBIAN, el cual es una
Li o-ol 000 distribución de Linux, que a su vez ha sido desarrollado en base a UNIX, debido a esto
-o '1 000
0-0 6 o
RASPBIAN tratara a todos los elementos como si fueran ficheros o documentos de texto
muy parecidos a los típicos .txt que encontramos en Windows, es decir que el disco duro
será visto como un fichero con dirección algo parecida a "/dev/sda" las tarjetas SD serán
vistas como "/dev/mmcblkü" y por supuesto cada uno de los puertos GPIO serán para
el sistema operativo un simple fichero el cual contendrá información que definirá la
manera en la que comportara cada pín de conexión, es decir se podrá indicar dentro de
este fichero si un pin es entrada/salida o si se encuentra encendido o apagado.
r
6ckr'ark u cls

C:rectsiy Tres

, root
bss class deices fimwa,e
Pun
sbn
seUntx
' Jsrv fs kerreI

block
E-) bus
V JcIass

JbackIght
CU bcm2708.yeo
n3 t>dl
1'ti block
I nbs9

t jdrna
y D çpo
y eJ gpiochipO
' deuice
I jsubsystern
' grapscs

9 i tems

Para programar un GPIO es necesario realizar varios pasos como habilitarlo, definir si
será entrada o salida y por ultimo darle un valor de encendido o apagado.

La forma más básica de controlar un GPIO es mediante líneas de comando que podemos
ingresar desde un terminal para lo cual se pueden emplear comandos básicos de consola
para gestionar ficheros, Por ejemplo, si queremos controlar un LED, podríamos entrar
en la consola y escribir lo siguiente: o_tz.o 0oToo

?óo-oFo—o<> k 0
o-
1¡0-09 ó g
16 <>-~ to
LO°
TJ3
echo 17 > /sys/class/gpio/export ( e ,

Con esta línea se consigue crear un fichero con la estructura GPIO de RASPBIAN para
que podamos controlar el pin 17 del Raspberry PI, luego de esto es necesario indicar si
el GPIO será tipo entrada o salida, para esto podemos usar el comando:
9
echo out > rsys/class/gpio/gpiol7/direction (e'í

En este comando podemos ver que se debido al "echo out", el GPIO ha sido definido
como una salida, por ultimo si queremos encender o apagar lo indicamos con valores O
o 1 con los siguientes comandos:

echo 1 > /sys/class/gpio/gpiol7/value


echo 8 > /sys/class/gpio/gpiol7/value

Una vez terminado este pequeño ejercicio es importante borrar los cambios realizados
en la GPIO usada ya que si abrimos otras GPIO podrían crearse conflictos de memoria,
para esto usamos el comando:

11 echo 17 > /sys/class/gpio/unexport 1 TJU

Llegado este punto hemos logrado controlar de manera efectiva un GPIO en nuestra
Raspberry PI, sin embargo el principal objetivo de este curso es lograr transmitir las
herramientas básicas para desarrollar proyectos de electrónica, pero ¿Qué es lo más
básico?

Desde el punto de vista de muchos, se podría decir que el proyecto más básico de
electrónica es el muy conocido "Parpadeo de Led" que desarrollaremos en la siguiente
sección.

/«(9 51 l~f 1 o,

P K 1,9
« d de U\(,~ Í VO)

(Pv~K«0 ZY 3
-
Taller 1: Parpadeo de LED en Script BASH.
Este pequeño taller buscara elaborar un programa que de manera automática controle
el encendido y apagado de un Led conectado a un GPIO de nuestra Raspberry PI, para
esto nos basaremos en el siguiente esquemático.

Rspbevy £, 3,Model AvI 2


Rv5pbvvyPi2O1

ut

Para este programa crearemos un script para Bash que al ser ejecutado controle el
encendido y apagado el Led conectado al GPIO 17, todo esto sin la necesidad de ingresar
los comandos uno a uno como se realizó en la sección anterior, para esto primero
accederemos al entorno gráfico y crearemos un fichero en blanco con el nombre LED.sh
como podemos ver en las siguientes figuras.
Una vez creado el fichero en blanco procederemos a ingresar el siguiente contenido y lo
guardamos.

lo rieru fLED.sh

1
54
File Edit Search Optiors Help
fr! /b{n/bash
echo 17 > /sys/cbss/gpio/export
echo out > ,'sys/dass/gpio/gpiol7/direction
white true;do
echo 1 > /sys/cl..ass/gpio/gpiol7/vatue
sleep 1.3
echo O > /sys/cl..ass/gpio/gpiol7/vaI.ue
sl.eep 1.3
done

Por último es necesario otorgarle al fichero LED.sh permisos de ejecución ya que se trata
de un programa que controlara el hardware de nuestro Raspberry PI, para esto usamos
el comando ''chmod u+rwx LED.sh".

Archivo Editar Pestañas Ayuda


sudo su
/home/pi cd /homeipi/Desktop/
i tpi:/horne/pi/Deskto pr chmod u-rwx led.sh
ot@pl /home/pi/Desktop . /led. sh $

Si se han realizado correctamente los pasos antes mencionados, el resultado será un


LED que parpadea cada 1.3 segundos.

Por ultimo liberamos el GPIO 17 con el siguiente comando mediante consola:

echo 17 > /sys/class/gpio/unexport


Programación avanzada para Raspberry PI

A lo largo de este curso hemos conocido una pequeña parte del mundo de los
ordenadores de placa unica y logramos desarrollar un programa basico para el control
de un led, sin embargo para el desarrollo de proyectos esto es apenas lo mas basico que
podriamos necesitar, y la realidad es que no hemos logrado explicar todas las
prestaciones del Raspberry PI, entre las que tenemos:

• Visualizacion de multimedia.
• Manejo de puerto UART.
• Puerto PWM para control de Servomotores.
• Puertos SPI e 12C para manejo de perifericos, etc

Y es que para lograr aprovechar estas capacidades del Raspberry Pl es necesario


comenzar a pensar en lenguajes de programación de alto nivel que faciliten el desarrollo
de aplicaciones.

Pet/

,,
d?•_%4I

Pero no tenemos de que preocuparnos ya que gracias a la gran comunidad formada


alrededor de Raspberry PI, en la actualidad existe una gran cantidad de desarrollos para
Python, Basic, Scratch, C++, Java, entre otros, que permiten simplificar en gran manera
la programación de los puertos GPIO y aprovechar al máximo todas sus características,
tanto así que incluso tenemos la opción de realizar nuestros proyectos en el tan famoso
lenguaje C casi como si se tratara de la programación de un microcontrolador con la
ventaja de que se dispone de las prestaciones de un ordenador de placa única en lugar
de una capacidad limitada de memoria como es el caso de muchos microcontroladores.
INTRODUCCIÓN A PROGRAMACIÓN EN PYTHON.

Librerías de Programación Python para Raspberry PI

La versión de Raspaban instalada en pasos anteriores incluye la mayoría de los


componentes necesarios para programar en Python y controlar las GPIO del Raspberry
P13, entre estos componentes tenemos:

• Python 3: Entorno de desarrollo integrado para lenguaje Python


• Thonny IDE: Software IDE con editor de texto que incluye ventana de terminal
para ejecución de programas en lenguaje Python.
• RPi.GPIO: Paquete que permite controlar las GPIO del Raspberry PI para lenguaje
Python.
• Time: Paquefe que incluye control de temporizadores en lenguaje Python.

Es importante aclarar que la librería RPi.GPIO, por tratarse de un dearrollo incompleto,


tiene limitantes, entre los cuales tenemos: &- 3
• Comunicación SPI e 12C no soportada
• Hardware PWM y comunicación Serial no soportada

Debido a que la comunicación serial no está soportada en la librería RPI.GPIO, sera


necesario instalar un paquete diseñado específicamente para controlar el puerto Serial
M Raspberry PI, este paquete se llama PySerial.

Descarga e Instalación de Librerías

Como se explicó en la sección anterior, será necesario instalar la librería PySerial, para
esto ingresaremos a la aplicación Terminal y ejecutaremos el siguiente comando:

pip install pyserial

Archivo Editar Pestñs Avud


pi asp ypi pip i1 oyseria..
Collecting pyserial
Downloading pyserial-3.4-py2.py3-none-any.whl (193kB)
100% 1 194kG 4llkB/s
installing collected packages: pyserial
Successfully installed pyserial-3.4
piraspberrypi:- $ 1

Esperaremos a que termine el proceso de instalación y cerraremos la ventana de


Terminal.
Funciones Disponibles

En este punto del curso, ya se cuenta con el software y librerías necesarios para
G 00
9
01 0-06
programar las GPIO del Raspberry PI en Lenguaje Python por lo que dedicaremos la
g 6 90-0
presente sección a describir las diferentes funciones y como usarlas, entre las principales
0-0
tenemos las siguientes.

0-00-0
RPi.GPIO 0.6.3:
00
6-0 • GPlOsetmode(GPIOBOARD)
0-0
0-01 0 0 0
-0 ' 00-0 Permite configurar la numeración de los PINES del Raspberry PI en el modo BOARD.
0-0 16 o
o
• GPlOsetmode(GPIO.BCM)
0-00
Permite configurar la numeración de los PINES del Raspberry PI en el modo BCM.
• GPIO.getmode()
Devuelve el modo de PINES configurado, la respuesta puede ser GPIO.BOARD,
GPIO.BCM o None
• GPIO.setup(channel, GPIO.lN) -
-~> 1,si
Configura como una entrada al PIN identificado por "channel" lo cual corresponde
a un numero de PIN dependiendo del modo de numeración configurado
(BCM/BOARD)
O
• GPIO.setup(channel, GPIO.OUT) -

Configura como una entrada al PIN identificado por "channel" lo cual corresponde
a un numero de PIN dependiendo del modo de umeración configurado
(BCM/BOARD) O'

• GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH)


Configura el valor inicial de una salida, los 'res pueden ser GPIO.HIGH/1 o
G P10. LOW/O.
• GPIO.input(channel)
Permite leer el valor de una entrada identificada por "channel" dependiendo del
modo de numeración configurado (BCM/BOARD), los valores recibidos pueden ser
O/GPIO.LOW/False o 1/GPI0HIGH/True.
• GPIO.output(channel, state)
Configura el valor de una salida identificada "channel", los valores de "state"
pueden ser O/GPIOLOW/False o 1/GPI0.HIGH/True

Para revisar ejemplos y otras funciones disponibles en RPi.GPIO pueden hacerlo


mediante el siguiente enlace: https://sourceforge.net/p/raspberry-gpio-
pvthon/wiki/BasicUsage/

09
o go
°*ZJ
O 0\Q 0-
:
6°-°°—° 0-

22(30
5€jtj & er c\.

PySerial 3.4: flA'T

• ser = serial.Serial('/dev/ttySO')
Realiza la apertura del puerto serial y lo asigna a la variable 'ser'.
• ser.close()
Cierra el puerto serial, relacionado a la variable 'ser'.
• ser.write(b'hello')
Escribe en el puerto serial la palabra helIo.
• x = ser.read()
Lee un byte desde el puerto serial relacionado a la variable 'ser' y lo almacena en
la variable Y.
• y=ser.read(1O) GlA1:L \'f\
Lee un total de 10 bytes desde el puerto serial y lo almacena en la variable V.
• z = ser.readline() \
Lee de manera continua el puerto serial hasta recibir el carácter de fin de línea
identificado por '\n'

Para revisar ejemplos disponibles en PySerial pueden hacerlo mediante el


siguiente enlace: http://pythonhosted.org/pyserial/index.htmi

o)

P y ÇoOo0o0o0)
%
ERIAL
/ rT c
INTRODUCqÓN A PROGRAMACIÓN EN LENGUAJE C.
c V\ £d
Librerías de Programación en lenguaje cpara Raspberry PI

Para poder programar en lenguaje C en Raspberry PI, es necesario contar con los
siguientes componentes:

• Compilador GCC: Este compilador se encuentra instalado por defecto en el


sistema operativo RASPBIAN y se lo incluye como un componente fundamental
del sistema operativo.
• Geany IDE: Es un Entorno de Desarrollo Integrado que permite la edición de
texto, herramientas de ejecución y ventana de terminal.
/
ti • WiringPl: Librería en lenguaje C para control de puertos GPIO, Serial; PWM, etc
/ del Raspberry Pl.

Descarga e Instalación de Librerías

Para la programación en lenguaje C usaremos la librería WiringPl desarrollada por


Gordon Henderson que podremos encontrar en http://wiringpi.com/, esta librería
permite el control de las GPIO, Puertos Serial, SPI y Puerto 12C que se incluyen como
puertos opcionales en Raspberry PI, además de contar con un desarrollo que permite
enviar una señal PWM útil para el control de servomotores.

Como primer paso deberemos realizar la descarga del paquete de archivos usando el
terminal y ejecutando la siguiente línea de comando:

git done git://git.drogon.net/wiringPi

Archivo Editar Pestañas Ayuda


Pl., ie -
Cloning into 'wiringPi'
remote: Countíng objects: 1151, done.
remote: Compressing objects: 100% (957/957), done.
remote: Total 1151 (delta 804), reused 213 (delta 142)
Receiving objects: 100% (1151/1151), 364.88 KB 1 324.00 KiB/s, done.
Resolving deltas: 100% (804/804), done.
pi@pi:- S 1

ooofe o90
0—.. 0 L0000
0-0X00 1 —ø O
;—
Ió6 0-OI0--O 0--
ITO.09 O
24 0-4
¿
d
Una vez terminada la descarga accedemos al directorio donde se encuentran los
archivos descargados y realizamos un "Build" del paquete descargado usando los
siguientes comandos:

• cd ''/wiringPi
• ./build

Archivo Editar Pestañas Ayuda

pi.-/wirifigPi $ .tbui1.
.ringPi Build script

j-i Library
ninstail]
umpíle) wírinyPi.c
ompile] váirincjSerial.c
ompile] piThread .c
ompile) piHiPri.c
ompile] wirinçjShi.ft .c
ompile] wiringPisPl.c
ompile} wiringPíI2.c
ompile] softPwoi c
ompile] soft Tone c
ompile] mcp23008.c
ompile] mcp23016.c

ringPi.c:1248:21: warning: digítalWrite8Dummy defined but not used [-Wunuset


uI,Ii Ion
zatic void daqitalwrite8Duiniuy (UNU struct wiringPiNodeStruct
1

Por ultimo realizamos la comprobación de que la librería se haya instalado


correctamente con el siguiente comando:

.gpio-v ¿/

Archivo Editar Pestañas Avid

9 io version: 2.44
1

pyright (c) 2012-2017 Gordon Henderson


T is is free software with ABSOLUTELY NO WARRANTY.
Fi r details type: gpio -warranty

spberry Pi Details:
Type: Pi. 3, Revision: 02, Mernory: 1024MB, Maker: Sony
* Devíce tree is enahied,
'--> Raspberry Pi 3 Model 8 Rey 1.2
Thxs Raspberry Pi supports user-level GPIO access.
i:— $ •

O—.s___o o OI000
2\o—O 0 0
0-
1ø60-OIO—O 0-

25
00

NOTA IMPORTANTE: En la sección anterior se pudo identificar 2 modos de referirnos a


los GPIO y estos eran la numeración BCM y la BOARD, en el caso de la librería WiringPl,
se tiene un método adicional para referirse a los GPIO, al cual llamaremos numeración
P—o1 0-0 wPl, para identificar la numeración que debemos usar en la librería WirinPl podemos
6 90-0
usar el siguiente comando:

gpio readali 11/

00

0.0
0-01000
-0 ' Q0-
Archivo Editar Pestañas Ayuda
0-0 16 o
o
Raspberry Pi Detaiis
Type: Pi 3, Revision: 02, Memory: IU4M, Maer: Son.
.' Device tree is enabled.
--' Raspberry Pi 3 Model 8 Rey 1.2
This Raspberry Pi suppores user-level OPIO access.
pipi:— S gpio readail
+ - -Pi3 -.----+
8CM wPi i Name Mode y Physical y 1 Mode 1 Name 1 wPi 8em
+ - --------- -----

3.3v 1 2 5v
21 8 SDA.1 IN - 1 3 4 5V
3 9 SCL.1 IN 1 ¡ 5 6 0v
7 OPIO. 7 1W 1 7 8 0 1W TxD 15 1 14
0v 9 H 10 1 1W RxD 16 j 15
17j O OPIO. O 1W 0 1 11 Íj. 12 0 IN OPIO. 1 1 1 18
27 2 OPtO. 2 1W 0 13 j í 14 1 0v
22 3 OPIO. 3 IN 0 15 11 16 0 1W OPIO. 4 1 4 1 23
3.3v 17 II 18 0 1W OPIO. 5 1 5
10 12 MOSI 1W 0 119 j1 20 1 0v
9 13 MISO IN 0 1 21 11 22 1 0 1W OPIO. 6 1 6 1 25
11 14 SCLK IN O23il24l1 1W CEO 110 18
0v 1 25 11 26 1 1 1W CE1 11 7
o 30 SDA.O IN 1 1 27 H 28 1 1 1W SCL.O 1 31 1 1
5 21 GPI0.21 1W 1 1 29 11 30 0v 1 1
6 22 GPIO.22 1W 1 31 32 0 1W GPI0.26 1 26 1 12
13 23 GPIO.23 IN 0 1 33 11 34 1 0v 1
19 24 GPI0.24 1W 0 1 35 11 36 0 IN (PIO.27 27 16
26 25 GPI0.25 1W 0 j 37 if, 38 0 1W GPIO.28 28 1 20
ç. l39H4010 . IN GPI0.29 29 21
4-- - - - -
-------- --- -
1 8CM i 11,ipl Name MAe y Physical 1 y Mode Name wPi 1 6CM
-
-

pl

', ~j9~ris j u Q~l o


-5
Funciones Disponibles

En este punto del curso, ya se cuenta con el software y librerías necesarios para
programar las GPIO del Raspberry PI en Lenguaje Python por lo que dedicaremos la
presente sección a describir las diferentes funciones y como usarlas, entre las principales
tenemos las siguientes.

WiringPl - GPIO Control:

• void pinMode (mt pm, mt mode)


Configura el 'pm' como entrada o salida dependiendo del valor de 'mode', estos
valores pueden ser INPUT o OUTPUT.
• void pullUpDnControl (mt pm, mt pud)
Configura el modo de resistencia pull-up o pul¡-down en el 'pm' especificado, los
valores de control pueden ser PUD_OFF, (no pul¡ up/down), PUD_DOWN (pul¡ to
ground) or PUD_UP (pull to 3.3v).
• mt digitaiRead (mt pm)
Lee el valor del 'pm' especificado y retorna el valor conseguido (0 o 1).
void digitalWrite (mt pm, mt value)
Escribe el valor 'value' en el 'pm' especificado, estos valores pueden ser HIGH o
LOW lo cual asigna o o 3.3v respectivamente.
• void pwmWrite (mt pm, mt value)
Escribe un valor representado con la variable 'value', en el registro PWM para el
pin especificado por 'pm', el pin con capacidad de control PWM es el pin 1
(BMCGPIO 18) y su rango de trabajo es 0-1024.

WiringPl - Serial Control:


00 /
• mt sermalOpen (char*device, mt baud)
• •

Realiza la apertura del puerto serial a una velocidad especificada por la variable
'baud (9600 tipico)
• void serialClose (int fd)
Cierra el puerto serial identificado por la variable 'fd'
• void serialPutchar (mt fd, unsigned char c) jj- C osXLr\ PtS ti t.L
Escribe un carácter en el puerto serial identificado por la variable 'fd'
• void serialPuts (mt fd, char * s)
scribe una cadena de caracteres identificada por la variable * s
mt seria lDataAvail (mt fd) e4,-~ o~ s~~ti
//o,- f-egbM -)~ YM
etorna el número de caracteres disponible en el buffer serial y que se
encuentran disponibles para ser leidos, si no hay información disponible en el
puerto serial, retorna -1.
• mt serialGetchar (mt fd)
Retorna el siguiente carácter diponibleLen el buffer del puerto serial.
• void seria lFlush (mt fd) 5LaI& 4iQ J\QÁ.QT-LLeJ
Descarta toda la información recibida y almenada en el buffer del puerto serial. o2 Z 000 0 0

ç 00
lo 600 10—O 0—
oJ Oo°0
27

09
tp-oo
oyoo
0
g

ITi ?
TALLER 2. CONTROL DE ENTRADAS/SALIDAS

fr T
e
TALLER 2- PROGRAMACIÓN PYTHON

SECCION 1: Para este ejercicio se programara el PIN BOARD 11/ BCM 17,
para encender y apagar de manera indefinida, se requerirán los siguientes
componentes de hardware:
oo

o Kit Raspberry P13


• 2 Cables de conexión
• Resistencia 2200
• Led
1:
o—' • Protoboard

DIAGRAMA 1— PYTHON

Íli ç 1MocjrI fi

Se procederá a programar en Python respetando la siguiente secuencia


lógica:

1. Importar librerías
2. Declarar modo de PIN (BCM/BOARD)
3. Configurar PIN como Entrada/Salida
4. Declarar variables
S. Crear Lazo de ejecución
6. Programar encendido y apagado periódico de LED

o22.o 09 o
o;5
O-
600 0—O 0-

28j
y
, 1/ ~ ~ 0 r,~ 1 D ~--
PROGRAMA 1- PYTHON

x
)) O1 ±
File Edit View Run Tools Help

uio (0df
blink py'
import RPi.GPIO as GPIO
import time f j t .flQ-&OY)
GPIO.setmode(GPIO.BOARD) -7 4eJ'i
GPIO.setup(11. GPIO.OUT)
gy
c ontO

while(cont40): S€'
PIO.output(11. GPIQ.HIGH)
print ('Led Encendido')
tinie.sleep(1)
GPI0.output(11, GPIO.LOW)
print ('Led Apagado)
time .sleep(1)
cont=cont+1
print ('Fin de Programa)
GPIO .cteonup()

SECCION 2: En esta sección se incluirá una señal de entrada con la cual


determinaremos el inicio y fin del parpadeo del LED, para esto usaremos
una botonera en el PIN BOARD 12/ BCM 18.
qw
DIAGRAMA 2- PYTHON

t: M,yIeU,'

• r
AVA
PROGRAMA 2- PYTHON
Çr

:::¡le Edit View Run Tools Help

+PiH os RER 0
blink.pyx
import RPI.GPIO as GPIO
import time
GPIO .setmode(GPIO .BOARD)
GPIO.setup(11, GPIO.OUT)
GPIO.setup(12, GPIO.IN)

cont=G

while(cont40):
GPIO.output( 11, GPIO.HIGH)
print ("Led Encendido')
time .sleep (1)
GPIO.output(11, GPIO.LOW)
print ("Led Apagado')
time .sl.eep(1)
cont=cont+1
if GPIO.input(12):
print( 'Button HJ(jH)
else:
print( 'Button LOW')

Shell
Led Apagado
ButtOn LOW
Fin de Programa

o± o 00 0
o2 \t?0 ? :

Fó 600
jooO
lo—o
o Q\
o—.
30

TW
PROGRAMACIÓN LENGUAJE C

SECCION 1: Para esta sección de programación no será necesario modificar


las conexiones del LED ni de la botonera, sin embargo ahora realizaremos
la programación mediante Lenguaje C, respetando la misma secuencia
lógica antes indicada.

DIAGRAMA 3— LENGUAJE C

Para esta sección realizaremos la programación del parpadeo de LED y


lectura de Botón en un solo paso, para esto usaremos la librería Wiring Pl
el IDE Geany, el cual tiene soporte para programación en lenguaje C.

Es importante mencionar que la librería Wiring Pl tiene ciertas


características al momento de realizar la compilación las cuales indicamos
a continuación:

• En caso de realizarse la compilación sin un IDE, es necesario ejecutar


los siguientes comandos:

rbvc Editar Pestañas Ayuda

o-Zo 009
1: 0.

9 9"-07 0-0
60-010--O 0-

31
• En caso de realizar la compilación mediante el IDE Geany, es
necesario configurar los parámetros de compilación, para esto
iniciamos el IDE Geany y nos dirigimos a la sección
Construir>Establecer comandos de construcción.

Archo Editar Buscar Ver Documento Proyecto Construir Herramientas Ayuda


-J '1 4% compile F8
uild F9
inoos 1> [t,iinkc x
1 ;.siMclude
ljnt
r.4Pih
9 Funciones #inc1ude stdiovt.>
9mam(4I compilar Mayts+F9
4 int .axn oid) Compilar objeF;o p'rsonaIizado... Mayús+Ctt1+F
6 wiringPiSetup O CompilarQbjetc Mayús+F8
7 pinNode (O. OUTPtIT)
8
9 while (1)
10 {
11 dxgita1Wrte (O. H
12 digitalWrite (O,
13 } Execute F5
14 return O
15
16

• Se abrirá una ventana en la cual buscaremos la sección Comandos de


C, en el numeral 2 llamado Build, escribiremos al final —lwiringPl, con
lo cual nos aseguramos que el comando de compilación tenga la
estructura deseada.

Etiqueta Comanco Dtrectoro de trabajo kenickar


Comandos de C
gcc Wali c 00f
Bulid gcc -WaH-o%e %f -lwuingPt
bnt

Expresión regular de error


cpchcL -c endb=
r

o.o o e o go
o2 \f o:
1 U'
O—
lo 60-010--O 0-
JJo-ogÓgoo..
32
PROGRAMA 3- LENGUAJE C

Archivo Editar Buscar Ver Documento Proyecto Construir Herramientas Ayuda


LX

Símbolos 1?. h!ink.c x 1

FtJCIrtS 1 #include swiringPí.h>


2 4include stdio.h>
cP rnair} [41 .1 3
4 mt main (void)
5 "
6 mt cont=0;
7 wiringPiSetup O;
8 pinMode (0, OUTPUT);
9 pinMode (1, INPUT);
10
11 while (cont<10)
12 m
13 digitalWrite (0, HIGH);
14 printf ("Lcd Encendido\n');
15 delay (1000);
16 digitalWrite (0, 10W);
17 printf ('Led Apaqado\n");
18 delay (1000);
19 contcont+1;
20 if (digitaiRead (1))
21 printf (Boton HIGH\n");
22 else
23 printf (Boton LOW\n');
24 }
25 return O
26 )

1 i gcc -Wall -o "bllnk" "blink.c" -lwiringPi en el directorio: /home/piiueskt:


Compilador La compilación ha terminado con éxito.

Mensajes

línea: 26/26 co 1 se¡, O INS TAB MOD mode: LF codificación- UTF-.

o±Z o
Oo ?o o 90
0_e 9

9 Q•'—o 0-0 0-
106 0-01 0—o 0-
33
o, -
TALLER 3: MANEJO DE PUERTO SERIAL UART Vnw
Antes de trabajar con el puerto Serial del Raspberry P13 es necesario conocerlo lnoco
y los cambios que ha tenido a lo largo .el tiempo, a continuación algunos detalles:
1- JtM&,kjj , ,
1. Raspberry Pl siembre ha contado corYTuertos seri.les identificados en los
registros / Oy el /dev/tty50.t dM
2. El puerto Serial /dev/ttySO en Raspberry P13 viene desactivado por defecto.
puerto Serial /dev/ttySO por defecto muestra la consola del Raspberry P13.
4. El puerto serial /dev/ttyAMAO hasta la versión Raspberry P12, era el único puerto
con pines GPIO disponibles para su uso.
S. A partir de la versión Raspberry P13 se introduce la comunicación mediante
Bluetooth, debido a esto se necesitaba un puerto Serial destinado
específicamente a esta comunicación y se optó por usar el /dev/ttyAMAO lo cual
ocasiono que el puerto /dev/ttySO se convierta en el nuevo puerto serial con
pines GPIO disponibles.

En resumen el uso que les podremos dar a los puertos seriales queda de la siguiente
forma:

/dev/ttyAMAO -> Bluetooth

/dev/ttySO -> GPIO Serial Port (BOARD/8 y BOARD/10)

Con esto presente procederemos a activar el puerto Serial en la siguiente dirección de


configuración: Inicio > Preferencias > Configuración de Raspberry Pl > Interfaces luego
de lo cual será necesario reiniciar el equipo.

Interfaces Rntfimintn 11 iIiiat,jón

Camara:
4
—sactivado
Los cambios realizados requieren que el Raspberry Pi
SH: reinicie, para que tengan efecto. esactivado

esactivado
Desea reiniciar ahora?
3P1: esactívado

2C: esactivado

Señal., Activo Desactivado

Wire: Activo 4) Desactivado


RernoteGPlO: C Activo Desactivado

Cancelar Aceptar
¿5 to 5; ep
J ri
1't
)upe"( UIYJ&
Luego de habilitar el puerto Serial es necesario desactivar el Logging del puerto Consola,
esto lo hacemos ejecutando el siguiente comando:
l ~,t ' ', )

A rchivo Ed i tar Pestañas Ayuda


berrypi: S te
raspberrypi:- S sudo systemctl c15ab1e serial-qettyuttySo.service
Lraspberrypi:. $ U

Por ultimo debemos indicarle al sistema que no envié la información de arranque al


puerto Consola que acabamos de desactivar, para esto necesitamos modificar el archivo
de arranque cmdline.txt, para esto usaremos el software editor de texto llamado nano
que ejecutaremos con la siguiente línea de comando:

Archivo Editar Pestanas Ayuda


U

Una vez dentro del editor de texto, debemos eliminar la sección


"console=seria!O,115200", y luego guardar el archivo modificado presionando Ctrl+X.

Arch
GNU nana 2.7.4 Fichero /boot/cmdline txt


icotg.Ipm enable=O console=serialO, 115200 console=ttyl root=PARTUUiDf9c4eb4e

A A 3ucar A Cortar tt AJ 1ustif1carA Posición


A A Reemplazar A Peqar txt A OrtoqrafíaA Ir a línea

Aparecerá una pantalla solicitando confirmación de guardado y nombre del archivo, se


debe mantener el mismo nombre para que el sistema lo reconozca.

Arçvo cditar Ayuda


GNU nano 2.7.4 Fichero: /boot/cmdline.txt Modificado

otq.lor enable=0 conole:i:'l rootPARTUUIDf9c4e.b4e-02 roo tvpee ie5

Guardar e o? Respon er DESCARTARA os cam

,ancei.ar

Archivo Editar Pestañas Ayuda


GNU nana 2.7.4 Fichero: /boot/cmdline. txt Modificado

:otg. 1pm erabIe=0 conole=tty1 root=PARTUUID=f9c4eb.4o rootfstypeet4 eI

ombre del fichero a esc 'ir: la oot/cmdline.txt


\e r ayuda 1 Format OS • oadir Respald flc°
cancelar Format Mac •Anteponer fLcheros

35
TALLER 3- PROGRAMACIÓN PYTHON

Debido a que cada grupo de trabajo cuenta con un Kit Raspberry P13 y la comunicación
serial se realiza entre un dispositivo emisor y uno receptor, para este ejercicio
interconectaremos las líneas TX y RX del mismo puerto Serial para poder comprobar su
funcionamiento, los pines que debemos interconectar son BOARD/8 y /BOARD10.

0...

Luego de esto procederemos a diseñar y ejecutar un programa que le permita al puerto


Serial Leer y mostrar en pantalla la información recibida:

le Edt View Run Tools Help

!MMO
TESTseriaLpyX
iaport time
iutport serial..

ser = serial .Serial( /dev/ttySø. baudrate=9600)

while (1):
read=ser. readline()
print (read)

if (read= (b'exit\n')):
break

print ("Fin de Programa")I


ser.close()

Shell

» Ld / ptpfl ¿LL
» RunTEST si? r.iai. .rv
b'mensaje con salto de linea \n'
b'exit\n'
Fin de Programa

»
0 90
1ø6 0-OIO—O
O-o
o-
36

09 o/J/Lo-\
Por ultimo necesitaremos diseñar y ejecutar un programa en Python que permita
realizar envió de información mediante el puerto Serial.

!:¡le Edit View Aun Tools Help

+MM O
,
TSTserjy 1 <untitled*X
import time
import serial

ser = serial Serial( '/dev/ttyS0, baudrate=9600)

ser.write(btmensaje con salto de linea \n)


ser.write(bb exit\n*)

Shell

»
»
b'mensaje con salto de linea \n'
b'exit\n'
Fin de Programa

Sin embargo existe una consideración que se debe tener en cuenta, el software ¡DE
Thony nos permitirá ejecutar solo una instancia a la vez por lo que este segundo
programa será ejecutado directamente sobre la línea de comandos de Python, para esto
accedemos a Inicio> Programación > Python 3 (IDLE).

IMPORTANTE: Recordar cerrar el puerto serial con el comando ser.closeO.

Elle Edit Shell Qebug Qptions Wíndow Help


Python 3.5.3 (default, Jan 19 2017, 14:11:04)
[GCC 6.3.0 201701241 on linux
Type "copyright", "credits" or 'tlicenseQ" for more information.
» import time
» import serial
» ser = serial.Serial(t/dev /ttySo*, baudrate=9600)
» ser.write(btmensaje con salto de linea \n')
28
» ser.write(b'exit\n)

Ln: 11 Col: 4

37
TALLER
TALLER 3- PROGRAMACIÓN LENGUAJE C

Para este último ejercicio combinaremos el uso de puertos GPIO con el puerto serial y
no utilizaremos un segundo programa para realizar el envió de la información.

mrr -

Ra!DberfV PT 3 Mode 6 o1.2


RevPOS

u. &It

Archivo Editar Buscar Ver Documento Proyecto Construir Herramientas Ayuda


ip x , ' 19

Símbolos 1> [CEPTORSenaIC.c x


1
Cp Funciones 1 #jnclude <wirinPi.h>
2 Sinclude °wiringSerial.h>
main( 3 linclude cstdio.h>
4
5 mt main (void)
6 13{
7 mt fd;
8 char temp;
9 char mensaje[100);
10
11 wiringPiSetup O;
12 pinMode (1, INPUT);
13 fd=serialOpen ('/dev/tt , 9600);
14
15 while (1)
16 0 (
17 printf( •ii\nESCRIBE EL MENSAJE: );
18 fflush (stdin);
19 gts Leepsj.)..
20
21 printf ('SE ENVIARA: SS, mensaje);
22 serialPuts (fd, mensaje);
23
24 printf ( );
25 delay (100);
26
27 while (seria].DataAvail (fd)>0)
28
29 temp=serialoetchar( fd);
30 printf( , tep);
31
32
if (ditjit.IIRPIri (1))
34 O
35 printf (
36 delay (500);
37 serialCiose (fd);
38 break;
39
40
}
41 return 0;
42
43
ANEXOS
PI: The Main GPIO connectOr
WiringPi Pin 8CM GPIO Name Header ¡[Name 1 8CM GRO — WiringPi P7
in
12 5v
8 Rvl:0 - Rv2:2 $OA 3 4 5v
9 Avi:i - Rv2:3 SCL 5 6 0v
7 4 0P107 7 8 14 15
0v 910 15 16
0 17 GPIOO 11 12 4 GPI01 18 1
2 R0:21 Rv2:27 GPI02 13 14 0v
3 22 GPI03 15 16 GP104 23 4
3.3v 17 18 GPI05 24 5
12 10 MOSI 19 20 0v
13 9 MISO 21 22 GP106 25 6
14 11 SCLK 23 24 CEO 8 10
0v 25 26 CE1 7 11
WiringPi Pin BCM GPIO Name Header Name 8CM GPIO WiringPi Pm

Viri vill =

pusFi buttori 17ULL U


s witc Fi f.ESlSTO

0ut:

ULL POWN pusFi Iuttori


Hl 6 H wheri S?it1 Fi
LOW wFin
ESl STO
switch prssec1 switcFi prsscl
0v oY

S-ar putea să vă placă și