python讀取串口數據並存入數據庫


之前做了一個物聯網小項目,需要打通單片機與服務器。單片機的數據要傳輸到雲服務器上。我的打算是單片機串口傳輸到本地計算機,本地計算機再傳輸到雲mysql服務器。可以做這個事情的有很多語言,因為之前剛好學了python,所以我選擇用python讀取單片機傳到本地計算機的串口數據,並將串口數據過濾后格式化存儲到雲端的mysql數據庫上。以下是代碼部分。

 1 #create by Feng
 2 # coding=UTF-8
 3 import serial
 4 import pymysql
 5 import datetime
 6 
 7 def clean_spaces(s):    #過濾掉換行符和空格
 8     s = s.replace('\r', '')
 9     s = s.replace('\t', '')
10     s = s.replace('\f', '')
11     s = s.replace('\n', '')
12     return s
13 
14 def transp_bytes(b):
15     barr = bytearray(b)
16     str = barr.decode()
17     return str
18 
19 def mySplit(s, ds):
20     res = [s]
21     # 循環所有的分割符
22     for d in ds:
23         t = []
24         # 一定要list 一下才能正確使用
25         res2 = list(map(lambda x: t.extend(x.split(d)), res))
26         # print(res2)
27         res = t
28     # 過濾掉空字串
29     return [x for x in res if x]     #返回一個list
30 #用法:r = mySplit(s1, 'C%L')
31 #   print('r', r)    
32     
33 db = pymysql.connect('數據庫ip',user = "數據庫用戶名",passwd = "數據庫密碼",db = "數據庫名") # 打開數據庫連接
34 cursor = db.cursor()    #獲取數據庫游標
35 serial = serial.Serial('COM3', 19200)   #設置串口和波特率
36 print(serial)
37 if serial.isOpen():  #開啟串口
38     print("open success")
39 else:
40     print("open failed")
41 
42 try:
43     temp = '1'
44     humi = '23'
45     light = '0'
46     date="1111"
47     n = 0
48     #sql = "insert into serial(temp,humi,light) values ('"+temp+"','"+humi+"','"+light+"')"
49     while True:
50         count = serial.inWaiting()
51         if count > 0:
52             data = serial.read(count)   #接收串口
53             #a = data
54             data = clean_spaces(transp_bytes(data))    #過濾換行、回車
55             li = []
56             li = mySplit(data,'C%L')                 #字符分割
57             time = datetime.datetime.now().strftime('%Y%m%d%H%M%S')   #獲取時間
58             try:   #異常處理
59                 sql= "insert into serial(temp,humi,light,time) values ('"+li[0]+"','"+li[1]+"','"+li[2]+"','"+time+"')"
60                 #print("indexError,but do worry!")    
61                 cursor.execute(sql)
62                 cursor.connection.commit()  #提交
63                 print("three data was gain")  #數據上傳成功
64             except IndexError:
65                 print("indexError,but do worry")        
66 except KeyboardInterrupt:
67     if serial != None:
68         serial.close()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM