1 A同学的代码: - 在ESP32上使用MQTT客户端连接到服务器订阅来自B、C、D同学的主题并接收消息。 - 使用串口将接收到的消息传输给RP2040。 - 在RP2040上判断接收到的信息是否超过阈值。 - 如果超过阈值通过OLED屏幕闪烁显示问题的采集端并显示出问题的参数。 - 如果任何一个参数超过报警值使用蜂鸣器发出报警信号。 - 如果没有超过阈值将接收到的数据信
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()
请注意,以上代码仅为示例,具体实现可能需要根据硬件和网络配置进行调整
原文地址: https://www.cveoy.top/t/topic/ihVE 著作权归作者所有。请勿转载和采集!