Processor

【라즈베리파이】 wiringPi Python : UART 송신과 수신

작성자 임베디드코리아 작성일26-02-20 00:46 조회83회 댓글0건
◆ 라즈베리파이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)
           
            print(response)
except KeyboardInterrupt:
    pass
finally:
    ser.close()