En este tutorial se aprende a enviar datos desde un Arduino a una Raspberry Pi.
Para la comunicación utilizamos un cable USB. Podría ser el cable USB que se utiliza para conectar el Arduino a su PC o portátil.
Pero en este tutorial se conecta la Raspberry Pi en lugar del PC o portátil.
Cómo enviar datos de un Arduino a un Rasperry Pi
La conexión por cable es excelente para tener una primera impresión de cómo dos sistemas diferentes como el Arduino como microcontrolador y el Raspberry Pi como una computadora de placa única (SBC) pueden trabajar juntos. Si también está interesado en las diferencias entre Arduino y Raspberry Pi, eche un vistazo a este artículo donde encontrará una buena descripción general.
No obstante, la conexión por cable no funciona en mi IoT en vivo diario, ya que estoy usando los microcontroladores basados en Arduino o ESP8266 como satélites en mi casa, donde en el centro está la Raspberry Pi en un rack de servidor. Como no tengo cables USB en mis paredes, por supuesto que uso una conexión WiFi. Si también prefiere una conexión inalámbrica, encontrará el tutorial aquí.
Conexión entre Arduino y Rasperry Pi para comunicación en serie
Como se mencionó anteriormente, estamos usando un cable USB para la comunicación de Arduino a Raspberry Pi. Ahora hablemos sobre la alimentación de Raspberry Pi y Arduino. La fuente de alimentación del Pi no está limitada por la comunicación en serie. Podemos alimentar la Raspberry Pi como de costumbre desde el puerto micro USB en el lateral del dispositivo. Pero en el caso del Arduino, la conexión del cable USB está bloqueada por la conexión a la Raspberry Pi. Entonces, ¿qué debemos hacer?
En general, necesitamos diferenciar entre dos casos de uso.
- La Raspberry Pi se conecta a través de USB a una PC o computadora portátil.
En este caso, necesita encontrar otra fuente de alimentación para Arduino, ya que la PC o computadora portátil no puede suministrar tanto la Raspberry Pi (~ 700mA / 5volt) como la Arduino (~ 40-50mA / 5volt). También fue mi primera idea y probé esta posibilidad, pero la fuente de alimentación de la Raspberry Pi falló y la Pi se apagó. Es bueno saber que existen otras dos posibilidades para ahorrar energía como puedes leer en los diferentes artículos sobre el microcontrolador: Arduino Mega, Arduino Uno, Arduino Nano.
Si está utilizando Arduino Uno, estamos utilizando la toma de corriente DC Barrel. - Si la Raspberry Pi está conectada a través de USB directamente a la toma
que puede usar la fuente de alimentación a través de la conexión USB a la Raspberry Pi para alimentar tanto la Pi como el Arduino.
La siguiente tabla le brinda una descripción general de todos los componentes y partes que utilicé para este tutorial, pero solo necesita una Raspberry Pi y un sensor de temperatura y humedad DHT. Recibo comisiones por compras realizadas a través de los enlaces de esta tabla.
Operating Voltage | 3.3V | 5V |
---|---|---|
Arduino Uno | Amazon | AliExpress |
Kit Raspberry Pi 4 modelo B | Amazon | AliExpress |
Raspberry Pi 4 Modelo B | Amazon | AliExpress |
Kit Raspberry Pi 3 B + | Amazon | AliExpress |
Raspberry Pi 3 B+ Motherboard | Amazon | AliExpress |
Módulo DHT22 | Amazon | AliExpress |
Módulo DHT11 | Amazon | AliExpress |
Cableado entre Arduino y Rasperry Pi para comunicación en serie
En las siguientes dos imágenes, verá la conexión si desea conectar la Raspberry Pi a la computadora portátil o PC o si conecta la Raspberry Pi a una toma de corriente.
Configure la comunicación en serie de Arduino a Raspberry Pi si Raspberry Pi está conectado a través de USB a una PC o computadora portátil
Configure la comunicación en serie de Arduino a Raspberry Pi si Raspberry Pi está conectado a través de USB a la toma
Ahora queremos hacer un pequeño ejemplo de comunicación serial de Arduino a Raspberry Pi. Queremos enviar la temperatura y humedad de un sensor DHT11 desde el Arduino Uno a la Raspberry Pi a través de la conexión USB. La Raspberry Pi debería imprimir la temperatura y la humedad en el terminal.
Configuración de Arduino para comunicación en serie
Queremos comenzar con la configuración de Arduino. Primero necesitamos conectar el sensor DHT11 al pin digital 7 del Arduino Uno, así como a la alimentación y a tierra.
El guión es bastante sencillo. Si desea saber más sobre los sensores de temperatura, escribí un artículo completo que le brinda información detallada sobre los diferentes sensores.
#include "DHT.h" #define DHT11PIN 7 // define the digital I/O pin #define DHT11TYPE DHT11 // DHT 11 DHT dht11(DHT11PIN, DHT11TYPE); void setup() { Serial.begin(9600); dht11.begin(); } void loop() { float h11 = dht11.readHumidity(); float t11 = dht11.readTemperature(); Serial.print("Temperature = "); Serial.print(t11 + 273.15); Serial.println(" Kelvin"); Serial.print("Humidity = "); Serial.print(h11); Serial.println(" %"); delay(1000); }
Es importante que el mensaje que queremos enviar a la Raspberry Pi esté impreso en el número de serie porque si está impreso en el número de serie también se envía vía USB. El monitor serial Arduino IDE muestra la salida. Todo va bien.
En la siguiente parte, configuramos la Raspberry Pi para recibir temperatura y humanidad del Arduino.
Configuración de Rasperry Pie para comunicación en serie
Mi Raspberry Pi tiene una configuración estándar con el sistema operativo Raspbian Buster. Si desea saber cómo configurar la Pi realmente rápido y sin un monitor, mouse o teclado, consulte mi tutorial paso a paso para configurar la Raspberry Pi sin cabeza.
Ahora todo está listo y podemos ir a la parte de programación de la Raspberry Pi. Como queremos crear el código con python y también queremos mostrar el código usando un script de python, necesitamos instalar dos bibliotecas. Ejecute los siguientes dos comandos en la terminal:
- sudo apt-get install python-serial
- sudo pip instalar pyserial
En mi caso, python-serial y pyserial ya estaban instalados. Debido a que no sé cómo está configurada su Raspberry, no omita este paso y asegúrese de que su script se ejecute.
Dado que hay diferentes puertos USB en la Raspberry Pi, necesitamos saber a qué dirección de serie está conectado el Arduino. A partir de ahora, conecte el Arduino a través de USB a la Raspberry Pi.
La dirección de serie se almacena en la siguiente carpeta / dev. El adaptador de puerto serie USB se llama ttyUSB0, ttyUSB1 y así sucesivamente o ttyACM0, ttyACM1 y así sucesivamente. Por lo tanto, tenemos que buscar una conexión en serie de este tipo.
Ingrese a la carpeta escribiendo ls / dev / tty * en la terminal.
En mi caso, encontré la conexión serial con el nombre / dev / ttyACM0. Copie o escriba su nombre para la conexión en serie, ya que estamos usando el nombre en el siguiente código de programa.
Ahora queremos crear el código del programa. Debido a que el código es muy corto, creamos el archivo python directamente en la Raspberry Pi. Crea el archivo con nano arduino_communication.py.
Ahora, el editor de texto nano abre un archivo de Python vacío llamado arduino_communication. El guión es el siguiente:
import serial ser = serial.Serial('/dev/ttyACM0',9600) while True: read_serial=ser.readline() print(read_serial)
Primero importamos la biblioteca serial. En la segunda línea, guardamos la conexión del puerto serie en la variable ser. Aquí debe insertar su dirección de serie con la velocidad en baudios. En mi caso, la dirección de serie es
/ dev / ttyACM0 y la velocidad en baudios es 9600 del boceto de Arduino.
Luego entramos en un bucle sin fin y leemos los datos del puerto serie e imprimimos los datos en el terminal.
Haga clic en Ctrl + X, luego en Y para confirmar el guardado y presione el botón Enter para guardar en el archivo existente.
Inicie el script de Python desde la terminal con python arduino_communication.py. Ahora debería ver la temperatura y la humedad del DHT11 transferidas a través de la comunicación serial USB y Arduino.
Puede finalizar el script haciendo clic en Ctrl + C.
Conclusión
En este tutorial, hemos aprendido cómo usar la comunicación USB serial de Arduino a Raspberry Pi para enviar datos desde Arduino a Raspberry Pi. También existe la opción de enviar datos a través de WiFi y el protocolo de transporte MQTT. Si está interesado en la conexión inalámbrica para enviar datos, encontrará el artículo aquí.
Si tiene problemas de conexión en serie o preguntas con respecto a este tutorial, no dude en utilizar la sección de comentarios a continuación para hacer sus preguntas.