之前做了一个物联网小项目,需要打通单片机与服务器。单片机的数据要传输到云服务器上。我的打算是单片机串口传输到本地计算机,本地计算机再传输到云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()
|