본문 바로가기

[ST_MICRO]/STM32F4

[STM32F4-RP] OV2640 카메라 테스트1 - W5300을 웹서버를 이용한 영상 전송

[STM32F4-RP] OV2640 카메라를 테스트 해보자. W5300에서 웹서버 테스트코드를 활용해서 웹에서 영상을 볼 수 있도록 해볼 예정이다.

 

STM32 DCMI 회로도

[STM32F4-RP] 보드의 카메라 인터페이스(DCMI) 핀맵은 아래 그림과 같다.

 

 

 

 

STM32CubeIDE 설정

STM32에서 카메라는 DCMI 장치에서 설정 할 수 있다. STM32CubeIDE 를 이용하여 DCMI설정을  해 준다.

 




인터럽트를 사용할 수 있도록 설정하고 DMA 설정도 해 준다.

 



카메라 모듈에는 Master 클럭을 입력해 주어야 하는데 STM32의 PA8을 MCO로 설정하여 16Mhz의 시스템 클럭이 출력 되도록 해 주었다.

 

 




카메라관련 설정은 I2C 인터페이스로 가능하고 I2C2를 활성화 하도록 했다.

 



설정을 완료후 저장하면 기본 코드가 생성된다

 

 


OV2640 JPEG 영상 테스트

STM32에 카메라 설정이 완료 되었으므로 영상이 정상적으로 들어 오는지 확인 할 필요가 있는데.... 어떻게 하면 좋을까?

우선 JPEG 모드로 설정해서 이미지를 받아 보자

 

static void MX_DCMI_Init(void) {

	/* USER CODE END DCMI_Init 1 */
	hdcmi.Instance = DCMI;
	hdcmi.Init.SynchroMode = DCMI_SYNCHRO_HARDWARE;
	hdcmi.Init.PCKPolarity = DCMI_PCKPOLARITY_RISING;
	hdcmi.Init.VSPolarity = DCMI_VSPOLARITY_LOW;
	hdcmi.Init.HSPolarity = DCMI_HSPOLARITY_LOW;
	hdcmi.Init.CaptureRate = DCMI_CR_ALL_FRAME;
	hdcmi.Init.ExtendedDataMode = DCMI_EXTEND_DATA_8B;
	hdcmi.Init.JPEGMode = DCMI_JPEG_ENABLE;

	if (HAL_DCMI_Init(&hdcmi) != HAL_OK) {
		Error_Handler();
	}
}

 

시리얼 포트로 JPEG 영상을 출력하면 정상적으로 출력되는 것을 확인 할 수 있다.

 

Found header of JPEG file ->0

 

ff d8 ff e0 00 10 4a 46 49 46 

00 01 01 01 00 00 00 00 00 00 

ff db 00 43 00 0c 08 09 0b 09 

08 0c 0b 0a 0b 0e 0d 0c 0e 12 

1e 14 12 11 11 12 25 1a 1c 16 

1e 2c 26 2e 2d 2b 26 2a 29 30 

36 45 3b 30 33 41 34 29 2a 3c 

52 3d 41 47 4a 4d 4e 4d 2f 3a 

55 5b 54 4b 5a 45 4c 4d 4a ff 

db 00 43 01 0d 0e 0e 12 10 12 

23 14 14 23 4a 32 2a 32 4a 4a 

4a 4a 4a 4a 4a 4a 4a 4a 4a 4a 

4a 4a 4a 4a 4a 4a 4a 4a 4a 4a 

4a 4a 4a 4a 4a 4a 4a 4a 4a 4a 

4a 4a 4a 4a 4a 4a 4a 4a 4a 4a 

4a 4a 4a 4a 4a 4a 4a 4a ff c4 

00 1f 00 00 01 05 01 01 01 01 

01 01 00 00 00 00 00 00 00 00 

01 02 03 04 05 06 07 08 09 0a 

0b ff c4 00 b5 10 00 02 01 03 

03 02 04 03 05 05 04 04 00 00 

 

 

 

네트워크로 보낸 패킷을 캡쳐 해보면 정상적으로 보내는 것을 확인 할 수 있다.

 



W5300 웹서버를 이용한 OV2640 이미지 전송

이제 웹서버에서 이미지 요청이 있을때 카메라에서 받은 JPEG 버퍼의 데이터를 보내면 된다.

기존 웹서버 예제에 카메라의 이미지를 전송 하도록 해 보자

 

 

OV2640 웹서버를 통한 이미지 전송 테스트 동영상

https://youtu.be/XqBql-dzIzk

 

 

W5300의 네트워크 성능을 이용하면 스트림 영상을 보낼 수 있을거라 생각 했는데...

아쉽게도 JPEG 모드로 설정하면 초당 1프레임 을 얻기가 힘들다고 한다.

 

스트리밍 영상을 보내려면 RAW 모드로 영상을 받아 오고 JPEG로 변환해서 보내야 할것 같은데... STM32F4에서 실시간으로 가능할지 테스트가 더 필요할 것 같다.

반응형