A同学的ESP32代码:

import machine
import network
import utime
from umqtt.robust import MQTTClient

# WiFi配置
WIFI_SSID = "your_wifi_ssid"
WIFI_PASSWORD = "your_wifi_password"

# MQTT服务器配置
MQTT_SERVER = "mqtt_server_ip"
MQTT_PORT = 1883
MQTT_TOPIC = ["B_topic", "C_topic", "D_topic"]

# 阈值和报警值
THRESHOLD = 10
ALARM_THRESHOLD = 20

# OLED配置
OLED_SCL_PIN = 22
OLED_SDA_PIN = 21
OLED_ADDR = 0x3C

# 蜂鸣器配置
BUZZER_PIN = 17

# 初始化WiFi连接
def connect_wifi():
    station = network.WLAN(network.STA_IF)
    station.active(True)
    station.connect(WIFI_SSID, WIFI_PASSWORD)
    while not station.isconnected():
        utime.sleep(1)
    print("WiFi connected")

# 初始化MQTT连接
def connect_mqtt():
    client = MQTTClient(client_id="A_client", server=MQTT_SERVER, port=MQTT_PORT)
    client.connect()
    client.set_callback(on_message)
    for topic in MQTT_TOPIC:
        client.subscribe(topic)
    return client

# 接收MQTT消息的回调函数
def on_message(topic, message):
    print("Received message: ", message)
    uart.write(message)  # 将消息通过串口发送给RP2040

# 初始化OLED屏幕
def init_oled():
    i2c = machine.I2C(scl=machine.Pin(OLED_SCL_PIN), sda=machine.Pin(OLED_SDA_PIN))
    display = ssd1306.SSD1306_I2C(128, 64, i2c, addr=OLED_ADDR)
    return display

# 在OLED上显示数据信息
def display_data(display, data):
    display.fill(0)
    display.text("Data:", 0, 0)
    display.text(data, 0, 16)
    display.show()

# 闪烁OLED屏幕
def blink_oled(display):
    for _ in range(5):
        display.fill(0)
        display.show()
        utime.sleep(0.5)
        display.text("Problem", 0, 0)
        display.show()
        utime.sleep(0.5)

# 发出报警信号
def alarm():
    buzzer = machine.Pin(BUZZER_PIN, machine.Pin.OUT)
    for _ in range(10):
        buzzer.on()
        utime.sleep(0.1)
        buzzer.off()
        utime.sleep(0.1)

# 主程序
def main():
    connect_wifi()
    mqtt_client = connect_mqtt()
    display = init_oled()
    uart = machine.UART(1, 115200)  # 初始化串口
    while True:
        mqtt_client.check_msg()  # 检查MQTT消息
        if uart.any():
            data = uart.read().decode().strip()
            display_data(display, data)
            if int(data) > THRESHOLD:
                blink_oled(display)
                alarm()
        utime.sleep(1)

if __name__ == "__main__":
    main()

A同学的RP2040代码:

import machine
import utime

# 阈值和报警值
THRESHOLD = 10
ALARM_THRESHOLD = 20

# 初始化串口
uart = machine.UART(0, baudrate=115200, tx=machine.Pin(0), rx=machine.Pin(1))

# 检测温度、湿度和电压
def read_sensor_values():
    dht11 = DHT11(machine.Pin(2))
    temperature = dht11.temperature()
    humidity = dht11.humidity()
    voltage = machine.ADC(26).read_u16() * 3.3 / (2**16)
    return temperature, humidity, voltage

# 发送数据给A同学
def send_data_to_a(data):
    uart.write(str(data).encode())

# 主程序
def main():
    while True:
        temperature, humidity, voltage = read_sensor_values()
        data = {
            "temperature": temperature,
            "humidity": humidity,
            "voltage": voltage
        }
        send_data_to_a(data)
        if any(value > THRESHOLD for value in data.values()):
            led = machine.Pin(25, machine.Pin.OUT)
            for _ in range(5):
                led.toggle()
                utime.sleep(0.5)
        utime.sleep(1)

if __name__ == "__main__":
    main()

B同学的ESP32代码:

import machine
import network
import utime
from umqtt.robust import MQTTClient

# WiFi配置
WIFI_SSID = "your_wifi_ssid"
WIFI_PASSWORD = "your_wifi_password"

# MQTT服务器配置
MQTT_SERVER = "mqtt_server_ip"
MQTT_PORT = 1883
MQTT_TOPIC = "A_topic"

# 阈值和报警值
THRESHOLD = 10
ALARM_THRESHOLD = 20

# WS2812灯配置
WS2812_PIN = 16
WS2812_NUM_LEDS = 1

# DS18B20温度传感器配置
DS18B20_PIN = 4

# 初始化WiFi连接
def connect_wifi():
    station = network.WLAN(network.STA_IF)
    station.active(True)
    station.connect(WIFI_SSID, WIFI_PASSWORD)
    while not station.isconnected():
        utime.sleep(1)
    print("WiFi connected")

# 初始化MQTT连接
def connect_mqtt():
    client = MQTTClient(client_id="B_client", server=MQTT_SERVER, port=MQTT_PORT)
    client.connect()
    return client

# 检测温度、湿度和电压
def read_sensor_values():
    dht11 = DHT11(machine.Pin(2))
    temperature = dht11.temperature()
    humidity = dht11.humidity()
    voltage = machine.ADC(26).read_u16() * 3.3 / (2**16)
    return temperature, humidity, voltage

# 判断是否超过阈值
def check_threshold(data):
    return any(value > THRESHOLD for value in data.values())

# 闪烁WS2812灯
def blink_ws2812():
    ws2812 = neopixel.NeoPixel(machine.Pin(WS2812_PIN), WS2812_NUM_LEDS)
    for _ in range(10):
        ws2812[0] = (255, 0, 0)
        ws2812.write()
        utime.sleep(0.5)
        ws2812[0] = (0, 255, 0)
        ws2812.write()
        utime.sleep(0.5)

# 打开DS18B20采集温度
def read_ds18b20_temperature():
    ds18b20 = ds18x20.DS18X20(machine.Pin(DS18B20_PIN))
    roms = ds18b20.scan()
    ds18b20.convert_temp()
    utime.sleep_ms(750)
    temperature = ds18b20.read_temp(roms[0])
    return temperature

# 主程序
def main():
    connect_wifi()
    mqtt_client = connect_mqtt()
    while True:
        temperature, humidity, voltage = read_sensor_values()
        data = {
            "temperature": temperature,
            "humidity": humidity,
            "voltage": voltage
        }
        mqtt_client.publish(MQTT_TOPIC, str(data))
        if check_threshold(data):
            blink_ws2812()
            temperature = read_ds18b20_temperature()
            print("Temperature: ", temperature)
        utime.sleep(1)

if __name__ == "__main__":
    main()

C同学的ESP32代码:

import machine
import network
import utime
from umqtt.robust import MQTTClient

# WiFi配置
WIFI_SSID = "your_wifi_ssid"
WIFI_PASSWORD = "your_wifi_password"

# MQTT服务器配置
MQTT_SERVER = "mqtt_server_ip"
MQTT_PORT = 1883
MQTT_TOPIC = "A_topic"

# 阈值和报警值
THRESHOLD = 10
ALARM_THRESHOLD = 20

# WS2812灯配置
WS2812_PIN = 16
WS2812_NUM_LEDS = 1

# DS18B20温度传感器配置
DS18B20_PIN = 4

# 初始化WiFi连接
def connect_wifi():
    station = network.WLAN(network.STA_IF)
    station.active(True)
    station.connect(WIFI_SSID, WIFI_PASSWORD)
    while not station.isconnected():
        utime.sleep(1)
    print("WiFi connected")

# 初始化MQTT连接
def connect_mqtt():
    client = MQTTClient(client_id="C_client", server=MQTT_SERVER, port=MQTT_PORT)
    client.connect()
    return client

# 检测温度、湿度和电压
def read_sensor_values():
    dht11 = DHT11(machine.Pin(2))
    temperature = dht11.temperature()
    humidity = dht11.humidity()
    voltage = machine.ADC(26).read_u16() * 3.3 / (2**16)
    return temperature, humidity, voltage

# 判断是否超过阈值
def check_threshold(data):
    return any(value > THRESHOLD for value in data.values())

# 闪烁WS2812灯
def blink_ws2812():
    ws2812 = neopixel.NeoPixel(machine.Pin(WS2812_PIN), WS2812_NUM_LEDS)
    for _ in range(10):
        ws2812[0] = (255, 0, 0)
        ws2812.write()
        utime.sleep(0.5)
        ws2812[0] = (0, 255, 0)
        ws2812.write()
        utime.sleep(0.5)

# 打开DS18B20采集温度
def read_ds18b20_temperature():
    ds18b20 = ds18x20.DS18X20(machine.Pin(DS18B20_PIN))
    roms = ds18b20.scan()
    ds18b20.convert_temp()
    utime.sleep_ms(750)
    temperature = ds18b20.read_temp(roms[0])
    return temperature

# 主程序
def main():
    connect_wifi()
    mqtt_client = connect_mqtt()
    while True:
        temperature, humidity, voltage = read_sensor_values()
        data = {
            "temperature": temperature,
            "humidity": humidity,
            "voltage": voltage
        }
        mqtt_client.publish(MQTT_TOPIC, str(data))
        if check_threshold(data):
            blink_ws2812()
            temperature = read_ds18b20_temperature()
            print("Temperature: ", temperature)
        utime.sleep(1)

if __name__ == "__main__":
    main()

D同学的ESP32代码:

import machine
import network
import utime
from umqtt.robust import MQTTClient

# WiFi配置
WIFI_SSID = "your_wifi_ssid"
WIFI_PASSWORD = "your_wifi_password"

# MQTT服务器配置
MQTT_SERVER = "mqtt_server_ip"
MQTT_PORT = 1883
MQTT_TOPIC = "A_topic"

# 阈值和报警值
THRESHOLD = 10
ALARM_THRESHOLD = 20

# WS2812灯配置
WS2812_PIN = 16
WS2812_NUM_LEDS = 1

# DS18B20温度传感器配置
DS18B20_PIN = 4

# 初始化WiFi连接
def connect_wifi():
    station = network.WLAN(network.STA_IF)
    station.active(True)
    station.connect(WIFI_SSID, WIFI_PASSWORD)
    while not station.isconnected():
        utime.sleep(1)
    print("WiFi connected")

# 初始化MQTT连接
def connect_mqtt():
    client = MQTTClient(client_id="D_client", server=MQTT_SERVER, port=MQTT_PORT)
    client.connect()
    return client

# 检测温度、湿度和电压
def read_sensor_values():
    dht11 = DHT11(machine.Pin(2))
    temperature = dht11.temperature()
    humidity = dht11.humidity()
    voltage = machine.ADC(26).read_u16() * 3.3 / (2**16)
    return temperature, humidity, voltage

# 判断是否超过阈值
def check_threshold(data):
    return any(value > THRESHOLD for value in data.values())

# 闪烁WS2812灯
def blink_ws2812():
    ws2812 = neopixel.NeoPixel(machine.Pin(WS2812_PIN), WS2812_NUM_LEDS)
    for _ in range(10):
        ws2812[0] = (255, 0, 0)
        ws2812.write()
        utime.sleep(0.5)
        ws2812[0] = (0, 255, 0)
        ws2812.write()
        utime.sleep(0.5)

# 打开DS18B20采集温度
def read_ds18b20_temperature():
    ds18b20 = ds18x20.DS18X20(machine.Pin(DS18B20_PIN))
    roms = ds18b20.scan()
    ds18b20.convert_temp()
    utime.sleep_ms(750)
    temperature = ds18b20.read_temp(roms[0])
    return temperature

# 主程序
def main():
    connect_wifi()
    mqtt_client = connect_mqtt()
    while True:
        temperature, humidity, voltage = read_sensor_values()
        data = {
            "temperature": temperature,
            "humidity": humidity,
            "voltage": voltage
        }
        mqtt_client.publish(MQTT_TOPIC, str(data))
        if check_threshold(data):
            blink_ws2812()
            temperature = read_ds18b20_temperature()
            print("Temperature: ", temperature)
        utime.sleep(1)

if __name__ == "__main__":
    main()

请注意,以上代码仅为示例,具体实现可能需要根据硬件和网络配置进行调整

1 A同学的代码: - 在ESP32上使用MQTT客户端连接到服务器订阅来自B、C、D同学的主题并接收消息。 - 使用串口将接收到的消息传输给RP2040。 - 在RP2040上判断接收到的信息是否超过阈值。 - 如果超过阈值通过OLED屏幕闪烁显示问题的采集端并显示出问题的参数。 - 如果任何一个参数超过报警值使用蜂鸣器发出报警信号。 - 如果没有超过阈值将接收到的数据信

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

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