Notice
Recent Posts
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
관리 메뉴

이우의 개발일지

라즈베리파이 yolo v2 모델 이용 및 라즈베리파이 to STM32 보드 UART 통신 본문

Embeded

라즈베리파이 yolo v2 모델 이용 및 라즈베리파이 to STM32 보드 UART 통신

공대이우 2024. 10. 8. 14:44

 

7월달에 올렸던 글을 이어서 쓰자면, 결과적으로 STM32보드에 AI Model을 올리는 것은 실패로 끝났다. 

그 이유는, STM32H747I-DISCO 보드가 기존에 쓰던 STM32 시리즈의 보드와는 다르게 GPIO, UART 등의 핀으로 설정할려고 봤는데 밑에 사진 처럼 Pin name과 MCU pin 이름이 달라서 헷갈렸고, 내가 설정한 Pin 어딨는지 찾는 것이 문제였다. 또한, 쓸 수 있는 핀의 개수가 너무 한정적이여서 우리가 할려는 로봇팔의 모터 구동 및 AI ML 모델을 돌리기에 부족했다고 생각했다. 

 

그래서, ML 모델은 라즈베리파이4로 돌리고 로봇팔의 모터는 STM32F427i로 돌리기로 했다.

 

그래도 임베디드용 ML 모델이기 때문에 경량화와 최적화가 잘되어있어서 라즈베리파이로 돌리면 성능이 괜찮을꺼라 생각했다. 

밑에 블로그 글에 임베디드용 ML모델 개발 과정이 있으니 참고하길 바란다.

 

 

STM32 임베디드용 ML 모델 개발하기 (Tiny yolo, SSD Mobile net)

약 3주란 시간 동안 임베디드용 머신러닝 모델 개발에 시간을 투자했다.AI 쪽 ML 학습은 생소한 분야라서 학습 시키는게 더 어려웠던 것 같다.   STM32 보드를 이용해 딸기를 인식하는 ML 모델 개

everything.pipelineleewoo.com

 

(참고로 라즈베리파이4를 ML 모델 돌리기에 환경세팅하는데도 5일정도 걸렸다...ㅋㅋ)

라즈베리파이 카메라를 이용했는데 이놈이 연결이 너무 안되서 꽤 걸린 것 같다. 

 

별짓을 다했는데, 밑에 블로그하고 유튜브 글 많이 참고해서 결국해결했다.

raspi-config로 설정을 열어서 무언가 포트를 허용해줘야하는 것 같다. 

 

라즈베리파이4 Ubuntu 20.10 PiCamera 작동시키기

라즈비안, 그러니까 라즈베리파이OS는 raspi-config가 있어서 이것저것 설정이 쉽다. 근데 라즈베리파이...

blog.naver.com

 


라즈베리파이 to STM32 UART 통신

 

이 부분은 생각보다 간단했다.

 

먼저, 준비물은 UART 선이 필요하다. 

위 사진 오른쪽에 있는 선을 우리는 이용했는데, USB 포트를 라즈베리파이 꼽고 4개의 선 (TX, RX, Gnd, VD)을 STM32보드에 연결해주면 된다. 

 

TESTING CODE

Python 코드 IN Raspberrypi (라즈베리파이)

import serial
import time

uart = serial.Serial('COM5', baudrate=115200)

while(1):
    data = input("press [s] to check depth")
    if data == "s" or "S" :
         uart.write("S".encode('utf-8'))
         # time.sleep(0.5)
         received = uart.read()
         hex_value = received.hex()
         distance = int(hex_value,16)
         print(f"received distance : {distance}")
         time.sleep(0.5)

 

C코드 IN STM32 보드

void HCSR04_Read (void)
{
	HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_SET);  // pull the TRIG pin HIGH
	delay(10);  // wait for 10 us
	HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_RESET);  // pull the TRIG pin low

	__HAL_TIM_ENABLE_IT(&htim3, TIM_IT_CC1);
}

int main(){
if(HAL_UART_Receive(&huart3, &a, 1, 10) == HAL_OK)
	{
		HAL_UART_Transmit(&huart3, &a, 1, 10);
		HCSR04_Read();
	}
}

 

아 그리고, 여기서 주의해야할 점은 라즈베리파이에 UART 선을 연결해줬다면 거기서 나오는 선은 STM32보드에 RX면 TX로 TX면 RX로 연결해줘야한다. (라즈베리파이 rx -> STM32 tx, 라즈베리파이 tx -> STM32 rx 이런식으로)

 

또한, STM32F747 보드를 쓴다면 되도록 UART2말고 다른 UART 번호를 쓰도록 하자. UART2는 다른 UART랑 다르게 쓰는 것 같은데, 정확한 것은 스케매틱 자료를 보면서 참고하면 된다. 나는 UART3를 사용해서 통신을 이용했다. 

 

 

 

반응형