In deze tutorial zullen we zien hoe het gebruik van de seriële poort op de Raspberry Pi. Wij zullen de seriële poort beschikbaar op framboos met een RS232/TTL 3-5, 5V adapter en USB-serial adaptergebruiken. De Raspberry Pi's seriële poort is standaard zo geconfigureerd dat in dat geval worden gebruikt voor de console input/output. Dit kan helpen problemen op te lossen tijdens het opstarten of inloggen op de Pi, als de video- en zijn niet beschikbaar.
Om te kunnen gebruik maken van de seriële poort te verbinden en praat met andere apparaten (bijvoorbeeld een modem een printer...), moet de seriële poort console-aanmelding worden uitgeschakeld.
Hier gebruiken we de Raspberry Pi 2 en we verbinden met een RS232/TTL 3-5, 5V adapter pinnen 4 (5V), 6 (GND), 8 (TX), 10 (RX) van Raspberry, sluit uiteraard tx met rx en vice versa.
Om te zoeken naar beschikbare seriële poorten gebruiken we het commando
dmesg | grep tty
De uitvoer is zoiets
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 ~ $
Laatste regel geeft aan dat de console is ingeschakeld op de seriële poort ttyAMA0, zodat wij het onbruikbaar maken
Voer de configuratieopdracht en volg de instructies hieronder
sudo raspi-config
Reboot en probeer met
dmesg | grep tty
uitvoer is nu
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 ~ $
Nu kunnen we de seriële ttyAMA0 gebruiken. Wij verbinden een adapter usb / serieel, dan zullen we proberen om een communicatie tussen de twee seriële poorten; uiteraard in een praktische toepassing aan elke serial kon wij verbinden een apparaat, bijvoorbeeld een modem, een printer een RFID-lezer enz.
Na het aansluiten van de tweede seriële poort lanceren we de opdracht om de naam die Raspberry hem geeft te vinden
dmesg | grep tty
De uitvoer is zoiets
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, nu maken we twee bestanden, een die iets schrijft over de ttyAMA0 poort en de andere die op de ttyUSB0-poort leest.
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
Als we beide bestanden lopen, zal serial_read.py lezen wat serial_write.py schrijft
Dit is slechts een klein voorbeeld, maar het kan dienen als uitgangspunt voor het verzenden van een afdruk op een oude printer of gegevens lezen van een router of een gps.
Volg ons op sociale op de hoogte blijven.
http://www.emmeshop.EU