使用Wio Terminal读取传感器的实时数据是在用Seeeduino V4.2开发板接收数据并把PC端作为服务端的基础上进行的,Wio Terminal作为客户端,在同一局域网下就可以访问传感器通过串口传送到服务器的数据。
下面是我在用Wio Terminal读取传感器实时数据的思路:
将Seeed-BME680获取的数据用WEB前端展示
用正则表达式整理串口传回的数据
使用Wio Terminal做HTTP请求并展示数据
1. 将Seeed-BME680获取的数据用WEB前端展示
在这里用Django可能会显得有点heavy,我的想法是在后期做一个数据管理端,做些数据分析什么的,所以这个Django项目我会继续完善。
我之前做的前端是以字符串的形式展示的:
这样其实不太好,如果这样写的话,Wio Terminal就要在做HTTP请求时把数据提取出来,导致刷新的时间过长
所以这里要做一些改进,把数据改成Json串:
import json
def index(request):
datas = getDatas()
content = {
'temperature':datas[0],
'pressure':datas[1],
'humidity':datas[2],
'gas':datas[3],
'updataTime':datas[4],
}
jsonData = json.dumps(content)
return HttpResponse(jsonData)
这时前端的页面如下所示:
这里虽然是前端页面,但其实不是给用户去看的,这个页面是供Wio Terminal做请求数据用的
2. 用正则表达式整理串口传回的数据
在前面我们留了一个getDatas()的方法没有讲到,原来的getDatas()方法只是单纯地获取数据而已,并没有对数据进行处理:
def getDatas():
serialPort = "COM10" # 串口
baudRate = 9600 # 波特率
ser = serial.Serial(serialPort, baudRate, timeout=0.5)
# print("参数设置:串口=%s ,波特率=%d" % (serialPort, baudRate))
while True:
str = ser.readline().decode('utf-8')
if str.strip()!='':
print(str)
updata_time = datetime.datetime.now().strftime('%F %T')
print(updata_time)
return str,updata_time
这里的改进是通过正则表达式把数据提取出来:
import re
import serial
import datetime
def getDatas():
serialPort = "COM10" # 串口
baudRate = 9600 # 波特率
ser = serial.Serial(serialPort, baudRate, timeout=0.5)
# print("参数设置:串口=%s ,波特率=%d" % (serialPort, baudRate))
while True:
lists = []
strs = ser.readline().decode('utf-8')
if strs.strip()!='':
print(strs)
str = re.finditer(r"(\d+).(\d+)",strs)
for item in str:
# print(item.group())
lists.append(float(item.group()))
updata_time = datetime.datetime.now().strftime('%F %T')
# print(updata_time)
lists.append(updata_time)
print(lists)
return lists
其实就是提取数据,把字符串里的有效信息提取出来,先存到一个列表里:
简单讲讲我这里用到的正则表达式:
re.finditer(r"(\d+).(\d+)",strs)
可以看到,想要提取的有效数据是带小数点后两位的数, \d 表示匹配任意数字,等价于0-9,但是小数点不是数字 ,所以不会被匹配,因此正则表达式可以写成: “(\d+).(\d+)”
3. 使用Wio Terminal做HTTP请求并展示数据
前两个部分是这一部分的基础,这一部分主要是Arduino的知识
我在做的时候,主要考虑3点:
连接WIFI并做HTTP请求
我拿到的Wio Terminal是样品,在使用无线连接前要在Wio Terminal上更新Wireless Core Realtek RTL8720的最新固件,大家拿到手里的应该都是已经刷好了的。如果在上传程序后,串口出现如下输出:
这时可尝试重新flash,具体方法请参考官方文档:
https://wiki.seeedstudio.com/Wio-Terminal-Network-Overview/
这一步解决以后,连接WIFI应该不成问题,看官方文档就能轻松解决,我这里讲一些比较特殊的部分。官方文档给了一个HTTPS的请求demo:
因为我现在只是在局域网内共享数据,因此用HTTP请求就行了。这里需要用到一些网络协议的知识,可以把HTTPS协议理解为HTTP协议的升级,就是在HTTP的基础上增加了数据加密,这个S即SSL。
有了这一基础就好办了,我们只需要在官方给的示例程序上稍作修改即可,先看看HTTPS请求:
#include
const char* ssid = "yourNetworkName"; // your network SSID
const char* password = "yourNetworkPassword"; // your network password
const char* server = "ww