from machine import Pin, ADC
from time import sleep
import network
from umqtt.simple import MQTTClient
# 巴法云平台配置
SERVER = "bemfa.com"
PORT = 9501
PRIVATE_KEY = "3e74bc9a643481be57b70de123a7e419" # 私钥
TOPIC = "MQ2" # 主题名
# WiFi 配置
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASSWORD = ""
# 传感器配置
gas_pin = 34
gas_ADC = ADC(Pin(gas_pin))
gas_ADC.atten(ADC.ATTN_11DB) # 11dB 衰减,最大输入电压约 3.6V
# WiFi连接函数
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('正在连接WiFi...')
wlan.connect(WIFI_SSID, WIFI_PASSWORD)
while not wlan.isconnected():
pass
print('WiFi连接成功,网络配置:', wlan.ifconfig())
def sub_callback(topic, msg):
print('收到来自主题 %s 的消息: %s' % (topic, msg))
# 初始化MQTT客户端
def init_mqtt():
client = MQTTClient(PRIVATE_KEY, SERVER, PORT)
client.set_callback(sub_callback)
try:
client.connect()
client.subscribe(TOPIC.encode())
print(f'已连接到MQTT服务器 {SERVER},订阅主题: {TOPIC}')
return client
except Exception as e:
print(f'MQTT连接失败: {e}')
return None
# 主程序
def main():
connect_wifi()
mqtt_client = init_mqtt()
if mqtt_client is None:
print('MQTT连接失败,使用HTTP上传数据')
while True:
# 读取传感器
gas_value = gas_ADC.read()
print(f'传感器值: {gas_value}')
# 发布数据到MQTT
if mqtt_client:
try:
mqtt_client.publish(TOPIC.encode(), str(gas_value).encode())
mqtt_client.check_msg() # 检查订阅消息
except Exception as e:
print(f'MQTT发布失败: {e}')
mqtt_client = init_mqtt()
sleep(2) # 每2秒上传一次
if __name__ == '__main__':
main()