from machine import Pin
import time
import network
from umqtt.simple import MQTTClient
# Wi-Fi网络配置信息
WIFI_SSID = 'Wokwi-GUEST'
WIFI_PASSWORD = ''
# 巴法云MQTT服务器配置信息
MQTT_SERVER = 'bemfa.com'
MQTT_PORT = 9501
MQTT_USER = '5b25f8bf5da45e3b97fe1d6218102ac6'
MQTT_TOPIC = 'HX711'
# 连接Wi-Fi网络
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(WIFI_SSID, WIFI_PASSWORD)
print("正在连接Wi-Fi...", end='')
while not wlan.isconnected():
time.sleep(1)
print('.', end='') # 打印点以显示连接进度
print("\n已成功连接到Wi-Fi网络。")
return wlan
# 连接MQTT服务器
def connect_mqtt():
client = MQTTClient(client_id=MQTT_USER, server=MQTT_SERVER, user=MQTT_USER, password='', port=MQTT_PORT)
try:
client.connect()
print("已成功连接到MQTT服务器。")
return client
except Exception as e:
print(f"连接MQTT服务器失败: {e}")
time.sleep(10) # 等待10秒后重启,避免无限循环
raise # 重新抛出异常,以便在特定环境(如Wokwi)中重启模拟
# 引脚定义
DT_PIN = 25
SCK_PIN = 26
# 初始化引脚
data = Pin(DT_PIN, Pin.IN)
clock = Pin(SCK_PIN, Pin.OUT)
# HX711 增益设置 (128, 64, 32)
GAIN = 128
# 校准因子(根据实际情况调整)
CALIBRATION_FACTOR = 210
def read_hx711():
# 等待数据准备好
while data.value():
pass
# 读取 24 位数据
count = 0
for _ in range(24):
clock.value(1)
count = count << 1
clock.value(0)
if data.value():
count += 1
# 设置增益
for _ in range(GAIN):
clock.value(1)
clock.value(0)
# 转换数据
if count > 0x7FFFFF:
count -= 0xFFFFFF
return count
def get_weight():
raw_data = read_hx711()
weight = raw_data / CALIBRATION_FACTOR
return weight
def main():
print("HX711 重量传感器初始化完成,开始读取数据...")
# 连接Wi-Fi
wifi_connection = connect_wifi()
# 连接MQTT服务器
mqtt_client = connect_mqtt()
# 发送数据
try:
while True:
weight = get_weight()
mqtt_client.publish(MQTT_TOPIC, f"{weight}")
print(f"数据已发布: 当前重量: {weight:.2f} kg")
time.sleep(2) # 根据需要调整延迟时间
except Exception as e:
print(f"发生错误: {e}")
finally:
# 确保在程序退出时关闭连接
if mqtt_client:
mqtt_client.disconnect()
if wifi_connection and wifi_connection.isconnected():
wifi_connection.disconnect()
wifi_connection.active(False)
if __name__ == "__main__":
main()