from machine import Pin
import time
from hcsr04 import HCSR04
import network
from umqtt.simple import MQTTClient
# Wi-Fi设置
ssid = 'Wokwi-GUEST'
password = ''
# 巴法云MQTT服务器设置
mqtt_server = 'bemfa.com'
mqtt_port = 9501
mqtt_user = 'd353077c44054dedb9bc28d55b361fd7'
mqtt_topic = 'distance'
# 初始化HC-SR04传感器
hcsr04 = HCSR04(trigger_pin=4, echo_pin=27)
# 连接Wi-Fi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
while not wlan.isconnected():
time.sleep(1)
print('.', end='') # 打印点以显示连接进度
print('\nConnected to WiFi')
# MQTT客户端
client = MQTTClient(client_id=mqtt_user, server=mqtt_server, user=mqtt_user, password='', port=mqtt_port)
# 尝试连接到MQTT服务器,如果失败则打印错误信息
try:
client.connect()
print('Connected to MQTT server')
except Exception as e:
print('Failed to connect to MQTT server:', e)
time.sleep(10) # 等待10秒后重启,避免无限循环
raise # 重新抛出异常,以便在Wokwi中重启模拟
def send_distance():
while True:
try:
# 获取以厘米为单位的距离
distance = hcsr04.distance_cm()
if distance < 0: # 忽略负数距离值
print('Invalid distance reading')
distance = 0
else:
print('Distance: {:.2f} cm'.format(distance))
client.publish(mqtt_topic, '{:.2f}'.format(distance))
except Exception as e:
print('Error sending distance:', e)
time.sleep(1)
send_distance()