在线时间4 小时
UID203173
注册时间2010-7-26
NXP金币0
该用户从未签到
注册会员
- 积分
- 68
- 最后登录
- 2021-7-16
|
由于终端设备用的RF通信,MX6开发板通过串口与主模块连接,所以需要开发串口程序接收到数据之后,发送给服务器即可,完成数据到外网的传输现在python很流行,决定使用python来写程序
先编译python大约以下过程,先编译PC版本的,再给python源码打上交叉编译补丁,最后交叉编译python就好了
在python源码目录执行,标准过程
./configure
在编译python和Parser/pgen
make python Parser/pgen
将X86版本的python可执行文件备份为python_for_build
mv python python_for_build
将X86版本的pgen可执行文件配备为pgen_for_build
mv Parser/pgen Parser/pgen_for_build
清理编译好的项目文件,这一步是为了后面的交叉编译做准备
make distclean
整个步骤最重要的就是保存好python和pgen这两个可执行文件,因为之后在交叉编译Python时需要用到这两个文件。
整个过程参考,http://www.cnblogs.com/tolimit/p/4519838.html比较方便,就不在复制说明了
下面就是python程序了
import serial
import socket
import time
import threading
import serial.tools.list_ports
class MSerialPort:
def __init__(self, port, buand):
self.port = serial.Serial(port, buand)
if not self.port.isOpen():
self.port.open()
def port_open(self):
if not self.port.isOpen():
self.port.open()
def port_close(self):
self.port.close()
def write_data(self, data):
number = self.write(data)
return number
def read_data(self, c):
while True:
n = self.port.inWaiting()
if n:
try:
data = self.port.read()
time.sleep(0.02)
data += self.port.read(self.port.inWaiting())
c.send(data)
except socket.error as e:
print('disconnected...')
print(e)
c.close()
break
c.close()
def recv_data(self, c):
while True:
try:
data = c.recv(1024)
print(data)
except socket.error as e:
print(e)
break
def is_open(self):
return self.port.is_open
class OpenSerial(threading.Thread):
def __init__(self, mSerial):
threading.Thread.__init__(self)
self.mSerial = mSerial
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.host = ‘59.92.138.50’
self.port = 12999
self.s.bind((self.host, self.port))
self.s.listen(5)
def run(self):
while True:
c, addr = self.s.accept()
try:
c.settimeout(50)
threading.Thread(target=mSerial.read_data, args=(c, )).start()
threading.Thread(target=mSerial.recv_data, args=(c, )).start()
except socket.timeout:
print("time out")
if __name__ == '__main__':
plist = list(serial.tools.list_ports.comports())
if len(plist) <= 0:
print("The Serial port can't find!")
else:
plist_0 = list(plist[0])
serialName = plist_0[0]
print(serialName)
mSerial = MSerialPort(serialName, 115200)
if mSerial.is_open:
OpenSerial(mSerial).start()
while True:
time.sleep(1)
大约的过程就是创建网络客户端,并尝试连接到服务器,打开串口,监听串口数据,收到数据转发服务器
整个过程比较简单,可以参考一下
|
|