好久没更新了,拿出点前段东西写的东西发出来吧。硬件是用的树莓派,系统是代号为Wheezy的Debian系统,树莓派的串口设置去网上搜去,一搜一大堆。python依赖包用的PySerial,包括一个主文件和一个配置文件,配置文件如下:
[HARDWARE]SERIAL_DEV=/dev/ttyAMA0BAUDRATE=9600[SEND]REMOTE_URL=http://www.maben.com.cn/test.phpDELAY=5[RECV]REMOTE_URL=http://www.maben.com.cn/index.phpDELAY=100[LOG]ENABLE=1PATH=log.txt
程序如下:
#! /usr/bin/env python"""\Read data from serial ports and send to remote server.Design by maben (C) 2013.09.26 """import serialimport timeimport reimport jsonimport urllibimport urllib2import ConfigParserimport osclass Main: __cfg = { 'hardware' : {}, 'send' : {}, 'recv' : {}, 'log' : {} } __serial = None __mac = None def __init__(self): self.__loadConfig() self.__initSerialPort() self.__mac = self.__getMAC() def __loadConfig(self): cfg = ConfigParser.ConfigParser() try: cfg.read('config.ini') self.__cfg['hardware']['serialDev'] = cfg.get('HARDWARE','SERIAL_DEV') self.__cfg['hardware']['baudrate'] = cfg.get('HARDWARE','BAUDRATE') self.__cfg['send']['remoteUrl'] = cfg.get('SEND','REMOTE_URL') self.__cfg['send']['delay'] = int(cfg.get('SEND','DELAY')) self.__cfg['recv']['remoteUrl'] = cfg.get('RECV','REMOTE_URL') self.__cfg['recv']['delay'] = int(cfg.get('RECV','DELAY')) self.__cfg['log']['enable'] = cfg.get('LOG','ENABLE') if self.__cfg['log']['enable'] == '1': self.__cfg['log']['path'] = cfg.get('LOG','PATH') for value in self.__cfg.values(): for k,v in value.items(): if v == None: self.__halt('All configuration items cannot be empty!') except: self.__halt('Load config failed') finally: pass def __initSerialPort(self): self.__writeLog('Initializing the serial port') self.__serial = serial.Serial(self.__cfg['hardware']['serialDev'],self.__cfg['hardware']['baudrate']) try: if not self.__serial.isOpen(): self.__serial.open() except: self.__halt('Cannot open serial port!') finally: pass def __readSerialData(self): self.__serial.flushOutput() self.__serial.flushInput() return self.__serial.readline() def __sendData(self,data={}): try: params = urllib.urlencode(data) request = urllib2.Request(self.__cfg['send']['remoteUrl'],params) response = urllib2.urlopen(request) except: self.__writeLog('Send data to server failed') finally: pass def __getMAC(self): process = os.popen('/sbin/ifconfig eth0') info = process.read() process.close() mac = re.search("HWaddr\s+(\S+)",info) if mac: return mac.group(1) else: return '00-00-00-00-00-00' def run(self): data = {} data['mac'] = self.__mac; while True: data['data'] = self.__readSerialData() self.__sendData(data) time.sleep(self.__cfg['send']['delay']) def __writeLog(self,log): if self.__cfg['log']['enable'] == '1': fp = open(self.__cfg['log']['path'],'a+') try: written = time.strftime('[%Y-%m-%d %H:%M:%S] ',time.localtime(time.time()))+log+"\r\n" fp.write(written) except: except: print 'Cannot written the log infomation' finally: fp.close() pass else: print 'log not enable' pass def __halt(self,msg,isWriteLog = True): if isWriteLog: self.__writeLog(msg) print msg exit() def __del__(self): if self.__serial and self.__serial.isOpen(): self.__serial.close()if __name__ == '__main__': main = Main() main.run()
这只是个半成品,只能读取数据并发送到远程,配置文件里面留了一个接口,就是从远程读取文件,然后发送到串口,由于暂时用不到,所以没再进行补充。
本文标题:利用Python读取串口数据并发送到远程服务器本文链接:http://www.maben.com.cn/archives/612.html转载请注明出处 一个有信念者所开发出的力量,大于99个只有兴趣者。