python和arduino串口通信_关于python和matlab,python和Arduino通信总结

最近一段时间主要都是在忙于课题收尾阶段,涉及到很多平台验证问题,在这中间必不可少的环节就是解决不同软件硬件之间的通讯问题了。我的课题主要是围绕python来做的,目前涉及到的就是python和matlab,以及python和Arduino之间的问题了。本文主要是为了记录自己在过程中遇到的一些问题,以及解决方法。

1.软件安装问题。

(1)用于安装实时软件的电脑装的是XP系统,只支持python2.7及以下的版本。如果安装python3以上的版本,均无法安装使用。

(2)XP系统只支持Anaconda2,不支持以上的版本,如果安装新的版本,就会报错:fail to create menu一类的ERROR,当时试了很多遍呀,心态血炸,还好最终调过来了呀TT

(3)关于python在cmd窗口进行安装库

现在很多库都是在pip18.1的版本下才能安装的,但是系统自带的又是怕pip8.1.1版本的,所以很多库如果不更新pip的话是无法进行安装使用的。又一个问题来了,如果你用的是anaconda,就会知道anaconda的导航里面是有很多的库直接就能安装的,但是有一个坑就是很多库的版本都相对比较老了。你在这个导航里面是找不到pip的最新版本的。这时候的解决方案就是通过命令窗口对pip进行更新(前提是电脑要联网),打开cmd串口,输入以下指令,就可以把pip直接升级到最新版本。

更新:python -m pip install –upgrade pip

如果更新到制定版本,cmd窗口输入以下指令:

pip install –upgrade <库的名字>==指定版本

如果更新到最新版本,cmd窗口输入以下指令:

pip install –upgrade +<库的名字>

卸载库,cmd窗口输入以下指令:

pip uninstall + <库的名字>

2.安装好了环境才能开始操作呀,接下来就是matlab和python之间的通信。matlab和python之间并没有可以进行直接通讯的接口,所以只有通过别的途径找到一个桥梁来让他们之间建立起通讯。恰好TPC通讯协议就可以满足两者之间通讯的需求。其中也遇到过几个问题:

(1)怎么才能建立连接?

必须要有相同的IP地址和端口号,IP地址怎么获得,可以通过命令窗口获得,但是我是直接通过以下来获取的:

“`

import socket

IP= socket.gethostbyname(socket.gethostname())

“`

端口号我是任意取得,可以正常运行。

(2)建立起TCP通讯,就会有Client端和Sever端,不要把这个搞混淆了。其中Client端是客户端,是发送请求或者说是发送指令的,客户端是接收指令的。

客户端和服务端之间有一个操作顺序的问题,如果是先打开客户端的话,是无法找到连接的。因为服务端才是你数据要去的地方,也可以说是通讯的启动方是Sever端,信息的发起点是Client。

(3)端口被占用的问题

当你运行一次通讯程序后,必须要停掉程序,或者是将Port口关闭,否则在开始新的程序的时候是一定会被占用的。

(4)python和matlab双方的发送和接收的函数

python:

“`

import numpyas np

import socket

IP= socket.gethostbyname(socket.gethostname())# 服务器端可以写”localhost”,可以为空字符串””,可以为本机IP地址

print(IP)

port= 80 # 端口号

Tpc_sever= socket.socket(socket.AF_INET, socket.SOCK_STREAM)

Tpc_sever.bind((IP, port))#绑定Ip和端口

Tpc_sever.listen(1)

print(‘listen at port :’, port)

conn, addr= Tpc_sever.accept()

print(‘connected by’, addr)

while True:

data_string= str((conn.recv(100000000)))#接收数据

data_split= data_string.strip(‘ ‘).split(‘ ‘)#将一整段的字符串进行分割

data_filter_None= list(filter(None,data_split))#将空的字符串删去

data_dig= list(map(lambda x: float(x),data_filter_None))#将字符转换为浮点型

Info= np.array(data_dig).reshape([1,-1])

# Info = int(data)

print(‘recieved message:’, Info)

# data = data.decode

# data = (conn.recv(1024)).decode() # 解码

# np.save(‘data.npy’, data)

# Info = data

# if not Info:

# break

#下面的语句是用来返回值的,我们这里不需要返回值所以直接注释掉

# send = input(‘return:’)

# conn.sendall(send.encode()) # 再编码发送

conn.close()

Tpc_sever.close()

“`

matlab:

“`

fwrite(”)

“`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值