라즈베리파이 파이선 프로그래밍 18 – Raspberry Pi의 TTL 포트에서 직렬 UART 통신
이전 튜토리얼에서 우리는 Raspberry Pi에서 사용할 수 있는 직렬 통신 프로토콜에 대해 논의했습니다. 우리는 데이터 통신의 용어에 대해 논의하고 '포트', '버스', '인터페이스', '프로토콜' 및 '표준'과 같은 용어를 정의했습니다. 우리는 Raspberry Pi의 UART와 이러한 UART가 Raspberry Pi의 다른 인터페이스와 포트를 통해 액세스 될 때 다른 직렬 Linux 장치 이름에서 참조되는 방식에 대해 이야기했습니다. Raspberry Pi의 직렬 포트는 임베디드 전자 장치와 통신할 때 가장 유용한 인터페이스입니다. 이 튜토리얼에서는 Raspberry Pi의 직렬 포트를 사용하여 직렬 UART 통신을 구현하는 방법에 대해 설명합니다. 그런 다음 이를 사용하여 Raspberry Pi와 개인용 컴퓨터(PC) 간의 양방향 통신을 설정합니다.
UART 프로토콜
임베디드 전자 장치에서 데이터를 교환하기 위한 회로를 상호 연결하는 것이 가장 중요합니다. 이 데이터 통신은 일반적으로 직렬 통신을 통해 이루어집니다. 수백 가지의 직렬 통신 프로토콜이 있으며 이러한 모든 프로토콜은 데이터를 교환하기 위해 최소한 하나의 와이어가 필요하지만 4개 이하의 와이어는 필요하지 않습니다. UART 프로토콜은 모든 플랫폼(범용 컴퓨터, 임베디드 전자 장치, 네트워킹 등)에서 널리 사용되는 가장 일반적인 직렬 통신 프로토콜입니다. 기본적으로 모든 장치에서 찾을 수 있는 하나의 통신 프로토콜입니다. UART는 너무 일반적이어서 기술자가 '직렬'이라고 말할 때마다 실제로 UART를 의미합니다.
UART는 기본적으로 직렬 통신 프로토콜입니다. 이 프로토콜을 사용하여 직렬 통신을 가능하게 하려면 UART(Universal Asynchronous Receiver/Transmitter)라는 회로가 필요합니다. 독립형 IC로서의 UART도 사용할 수 있습니다. 그러나 UART는 대부분 마이크로컨트롤러 칩과 임베디드 프로세서 내부에 통합되어 있습니다. 마찬가지로 Raspberry Pi 3B에는 2개의 UART가 있고 4B에는 Broadcom SoC에 6개의 UART가 있습니다. 대부분의 Arduino 보드에는 UART가 하나만 있습니다.
많은 마이크로컨트롤러와 임베디드 프로세서도 소프트웨어 UART를 구현할 수 있습니다. 이 경우 실제 UART 회로가 통합되거나 직렬 통신에 사용되지 않고 대신 비트 뱅잉으로 프로토콜을 모방합니다. 소프트웨어 UART(소프트웨어 직렬) 통신은 종종 프로세서 집약적이며 실제 UART만큼 정확하지 않습니다.
비트 뱅잉(Bit Banging)이란 데이터 통신을 전용 하드웨어를 사용하지 않고 소프트웨어로 처리하는 것을 말한다. 말 그대로 데이터 통신의 Bit 데이터를 Bang한다는 뜻이다. 동기 통신인 SPI, I2C는 타이밍에 대한 고려가 필요 없기 때문에 GPIO로 쉽게 구현할 수 있고 실제로 비트 뱅잉으로 많이 사용한다. 하지만, 비동기 통신인 UART는 타이밍을 생각해야 하기 때문에 조금 까다롭다. 아두이노(Arduino)의 SoftwareSerial 라이브러리는 UART를 타이머, 인터럽터와 GPIO를 사용하여 구현되어 있다. 표준이 아닌 시리얼 통신 방식은 전용 통신 IC가 없기 때문에 FPGA로 구현하던지 아니면 MCU에서 비트 뱅잉으로 소프트웨어로 구현한다. 비트 뱅잉은 모터의 앱솔루트 엔코더의 통신 등에 사용되기도 한다. 출처: https://article2.tistory.com/338 [백과사전]
UART는 직렬 통신 프로토콜이므로 실제로 두 장치 간의 버스를 통해 데이터를 인코딩 및 디코딩해야 하는 방법을 지정합니다. 비동기식 통신 프로토콜이며 두 장치 간에 클럭 신호(공통)를 사용하지 않습니다. 이 프로토콜을 사용하는 인터페이스에 따라 반이중 및 전이중으로 구현할 수 있습니다. UART의 직렬 통신은 점대점(피어) 유형이며 버스에 두 개의 전선만 있으면 됩니다.
UART 데이터 인코딩
UART 프로토콜에서 데이터는 패킷 packet 또는 비트 프레임으로 전송됩니다. 프레임/패킷은 데이터 청크와 동기화 비트로 구성됩니다.
데이터 청크 – 공유할 실제 데이터의 일부인 비트를 데이터 청크 또는 데이터 비트 패킷이라고 합니다. 데이터 청크에는 5~9비트가 있을 수 있습니다. 그러나 8비트 또는 바이트는 데이터 청크의 일반적인 크기입니다.
동기화 비트 – UART는 통신 장치 간에 클록 신호를 사용하지 않으므로 다른 비트는 실제 데이터 청크를 따라 전송되어 데이터 동기화를 활성화합니다. 분명히 이러한 비트를 동기화 비트라고 합니다. 여기에는 시작 비트, 정지 비트 및 패리티 비트가 포함됩니다.
- 시작 비트 – 이 비트는 직렬 통신이 시작되었음을 나타냅니다. 이 비트는 항상 LOW입니다. 따라서 HIGH에서 LOW로의 전환은 각 데이터 프레임/패킷의 시작을 나타냅니다. 데이터 청크는 시작 비트를 따릅니다.
- 정지 비트 – 정지 비트가 하나 또는 두 개 있을 수 있습니다. 정지 비트는 항상 HIGH입니다. 데이터 패킷/프레임의 끝을 나타냅니다.
- 패리티 비트 – 패리티 검사는 낮은 수준의 오류 처리 방법입니다. 패리티 비트는 데이터 청크의 정확성을 보장하기 위해 데이터 프레임에 포함될 수 있는 선택적 정지 비트입니다. 패리티는 짝수(0) 또는 홀수(1) 일 수 있습니다. 패리티가 0으로 설정되면 데이터 패킷이 오류 없이 전송되면 데이터 청크의 비트와 패리티 비트의 합이 0이 됩니다. 패리티가 1로 설정되면 데이터 패킷이 오류 없이 전송되면 데이터 청크의 비트와 패리티 비트의 합이 0이 됩니다. 패리티 비트를 사용하면 전송 속도가 약간 느려지지만 UART 통신을 통해 오류를 처리하는 유일한 메커니즘입니다. 패리티 비트는 데이터 청크 직후의 데이터 프레임에 포함됩니다.
전송 속도 - Baud rate는 두 장치 간의 데이터 전송 속도입니다. 데이터를 직렬로 통신하는 두 장치는 전송 속도가 동일해야 합니다. 초당 비트 수(bps)로 표시됩니다. 일반적인 전송 속도는 9600bps, 1200 bps, 2400 bps, 4800 bps, 14400 bps, 19200 bps, 28800 bps, 38400 bps, 570600 bps 및 115입니다. 전송 속도는 또한 버스에서 비트 길이를 나타냅니다. 예를 들어 전송 속도가 9600이면 1초에 9600비트가 버스를 통해 전송됨을 의미합니다. 따라서 각 비트의 너비는 104.166 마이크로초이므로 두 장치의 비트 샘플링이어야 합니다. 대부분의 마이크로컨트롤러와 임베디드 프로세서는 115200 bps보다 높은 전송 속도를 처리할 수 없습니다. 보드 속도가 장치(마이크로컨트롤러/프로세서와 같은) 자체가 클럭되는 클럭에 비해 너무 높으면.
Endianness – Endianness는 데이터 청크의 비트 순서, 즉 데이터 청크가 LSB(Least Significant Bit)에서 MSB(Most Significant Bit)로 또는 그 반대로 전송되는지 여부를 나타냅니다. 데이터는 일반적으로 LSB가 먼저 전송됩니다.
UART 전압 레벨
UART 회로는 두 가지 전압 레벨을 사용합니다. 한 전압은 비트 0을 나타내고 다른 전압은 비트 1을 나타냅니다. 0과 1을 나타내는 신호 레벨은 장치 또는 인터페이스에 따라 다릅니다. Arduino와 같은 5V TTL 장치는 비트 0으로 5V를 사용하고 비트 1로 5V를 사용합니다. Raspberry Pi와 같은 3.3V TTL 장치는 비트 0으로 0V를 사용하고 비트 1로 3.3V를 사용합니다. 일부 장치는 비트 0으로 0V 및 비트로 1.8V를 사용할 수 있습니다. 1. RS-232 직렬 인터페이스(포트)는 논리 비트에 대해 -15V ~ 15V 범위의 양 및 음 전압을 사용합니다. RS-232 포트에서 양의 전압은 비트 0을 나타내고 음의 전압은 비트 1을 나타냅니다.
두 장치가 직렬로 연결된 경우 UART 전압 레벨이 동일해야 합니다. 두 장치의 UART 전압 레벨이 다른 경우 적절한 브리지 보드 또는 어댑터를 사용하여 상호 연결해야 합니다. 예를 들어 Raspberry Pi는 3.3V TTL 장치이고 Arduino는 5V TTL 장치입니다. 따라서 두 장치를 직렬로 연결하려면 적절한 3.3V TTL ~ 5V TTL 어댑터를 사용해야 합니다. Raspberry Pi의 직렬 TTL 포트를 Arduino의 직렬 TTL 포트에 직접 연결하면 Raspberry Pi의 직렬 포트가 손상될 수 있습니다. 마찬가지로 Raspberry Pi의 직렬 TTL 포트를 장치의 RS-232 포트(-15V ~ 15V)에 연결해야 하는 경우 적합한 직렬 RS-232 변환기를 사용해야 합니다. Raspberry Pi의 직렬 TTL 포트를 장치의 USB 포트(5V)에 연결해야 하는 경우 적절한 직렬 USB 변환기를 사용해야 합니다.
UART 프로토콜 작동 방식
UART 프로토콜을 통한 직렬 통신의 경우 두 장치의 UART 전압 수준이 동일하거나 해당 직렬 포트가 적절한 브리지 보드 또는 전압 어댑터를 사용하여 서로 연결되어야 합니다. 한 장치의 송신기는 다른 장치의 수신기에 연결되고 수신기는 다른 장치의 송신기에 연결됩니다. 두 장치는 공통 전송 속도, 데이터 청크 크기 및 패리티 비트 사용을 사용하여 데이터 통신을 결정해야 합니다. 두 장치 간에 공유되는 UART 프로토콜은 다음과 같이 요약할 수 있습니다.
<전송 속도> <데이터 비트> <패리티> <정지 비트 수>
<Baud Rate> <Data Bits> <Parity> <Number of Stop Bits>
예를 들어, 두 장치가 9600 8N1로 구성된 UART 프로토콜을 통해 통신하기로 결정하면 두 장치 모두 9600 bps 전송 속도를 갖습니다. 데이터 청크는 8비트를 갖습니다. 패리티 비트가 없습니다. 그리고 하나의 정지 비트가 있습니다. 두 장치가 9600 8E1로 구성된 UART 프로토콜을 통해 통신하기로 결정하면 두 장치의 전송 속도가 9600 bps임을 의미합니다. 데이터 청크는 8비트를 갖습니다. 짝수 패리티가 있을 것입니다. 스톱 비트가 하나 있습니다. 마찬가지로 115200 8O2는 전송 속도가 115200 bps임을 나타냅니다. 데이터 청크에는 8비트가 있습니다. 홀수 패리티가 있습니다. 그리고 두 개의 정지 비트가 있습니다.
UART 프로토콜을 통해 데이터를 전달하는 디지털 신호는 아래 이미지와 같이 보일 수 있습니다.
UART의 장점과 단점
UART는 가장 일반적인 직렬 프로토콜입니다. 두 장치 간의 통신에는 두 개의 와이어만 필요하며 두 장치 사이에 클록 신호가 필요하지 않습니다. 데이터 청크의 크기는 5비트에서 9비트 사이에서 변경할 수 있습니다. 패리티 비트의 형태로 사용 가능한 오류 처리도 있습니다. 가장 일반적인 직렬 통신 프로토콜임에도 불구하고 UART는 완벽한 데이터 통신 솔루션이 아닙니다. 두 장치 간의 데이터 전송만 허용합니다. 버스를 공유하기 위해 장치를 추가할 수 없습니다. 데이터 청크의 최대 크기는 9비트로 제한되며 전송 속도는 실제로 115200 bps를 초과할 수 없습니다.
USB 직렬 보드
USB는 이제 범용 컴퓨터 및 관련 주변기기의 공통 인터페이스입니다. RS-232 포트는 데스크탑 및 모든 종류의 휴대용 컴퓨터에서 USB로 완전히 대체되었습니다. Raspberry Pi는 많은 경우에 PC, 워크스테이션, 휴대용 컴퓨터 또는 모바일 장치와 통신해야 할 수 있습니다. USB-to-USB 케이블, 이더넷, Bluetooth, Wi-Fi 및 직렬 TTL 포트를 사용하여 데스크탑/모바일에 연결할 수 있습니다. Raspberry Pi의 직렬 포트와 USB 인터페이스가 있는 장치 간의 직렬 통신을 가능하게 하려면 USB-직렬 보드(USB-to-UART 변환기)가 필요합니다. USB는 최대 5V의 신호 전압 레벨을 가질 수 있고 USB 포트에 연결된 모든 장치는 컴퓨터의 장치 드라이버를 통해 자신을 식별해야 하기 때문입니다. USB 직렬 보드를 사용하면 컴퓨터의 USB 인터페이스를 마이크로컨트롤러 또는 임베디드 컴퓨터의 직렬 TTL 포트에 연결할 수 있습니다. 보드는 컴퓨터를 대신하여 직렬 포트 역할을 합니다.
USB 직렬 보드에는 이를 위한 칩이 있습니다. 인기 있는 칩 중 일부는 FTDI FT232, Silicon Labs CP2102 및 Prolific PL2303입니다. USB-Serial 보드를 선택할 때 가장 주의해야 할 사항은 I/O 전압입니다. Raspberry Pi의 경우 선택한 보드가 3.3V의 I/O 전압을 지원해야 합니다. USB-to-UART 변환기는 1 Mbps에서 12 Mbps의 최대 전송 속도를 가질 수 있으며 512바이트 이하의 I/O 직렬 버퍼를 가질 수 있습니다. FTDI는 사용 가능한 가장 오래된 USB 직렬 변환기입니다. 대부분의 USB 직렬 보드에는 Windows에 드라이버가 내장되어 있지만 Linux 드라이버는 칩 제조업체가 아닌 커널 개발자가 제공합니다. 따라서 대부분의 USB 직렬 보드는 플러그 앤 플레이 장치입니다. USB 직렬 어댑터에는 접지, VCC, Rx, Tx 및 RTS, CTS, DTR과 같은 데이터 제어 모뎀 라인에 대한 연결을 노출하는 USB 포트와 핀 헤더가 있습니다.
USB 직렬 보드용 드라이버 USB
직렬 보드가 컴퓨터에 연결되어 있을 때 컴퓨터에 직렬 포트가 자동으로 생성되면 보드가 플러그 앤 플레이 장치로 사용할 준비가 된 것입니다. 그렇지 않으면 데스크탑에 드라이버를 설치해야 합니다.
Windows에는 일반적으로 이러한 보드용 드라이버가 내장되어 있거나 Windows 업데이트를 통해 드라이버를 얻을 수 있습니다. MacOS에는 또한 많은 칩에 대한 내장 드라이버가 있습니다. 또는 MacOS용 직렬 앱 은 자체 드라이버와 함께 제공됩니다. Linux Kernel 2.6 이상에는 USB-to-UART 변환기용 드라이버가 내장되어 있습니다. 보드를 연결할 때 직렬 포트로 감지되지 않으면 드라이버에 문제가 있을 수 있습니다. 따라서 USB-to-Serial 보드가 데스크탑 시스템에서 감지되지 않으면 적절한 드라이버를 다운로드하여 설치해 보십시오.
배선 및 하드웨어
두 장치의 전압 호환 직렬 포트를 연결해야 하는 경우 매우 간단합니다. 한 장치의 Tx를 다른 장치의 Rx에 연결하고 해당 Rx를 다른 장치의 Tx에 연결합니다. 두 장치의 UART는 공통 접지를 공유 하거나 접지 전압 기준이 두 장치에서 동일해야 합니다(이상적으로는 두 장치에서 모두 0V여야 함). 이는 두 장치(UART의 UART)가 동일한 전압 레벨을 가질 때 적용됩니다.
전압 시프터 또는 어댑터를 사용하여 두 장치를 직렬로 연결하는 경우 연결은 어댑터의 핀 구성에 따라 달라집니다. USB-Serial 보드와 마찬가지로 Raspberry Pi 또는 마이크로 컨트롤러의 Tx는 USB-Serial 보드의 Tx에 연결하고 Raspberry Pi 또는 마이크로 컨트롤러의 Rx는 USB-Serial 보드의 Rx에 연결해야 합니다. 보드의 접지는 또한 본질적으로 Raspberry Pi의 접지 핀에 연결되어야 합니다. 또는 마이크로 컨트롤러. Rx, Tx 및 접지 핀은 USB 직렬 보드와 Raspberry Pi/a 마이크로컨트롤러 간의 필수 연결입니다. 초보자가 데스크탑과 RPi/마이크로컨트롤러 간의 직렬 통신을 설정하기 위해 Raspberry Pi/a 마이크로컨트롤러의 Rx를 USB-Serial 보드의 Tx와 연결하고 Raspberry Pi/a 마이크로컨트롤러의 Tx를 USB-Serial 보드의 Rx와 연결하는 것은 일반적인 실수입니다.
보드에 TTL 전압 선택을 위한 점퍼가 있는 경우 오른쪽 슬롯에 점퍼를 배치하여 적절한 전압 레벨(예: Raspberry Pi의 경우 3.3V)을 선택해야 합니다. 그렇지 않으면 보드에 올바른 공급 전압에 연결되어야 하는 VCC 핀이 있을 수 있습니다(예: Raspberry Pi의 경우 3.3V).
데스크탑에서 직렬 포트 이름 찾기
USB-직렬 보드가 컴퓨터에 연결되면 직렬 포트로 식별되어야 합니다. 직렬 응용 프로그램을 사용하여 컴퓨터에서 Raspberry Pi 또는 마이크로컨트롤러와 대화를 시작하기 전에 데스크탑의 직렬 포트 이름을 알아야 합니다. 많은 직렬 응용 프로그램이 직렬 포트를 자동으로 감지합니다. 그러나 응용 프로그램에 이 기능이 없는 경우 직렬 포트 이름을 수동으로 알 수 있습니다.
macOS에서 USB 직렬 보드는 /dev/tty.wchusbserial*과 같은 장치 이름과 함께 나타납니다. 여기서 *는 임의의 숫자일 수 있습니다. 연결된 장치 목록은 sudo dmesg 명령을 실행하여 채울 수 있습니다. 또는 ioreg -p IOUSB 명령을 사용하여 USB 장치를 나열할 수 있습니다.
Windows에서 USB 직렬 보드에는 COM*과 같은 장치 이름이 있습니다. 여기서 *는 임의의 숫자입니다. 장치 이름은 장치 관리자에서 알 수 있습니다. Windows+R을 누르고 devmgmt.msc를 실행하여 장치 관리자를 엽니다. 장치 관리자에서 포트 탭 아래에 나열된 장치를 찾습니다.
Linux 시스템에서 USB 직렬 보드에는 /dev/ttyUSB*와 같은 장치 이름이 있습니다. 여기서 *는 임의의 숫자입니다. USB 직렬 어댑터는 자신을 소프트웨어 전용 USB 스택 장치로 식별합니다. USB 장치 목록은 ls /dev/ttyUSB 또는 ls /dev/ 명령을 사용하여 채울 수 있습니다. 또는 sudo dmesg 명령을 사용하여 로그에서 장치 이름을 찾을 수 있습니다.
Raspberry Pi에서 직렬 포트 이름 찾기
이전 자습서에서 다른 인터페이스 및 포트에서 액세스 할 때 Raspberry Pi의 UART의 Linux 장치 이름에 대해 논의했습니다. Raspberry Pi의 UART에 대한 Linux 장치 이름은 다음 표에 요약되어 있습니다.
USB-to-Serial 보드는 Raspberry Pi의 직렬 TTL 포트에 연결됩니다. 따라서 /dev/serial0이 아니면 /dev/ttyS0 또는 /dev/ttyAMA0이 해당 Raspberry Pi 모델의 기본 UART인 것이 직렬 포트로 지정되어야 합니다. Raspberry Pi가 USB-to-USB 케이블을 사용하여 컴퓨터에 직접 연결된 경우 컴퓨터의 USB 연결을 /dev/ttyAMC*로 식별할 수 있습니다.
직렬 데스크탑 응용 프로그램
다양한 데스크탑 시스템에 사용할 수 있는 직렬 응용 프로그램이 많이 있습니다. Linux에서 tio를 사용할 수 있습니다. 윈도 환경에서는 Putty, Termite, RealTerm, KiTTY, Tera Term, 혹은 SmarTTY가 있으며, macOS의 Serial이 있습니다. 이러한 응용 프로그램은 UART 프로토콜을 통해 문자 메시지를 교환하는 데 사용할 수 있습니다.
UART를 사용하여 임베디드 장치를 해킹
UART는 기본적으로 모든 임베디드 장치에 있는 하나의 직렬 포트입니다. 대부분의 임베디드 장치는 확실히 PCB에 UART 헤더가 있습니다. 이 포트는 장치의 루트 셸에 액세스 할 수 있으며 UART 프로토콜을 통해 콘솔 출력 및 명령 수락에 사용됩니다. 따라서 UART 헤더는 모든 임베디드 장치를 해킹하는 데 사용할 수 있습니다.
UART 헤더에는 일반적으로 기본적으로 접지, VCC, Rx 및 Tx에 대한 연결이 있는 4개 또는 5개의 연결이 있습니다. 때로는 헤더가 없지만 UART 연결을 위한 구멍이 남을 수 있습니다. 접지 핀과 Tx로 의심되는 핀을 알아내십시오. 접지 핀과 관련하여 의심되는 Tx 핀의 전압을 측정합니다. 유휴 상태에서 3.3V, 5V 또는 RS-232 전압 레벨일 수 있습니다. 장치를 부팅할 때 의심되는 핀이 Tx이고 콘솔 데이터를 전송하는 경우 핀의 전압이 약간 떨어집니다. 핀은 반드시 UART 프로토콜을 사용할 필요는 없으며 I2C 또는 SPI를 통해 통신할 수도 있습니다. 그러나 이것은 로직 분석기나 오실로스코프의 핀에서 나오는 신호를 관찰해야만 확인할 수 있습니다. 또는 USB-to-Serial 보드로 핀을 시도할 수 있습니다. 직렬 애플리케이션에서 직렬 포트로 감지되면 UART의 Tx입니다.
헤더를 UART 포트로 식별했으면 Rx를 Tx로, Tx를 Rx로, 접지를 접지로 연결하기만 하면 됩니다. 헤더의 VCC 핀은 USB-Serial 브리지의 VCC에 연결될 수 있지만 보호를 위해 저항을 직렬로 연결해야 합니다.
이제 전송 속도를 감지하고 UART 프로토콜, 즉 데이터 청크의 비트 수, 패리티 비트의 존재 및 정지 비트 수를 알아내십시오. 전송 속도는 오실로스코프에서 신호의 가장 짧은 펄스를 관찰하거나 자동 전송 프로그램을 사용하여 감지할 수 있습니다. 프로토콜 디코딩을 위해 로직 분석기, CRO 또는 DSO에서 장치의 UART 헤더 신호를 관찰해야 할 수도 있습니다. 프로토콜이 알려지면 Raspberry Pi 또는 마이크로 컨트롤러로 임베디드 장치를 해킹할 수 있습니다. 데스크탑에서 직렬 앱을 사용하고 USB-to-Serial 보드를 사용하여 임베디드 장치의 UART 헤더에 연결하여 장치를 해킹할 수도 있습니다.
다음 튜토리얼에서는 serialpi 라이브러리에 대해 설명하고 Raspberry Pi의 직렬 TTL 포트를 사용하여 컴퓨터와 통신합니다.
고생하셨습니다. ^^
'개발자 > 라즈베리파이4' 카테고리의 다른 글
라즈베리파이 4 기반 IoT(사물인터넷) 설계 6강 스마트 IoT 센서와 액츄에이터 실습 (0) | 2021.12.07 |
---|---|
라즈베리파이 4 IoT(사물인터넷) 4강 개발환경 2 (0) | 2021.11.30 |
RPi Python 프로그래밍 19: RPi의 TTL 포트에서 직렬 UART 통신 (0) | 2021.11.30 |
라즈베리파이 4 IoT(사물인터넷) 3강 개발 환경 1 (0) | 2021.11.26 |
라즈베리파이 Python 프로그래밍 17: UART 프로토콜을 사용한 직렬 통신 (0) | 2021.11.24 |
라즈베리파이 4 IoT(사물인터넷) 2강 IoT 기반기술 (0) | 2021.11.23 |
라즈베리파이 Python 프로그래밍 16: 아날로그 출력 및 소프트웨어 PWM (0) | 2021.11.22 |
라즈베리파이 4 IoT(사물인터넷) 1강 IoT와 웨어러블 디바이스 (0) | 2021.11.20 |
더욱 좋은 정보를 제공하겠습니다.~ ^^