En este tutorial veremos cómo utilizar el puerto serie en Raspberry Pi. Utilizaremos el puerto serie disponible en frambuesa con un 3-5, 5V adaptador de RS232/TTL y un adaptador USB-serial. Por defecto puerto serial de la Raspberry Pi está configurado para ser usado en la consola de entrada/salida. Esto puede ayudar a solucionar problemas durante el arranque, o para iniciar sesión el Pi si no dispone de la red y video.
Para poder utilizar el puerto serie para conectar y hablar con otros dispositivos (por ejemplo, un módem de una impresora...), el inicio de sesión de consola de puerto serie debe deshabilitarse.
Aquí utilizamos frambuesa Pi 2 y conectamos un RS232/TTL 5V adaptador de corriente 3-5, a los pines 4 (5V), 6 (GND), 8 (TX), 10 (RX) de frambuesa, obviamente conectar tx rx y viceversa.
Para buscar los puertos serie disponibles utilizamos el comando
dmesg | grep tty
La salida es algo como esto
PI ~ $ pi ~ $ dmesg | grep tty [ 0.000000] Kernel command line: dma.dmachans=0x7f35 bcm2708_fb.fbwidth=656 bcm2708_fb.fbheight=416 bcm2709.boardrev=0xa01041 bcm2709.serial=0x93f9c7f9 smsc95xx.macaddr=B8:27:EB:F9:C7:F9 bcm2708_fb.fbswap=1 bcm2709.disk_led_gpio=47 bcm2709.disk_led_active_low=0 sdhci-bcm2708.emmc_clock_freq=250000000 vc_mem.mem_base=0x3dc00000 vc_mem.mem_size=0x3f000000 dwc_otg.lpm_enable=0 console=tty1 console=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait [ 0.001774] console [tty1] enabled [ 0.749509] dev:f1: ttyAMA0 at MMIO 0x3f201000 (irq = 83, base_baud = 0) is a PL011 rev3 [ 1.268971] console [ttyAMA0] enabled pi ~ $
Última línea indica que la consola está habilitada en el puerto serie ttyAMA0, así que lo deshabilitamos
Ejecute el comando de configuración y siga las instrucciones siguientes
sudo raspi-config
Reiniciar y probar con
dmesg | grep tty
salida ahora es
PI ~ $ pi ~ $ dmesg | grep tty [ 0.000000] Kernel command line: dma.dmachans=0x7f35 bcm2708_fb.fbwidth=656 bcm2708_fb.fbheight=416 bcm2709.boardrev=0xa01041 bcm2709.serial=0x93f9c7f9 smsc95xx.macaddr=B8:27:EB:F9:C7:F9 bcm2708_fb.fbswap=1 bcm2709.disk_led_gpio=47 bcm2709.disk_led_active_low=0 sdhci-bcm2708.emmc_clock_freq=250000000 vc_mem.mem_base=0x3dc00000 vc_mem.mem_size=0x3f000000 dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait [ 0.001769] console [tty1] enabled [ 0.749438] dev:f1: ttyAMA0 at MMIO 0x3f201000 (irq = 83, base_baud = 0) is a PL011 rev3 pi ~ $
Ahora podemos usar el serial ttyAMA0. Conectar un adaptador usb / serial, entonces vamos a intentar establecer una comunicación entre los dos puertos serie; obviamente en una aplicación práctica a cada serie podríamos conectar un dispositivo, por ejemplo un módem, una impresora, un lector RFID etc..
Después de conectar el segundo puerto serial ejecutamos el comando para encontrar el nombre que le da la frambuesa
dmesg | grep tty
La salida es algo como esto
PI ~ $ pi ~ $ dmesg | grep tty [ 0.000000] Kernel command line: dma.dmachans=0x7f35 bcm2708_fb.fbwidth=656 bcm2708_fb.fbheight=416 bcm2709.boardrev=0xa01041 bcm2709.serial=0x93f9c7f9 smsc95xx.macaddr=B8:27:EB:F9:C7:F9 bcm2708_fb.fbswap=1 bcm2709.disk_led_gpio=47 bcm2709.disk_led_active_low=0 sdhci-bcm2708.emmc_clock_freq=250000000 vc_mem.mem_base=0x3dc00000 vc_mem.mem_size=0x3f000000 dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait [ 0.001769] console [tty1] enabled [ 0.749438] dev:f1: ttyAMA0 at MMIO 0x3f201000 (irq = 83, base_baud = 0) is a PL011 rev3 [ 971.919417] usb 1-1.2: pl2303 converter now attached to ttyUSB0 pi ~ $
OK, ahora creamos dos archivos, uno que escribe algo en el puerto de ttyAMA0 y el otro que lee en el puerto ttyUSB0.
serial_write.py
#!/usr/bin/env python import time import serial ser = serial.Serial( port='/dev/ttyAMA0', baudrate = 9600, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1 ) counter=0 while 1: ser.write('Write counter: %d \n'%(counter)) time.sleep(1) counter += 1
serial_read.py
#!/usr/bin/env python import time import serial ser = serial.Serial( port='/dev/ttyUSB0', baudrate = 9600, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1 ) counter=0 while 1: x=ser.readline() print x
Si corremos ambos archivos, serial_read.py va a leer lo que serial_write.py escribe
Esto es sólo un pequeño ejemplo pero puede servir como punto de partida para enviar una impresión a una impresora vieja o leer datos de un router o un gps.
Síguenos en social para mantenerse informado.
http://www.emmeshop.eu