기상청 예보를 WiFi로 받아 LCD에 띄우는 STM32 날씨 위젯

LCD 컨트롤러 없는 MCU에서 어셈블리로 화면을 직접 그리는 날씨 표시 기기입니다.

고객사
비공개 고객
분야
날씨 정보 기기
기술
STM32F401 · ESP-01(AT 명령) · UART DMA · 8080 병렬 LCD · ARM 어셈블리 · arm-none-eabi-gcc · makefile · 기상청 단기예보 API

포너즈가 한 일

  1. 기상청 API–WiFi 칩–처리장치–LCD 블록 구조 설계
  2. 회로와 PCB 설계, 보드 조립
  3. ESP-01 WiFi 수신과 날씨 JSON 분할 저장·파싱
  4. 8080 병렬 LCD 픽셀 전송의 어셈블리 최적화
  5. 현재 기온·시각과 3시간 간격 예보 화면 구성
  6. arm-gcc·makefile 빌드 환경 구성

문제

LCD 컨트롤러 없는 MCU로 480×272 화면을 돌려야 했던 기기

고객사는 사무실 책상에 둘 작은 날씨 표시 기기가 필요했습니다. 휴대폰을 열지 않고도 오늘 날씨와 다음 예보를 보려는 목적이었습니다.

그전까지 날씨를 보려면 휴대폰이나 PC에서 예보 화면을 따로 열어야 했습니다. 고객은 예보가 늘 켜져 있는 기기를 원했고, 부품값은 낮게 잡았습니다.

이 기기의 MCU(STM32F401)에는 LCD 컨트롤러가 없었습니다. 480×272 화면에 픽셀을 보내려면 GPIO를 직접 움직여야 했습니다. C 코드로 GPIO를 다루면 LCD 클럭을 충분히 올리지 못했습니다.

기상청 예보 응답은 시간대별 항목이 길게 이어지는 JSON입니다. MCU의 RAM에 한 번에 담기 어려운 크기였습니다.

그래서 화면 구동과 데이터 수신을 나눠 풀기로 했습니다.

해결

WiFi 모듈 분리와 어셈블리 LCD 구동

인터넷 통신과 화면 출력을 서로 다른 부품에 나눴습니다. MCU는 받은 데이터를 풀어 화면에 그리는 일을 맡습니다.

  • WiFi 모듈 분리: ESP-01이 인터넷 통신을 맡습니다. MCU와는 AT 명령으로 주고받고, UART DMA로 받습니다.
  • 조각 수신: 기상청 응답을 조각으로 받아 플래시에 저장한 뒤 파싱합니다.
  • LCD 직접 구동: 8080 병렬 LCD에 픽셀을 보낼 때 ARM 어셈블리로 GPIO를 직접 다룹니다.
  • 작업 우선순위: 화면 출력과 버튼 입력을 통신·파싱보다 먼저 처리합니다.
  • 화면 구성: 위에는 현재 기온과 날짜·시각을 크게 띄웁니다. 아래에는 3시간 간격 예보 8칸에 아이콘·기온·강수확률을 둡니다.
  • 보드: 회로와 PCB를 OrCAD로 설계해 버튼 셋과 리셋 버튼을 달았습니다. 버튼으로 다음 날 예보를 넘겨 봅니다.
기상청 API의 날씨·시간 데이터가 WiFi 칩셋과 처리장치를 거쳐 LCD로 간다

LCD 컨트롤러 없이 어셈블리로 화면을 그렸습니다

MCU에 LCD 컨트롤러가 없어 픽셀마다 GPIO를 움직여야 했습니다. 픽셀 전송 부분을 C에서 ARM 어셈블리로 바꿨습니다. 컨트롤러가 있는 MCU로 바꾸면 보드를 처음부터 다시 설계해야 했습니다. 명령을 직접 짜서 같은 MCU로 LCD 클럭을 두 배로 올렸습니다.

WiFi를 별도 모듈에 맡겼습니다

ESP-01이 인터넷 연결을 맡고, MCU는 AT 명령으로 결과만 받습니다. WiFi 연결과 통신 처리를 MCU에 올리면 화면 구동에 쓸 시간과 메모리가 줄어듭니다. ESP-01은 값이 싸고 AT 명령만으로 붙일 수 있어 보드에 얹기 쉬웠습니다.

응답을 조각으로 받아 플래시에 저장했습니다

기상청 응답을 한 번에 메모리에 담지 않고 나눠 받았습니다. 받은 조각은 플래시에 저장한 뒤 파싱합니다. 응답 전체를 RAM에 올리면 화면을 그리는 데 쓸 메모리가 모자랍니다. 플래시에 먼저 쌓아 두면 파싱 중에 통신이 끊겨도 받은 부분은 남습니다.

결과

어셈블리로 빨라진 LCD 구동과 한 화면에 모인 예보

시제품에서는 기상청 예보를 받아 현재 기온·시각과 3시간 간격 예보 8칸을 띄우는 것을 확인했습니다.

날씨 확인
이전휴대폰이나 PC에서 예보 화면 열기(사람) → 시간대별 예보 찾아보기(사람)
이후기상청 예보 수신(시스템) → 조각 저장·파싱(시스템) → 기온·시각·예보 8칸 표시(시스템) → 사용자가 화면을 봄(사람)
항목 이전 이후 변화 측정 기준
LCD 픽셀 클럭 3MHz 6MHz 2배 개발 기록
이 사례 공유

비슷한 프로젝트를 준비하고 있다면

무엇을 만들지 아직 정리되지 않아도 괜찮습니다. 지금 상황을 알려 주시면 진행 방식과 범위를 함께 잡습니다.

상담 신청하기