산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

라즈베리 파이 4와 HiFive1 보드 간 UART 통신 구축

이 랩에서는 라즈베리 파이 4와 HiFive1 간 신뢰할 수 있는 UART 링크를 설정하고, HiFive1을 프로그래밍하여 수신 데이터 에코, 파이에서 조향 각도를 보드로 전달하는 파이썬 스크립트 생성을 다룹니다.

파트 0: 라즈베리 파이 4에서 UART 활성화

파이 4에는 4개의 UART 컨트롤러가 탑재되어 있습니다. 이 연습에서는 uart2와 uart3을 사용합니다. /boot/config.txt에 다음 줄 추가 후 재부팅:

dtoverlay=uart2,115200
dtoverlay=uart3,115200

재부팅 후 디바이스 노드 /dev/ttyAMA1 (uart2)와 /dev/ttyAMA2 (uart3) 사용 가능.

보드 연결 방법:

파이에서 /dev/ttyAMA1 (HiFive1로 전송)과 /dev/ttyAMA2 (HiFive1 콘솔 수신)로 이 채널들에 접근 가능.

파트 1: HiFive1 프로그래밍

PC(파이 아님)에서 스켈레톤 프로젝트 다운로드:

$ cd ~/Documents/PlatformIO
$ wget https://ittc.ku.edu/~heechul/courses/eecs388/l10-comm.tar.gz
$ tar zxvf l10-comm.tar.gz

l10-interrupt 폴더를 VSCode 워크스페이스에 추가. 목표는 UART1에서 데이터 읽고, UART0으로 에코, 콘솔에 결과 출력.

간결한 알고리즘:

while (1) {
    if (ser_isready(1)) {
        char data = ser_read(1);
        ser_write(0, data);
        ser_printline(0, "Received: ");
        /* 필요시 포맷 조정 */
    }
}

시리얼 API는 eecs388_lib.h/c에 정의:

void ser_setup(int devid);
int ser_isready(int devid);
void ser_write(int devid, char c);
void ser_printline(int devid, char *str);
char ser_read(int devid);
int ser_readline(int devid, int n, char *str);

devid = 0은 UART0, devid = 1은 UART1 선택. ser_isready 함수는 UART IP 레지스터에서 대기 중인 데이터 확인:

int ser_isready(int devid) {
    uint32_t regval = *(volatile uint32_t *)(UART_ADDR(devid) + UART_IP);
    return regval;
}

컴파일 및 플래싱 후 파이로 전환하여 두 터미널 열기:

발신자 터미널에 아무 문자열이나 입력; 같은 문자열이 디버그 터미널에 나타나면 정상 동작 확인.

파트 2: 라즈베리 파이 4 파이썬 스크립트

수동 터미널 대신 다음을 수행하는 파이썬 프로그램 작성:

pySerial 사용 예제 스켈레톤:

import serial
import time
import cv2  # 또는 카메라 인터페이스
# 시리얼 포트 열기
ser1 = serial.Serial('/dev/ttyAMA1', 115200, timeout=1)
ser2 = serial.Serial('/dev/ttyAMA2', 115200, timeout=1)
while True:
    # 프레임 캡처
    frame = cv2.imread('frame.jpg')  # 실제 카메라 읽기로 교체
    # DNN 추론 실행
    angle = dnn_inference(frame)  # float32
    # float를 4바이트 표현으로 변환
    angle_bytes = angle.to_bytes(4, byteorder='little', signed=True)
    ser1.write(angle_bytes)
    # 선택적: 디버그 출력 읽기
    debug = ser2.readline().decode().strip()
    if debug:
        print('HiFive1:', debug)
    # 타이밍 제어 (예: 30fps)
    time.sleep(1/30)
# 정리
ser1.close()
ser2.close()

참고: 전송 전 float를 바이트로 변환, HiFive1에서 값을 해석할 때 같은 바이트 순서 사용.

부록: 라즈베리 파이 4 GPIO 및 주변장치 개요

파이 4는 기존 파이 모델을 넘어 확장된 I²C, SPI, UART 인터페이스 제공. pinout 명령으로 모든 핀 보기:

pinout

주요 주변장치:

자세한 구성은 공식 라즈베리 파이 문서 참조: Config-txt 가이드.

제조공정

  1. 디지털 통신 기초: 이론에서 실전 구현까지
  2. 데이터 흐름 이해: 심플렉스에서 풀 듀플렉스 통신까지
  3. 광 데이터 통신: 빛을 이용한 고대역폭, 무간섭 전송
  4. 결정론과 내결함성: 산업 제어 네트워크의 필수 설계 원칙
  5. 무선 통신 범위 마스터하기: 전력, 데이터 레이트, 간섭이 연결성을 형성하는 방식
  6. NodeMCU DHT22 센서 + 라즈베리 파이 3 B+ MQTT 브로커 연동 가이드
  7. 라즈베리 파이에 센서 데이터 통합하기: GPS 및 MPU-9150 IMU 실전 가이드
  8. 아두이노-라즈베리파이 2 I2C 통합으로 IoT 센서 프로젝트 구현하기
  9. M2M(기계 간 통신): 정의와 중요성
  10. 혁신적 소형 광증폭기, 잡음 없는 우주·광통신 약속