我有四个 Arduino 扩展板连接到 LAN 交换机。每个人都会发出一条“Hello Jane”消息。 LAN 交换机已连接到我的 PC。我需要将每个 Arduino 的数据/消息保存在 PC 上的单独文件夹中。请帮助使用 Python 脚本/代码。
我能够看到来自所有四个 Arduino 的消息,但无法将它们保存到文件夹中。是的,与单个 Arduino 连接时能够保存数据/消息。
无法通过 Python 直接与连接到 LAN 交换机的多个 Arduino 设备进行通信。这是因为 LAN 交换机旨在在设备之间路由网络流量,而不是广播消息。
要实现的目标,需要为的 Arduino 设备设置网络通信。以下是两种常见的方法:
1. 使用套接字编程:
- 为每个 Arduino 分配唯一的 IP 地址和端口号。
- 在每个 Arduino 上,编写代码以使用 UDP 或 TCP 协议通过网络发送“Hello Jane”消息。
- 在的 Python 脚本中,创建套接字服务器以侦听来自每个 Arduino 的消息。
- 使用 Python 代码,在的 PC 上创建单独的文件夹并根据其来源 IP 地址和端口号保存来自每个 Arduino 的消息。
2. 使用 MQTT 消息代理:
- 设置 MQTT 消息代理(例如 Mosquitto)。
- 对每个 Arduino 进行编程,以将“Hello Jane”消息发布到唯一主题,例如,“arduino1/hello”。
- 在的 Python 脚本中,使用 MQTT 客户端库连接到消息代理。
- 订阅来自每个 Arduino 的主题,并在收到消息时,使用 Python 代码在的 PC 上创建单独的文件夹并将消息保存到相应的文件中。
以下是使用 MQTT 方法的 Python 代码示例:
import paho.mqtt.client as mqtt
# 定义 MQTT 代理的地址
mqtt_broker = "your_mqtt_broker_address"
mqtt_port = 1883 # 默认 MQTT 端口
# 为每个 Arduino 创建回调函数
def on_message_arduino1(client, userdata, message):
save_message("arduino1", message.payload.decode())
def on_message_arduino2(client, userdata, message):
save_message("arduino2", message.payload.decode())
def on_message_arduino3(client, userdata, message):
save_message("arduino3", message.payload.decode())
def on_message_arduino4(client, userdata, message):
save_message("arduino4", message.payload.decode())
# 创建 MQTT 客户端并连接到代理
client = mqtt.Client()
client.connect(mqtt_broker, mqtt_port)
# 订阅来自每个 Arduino 的主题
client.message_callback_add("arduino1/hello", on_message_arduino1)
client.message_callback_add("arduino2/hello", on_message_arduino2)
client.message_callback_add("arduino3/hello", on_message_arduino3)
client.message_callback_add("arduino4/hello", on_message_arduino4)
client.subscribe([("arduino1/hello", 0), ("arduino2/hello", 0),
("arduino3/hello", 0), ("arduino4/hello", 0)])
# 定义一个函数来保存来自每个 Arduino 的消息
def save_message(arduino_id, message):
# 为 Arduino ID 创建一个文件夹(如果它不存在)
folder_path = f"data/{arduino_id}"
os.makedirs(folder_path, exist_ok=True)
# 创建一个文件名并保存消息
file_name = f"{folder_path}/message_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.txt"
with open(file_name, "w") as f:
f.write(message)
# 开始监听传入的消息
client.loop_forever()
这将:
- 连接到指定的 MQTT 代理。
- 订阅来自每个 Arduino 的特定主题(例如,“arduino1/hello”)。
- 定义回调函数,以便在收到来自每个 Arduino 的消息时保存消息。
- 创建一个名为“data”的文件夹,并在其中为每个 Arduino 创建子文件夹。
- 将接收到的消息保存到相应 Arduino 文件夹中的单独文本文件中。
请记住,需要为的设置修改 Arduino 代码、主题名称、代理地址和其他相关参数。
此代码还引入了“os”和“datetime”模块,用于创建目录和生成时间戳文件名。请确保使用
pip install paho-mqtt
安装 Paho MQTT 客户端库。