如何通过OPC UA实现两台Raspberry Pi的服务器与客户端连接
树莓派间OPC UA通信实现方案
基础准备
- 确认两台树莓派处于同一局域网,通过
hostname -I命令获取各自IP地址 - 两台设备均安装Python3及pip,缺失时执行
sudo apt install python3 python3-pip完成安装
Server端配置
- 安装OPC UA Python库:
pip install opcua - 编写Server代码(示例):
from opcua import Server import time # 初始化Server server = Server() # 替换<Server_IP>为当前树莓派的IP地址 server.set_endpoint("opc.tcp://<Server_IP>:4840/freeopcua/server/") # 注册自定义命名空间 uri = "http://raspberrypi.opcua.local" idx = server.register_namespace(uri) # 创建对象与变量节点 objects_node = server.get_objects_node() pi_object = objects_node.add_object(idx, "RaspberryPiServer") sensor_data = pi_object.add_variable(idx, "SensorReading", 0) # 设置变量可被Client写入 sensor_data.set_writable() # 启动Server server.start() try: while True: time.sleep(1) # 模拟数据更新,这里可替换为实际传感器采集逻辑 current_val = sensor_data.get_value() + 1 sensor_data.set_value(current_val) print(f"Updated value: {current_val}") finally: # 确保程序退出时停止Server server.stop() - 运行Server代码:
python3 opcua_server.py,保持终端处于运行状态
Client端配置
- 同样安装OPC UA库:
pip install opcua - 编写Client代码(示例):
from opcua import Client # 替换<Server_IP>为Server树莓派的IP地址 client = Client("opc.tcp://<Server_IP>:4840/freeopcua/server/") try: client.connect() print("Connected to OPC UA Server") # 获取目标变量节点,路径对应Server的命名空间与变量名 sensor_node = client.get_node("ns=2;i=2") # 读取变量值 current_reading = sensor_node.get_value() print(f"Received sensor data: {current_reading}") # 可选:向Server写入数据(需Server端变量设置为可写) # sensor_node.set_value(50) # print("Wrote new value to Server") finally: client.disconnect() print("Disconnected from Server") - 运行Client代码:
python3 opcua_client.py,验证是否能正常读取Server端数据
核心知识点学习方向
- 掌握OPC UA的核心概念:Endpoint(通信端点)、命名空间(节点分类管理)、节点类型(对象、变量、方法)、订阅机制(实时数据推送)
- 熟悉python-opcua库的API逻辑,重点理解Server的节点创建、Client的节点访问与数据读写流程
- 了解树莓派网络端口规则,确保4840端口(OPC UA默认端口)未被防火墙拦截,可通过
sudo ufw allow 4840开放端口
内容的提问来源于stack exchange,提问作者Ankit Mavani
相关产品推荐
相关产品推荐

