java如何进行传感器数据传输_使用Wio Terminal通过HTTP请求获取并展示传感器实时数据...

使用Wio Terminal读取传感器的实时数据是在用Seeeduino V4.2开发板接收数据并把PC端作为服务端的基础上进行的,Wio Terminal作为客户端,在同一局域网下就可以访问传感器通过串口传送到服务器的数据。

下面是我在用Wio Terminal读取传感器实时数据的思路:

将Seeed-BME680获取的数据用WEB前端展示

用正则表达式整理串口传回的数据

使用Wio Terminal做HTTP请求并展示数据

6e368fbad2c2d87fc36ffcb86437dfe2.png

1. 将Seeed-BME680获取的数据用WEB前端展示

在这里用Django可能会显得有点heavy,我的想法是在后期做一个数据管理端,做些数据分析什么的,所以这个Django项目我会继续完善。

我之前做的前端是以字符串的形式展示的:

3daabd266140bef7917a91acef55e285.png

这样其实不太好,如果这样写的话,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)

9f2c5e117cd03c7df107782e68a03d51.png

这时前端的页面如下所示:

fb10da81b4f15e018d7800a8272247b4.png

这里虽然是前端页面,但其实不是给用户去看的,这个页面是供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

其实就是提取数据,把字符串里的有效信息提取出来,先存到一个列表里:

dbb9f1a0565e792e5eda6c524dcd5df7.png

简单讲讲我这里用到的正则表达式:

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的最新固件,大家拿到手里的应该都是已经刷好了的。如果在上传程序后,串口出现如下输出:

78134d88fab28e70d635e5ee534a1fbc.png

这时可尝试重新flash,具体方法请参考官方文档:

https://wiki.seeedstudio.com/Wio-Terminal-Network-Overview/

这一步解决以后,连接WIFI应该不成问题,看官方文档就能轻松解决,我这里讲一些比较特殊的部分。官方文档给了一个HTTPS的请求demo:

37b9e3740c5f51c4cffdec07358d4727.png

因为我现在只是在局域网内共享数据,因此用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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取传感器数据展示的步骤如下: 1. 在 AndroidManifest.xml 文件中添加相应的权限: ``` <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.BODY_SENSORS" /> ``` 2. 在 MainActivity.java 文件中创建 SensorManager 对象,并注册需要监听的传感器: ``` SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); Sensor accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); sensorManager.registerListener(this, accelerometerSensor, SensorManager.SENSOR_DELAY_NORMAL); ``` 3. 实现 SensorEventListener 接口,重写 onSensorChanged() 方法以获取传感器数据: ``` @Override public void onSensorChanged(SensorEvent event) { float[] values = event.values; switch (event.sensor.getType()) { case Sensor.TYPE_ACCELEROMETER: // 处理加速度传感器数据 break; case Sensor.TYPE_GYROSCOPE: // 处理陀螺仪传感器数据 break; case Sensor.TYPE_MAGNETIC_FIELD: // 处理磁场传感器数据 break; // 其他传感器类型同理 } } ``` 4. 在 UI 界面上展示传感器数据。 ``` // 示例代码展示加速度传感器数据 TextView xTextView = findViewById(R.id.xTextView); TextView yTextView = findViewById(R.id.yTextView); TextView zTextView = findViewById(R.id.zTextView); @Override public void onSensorChanged(SensorEvent event) { float[] values = event.values; switch (event.sensor.getType()) { case Sensor.TYPE_ACCELEROMETER: float x = values[0]; float y = values[1]; float z = values[2]; xTextView.setText(String.format("%.2f", x)); yTextView.setText(String.format("%.2f", y)); zTextView.setText(String.format("%.2f", z)); break; // 其他传感器类型同理 } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值