文章目录
使用Serial Studio+Python实现串口通信以及TCP通信并实现数据可视化
** [补充] :大家可以查看我的博文:点击此处直达,其中包括了Serial Studio软件**的使用
1. 主要流程:
- 搭建服务器程序:
data_server.py
- 搭建客户端程序:
data_client.py
- 编写Serial Studio软件配置文件:
3.json
流程介绍:服务器程序用于产生6个随机数,前三组为随机产生的欧拉角数据;后三组为随机产生的加速度计数据,用于模拟测试数据使用。服务器向客户端发送这些数据,客户端收到后返回ok
给服务器表示客户端已经收到服务器发来的数据,客户端收到数据后尝试利用socket连接Serial Studio软件,一旦检测连接成功,则将数据发送给Serial Studio软件并调用配置文件进行数据可视化操作。
2.Serial Studio版本说明及下载地址
2.1 版本:
使用Serial Studio版本为1.0.23(使用该版本原因:显示效果更佳更清晰)
2.2 下载地址:点击此处直达
3. 代码
3.1 data_server.py
:
import zmq
import random
import sys2olj as sj
#服务器连接参数
host_sever='127.0.0.2'
port_sever=24
# 产生随机数据,作为陀螺仪数据集
def random_data():
list_1=[]
for i in range(10):
a=random.randint(0,360)
b=random.randint(0,360)
c=random.randint(0,360) # 前三组陀螺仪数据
e=random.randint(0,20)
f=random.randint(0,20)
g=random.randint(0,20) # 后三组加速度计数据
d='/*'+str(a)+','+str(b)+','+str(c)+','+str(e)+','+str(f)+','+str(g)+'*/'
list_1.append(d)
return list_1
# Create The Socket
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://%s:%s" %(host_sever,port_sever))
print('Waiting for connection...')
# 一旦监听到立即进入连接
while True:
message = socket.recv()
print("Received: %s" % message)
str_1=random_data()
str_copy=';'.join(str_1)
data = str_copy.encode()
socket.send(data)
#time.sleep(3)
3.2 data_client.py
:
import zmq
import time
import socket as st
import threading
#服务器连接传输端口
host_sever='127.0.0.2'
port_sever=24
#serial studio连接传输端口
host = '127.0.0.1'
port = 23
#TCP连接传输数据函数
def tcplink(sock,addr,information):
print('Accept new connection from %s:%s...' % addr)
sock.send( ('connect success!').encode() )
# 客户端返回信息进行确认开始工作
str_3=information.decode().split(';')
# print(str_3)
# print(type(str_3))
for i in str_3[0:6]:
#data = i.encode()
for j in range(200):
sock.send(i.encode())
time.sleep(5)
#连接服务器
context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect("tcp://%s:%s" %(host_sever, port_sever))
str_2 = "ok"
data = str_2.encode()
socket.send(data)
response = socket.recv() #接受来自服务器传来的数据
print("response: %s" % response)
#连接serial studio软件
s=st.socket(st.AF_INET,st.SOCK_STREAM)
#Listen The Port
s.bind((host,port))
s.listen(5)
print('Waiting for connection...')
# 一旦监听到立即进入连接
while True:
# 开始一个新连接
sock,addr=s.accept()
# 创建一个线程来处理连接
t=threading.Thread(target=tcplink(sock,addr,response))
3.3 3.json
:
{
"t":"data",
"g":[
{
"t":"Accelerometer",
"w":"accelerometer",
"d":[
{
"t":"X",
"v":"%4",
"u":"m/s^2",
"g":true,
"w":"x"
},
{
"t":"Y",
"v":"%5",
"u":"m/s^2",
"g":true,
"w":"y"
},
{
"t":"Z",
"v":"%6",
"u":"m/s^2",
"g":true,
"w":"z"
}
]
},
{
"t":"Gyroscope",
"w":"gyro",
"d":[
{
"t":"X",
"v":"%1",
"u":"°",
"g":true,
"w":"yaw"
},
{
"t":"Y",
"v":"%2",
"u":"°",
"g":true,
"w":"roll"
},
{
"t":"Z",
"v":"%3",
"u":"°",
"g":true,
"w":"pitch"
}
]
}
]
}
[注] 相关配置文件(.json)的说明可见:点击此处直达
4. 效果