{ "title": "ESP32 和 RP2040 微型 Python 代码:基于 MQTT 的多节点数据采集与报警系统", "description": "本项目使用 ESP32 和 RP2040 微控制器构建了一个基于 MQTT 的多节点数据采集与报警系统。系统包括四个节点,分别由 A、B、C、D 同学负责。每个节点负责采集不同的传感器数据,并将数据通过 MQTT 发布给中央节点,由中央节点进行数据处理和报警。", "keywords": "ESP32, RP2040, MQTT, 数据采集, 报警, 微型 Python, 多节点系统, 传感器", "content": "\n\n## A 同学的代码:\n\nESP32 代码:\n\npython\nimport network\nfrom umqtt.simple import MQTTClient\nimport machine\nimport ujson\n\n# WiFi 连接参数\nWIFI_SSID = "your_wifi_ssid"\nWIFI_PASSWORD = "your_wifi_password"\n\n# MQTT 服务器参数\nMQTT_SERVER = "mqtt_server_ip"\nMQTT_PORT = 1883\nMQTT_TOPIC = "topic/A"\n\n# 创建 WiFi 连接\nwifi = network.WLAN(network.STA_IF)\nwifi.active(True)\nwifi.connect(WIFI_SSID, WIFI_PASSWORD)\nwhile not wifi.isconnected():\n pass\n\n# 创建 MQTT 客户端\nclient = MQTTClient("A", MQTT_SERVER, MQTT_PORT)\n\n# 订阅 B、C、D 同学的主题\nclient.subscribe(b"topic/B")\nclient.subscribe(b"topic/C")\nclient.subscribe(b"topic/D")\n\n# 创建串口对象\nuart = machine.UART(1, baudrate=115200)\n\n# MQTT 消息回调函数\ndef mqtt_callback(topic, msg):\n try:\n data = ujson.loads(msg)\n uart.write(msg)\n rp2040_message = uart.read()\n if rp2040_message:\n rp2040_data = ujson.loads(rp2040_message)\n if rp2040_data["exceed_threshold"]:\n display_problem(rp2040_data)\n else:\n display_data(rp2040_data)\n except Exception as e:\n print("Error: ", e)\n\n# 显示问题数据\ndef display_problem(data):\n # 通过 OLED 屏幕闪烁显示问题的采集端,并显示出问题的参数\n pass\n\n# 显示数据信息\ndef display_data(data):\n # 将接收到的数据信息显示在 OLED 上\n pass\n\n# 设置 MQTT 消息回调\nclient.set_callback(mqtt_callback)\n\n# 连接到 MQTT 服务器\nclient.connect()\n\n# 循环接收 MQTT 消息\nwhile True:\n client.check_msg()\n machine.idle()\n\n\nRP2040 代码:\n\npython\nimport machine\nimport dht\nfrom machine import Pin, ADC, UART\nimport utime\nimport ujson\nimport network\nfrom umqtt.simple import MQTTClient\n\n# WiFi 连接参数\nWIFI_SSID = "your_wifi_ssid"\nWIFI_PASSWORD = "your_wifi_password"\n\n# MQTT 服务器参数\nMQTT_SERVER = "mqtt_server_ip"\nMQTT_PORT = 1883\nMQTT_TOPIC = "topic/A"\n\n# 创建 WiFi 连接\nwifi = network.WLAN(network.STA_IF)\nwifi.active(True)\nwifi.connect(WIFI_SSID, WIFI_PASSWORD)\nwhile not wifi.isconnected():\n pass\n\n# 创建 MQTT 客户端\nclient = MQTTClient("B", MQTT_SERVER, MQTT_PORT)\n\n# 创建 DHT11 对象和 DS18B20 对象\ndht11 = dht.DHT11(machine.Pin(2))\nds18b20 = machine.DS18B20(machine.Pin(3))\n\n# 创建 ADC 对象\nad = ADC(0)\n\n# 创建串口对象\nuart = UART(1, baudrate=115200)\n\n# 发布消息给 A 同学的主题\ndef publish_message(data):\n client.publish(MQTT_TOPIC, ujson.dumps(data))\n\n# 检测 DHT11 温度值、湿度值和电位器电压 ADC 值\ndef detect_values():\n dht11.measure()\n temperature = dht11.temperature()\n humidity = dht11.humidity()\n voltage = adc.read()\n\n # 判断检测到的值是否超过阈值\n if temperature > threshold_temperature:\n led_indicator("temperature")\n if humidity > threshold_humidity:\n led_indicator("humidity")\n if voltage > threshold_voltage:\n led_indicator("voltage")\n\n # 打开 DS18B20 采集温度\n ds18b20.convert_temp()\n utime.sleep_ms(750)\n temperature_ds18b20 = ds18b20.read_temp()\n\n # 将温度值和超过阈值的参数传递给 A 同学\n data = {\n "temperature": temperature,\n "humidity": humidity,\n "voltage": voltage,\n "temperature_ds18b20": temperature_ds18b20,\n "exceed_threshold": (temperature > threshold_temperature or humidity > threshold_humidity or voltage > threshold_voltage)\n }\n publish_message(data)\n\n# LED 指示器\ndef led_indicator(param):\n # 交替闪烁红绿光的 WS2812 灯指示具体超过阈值的参数\n pass\n\n# 设置 MQTT 消息回调\nclient.set_callback(mqtt_callback)\n\n# 连接到 MQTT 服务器\nclient.connect()\n\n# 循环检测和发送数据\nwhile True:\n detect_values()\n machine.idle()\n\n\n请注意,以上代码仅为示例,具体实现可能需要根据实际情况进行调整和完善。\n\n## B、C、D 同学的代码:\n\nB、C、D 同学的代码与 B 同学的代码类似,只是需要修改 MQTT 主题和一些参数,例如检测的传感器类型等。\n\n## 总结:\n\n本项目使用 ESP32 和 RP2040 构建了一个基于 MQTT 的多节点数据采集与报警系统,可以实现不同传感器数据的采集、数据传输、报警处理等功能。该系统可以根据实际需求进行扩展和改进,例如增加更多传感器节点、添加更多报警功能等。\n

ESP32 和 RP2040 微型 Python 代码:基于 MQTT 的多节点数据采集与报警系统

原文地址: https://www.cveoy.top/t/topic/pZ8R 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录