0
点赞
收藏
分享

微信扫一扫

python读取串口、网络编程、文本处理与文件操作

闲嫌咸贤 2022-04-21 阅读 65
java后端

python读取串口、网络编程、文本处理与文件操作

**前言:**之所以把本文的名字起得这么长是为了突出文中包涵的每一部分。如题,文中程序正是包涵了读取串口、网络编程、文本处理与文件操作。这是我们项目的数据处理的一部分,因为项目也不涉及保密,也不是什么核心技术,所以写出来分享一下并没有什么不妥之处。这百行级别的代码都是亲手敲的,一边学习、查询然后再编程,实现了串口接收数据的处理和自动化录入文件,对提高了数据处理的效率。会的东西越多,做事就越简单。
**程序说明:**脚本按行处理串口数据,串口数据设置的是一行一行的发送,也就是说是以“ ”结尾的。脚本分为客户端和服务器端:客户端读取串口,处理数据,发送数据,写入本地文件。服务器端接收数据,写入文件。


Server端:

import socket #导入socket模块
import time
import datetime
import sys

#定义函数显示时间,用于创建文件时写入文件名
def file_time():
    str = time.strftime("%Y-%m-%d")
    return str  

#获得当前时间的字符串变量   
fileCreateTime = file_time() 
#打开文件,如果没有文件就创建后打开,文件名为:fileCreateTime+"ServerRecvugm3UnitsData.txt",
打开方式为:‘a’即追加,不删除文件中内容。

##############网络通信服务器端初始化###################
s = socket.socket()         # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 1234                 # 设置端口号
s.bind((host,port))         # 绑定端口
s.listen(5)                 # 等待客户端连接

#说明:绑定端口( address必须是一个双元素元组,((host,port)),主机名或者ip地址+端口号。如果端口号正在被使用或者保留,或者主机名或ip地址错误,则引发socke.error异常。)
#五步骤:对象,主机名,端口号,绑定,监听
####################################################
c, addr = s.accept()                   # 建立客户端连接,被动接受TCP客                 
户端连接,(阻塞式)等待连接的到来
print "Got connection from", addr      # 服务器端打印
c.sendall("Thank you for connecting")  # 服务器发送到客户端,完整发送TCP数据,完整发送TCP数据。将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。
while True: #故意设置的一直接受,除非强制退出
    d = c.recv(1024)#接收TCP数据,数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他信息,通常可以忽略。
    print d
    fugm3.write(d)#写入文件
    fugm3.flush()#立刻刷入文件
fs.close()
s.close()

# -*- coding: UTF-8 -*-
import time
import datetime
import serial
import urllib2
import re
import sys
import json
import socket

def desplay_time():
    str = time.strftime("%Y-%m-%d %A %X %Z")
    timeString = str[:-12]
    return timeString
def file_time():
    str = time.strftime("%Y-%m-%d")
    return str  
#创建文件和获得文件名字
fileCreateTime = file_time()
fppm = open(fileCreateTime+"ppmUnitsData.txt",'a')
fugm3 = open(fileCreateTime+"ugm3UnitsData.txt",'a')
#初始化文件内容列表,写入文件
titleppm =  "Time	Temperature	Huminity	Battery	SO2ppm	NO2ppm	O3ppm	COppm
"
titleugm3 =  "Time	Temperature	Huminity	Battery	SO2ugm3	NO2ugm3	O3ugm3	COmgm3
"
fppm.write(titleppm)
fugm3.write(titleugm3)
########################网络通信部分########################
s = socket.socket()         # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 1234                 # 设置端口号,必须和服务器端的一直
s.connect(('172.25.31.191',port))#连接!此处IP为服务器的IP地址
print s.recv(1024)          #打印接受到的字符串
########################串口初始化########################
ser = serial.Serial('com13',115200,timeout = 20 ) 
print ser.portstr 

while True:
    line = ser.readline() #按行读取串口数据
    if line:
        currentTime = desplay_time()
        print currentTime
        cut_line = line[4:9].strip()+'	'+line[13:18].strip()+'	'+line[22:28]+
               '	'+line[32:39]+'	'+line[43:50]+'	'+line[54:61]+'	'+line[65:72]
        line_ppm = cut_line
        if len(line) == 74:
            SO2_ppm = float(line[32:39].replace('',''))
            NO2_ppm = float(line[43:50].replace('',''))
            O3_ppm = float(line[54:61].replace('',''))
            CO_ppm = float(line[65:72].replace('',''))
        else:
            continue
        line_ugm3 = line[4:9]+'	'+line[13:18]+'	'+line[22:28]+'	'+ ("%.3f"%(64/24.45*1000*SO2_ppm))+
                '	'+("%.3f"%(46/24.45*1000*NO2_ppm))+'	'+("%.3f"%(48/24.45*1000*O3_ppm))+
                '	'+("%.3f"%(28/24.45*CO_ppm)) 
        print "%s" % line_ppm+'
'
        fppm.write(currentTime + '	' + line_ppm+'
')
        fppm.flush()
        s.sendall(currentTime + '	' + line_ppm+'
')#网络发送
        #print "%r" % line_ugm3+'	'+Weather_Condition+'
'
        print "%s" % line_ugm3+'
'
        fugm3.write(currentTime + '	' + line_ugm3+'
')
        fugm3.flush()
        s.sendall(currentTime + '	' + line_ugm3+'
')#网络发送
    else:
        break
ser.close()
fppm.close()
fugm3.close()
举报

相关推荐

0 条评论