python 下串口数据的读取,解析,和保存-
#!/usr/bin/python
# -*-coding: utf-8 -*- import serial
import threading
import binascii
from datetime import datetime
import struct
import csv class SerialPort:
def __init__(self, port, buand):
self.port = serial.Serial(port, buand)
self.port.close()
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 send_data(self):
self.port.write('') def read_data(self):
global is_exit
global data_bytes
while not is_exit:
count = self.port.inWaiting()
if count > 0:
rec_str = self.port.read(count)
data_bytes=data_bytes+rec_str
#print('当前数据接收总字节数:'+str(len(data_bytes))+' 本次接收字节数:'+str(len(rec_str)))
#print(str(datetime.now()),':',binascii.b2a_hex(rec_str)) serialPort = 'COM6' # 串口
baudRate = 115200 # 波特率
is_exit=False
data_bytes=bytearray() if __name__ == '__main__':
#打开串口
mSerial = SerialPort(serialPort, baudRate) #文件写入操作
filename=input('请输入文件名:比如test.csv:')
dt=datetime.now()
nowtime_str=dt.strftime('%y-%m-%d %I-%M-%S') #时间
filename=nowtime_str+'_'+filename
out=open(filename,'a+')
csv_writer=csv.writer(out) #开始数据读取线程
t1 = threading.Thread(target=mSerial.read_data)
t1.setDaemon(True)
t1.start() while not is_exit:
#主线程:对读取的串口数据进行处理
data_len=len(data_bytes)
i=0
while(i<data_len-1):
if(data_bytes[i]==0xFF and data_bytes[i+1]==0x5A):
frame_code=data_bytes[i+2]
frame_len=struct.unpack('<H',data_bytes[i+4:i+6])[0]
frame_time=struct.unpack('<I',data_bytes[i+6:i+10])[0]
print('帧类型:',frame_code,'帧长度:',frame_len,'时间戳:',frame_time)
#print(frame_code,frame_len,frame_time)
if frame_code==0x03: #判断帧类型
#struct 解析数据帧
accelerated_x,accelerated_y,accelerated_z,angular_x,angular_y,angular_z,tem,speed_x,speed_y,speed_z,\
angular_v_x,angular_v_y,angular_v_z=struct.unpack('<fffffffffffff',data_bytes[i+12:i+12+frame_len-6])
dt=datetime.now()
nowtime_str=dt.strftime('%y-%m-%d %I:%M:%S') #时间
loc_str=[nowtime_str,frame_time,accelerated_x,accelerated_y,accelerated_z,angular_x,angular_y,angular_z,tem,speed_x,speed_y,speed_z,\
angular_v_x,angular_v_y,angular_v_z] #写入csv文件
try:
csv_writer.writerow(loc_str)
except Exception as e:
raise e
i=i+6+frame_len+3
else:
i=i+1
data_bytes[0:i]=b''
代码简介:本代码主要用来处理陀螺仪发送过来的串口数据,主线程用struct模块对串口数据进行解析,用csv模块对解析出来的数据进行保存,子线程用来进行读取串口数据,并将数据以字节流的方式存储到全局变量data_bytes
笔记:
struct模块,用于解析字节流
binascii模块,用于十六进制形式的显示
bytearray.fromhex():将十六进制字符串转为字节数组
python 下串口数据的读取,解析,和保存-的更多相关文章
- python接口自动化测试--数据分离读取Excal指定单元格数据
上一篇博客讲了怎么批量读取Excal单元格数据,现在咱们说一下怎么读取Excal指定单元格数据. 一.首先建一个Test_Main类 #!/usr/bin/python # -*- coding: U ...
- Python实现CSV数据的读取--两种方法实现
方法一: 方法二:
- Python下Mysql数据连接池——单例
# coding:utf-8 import threading import pymysql from DBUtils.PooledDB import PooledDB from app.common ...
- C#SerialPort如何读取串口数据并显示在TextBox上
SerialPort中串口数据的读取与写入有较大的不同.由于串口不知道数据何时到达,因此有两种方法可以实现串口数据的读取.一.线程实时读串口:二.事件触发方式实现. 由于线程实时读串口的效率不是十分高 ...
- python 3下对stm32串口数据做解析
1.最近有个想做一个传感器数据实时显示的上位机,常规的数据打印太频繁了,无法直观的看出数据的变化. python下的上位机实现起来简单一点,网上找了一些python界面Tkinter相关资料和pyth ...
- json进阶(一)js读取解析JSON类型数据
js读取解析JSON类型数据 一.什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式,同 ...
- Linux下串口編程遇到的接收数据错误及原因(0x0d,0x11接收错误)
摘要:Linux下串口编程遇到的接收数据错误及原因 来源:https://dotblogs.com.tw/k/2012/07/24/73572 近日在调试串口的时候发现,另一设备向我ARM板的串口发送 ...
- FFMPEG内存操作(一) avio_reading.c 回调读取数据到内存解析
相关博客列表 : FFMPEG内存操作(一) avio_reading.c 回调读取数据到内存解析 FFMPEG内存操作(二)从内存中读取数及数据格式的转换 FFmpeg内存操作(三)内存转码器 在F ...
- Python 下JSON的两种编解码方式实例解析
概念 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写.在日常的工作中,应用范围极其广泛.这里就介绍python下它的两种编解码方法: ...
随机推荐
- 2、scala条件控制与循环
1. if表达式 2. 句终结符.块表达式 3. 输入与输出 4. 循环 5. 高级for循环 1. if表达式 if表达式的定义:scala中,表达式是有值的,就是if或者else中最后 ...
- MySql数据库多表操作
一.连接查询[连表查询.多表查询] 当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回 mysql支持三种类型的连接查询,分别为: 内连接查询(inner join) ...
- luogu P2422 良好的感觉 单调栈
Code: #include<bits/stdc++.h> #define maxn 1000000 #define ll long long using namespace std; v ...
- Xilinx 7系列FPGA部分重配置【2】
在之前的“Xilinx 7系列FPGA部分重配置[1]”中已经较为详细地记录了分别在工程模式(Project Mode)和非工程模式(Non-Project Mode)下.使用7系列的Xilinx F ...
- esp32(M5STACK)在线体验(Ubuntu)
我们往m5stack烧录的固件是可以在线编程的 具体使用方法可以参考 https://github.com/m5stack/M5Cloud/blob/master/README_CN.md ...
- 【剑指Offer】25、复杂链表的复制
题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节 ...
- 从读写分离到 CQRS,张大胖是如何解决性能问题的?
转自:https://mp.weixin.qq.com/s/rpiYZkxiLKa77OFw8XaBwA 不堪重负的数据库 张大胖公司的数据库已经不堪重负了. 这个系统最早是两个实习生写的, 按照最初 ...
- 基于分布式框架 Jepsen 的 X-Cluster 正确性测试
转自:https://mp.weixin.qq.com/s/iOe1VjG1CrHalr_I1PKdKw 原创 2017-08-27 严祥光(祥光) 阿里巴巴数据库技术 1 概述 AliSQL X-C ...
- 洛谷P1616 疯狂的采药【完全背包】
题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说 ...
- [NOIP模拟赛]b
组合数学+容斥原理 设f[i][j]表示第i个序列中的j的倍数的个数. 然后以j为gcd的贡献就是(π(f[i][j]+1) )-1 然后从大到小枚举j,删去j的倍数的贡献即可.