◆ 라즈베리파이4 에는 모두 6개의 uart 포트가 있다.
◆ 확인 하기
$ dtoverlay -a | grep uart
0번부터 5번까지.
UART0 의 경우 Debug Console 로 사용되고
UART1 의 경우 Bluetooth 에 연결되어있다.
Bluetooth 를 끄면 6개를 사용할수 있다.
◆ 기본으로 uart 는 1개만 활성화되어있다.
모든 UART 포트를 활성화 하기위해서는 /boot/config.txt를 열어서 추가한다.
$ sudo nano /boot/config.txt
dtoverlay=uart1
dtoverlay=uart2
dtoverlay=uart3
dtoverlay=uart4
dtoverlay=uart5
◆ UART 포트를 확인
$ dmesg | grep tty
ttyAMA0 ~ ttyAMA4 및 ttyS0
총 6개의 UART가 활성화되어 있다.
ttyAMA0 의 경우에는 Bluetooth 용이라 사용불가 X -> (블루투스 기능 꺼서 사용은 가능함)
■ 텍스트 송신과 수신
<송신하기>
$ echo "Hello, world" > /dev/ttyUSB0
<수신하기>
$ cat /dev/ttyUSB0
▶ Serial Port는 Primary UART입니다. Primary UART는 실제 디바이스 노드를 /dev/serial0로 Symbolic Link 하게 된다.
▶ /dev/ttyUSB0와 동일하게 사용할 수 있다.
▶ 라즈베리 파이 4에서는 /dev/ttyS0가 Symbolic Link 된다.
▶ 라즈베리 파이 4에서 다음 두 가지는 동일한 동작이다.
$ echo "Hello, world" > /dev/serial0
$ echo "Hello, world" > /dev/ttyS0
--->>> 예제 : 데이터 송신 UART_Transmitter.py <<<---------------------------------
import RPi.GPIO as GPIO
import serial
ser = serial.Serial('/dev/serial0', 115200)
ser.close()
ser.open()
str = b'Python Serial Example\r\n'
n = ser.write(str)
try:
while True:
if ser.readable():
response = ser.readline()
ser.write(response)
print(response)
except KeyboardInterrupt:
pass
finally:
ser.close()
---------------------------------------------------------------------------------------------
--->>> 예제 : 데이터 수신 UART_Receiver_LED.py <<<-----------------------------------------
import RPi.GPIO as GPIO
import serial
LED=4
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED, GPIO.OUT)
ser = serial.Serial('/dev/serial0', 115200)
ser.close()
ser.open()
str = b'Serial LED Control\r\n'
n = ser.write(str)
try:
while True:
if ser.readable():
response = ser.readline()
if response == b'ON\r\n':
GPIO.output(LED, True)
elif response == b'OFF\r\n':
GPIO.output(LED, False)