본문 바로가기

STM32

DHT22 온습도 센서

DHT22 온습도 센서를 동작시키는데 뜻밖의 우여곡절을 겪었습니다.

 

데이터시트를 대충 훑어보고 구글링의 도움으로 간단히 코드를 돌려 보았습니다.

아래의 사이트가 많은 도움을 줍니다.

https://controllerstech.com/temperature-measurement-using-dht22-in-stm32/

 

FreeRTOS로 동작해야 하므로 타이머를 추가하여 microsecond 단위로 동작하는 delay 함수를 구현해야 합니다.

void delay(uint32_t delay)
{
  __HAL_TIM_SET_COUNTER(&htim6, 0);
  while (__HAL_TIM_GET_COUNTER(&htim6) < delay);
}

 

그런데 이 함수가 동작하질 않았습니다.

이유는 단순히 타이머를 시작하지 않았기 때문이었습니다..

MX_TIM6_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start(&htim6);

 

이제 타이머는 동작하고 몇 번은 센서의 값이 잘 읽혔습니다.

그런데 몇번의 반복 동작 후 멈추는 현상이 발생했습니다.

그 이후 이런저런 코드 수정 때문인지 센서의 값이 읽히지 않았습니다.

센서가 고장난 것인지 라즈베리파이에서 확인을 해봤습니다.

아래의 사이트를 보고 따라 하면 쉽게 동작이 확인됩니다.

https://pimylifeup.com/raspberry-pi-humidity-sensor-dht22/

 

센서가 문제없다는 게 확인되었습니다.

다 되어 있는 패키지를 그냥 쓰는 것이 얼마나 편한지 알 수 있었습니다...😓

 

다시 데이터시트를 자세히 읽어보며 코드 동작들을 확인해 보았습니다.

덕분에 센서의 동작에 대해 잘 이해할 수 있었습니다만 해결책은 이것이 아니었습니다.

 

태스크의 스택 사이즈가 부족하여 오버플로우가 발생한 것입니다.

오버플로우를 확인할 수 있는 옵션이 정의되어 있습니다.

// FreeRTOSConfig.h
#define configCHECK_FOR_STACK_OVERFLOW           2

// freertos.c
/* USER CODE BEGIN 4 */
__weak void vApplicationStackOverflowHook(xTaskHandle xTask, signed char *pcTaskName)
{
   /* Run time stack overflow checking is performed if
   configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook function is
   called if a stack overflow is detected. */
    printf("stack overflow in task: %s\n\r", pcTaskName);
}
/* USER CODE END 4 */

 

스택 사이즈는 128에서 256으로 증가시켜 주니 태스크가 멈추는 현상은 해결되었습니다.

osThreadDef(dht22Task, StartTask02, osPriorityAboveNormal, 0, 256);

 

이제 온습도값은 잘 읽히는데 parity 값의 계산이 에러가 났습니다.

데이터시트를 다시 보고 온라인상에서 내려받아서 쉽게 썼던 코드의 수정이 필요한 것을 알았습니다.

 

 

 

라즈베리파이에서 테스트할 때 설치했던 패키지의 소스를 봐도 답을 확인할 수 있습니다.

 

https://github.com/adafruit/Adafruit_CircuitPython_DHT/blob/main/adafruit_dht.py

 

 

센서에는 문제가 없었고,

단지 쉽게 사용하려고 했던 얄팍한 자세가 문제였다는 것을 알게 되었습니다. 😭

 

 

'STM32' 카테고리의 다른 글

STM32-CAN-Raspberry Pi  (0) 2025.04.07
OLED display 128x32  (0) 2025.02.28
STM32 clock  (0) 2025.01.23
FreeRTOS - STM32F4 포팅 정보 확인  (0) 2025.01.14
FreeRTOS 와 Zephyr 비교  (0) 2025.01.13