소개
로드셀과 ESP32/ESP8266을 활용해 정밀한 디지털 저울을 제작해 보세요. 이 프로젝트는 IoT 디바이스에 관심 있는 분들에게 유익하며, 마이크로파이썬을 사용해 빠르게 프로그래밍하고 테스트할 수 있습니다. 아래 필요한 부품, 소프트웨어, 단계별 가이드를 정리했습니다.
필요한 부품
- MCU 보드 선택지 ESP8266 또는 ESP32 보드 중 하나:
- D1 Mini Nodemcu, Nodemcu Lua Lolin, ESP32 Dev Kit 등.
- 디스플레이 0.91인치 OLED I2C 디스플레이 (128x32 픽셀).
- 로드셀 및 컨버터
- 1kg 측정 셀.
- HX711 AD 컨버터.
- 기타 필수 도구 및 부품
- MB-102 브레드보드.
- 점퍼 와이어 케이블.
- 선택 사항: 로직 분석기.
필요한 소프트웨어
- 프로그램 환경
- ESP32: Thonny 또는 μ파이크래프트 IDE.
- 펌웨어: MicroPython (v1.19.1, 2022-06-18).
- 프로젝트 관련 스크립트
- SSD1306.py: OLED 디스플레이용 드라이버.
- oled.py: 디스플레이 API.
- hx711.py: HX711 API.
- scale.py: 주요 운영 프로그램.
단계별 가이드
1단계: Thonny 설치 및 설정
- Thonny IDE 설치
- Thonny 공식 웹사이트에서 프로그램 다운로드.
- Micropython 펌웨어 설치
- ESP32/ESP8266에 Micropython 펌웨어(v1.19.1)을 플래시합니다.
- 플래싱 후 명령줄에서 직접 컨트롤러와 대화하거나 스크립트를 실행할 수 있습니다.
2단계: 하드웨어 연결
- 브레드보드 위에 로드셀, HX711, OLED 디스플레이 및 MCU 연결.
- 점퍼 케이블로 HX711과 MCU 간 신호 연결:
- DT와 SCK 핀을 적절히 배선.
3단계: 프로그램 테스트
- Thonny를 사용해 scale.py 프로그램 실행.
- hx711.py로 HX711 데이터 확인.
- OLED 디스플레이에 무게 값 출력.
4단계: 자동 시작 설정
- boot.py 파일 작성 및 업로드.
- 이 파일은 컨트롤러를 켤 때마다 실행될 프로그램을 지정합니다.
5단계: 디버깅 및 최적화
- 테스트 프로그램 작성으로 함수 및 하드웨어 확인.
- 필요 시 모듈 추가 설치 및 수정.
프로젝트 팁
- Micropython vs Arduino IDE Micropython은 스크립트를 직접 실행해 빠른 테스트가 가능합니다. 하지만 Arduino 환경으로 전환하려면 기존 Micropython 펌웨어를 대체해야 합니다.
- 작은 테스트 프로그램 활용 반복적인 명령어는 매크로로 요약해 시간을 절약하세요.
공급
1x ESP8266 또는 ESP32 보드
D1 Mini Nodemcu(ESP8266-12F WLAN 모듈 포함) 또는
D1 Mini V3 Nodemcu (ESP8266-12F 포함) 또는
Nodemcu Lua Amica 모듈 V2 ESP8266 ESP-12F WiFi 또는
Nodemcu Lua Lolin V3 모듈 ESP8266 ESP-12F WIFI 또는
ESP32 개발 키트 C V4 unplacerated 또는
ESP32 NODEMCU 모듈 WiFi 개발 보드(CP2102 포함) 또는
ESP32 Lolin Lolin32 WiFi Bluetooth 개발 키트
1x 디스플레이
0.91인치 OLED I2C 디스플레이 128 x 32 픽셀
1x 계량 셀 1kg
셀 계량용 HX711 AD 컨버터 1개
1배
다양한 전선
점퍼 와이어 케이블: 3 x 40개, 20cm, M2M / F2M, F2F, 각각 가능할 수도 있습니다.
65일. 브레드보드용 점퍼 와이어 케이블 플러그인 브리지
선택적
소프트웨어
ESP32의 플래싱 및 프로그래밍:
Thonny 또는
ESP32에 사용된 펌웨어:
ESP8266에 사용된 펌웨어:
프로젝트의 마이크로파이썬 프로그램:
SSD1306.PY OLED 디스플레이용 하드웨어 드라이버
oled.py OLED 디스플레이용 API
geometer_30.py 숫자 표시를 위한 큰 문자 집합
hx711.py AX711용 API
scale.py 운영 프로그램
zeichensatz.rar 자신만의 심볼을 만들기 위한 작업 환경
1단계: Thonny 설치
Thonny를 설치하려면 여기에서 자세한 지침 (영어 버전)을 찾을 수 있습니다. 굽기 된 ESP 칩의 Micropython 펌웨어 (2022 년 6 월 18 일 기준)가 어떻게 되는지에 대한 설명도 있습니다.
Micropython은 인터프리터 언어입니다. 항상 전체 프로그램을 플래시하는 Arduino IDE와의 주요 차이점은 컨트롤러가 micropython 명령어를 이해할 수 있도록 ESP32에서 Micropython 펌웨어를 한 번만 플래시하면 된다는 것입니다. Thonny, μpycraft 또는 ESPTOOL을 사용할 수 있습니다. 파이. Thonny의 경우 여기에 프로세스가 설명되어 있습니다.
펌웨어가 깜박이자마자 대화에서 컨트롤러와 쉽게 대화하고, 개별 명령을 테스트하고, 전체 프로그램을 미리 컴파일하고 전송할 필요 없이 즉시 답을 볼 수 있습니다. 이것이 바로 Arduino IDE에서 저를 괴롭히는 것입니다. 프로그램을 짜기 전에 명령 줄을 통해 함수와 전체 프로그램 부분을 시험하고 다듬는 데 구문 및 하드웨어의 간단한 테스트를 확인할 수 있다면 엄청난 시간을 절약 할 수 있습니다. 이를 위해 저는 항상 작은 테스트 프로그램을 만드는 것을 좋아합니다. 일종의 매크로로서 반복되는 명령을 요약합니다. 그런 다음 전체 응용 프로그램은 이러한 프로그램 조각에서 개발됩니다.
자동 시작
프로그램이 자율적으로 시작되는 경우 컨트롤러를 켜서 프로그램 텍스트를 새로 만든 빈 타일에 복사합니다. 이 파일을 WorkSpace의 boot.py 아래에 저장하고 ESP 칩에 업로드합니다. 다음에 재설정하거나 켤 때 프로그램이 자동으로 시작됩니다.
테스트 프로그램
Thonny-IDE의 현재 편집기 창에서 프로그램은 F5 버튼을 통해 수동으로 시작됩니다. 이것은 시작 버튼을 마우스로 클릭하거나 메뉴 실행을 통해 수행하는 것보다 더 빠르게 수행할 수 있습니다. 프로그램에 사용된 모듈만 ESP32의 플래시에 있어야 합니다.
그 사이에 Arduino id가 다시 있습니까?
나중에 Arduino IDE와 함께 컨트롤러를 사용하는 경우 일반적인 방법으로 프로그램을 플래시하십시오. 그러나 ESP32/ESP8266는 Micropython을 말한 적이 있다는 사실을 잊어버렸습니다. 반대로, Arduino IDE 또는 AT-Firmware 또는 Lua 또는 ... micropython 펌웨어와 함께 쉽게 제공될 수 있습니다. 프로세스는 항상 여기에 설명된 것과 같습니다.
2단계: 회로 구축
다음은 프로젝트의 회로도이며 ESP32 및 ESP8266에서는 선택 없이 작동합니다. HX711을 연결하기 위한 GPIO는 ESP8266 시작을 방해하지 않고 두 컨트롤러 유형에 대해 동일한 이름을 갖도록 선택됩니다. I2C 버스에 대한 연결만 다르지만 프로그램에 의해 자동으로 할당됩니다.

그림 6: ESP8266의 HX711 스케일

그림 7: ESP32의 HX711 스케일
3단계: HX711용 Micropython 모듈
대부분의 센서 어셈블리와 마찬가지로 HX711 모듈도 운영 소프트웨어가 필요합니다. 불행히도 HX711은 I2C를 지원하지 않습니다. 데이터 전송은 또한 dot 및 dpclk 라인을 통해 직렬 방식으로 발생합니다. 24 비트 플러스 1-3 비트는 채널 A 또는 B의 선택과 보강 설정을 위해 항상 전송됩니다. MSbit(Most Significant bit = 고품질 비트)는 HX711의 첫 번째 비트입니다.
모듈 hx711.py 프로그래밍하기 위해 제조업체의 데이터 시트를 사용했습니다.
예외 클래스는 HX711에 액세스할 수 없는 경우를 다룹니다. 그 다음에는 HX711 클래스의 선언이 이어지며 Devicenotready의 클래스가 상속됩니다. 예외가 throw되면 인스턴스가 생성되고 생성자는 오류 메시지의 출력을 보장합니다.
몇 가지 상수로 시작합니다. 교정 계수는 다양한 알려진 마사지 조각과 계산 도구(예: Libre Office)를 사용한 일부 계량에 의해 결정됩니다. 나는 나중에 올 것이다.
생성자는 두 개의 핀 객체 dot 및 pdsk와 ch의 선택적 채널을 사용합니다. Dout는 HX711의 결과에서 데이터를 수신해야 하기 때문에 입구로 전환됩니다. ESP는 DPSCK 관리를 통해 속도를 지정합니다. channel, tar 및 cal 속성을 선언한 다음 HX711의 Ready 신호를 기다립니다. 오지 않으면 WAITREADY() 하나의 Devicenotready-Exception을 throw합니다. 작동하면 채널 및 게인 설정을 얻고 터미널에서 메시지를 발행합니다. DictionaryChannelandgain은 채널 번호를 일반 텍스트로 변환합니다.
ClosureTime-out()은 sleep() & Co.. 프로그램을 그대로 차단하지 않는 소프트웨어 타이머를 인식합니다. 반환된 함수 compare(): 식별자가 할당된 경우 전달된 시간이 이미 밀리초 단위로 만료되었는지(True) 또는 만료되지 않았는지(false) 여부를 묻습니다.
ISDEVICEREADY() 메서드는 데이터 라인이 GND 전위에 있을 때 True를 반환합니다. 데이터 시트에 따르면 HX711이 데이터를 보낼 준비가 된 경우의 상태입니다. 클럭 라인의 첫 번째 포지티브 플랭크와 함께 HX711은 DOUT 라인에 MSbit를 제공합니다.

그림 8: Logic 2-scan
각 추가 펄스와 함께 비트가 차례로 밀려납니다. 그 동안 ESP는 라인의 상태를 읽고 처리해야 합니다. ESP는 시간 내내 페이스를 설정합니다. 펄스 시퀀스는 125μs이며, 이는 약 8kHz의 클럭에 해당합니다.
로직 분석기와 소프트웨어 Logic 2가 기록되어 있습니다. 데이터 전송에 문제가 있을 때마다 DSO(디지털 메모리 오실로스코프) 또는 8채널의 세계 로직 분석기(La)보다 저렴한 더 작은 도구를 사용하는 것을 좋아합니다. 이 장치는 USB 버스에 연결되어 있으며 버스 파이프에서 무슨 일이 일어나고 있는지 무료 소프트웨어를사용하여 보여줍니다. 충동의 모양이 중요하지 않고 시간 순서만 중요한 곳에서, LA는 금의 가치가 있습니다. DSO는 곡선의 스냅샷만 제공하지만, LA를 오랫동안 느낄 수 있고 흥미로운 장소를 확대할 수 있습니다. Bernd Albrecht의 블로그 게시물 "Logic Analyzer Part 1: Make I2C signals visible"에서 장치에 대한 설명을 찾을 수 있습니다. 여기에는 I2C 버스를 스캔하는 방법도 설명되어 있습니다.
24 개의 데이터 비트를 읽은 후, 1-3 개의 펄스가 발행 된 pdsk, 세금 비트가 사용됩니다. 다음과 같은 의미가 있습니다.

그림 9: 제어 펄스의 의미
이름은 program, WAITREADY() waiting for a true of ISDEVICEREADY() 이지만 이전에는 Readydydelay 의 값에 타이머를 넣었습니다 (3 초). 이 시간 동안 Dout가 낮아지지 않으면 Devicenotready-Sexception이 발생합니다. 이렇게 하면 예외를 가로채지 않는 경우 호출 프로그램이 종료됩니다.
HX711은 데이터를 2보수 값으로 전송합니다. Conpricerult ()는 실제로 MSbit 집합, 비트 23에서 음수 값을 인식합니다. 설정된 경우 레벨 2는 레벨 2입니다.24 실제로 음수를 얻기 위해 뺍니다.
0xc17ac3 = 12679875에는 MSbit가 설정되어 있습니다.
12679875 - 0x1000000 = -4097341
clock()은 PDSCK 라인에서 12.4μs의 양의 펄스를 생성합니다.
channel() No 인수를 간과하면 함수는 현재 채널과 게인 값을 전달합니다. 사전Hx711.channelandgain 일반 텍스트로 번역을 인계하십시오.
채널 번호가 전달되면 올바른 영역을 확인하고 HX711이 준비되었는지 확인한 다음 해당 펄스 수를 PDSCK 라인에 24와 세금 비트를 더한 값으로 푸시합니다.
HX711이 제공하는 원시 값은 수신된 Traw()에 의해 반환됩니다. True가 되거나 인수를 전혀 넘겨주지 않으면 반환 값은 분홍색, 즉 기호가 있는 정수입니다. false를 사용하면 Bloody 값이 비트 시퀀스 raw에 해당하므로 반환됩니다.
HX711의 전송을 기다리고 있으며 수신 버퍼를 0으로 설정합니다.
for 루프에서 PDSCK에 23개의 펄스를 보냅니다. 실행할 때마다 데이터 라인의 LSBIT(LEAST Significant bit = low -quality bit) 대신 비트를 왼쪽으로 한 위치 씩 밉니다. 첫 번째 수신된 비트는 위치 23, MSbit로 이동합니다. 또 다른 클럭 펄스 후 HX711은 LSbit를 데이터 라인으로 푸시하며, 이는 원시 또는 LSbit에만 해당됩니다. 경쟁 외에도 다음 측정에 대한 세금 비트를 클럭해야 합니다.
값의 노이즈를 매끄럽게 하기 위해 단일 측정값뿐만 아니라 여러 측정값의 평균을 사용합니다. 그러면 mean() 메소드가 나오고, 이 메소드는 개별 측정 횟수를 넘겨줍니다.
오염되지 않은 저울은 자연스럽게 ADC 값인 Tara도 제공합니다. 우리는 디스플레이를 0으로 설정할 수 있도록 계량 프로그램을 부팅할 때 항상 이 메서드를 호출합니다. Tara 값은 Dimensions() 메소드를 사용할 수 있도록 저장된 self.are 속성에 있으며, n은 다시 개별 측정 수입니다.
Dimensions() 메소드는 측정된 값에서 Tara를 추출한 다음 보정 계수를 사용하여 그램 By division 단위로 실제 측정값을 계산합니다. 그것이 어떻게 결정되는지는 나중에 설명하겠습니다.
캘리브레이션 중에 매번 HX711.PY 모듈을 ESP에 새로 업로드할 필요 없이 캘리브레이션 계수를 수동으로 처리할 수 있는 경우 이점이 있습니다. 현재 값은 인수 없이 반환됩니다.
wake up() 및 tosleep()은 절전 모드에서 HX711을 간지럽히거나 넣습니다. 라인의 신호 순서는 HX711의 데이터 시트에 의해 지정됩니다.
4단계: OLED 디스플레이용 큰 문자 세트
숫자가 크면 측정값을 더 쉽게 읽을 수 있습니다. 일반적인 8픽셀 대신 30을 기호로 사용합니다. 파일 geometer_30.py에는 관련 정보가 포함되어 있습니다.
따라서 Windows의 TTF 공급에서 고유한 문자 집합을 만들 수 있습니다.
아카이브 zeichensatz.rar Down을 다운로드하고 아무 디렉토리에나 컨텐츠의 압축을 풉니다. 팁을 절약하려면 하드 드라이브나 스틱의 루트 경로에 짧은 이름이 있는 목록을 사용하는 것이 좋습니다. 나에게는 F : \ 글꼴입니다.
탐색기에서 이 디렉토리의 PowerShell 창을 엽니다. 누름 버튼을 누른 상태에서 디렉토리를 마우스 오른쪽 버튼으로 클릭합니다. 그런 다음 여기에서 PowerShell 창 열기를 마우스 왼쪽 버튼으로 클릭합니다.

그림 10: PowerShell 창 열기
프롬프트에 다음 줄을 입력하고 Enter 키를 누릅니다.
. \ Makecharset.bat 브리타닉 30 "" 0123456789,-+KG "" "F: \ fonts \ sources \"

그림 11: 문자 집합이 준비되었습니다.
이제 디렉토리에 새 문자 집합의 픽셀 데이터가 있는 파일이 britannic_30.py. 문자만 "" "0123456789,-+KG" ""로 구현되어 저장 공간을 절약합니다. 위에서 지정한 대로 소스 복사 및 변환 디렉토리의 글꼴 목록에서 다른 기호 속도를 얻을 수 있습니다. 파일 이름은 추가 없이 지정됩니다. TTTF입니다.
5단계: 라이브러리의 운영 소프트웨어
이 프로그램은 scale.py 시작하기 전에 ESP의 플래시에 업로드해야 하는 4개의 외부 모듈, hx711.py, oled.py, SSD1306.PY 및 geometer_30.py에 액세스합니다.
변수 sys.platform 에 대해 ESP는 스스로 결정할 수 있습니다. 그런 다음 I2C 버스에 대해 GPIO 핀이 선언됩니다.
디스플레이 개체를 인스턴스화하고, 디스플레이를 삭제하고, HX711에 연결하기 위한 PIN 개체와 Tara 키에 대한 인스턴스인 버튼을 선언합니다.
Putnumber() 함수는 문자의 픽셀 패턴을 숫자 n으로 배치합니다(Ascii가 아닌 위에서 생성된 추출을 기반으로 함). 패턴의 왼쪽 상단 모서리 위치는 XPOS, YPOS입니다.
절차를 설명하는 파일 geometer_30.py 살펴보십시오. 문자열 chars에는 문자가 나열됩니다. 문자열의 인덱스는 도면 번호입니다. 따라서 "-" 기호는 숫자 11이고 "0"은 숫자 0입니다. 목록번호에서 이 번호는 너비 정보와 픽셀 매트릭스를 사용하여 Tupel을 식별합니다. 이것은 이제 열에 대한 By line column에 분산되고 픽셀은 1이 발견되면 설정됩니다. 그것은 숨겨져 발생합니다. show true has 값이 있는 경우에만 전체 버퍼가 Display로 전송됩니다. 반환 값은 다음 자유 그리기 위치입니다.

그림 12: 부호 0에 대한 행렬
그리기 위치는 0으로 설정되어 있으며, 시작 정보로 "-"기호를 여러 개 표시합니다. 그런 다음 ESP는 HX711에 연결을 시도합니다. 이것이 성공하면 우리는 그것을 깨우고 Gain 128로 채널 A를 보고 self.are 땅 속성에서 TARAWALT를 봅니다.
연결이 작동하지 않으면 터미널에 메시지가 표시되고 디스플레이에 일련의 0이 표시됩니다.
160MHz는 ESP8266 Topspeed용이고 ESP32도 240MHz를 제공합니다.
그런 다음 메인 루프로 이동합니다. Tara 키가 눌렸는지 확인하고 디스플레이에 일련의 쉼표로 이를 확인하고 새 Tara 값을 가져옵니다. 이 기능은 칭량 셀이 온도 드리프트의 영향을 받고 영점을 언제든지 재조정할 수 있기 때문에 유용합니다.
출력에 대한 형식 문자열에는 측정된 값이 공급됩니다. 디스플레이를 분리하고 도면 위치를 0으로 삭제하고 쉼표로 소수점을 입력 한 다음 버퍼의 문자를 끝에서 두 번째까지 씁니다.
마지막 문자의 출력과 함께 버퍼 내용이 디스플레이로 전송됩니다. 다음 라운드는 30초의 휴식 후에 시작됩니다.
6단계: 저울 보정

그림 13: 스케일 교정을 위한 질량 조각
몇 개의 질량 조각이 필요하며, 필요한 경우 질량 조각이 보정되지 않은 경우 주방 또는 문자 저울이 필요합니다. 이 경우, 당신은 뚱뚱한 너트 또는 나사 등을 만들 수 있습니다. 물론 질량은 사용하기 전에 다른 척도로 결정해야 합니다.

그림 14: ESP8266에서 보정
지금 In Thonny scale.py 프로그램을 시작하고 메인 루프 Ctrl+C를 눌러 중단하십시오. HX711 개체는 HX 아래에 있으며 인스턴스화되고 터미널 콘솔에서 액세스할 수 있습니다. 다음 명령으로 시작합니다.
25개의 개별 측정값의 평균에서 Tara 값을 뺍니다. 스케일이 로드되지 않은 경우 결과는 -50...+50 사이여야 합니다.
이제 우리는 덩어리 조각을 차례로 그룹으로 놓아 점점 더 스트레스를 받습니다. 마지막 명령을 다시 시작하고 질량을 그램 단위로 기록하고 터미널에 표시되는 값을 기록할 때마다.
표 : Libre Office Calc 또는 다른 프로그램에 들어가 측정 곡선을 결정 (상관 계수) 및 공식과 함께 표시하겠습니다.

그림 14: 검량선
상관 계수 R2 사실 1은 측정의 정밀도를 나타냅니다. 우리는 -43의 축 섹션을 무시할 수 있습니다. 100,000 주문으로. 직선의 기울기 계수 1104는 우리가 찾는 교정 계수입니다. 이제 이 값을 HX 객체와 공유합니다.
지금 Dimensions() Call up 메소드인 경우 값 0.0 ... 이 표시되어야 합니다.
파일에서 보정 계수를 착용 hx711.py ESP에 업로드하고 프로그램을 새로 시작하십시오 scale.py.
매스가 장착되었을 때 매스가 표시되면 이겼고 어깨를 두드릴 수 있습니다.
표시된 값이 예상 중량보다 약간 높더라도 교정 계수 값에 약간 파일을 추가할 수 있습니다. 확대하면 질량 값이 떨어지고 그 반대의 경우도 마찬가지입니다.
두 번째 부분에서는 OLED를 대형 LED 디스플레이로 교체한 방법을 보여 드리겠습니다. 그때까지.
'ESP32' 카테고리의 다른 글
ESP32 터치 디스플레이를 활용한 멀티페이지 매크로패드 구축 가이드 (0) | 2025.03.12 |
---|---|
온도 및 PIR 센서가 포함된 올인원 RGB LED 컨트롤러 DIY (0) | 2025.03.10 |
ESP32-CAM으로 셀카 및 타임랩스 촬영 프로젝트 📸✨ (0) | 2024.12.12 |
ESP32와 Home Assistant를 이용한 DIY 스마트 에너지 미터 (5) | 2024.10.18 |
ESP32 기반 원격 전원 순환기 스위치 만들기 (2) | 2024.10.03 |