====== AI를 이용한 HMI(UI)개발 (Copilot AI + Qt Designer) ======
본 장에서는 **AI를 활용하여 Qt Designer로 설계한 HMI UI(.ui 파일)**를 기반으로 HMI 프로그램을 개발하는 방법을 설명합니다.
UI 화면은 ''.ui'' 파일을 통해 프로그램에 적용되며, 동작 로직은 VS Code 환경에서 **Copilot AI 채팅 에이전트** 기능을 활용하여 효율적으로 작성합니다.
* **Qt Designer**: HMI 구성 화면 설계 (.ui 파일 생성)
* **VS Code Copilot**: ''.ui'' 파일과 ''main.py''를 기반으로 프로그램 로직 구현
* **Vibe Coding**: 개발자의 의도를 자연어로 전달하고 AI가 생성한 코드를 검증/수정하는 직관적 개발 방식 적용
{{ :modularpi:python:aipyhmi:example_sceenshot.png?nolink |}}
> **프로젝트 개요**
> 본 예제는 산업 현장 실무에서 사용되는 HMI 구성을 기준으로 제작되었으며, AI를 활용한 단계별 개발 방법과 **Vibe Coding** 절차를 안내합니다.
===== 1. Copilot 설치 =====
Copilot Chat은 VS Code 내부에서 프로젝트 문맥을 이해한 상태로 대화형 AI 지원을 제공합니다.
* [[https://code.visualstudio.com/docs/copilot/overview|VS Code의 GitHub Copilot 사용법 가이드(필독)]]
* **주요 기능**: 코드 작성 도움, 기존 코드 설명, 리팩토링, 버그 수정 등
==== 설치 절차 ====
- GitHub Copilot 및 GitHub Copilot Chat 확장 프로그램 검색 및 설치
- GitHub 계정 로그인 및 사용 권한 승인
- VS Code 우측 하단 상태바에서 **Copilot 아이콘** 활성화 확인
{{ :modularpi:python:aipyhmi:setup_copilot.png?nolink |}}
===== 2. main.py에 .ui 등록 =====
프로젝트 폴더에 ''.ui'', ''main.py'', 리소스 파일을 배치한 후 AI를 통해 기본 코드를 생성합니다.
* **프로젝트 구성**: ''main.py'', ''.ui'', 이미지 파일, ''Resource.qrc''
* **방법**: Copilot Agent 기능을 사용하여 실행 가능한 코드 생성
# === Vibe Coding (Ai) 프롬프트 예시 ===
# Qt Designer로 제작한 CFNET_AI.ui 파일을 사용하여 UI를 실행할 수 있는 main.py 기본 프로그램을 작성해 주세요.
# 실행 환경: Raspberry Pi 5 (Debian Bookworm), Python + PyQt5
# .ui 파일을 로드하여 메인 윈도우를 실행하는 최소한의 기본 구조 코드로 작성 바랍니다.
{{ :modularpi:python:aipyhmi:project_folder.png?nolink |}}
**- 코드 적용:** Copilot이 생성한 코드는 **[Keep(유지)]** 옵션을 선택하여 즉시 적용할 수 있습니다.
{{ :modularpi:python:aipyhmi:init_vibe.png?nolink |}}
**- 에러 처리 (Resource Error):** 실행 시 리소스 파일(qrc) 미변환 오류가 발생할 경우 다음과 같이 요청합니다.
# === Vibe Coding (Ai) ===
# [에러 내용 복사] 후, 발생 원인과 수정 사항을 확인하여 코드를 수정해 주세요.
{{ :modularpi:python:aipyhmi:errorscreen1.png?nolink |}}
**- 결과 확인:**
{{ :modularpi:python:aipyhmi:formscreen1.png?nolink |}}
:::tip
**한글 깨짐 해결 방법** (터미널 입력):
* ''sudo apt update''
* ''sudo apt install fonts-nanum fonts-nanum-coding fonts-nanum-extra''
* ''sudo fc-cache -fv''
:::
===== 3. HMI 동작 로직 구현 =====
==== ✔ 날짜·시간 표시 및 CFDO 동작 조건 ====
* 상단에 실시간 날짜 및 시간 표시
* **운전/정지** 버튼에 따른 CFDO 출력 포트(P0, P1) 토글 제어
* 두 버튼 모두 ON일 때 **Alarm 출력** 점등
{{ :modularpi:python:aipyhmi:31screen.png?nolink |}}
# === Vibe Coding (Ai) 프롬프트 ===
# 1. date_time 객체에 현재 날짜와 시간을 표시하는 시계 기능 구현.
# 2. CFRASP.py 모듈의 CFNET 클래스를 통해 cfnet 객체 생성.
# 3. run_btn, step_btn을 토글(setCheckable) 방식으로 설정.
# 4. run_btn은 cf_out 변수의 bit 0, step_btn은 bit 1에 매핑.
# 5. 상태 변경 시 cfnet.digitalWrite(0, cf_out) 호출.
# 6. 두 버튼 모두 ON일 때만 alram_out 이미지를 "Alram_on.png"로 변경.
{{ :modularpi:python:aipyhmi:3_1_ai_manual.mp4?950x550|}}
==== ✔ CFDI 입력 상태 표시 및 알람 조건 ====
* 0.3초 주기로 CFDI 입력 상태 램프 업데이트
* 입력 포트 16개 중 **4개 이상 ON** 시 INPUT 알람 발생
{{ :modularpi:python:aipyhmi:32screen.png?nolink |}}
# === Vibe Coding (Ai) ===
# 1. 0.3초 주기로 cfnet.digitalRead(0)를 호출하여 cf_in 정수 변수에 저장.
# 2. cf_in 값을 16진수로 CFDI_0_Value 객체에 표시.
# 3. 16비트 각 비트 상태에 따라 lamp_IN_[i] 이미지를 ON/OFF.png로 업데이트.
# 4. ON 상태 비트가 4개 이상이면 alram_in을 "Alram_on.png"로 변경.
{{url>https://www.youtube.com/embed/KLxUh3C6uu4?si=wCkifxr8p-zqblyi 840,480}}
==== ✔ CFDA 출력 제어 및 상태 조건 ====
* 삼각 버튼 클릭 시 409 단위(약 1V) 증감
* **6V 이상 (데이터 2,457 이상)** 시 DA 알람 발생
{{ :modularpi:python:aipyhmi:33screen.png?nolink |}}
# === Vibe Coding (Ai) ===
# 1. cfda_ch0, ch1 변수 초기화 (범위 0~4095 Clamping 처리).
# 2. da[i]_up/down 버튼 클릭 시 409씩 증감 후 cfnet.analogWrite 실행.
# 3. da[i]_value 라벨에 정수 표시, da[i]_v_value에 전압(값/409) 표시.
# 4. 어느 하나라도 2,457 이상이면 alram_da를 'Alram_on.png'로 변경.
{{url>https://www.youtube.com/embed/bWKsWJZ7tq8?si=vw90-FJH00X4lkm0 840,480}}
==== ✔ CFAD 상태 및 조건 ====
* CFAD ch3 채널 입력값 화면 표시 및 게이지 구현
* 입력 전압 **5V 이상** 시 AD 알람 발생
{{ :modularpi:python:aipyhmi:34screen.png?nolink |}}
# === Vibe Coding (Ai) ===
# 1. 100ms마다 cfnet.analogRead(0, 3)로 cfad_ch3 업데이트.
# 2. QLCDNumber(adc_value)와 QProgressBar(adc_bar)에 값 대입.
# 3. cfad_ch3 값이 13,333 이상이면 alram_ad를 "Alram_on.png"로 변경.
{{url>https://www.youtube.com/embed/CBUrnekwXK0?si=bZwj7CxNbPshqsBe 840,480}}
---
[[..:index|Python을 이용한 CFNET I/O 개발]]