Guía para Manejo de Arduino en Raspberry Por I2C
Guía para Manejo de Arduino en Raspberry Por I2C
Guía para Manejo de Arduino en Raspberry Por I2C
Universidad de pamplona
Villa del Rosario
Norte De Santander
2019
Que es un arduino
Arduino es una plataforma de creación de electrónica de código abierto, la cual está basada en
hardware y software libre, flexible y fácil de utilizar para los creadores y desarrolladores. Esta
plataforma permite crear diferentes tipos de microordenadores de una sola placa a los que la
comunidad de creadores puede darles diferentes tipos de uso.
El software libre son los programas informáticos cuyo código es accesible por cualquiera para que
quien quiera pueda utilizarlo y modificarlo. Arduino ofrece la plataforma Arduino IDE (Entorno de
Desarrollo Integrado), que es un entorno de programación con el que cualquiera puede crear
aplicaciones para las placas Arduino, de manera que se les puede dar todo tipo de utilidades.
El proyecto nació en 2003, cuando varios estudiantes del Instituto de Diseño Interactivo de Ivrea,
Italia, con el fin de facilitar el acceso y uso de la electrónico y programación. Lo hicieron para que
los estudiantes de electrónica tuviesen una alternativa más económica a las populares BASIC
Stamp, unas placas que por aquel entonces valían más de cien dólares, y que no todos se podían
permitir.
El resultado fue Arduino, una placa con todos los elementos necesarios para conectar periféricos a
las entradas y salidas de un microcontrolador, y que puede ser programada tanto en Windows como
macOS y GNU/Linux. Un proyecto que promueve la filosofía 'learning by doing', que viene a
querer decir que la mejor manera de aprender es cacharreando.
Ventajas y desventajas
Conexión
Los puertos I2C de la Raspberry Pi ya incluyen resistencias Pull-Up de 1.8K. En el Arduino Mega son los
puertos 20 (SDA) y 21 (SCL). Además, las placas deben compartir alimentación y tierra. Al tener
alimentaciones distintas se mantienen separadas. Las conexiones quedan de esta forma:
A continuación, vamos a configurar la placa Raspberry Pi para usar sus dos puertos I2C. En primer lugar,
instalamos el paquete con el siguiente comando i2c-tools:
Después añadimos el módulo para que se cargue con el kernel, añadiendo “i2c-dev” al
fichero /etc/modules-load.d/raspberrypi.conf
Si todo funciona correctamente. Proseguimos a probar enviando una señal de la Raspberry al Arduino y
que este la devuelva.
Se crea un programa que reciba un número por el puerto I2C y lo reenvié. Además, si el número es el 1
encenderá o apagará el LED que tiene integrado en la placa.
#include <Wire.h>
int number = 0;
int state = 0;
// configuración inicial
void setup () {
pinMode (13, OUTPUT);
// inicializamos i2c como esclavo
Wire.begin(SLAVE_ADDRESS);
// llamadas para la comunicación
Wire.onReceive(receiveData);
Wire.onRequest(sendData);
}
Este programa escrito en C se conectará con la placa Arduino Mega mediante el protocolo I2C, enviará
un 1 e imprimirá por pantalla la respuesta que reciba del Arduino.
#include <stdio.h>
#include <stdlib.h> // exit
#include <fcntl.h> // open modo O_RDWR
#include <linux/i2c-dev.h>
int main () {
int file;
unsigned char cmd [16];
int enviado = 1;
char buff [1];
int recibido;
1 > ./i2c
2 I2C: Conectando...
3 I2C: Accediendo al dispositivo
4 Enviado 1
5 Recibido 1
6 I2C: Terminando..
Cada vez que ejecutamos el programa desde la Raspberry Pi, el LED integrado en el Arduino Mega
se enciende o apaga correctamente.
Detectando de nuevo las conexiones I2C vemos que el Arduino está correctamente conectado en el
puerto 4.
> i2cdetect -y 0
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- 04 -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --