python中Arduino串⼝传输数据到电脑并保存⾄excel表格
起因:学校运河杯报了个项⽬,制作⼀个天⽓预测的装置。我⽤arduino跑了BME280模块,⽤蓝⽛模块实现两块arduino主从机透传。但是为了分析,还需要提取出数据。因此我⽤python写了个上位机程序,⽤pyserial模块实现arduiho和电脑的串⼝通讯,再⽤xlwt模块写⼊excel表格,⽤time模块获取时间作为excel的⽂件名。
import xlwt
import time
import serial
#设置表格样式
def set_style(name,height,bold=False):
style = xlwt.XFStyle()
font = xlwt.Font()
font.name = name
font.bold = bold
font.height = height
style.font = font
return style
#写Excel
def write_excel():
if serial.isOpen():
print ('串⼝已打开\n')
f = xlwt.Workbook()
sheet1 = f.add_sheet('arduino_data',cell_overwrite_ok=True)
row0 = ["temp","pres","hum"]
time1=time.localtime(time.time())
#写第⼀⾏
for i in range(len(row0)):
sheet1.write(0,i,row0[i],set_style('Times New Roman',220,True))
i=1
time.sleep(5)
serial.flushInput()
while True:
try:
size = serial.inWaiting()
if size != 0:
response = ad(size)  # 读取内容并显⽰
s=response.decode('utf-8').rstrip('\r\n').split('\t')
if len(s)!=3:
serial.flushInput()
continue
else:
try:
for j in range(len(s)):
sheet1.write(i,j,int(s[j]),set_style('Times New Roman',220,False))
print(s)
serial.flushInput()    # 清空接收缓存区
i = i+1
time.sleep(0.5)
except ValueError:
serial.flushInput()
continue
except KeyboardInterrupt:
time2=time.localtime(time.time())
f.save(r'C:\Users\10020\Desktop\arduino_data\{0}.{1}_{2:0>2d}.{3:0>2d}.{4:0>2d}-{5}.{6}_{7:0>2d}.{8:0>2d}.{9:0>2d}.xls'.format\
(time1[1],time1[2],time1[3],time1[4],time1[5],python怎么读取串口数据
time2[1],time2[2],time2[3],time2[4],time2[5]))
serial.close()
print(time1)
print(time2)
quit()
if __name__ == '__main__':
serial = serial.Serial('COM3',9600,timeout=2)
write_excel()
运⾏代码后会⼀直从串⼝读取arduino的数据,然后写⼊excel。按Ctrl+c来中⽌代码进程,此时会在
C:\Users\10020\Desktop\arduino_data\这个⽂件夹下⽣成以“开始运⾏时间-结束运⾏时间”为名称的xls⽂件。
代码的运⾏效果:
需要注意的是:
1. 串⼝和波特率根据电脑上显⽰的COM⼝和设置的arduino波特率决定
2. arduino是通过串⼝发送字节串到电脑,需要编码成utf-8再对字符串进⾏处理
3. 每⼀次接受完数据要清楚数据缓存
总结
以上所述是⼩编给⼤家介绍的python Arduino串⼝传输数据到电脑并保存⾄excel表格,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。在此也⾮常感谢⼤家对⽹站的⽀持!
如果你觉得本⽂对你有帮助,欢迎转载,烦请注明出处,谢谢!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。