首页 > 编程问答 >用于从连接到 LAN 交换机的四个 Arduino 扩展板读取/保存数据的 Python 代码

用于从连接到 LAN 交换机的四个 Arduino 扩展板读取/保存数据的 Python 代码

时间:2024-08-01 15:42:18浏览次数:15  
标签:python networking

我有四个 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 客户端库。

标签:python,networking
From: 78819637

相关文章

  • 使用 Python 生产者和消费者在 Kubernetes minikube 上设置 Kafka Kraft
    我正在尝试从kubernetes集群外部连接到kubernetesminikubekafkapod。服务器启动没有任何问题,但我无法设法将本地kafka生产者/消费者连接到外部kafkapod。在集群内的kafka服务器映像上,我将bootstrap-server设置为:bin/kafka-topics.sh--create--bootst......
  • python llama_index.indices.list.retrievers 导入错误
    fromllama_indeximportGPTListIndexfromllama_index.indices.list.retrieversimportListIndexLLMRetrieverdocuments=SimpleDirectoryReader('./data').load_data()index=GPTListIndex.from_documents(documents,service_context=service_context)r......
  • 如何使用 python 和 bs4 修复抓取 web 表输出 csv
    请帮帮我,,我想在“td”、“Barcode”和“namaproduk”中获取2个数据,但我得到的数据非常糟糕。我应该修复什么?importcsvimportrequestsfrombs4importBeautifulSoupoutfile=open("dataaa.csv","w",newline='')writer=csv.writer(outfile)page=0whilepag......
  • 基于Django的超市小程序+47822(免费领源码)可做计算机毕业设计JAVA、PHP、爬虫、APP、小
    基于django超市小程序摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,超市小程序被用户普遍使用,为方便用户能够可以随时进行超市小程序的数据信息管理,特开发了基于djan......
  • 【优秀python django系统案例】基于python的医院挂号管理系统,角色包括医生、患者、管
    随着信息技术的迅猛发展,传统的医院挂号管理方式面临着效率低下、排队时间长、信息不对称等诸多问题。这些问题不仅影响患者的就医体验,也加重了医院工作人员的负担。在此背景下,基于Python的医院挂号管理系统应运而生。该系统旨在通过信息化手段优化挂号流程,提高管理效率,提升医疗......
  • Python-PLAXIS自动化建模技术与典型岩土工程
    原文链接:Python-PLAXIS自动化建模技术与典型岩土工程https://blog.csdn.net/2301_78164062/article/details/140607885?spm=1001.2014.3001.5501一:Plaxis软件及PlaxisPythonAPI环境搭建1、Plaxis2D\Plaxis3D软件2、面向对象编程语言Python及其开发环境Spyder3、Plaxis输......
  • 在Conda环境中安装python内核
    我刚刚开始使用jupyter笔记本进行我的开发过程。我首先创建一个新的python环境:$condacreate-ntestenv然后激活它:$sourceactivatetestenv并安装python内核模块:$pipinstallipykernel现在,模糊性开始了。我只想专门为我的活动环境创建一个新内核。......
  • C++11 中的 python 海象运算符 (:=) 等效吗?
    最近我在Python中经常使用:=运算符,这样:ifmy_object:=SomeClass.function_that_returns_object():#dosomethingwiththisobjectifitexistsprint(my_object.some_attribute)问题有没有办法在c++11中做到这一点而不使用stdlib?例如......
  • Python 自动创建阿里云 OSS 桶并配置静态网站托管
    在本文中,我们将介绍如何使用Python和阿里云OSSSDK自动创建OSS桶(如果不存在),并为新创建的桶配置静态网站托管。这对于自动化部署和管理静态网站非常有用。前提条件安装阿里云OSSSDK:pipinstalloss2准备好阿里云OSS的访问密钥(AccessKeyID和AccessKeySecret......
  • visual studio 2019下Python的开发环境搭建
    Python的开发环境有各种各样的,在Windows下可以通过各种IDE(IIntegratedDevelopmentEnvironment)来进行开发,比如Pycharm,Spyder,Thonny,Eclipse+PyDev等等一些琳琅满目的编辑器,当然还有我的选择VisualStudio。之所以会选择VS,是因为VS本身就是一个功能非常强大的集成开发环境,其优......