포트폴리오/[IoT 기반 피지컬 AI 교육일지]

[ C언어 IoT 프로젝트 개발 ] #1 센서 데이터 수집 및 UART 통신 (18일차 기록)

개발자혜콩 2026. 3. 10. 16:08

1. 오늘 한 것

① 프로젝트 구조 설계

  • SHT20 센서 → Arduino Mega → Serial(UART) 통신 → Linux(C언어) 구조 설계.
  • 데이터 흐름 및 스레드 분리(UI / 모니터링) 기획.

② 개발 환경 준비

  • Arduino IDE 및 SHT20(I2C) 센서 라이브러리 세팅.
  • Linux 시리얼 포트 확인 및 권한 설정 (chmod 666 /dev/ttyACM0).

③ 센서 데이터 송신 코드 작성 (Arduino)

  • SHT20 온습도 값 읽기.
  • Serial.print()를 통한 데이터 패킷 규격화 (예: T:24.5,H:54.3).
C
 
// 예시 코드 (Arduino)
Serial.begin(9600);
float temp = sht.readTemperature();
Serial.print("T:");
Serial.println(temp);

2. 직면했던 문제 및 해결

 

  • 초기 연결 시 비정상적인 쓰레기 값(예: 221.7도) 출력 현상
    • 원인: 시리얼 포트 개방 시 발생하는 하드웨어 초기화 지연 및 버퍼 내 더미(Dummy) 데이터 유입.
    • 해결: C언어의 데이터 파싱(Parsing) 단계에서 정상적인 온습도 범위를 벗어나는 비정상 수치(예: 100도 초과)는 무시(Skip)하도록 필터링 예외 처리 로직 추가.
  • 센서 라이브러리 충돌 및 호환 이슈
    • 원인: 초기 테스트 시 코드와 호환되지 않는 다른 센서(AHT 등) 라이브러리가 섞여 컴파일 에러 발생.
    • 해결: 충돌을 일으키는 기존 라이브러리를 완전히 삭제하고, 현재 하드웨어 환경에 정확히 맞는 SHT20 전용 라이브러리로 클린 재설치 진행.
  • Linux 시리얼 포트 권한(Permission denied) 문제
    • 원인: 우분투 환경에서 일반 사용자 계정으로는 /dev/ttyUSB0 (또는 ACM0) 포트에 접근할 읽기/쓰기 권한이 없음.
    • 해결: 터미널에서 sudo chmod 666 /dev/ttyUSB0 명령어를 실행하여 해당 포트에 대한 접근 권한을 수동으로 부여하여 통신 성공.

 


3. 오늘 배운 핵심 개념

  • I2C 센서 통신 원리.
  • UART Serial 통신 및 Baudrate(9600) 개념.

4. 현재 진행도

  • 센서 데이터 측정 성공.
  • Arduino → Linux 시리얼 데이터 전송 및 터미널 수신 확인.

5. 다음 목표

  • Linux C 프로그램 기반 멀티스레딩 구현.
  • 30도 임계값 기준 하드웨어(LED, 모터) 자동 제어 로직 작성.