Initial commit
This commit is contained in:
179
web_UI/README.md
Normal file
179
web_UI/README.md
Normal file
@@ -0,0 +1,179 @@
|
||||
# LoadCell 실시간 무게 측정 웹 GUI
|
||||
|
||||
Arduino HX711 로드셀 데이터를 실시간으로 웹 브라우저에 그래프로 표시하는 애플리케이션입니다.
|
||||
|
||||
## 시스템 구조
|
||||
|
||||
```
|
||||
[Arduino + HX711] --시리얼--> [Python 서버] --WebSocket--> [웹 브라우저]
|
||||
(Flask + pyserial) (Chart.js)
|
||||
```
|
||||
|
||||
## 기능
|
||||
|
||||
- 실시간 무게 데이터 그래프 표시
|
||||
- 현재 무게, 최대값, 평균값 통계
|
||||
- 영점 조절, 일시정지, 재시작 원격 제어
|
||||
- 시스템 로그 표시
|
||||
- 반응형 웹 디자인
|
||||
|
||||
## 설치 방법
|
||||
|
||||
### 1. Python 환경 설정
|
||||
|
||||
Python 3.7 이상이 필요합니다.
|
||||
|
||||
```bash
|
||||
# 가상환경 생성 (선택사항, 권장)
|
||||
python -m venv venv
|
||||
|
||||
# 가상환경 활성화
|
||||
# Windows:
|
||||
venv\Scripts\activate
|
||||
# macOS/Linux:
|
||||
source venv/bin/activate
|
||||
|
||||
# 필요한 패키지 설치
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### 2. Arduino 준비
|
||||
|
||||
1. Arduino IDE에서 `LoadCellMeasure.ino` 파일을 Arduino에 업로드
|
||||
2. Arduino와 PC가 USB로 연결되어 있는지 확인
|
||||
3. Arduino IDE의 시리얼 모니터는 **닫아야 합니다** (포트 충돌 방지)
|
||||
|
||||
## 실행 방법
|
||||
|
||||
### 1. Python 서버 실행
|
||||
|
||||
```bash
|
||||
cd web_gui
|
||||
python app.py
|
||||
```
|
||||
|
||||
서버가 시작되면 다음과 같은 메시지가 표시됩니다:
|
||||
|
||||
```
|
||||
Arduino 포트 발견: COM3
|
||||
시리얼 포트 연결 성공!
|
||||
|
||||
=================================
|
||||
웹 서버 시작: http://localhost:5000
|
||||
=================================
|
||||
```
|
||||
|
||||
### 2. 웹 브라우저로 접속
|
||||
|
||||
브라우저에서 다음 주소로 접속:
|
||||
|
||||
```
|
||||
http://localhost:5000
|
||||
```
|
||||
|
||||
또는 같은 네트워크의 다른 기기에서:
|
||||
|
||||
```
|
||||
http://[서버PC의IP주소]:5000
|
||||
```
|
||||
|
||||
## 사용 방법
|
||||
|
||||
### 웹 인터페이스 기능
|
||||
|
||||
1. **실시간 그래프**: 최근 50개의 무게 데이터를 실시간으로 표시
|
||||
2. **현재 무게**: 현재 측정 중인 무게 값
|
||||
3. **통계**: 최대값과 평균값 자동 계산
|
||||
4. **제어 버튼**:
|
||||
- **영점 조절**: 로드셀 위의 물건을 치우고 영점 재설정
|
||||
- **일시정지**: 측정 일시 중지
|
||||
- **재시작**: 측정 재개
|
||||
- **그래프 초기화**: 그래프와 통계 데이터 초기화
|
||||
5. **시스템 로그**: Arduino와 서버의 메시지 표시
|
||||
|
||||
### Arduino 시리얼 명령어
|
||||
|
||||
웹 인터페이스 대신 Arduino IDE 시리얼 모니터에서도 제어 가능:
|
||||
|
||||
- `c`: 영점 조절
|
||||
- `p`: 일시정지
|
||||
- `r`: 재시작
|
||||
- `+`: 측정 속도 빠르게
|
||||
- `-`: 측정 속도 느리게
|
||||
- `h`: 도움말
|
||||
|
||||
## 프로젝트 구조
|
||||
|
||||
```
|
||||
web_gui/
|
||||
├── app.py # Flask 백엔드 서버
|
||||
├── requirements.txt # Python 패키지 목록
|
||||
├── templates/
|
||||
│ └── index.html # 웹 프론트엔드
|
||||
└── README.md # 이 파일
|
||||
```
|
||||
|
||||
## 문제 해결
|
||||
|
||||
### Arduino 포트를 찾을 수 없습니다
|
||||
|
||||
1. Arduino가 USB로 연결되어 있는지 확인
|
||||
2. Arduino IDE에서 올바른 포트가 선택되어 있는지 확인
|
||||
3. 다른 프로그램(Arduino IDE 시리얼 모니터 등)이 포트를 사용 중인지 확인
|
||||
4. `app.py` 를 수정하여 포트를 수동으로 지정:
|
||||
|
||||
```python
|
||||
# app.py 마지막 부분 수정
|
||||
port = "COM3" # 또는 /dev/ttyUSB0 (Linux), /dev/cu.usbserial (macOS)
|
||||
```
|
||||
|
||||
### 웹 페이지가 열리지 않습니다
|
||||
|
||||
1. Python 서버가 정상적으로 실행 중인지 확인
|
||||
2. 방화벽이 5000 포트를 차단하고 있는지 확인
|
||||
3. 브라우저 캐시를 삭제하고 새로고침 (`Ctrl+F5`)
|
||||
|
||||
### 데이터가 표시되지 않습니다
|
||||
|
||||
1. Arduino 시리얼 모니터가 닫혀있는지 확인 (포트 충돌)
|
||||
2. Arduino가 제대로 작동하는지 Arduino IDE 시리얼 모니터로 먼저 확인
|
||||
3. 브라우저 개발자 도구(F12)의 Console 탭에서 에러 확인
|
||||
|
||||
## 기술 스택
|
||||
|
||||
### 백엔드
|
||||
- **Flask**: 웹 서버 프레임워크
|
||||
- **pyserial**: Arduino 시리얼 통신
|
||||
- **Flask-SocketIO**: 실시간 WebSocket 통신
|
||||
- **eventlet**: 비동기 서버 처리
|
||||
|
||||
### 프론트엔드
|
||||
- **Chart.js**: 실시간 그래프 라이브러리
|
||||
- **Socket.IO**: 실시간 양방향 통신
|
||||
- **HTML/CSS/JavaScript**: 웹 인터페이스
|
||||
|
||||
## 커스터마이징
|
||||
|
||||
### 그래프 데이터 포인트 수 변경
|
||||
|
||||
`templates/index.html` 파일에서:
|
||||
|
||||
```javascript
|
||||
const maxDataPoints = 50; // 원하는 숫자로 변경
|
||||
```
|
||||
|
||||
### 측정 간격 조절
|
||||
|
||||
Arduino 코드의 `measureDelay` 변수 조절 또는 웹에서 `+`/`-` 키로 조절
|
||||
|
||||
### 서버 포트 변경
|
||||
|
||||
`app.py` 마지막 부분:
|
||||
|
||||
```python
|
||||
socketio.run(app, host='0.0.0.0', port=5000, debug=False) # 포트 번호 변경
|
||||
```
|
||||
|
||||
## 라이선스
|
||||
|
||||
이 프로젝트는 교육 및 연구 목적으로 자유롭게 사용할 수 있습니다.
|
||||
Reference in New Issue
Block a user