이우의 개발일지
라즈베리파이 yolo v2 모델 이용 및 라즈베리파이 to STM32 보드 UART 통신 본문
7월달에 올렸던 글을 이어서 쓰자면, 결과적으로 STM32보드에 AI Model을 올리는 것은 실패로 끝났다.
그 이유는, STM32H747I-DISCO 보드가 기존에 쓰던 STM32 시리즈의 보드와는 다르게 GPIO, UART 등의 핀으로 설정할려고 봤는데 밑에 사진 처럼 Pin name과 MCU pin 이름이 달라서 헷갈렸고, 내가 설정한 Pin 어딨는지 찾는 것이 문제였다. 또한, 쓸 수 있는 핀의 개수가 너무 한정적이여서 우리가 할려는 로봇팔의 모터 구동 및 AI ML 모델을 돌리기에 부족했다고 생각했다.
그래서, ML 모델은 라즈베리파이4로 돌리고 로봇팔의 모터는 STM32F427i로 돌리기로 했다.
그래도 임베디드용 ML 모델이기 때문에 경량화와 최적화가 잘되어있어서 라즈베리파이로 돌리면 성능이 괜찮을꺼라 생각했다.
밑에 블로그 글에 임베디드용 ML모델 개발 과정이 있으니 참고하길 바란다.
(참고로 라즈베리파이4를 ML 모델 돌리기에 환경세팅하는데도 5일정도 걸렸다...ㅋㅋ)
라즈베리파이 카메라를 이용했는데 이놈이 연결이 너무 안되서 꽤 걸린 것 같다.
별짓을 다했는데, 밑에 블로그하고 유튜브 글 많이 참고해서 결국해결했다.
raspi-config로 설정을 열어서 무언가 포트를 허용해줘야하는 것 같다.
라즈베리파이 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를 사용해서 통신을 이용했다.
'Embeded' 카테고리의 다른 글
Dynamixel 모터 제어 일기.. XM430-W210 (0) | 2024.11.11 |
---|---|
STM32 임베디드용 ML 모델 개발하기 (Tiny yolo, SSD Mobile net) (1) | 2024.07.17 |