物联网开发入门记:OpenWRT读串口数据curl上传到云服务平台

来自https://www.hsli.top

物联网成了当下越来越热门的话题,也有了已经建成的物联网服务平台,把各种设备连接到互联网似乎成了一种潮流,今天我也尝试物联网的应用开发。

还是选择做在openwrt上,开源的路由器操作系统,基于linux,可扩展各种软件包,不二之选

cURL,优秀的跨平台开源文件传输工具

yeelink和乐联网,这两家服务平台今天都分别试了一下

首先关于openwrt路由中串口的读取:

之前看过openwrt通过串口控制下位机再控制小车的教程,只涉及到从网页端控制串口,而读取串口几乎没有现成的教程,经过一番苦苦寻找和尝试,得到以下两种方法:

  1. 使用lua语言编写脚本test.lua,代码如下:
1
2
3
4
5
6
7
rserial=io.open("/dev/ttyS0","r")  

while true do
data=rserial:read();
rserial:flush()
print(data)
end

在shell里cd到test.lua所在目录下,运行lua test.lua即可读取串口,特别需要注意的是,每从串口向路由发送一个数据一定要跟一个回车才能发送成功,我因为这个折腾了很久,而这段代码实际上是打开了一个从串口的shell,从串口输入的字符不仅会被获取并显示出来,更会作为shell命令来运行!!简直不可思议,也就是说如果你串口输入的字符串是reboot的话,路由就重启了。。。

1
cat /dev/ttyS0

在shell中输入以上命令就可以获取串口输入,竟然是这么简单!

好了,言归正传,获取了串口传来的数据,接下来就是上传了

在openwrt下先得安装curl软件包,然后就可以用curl上传下载数据甚至文件了

pic1

在openwrt选一个目录新进uplode.sh文件,修改属性为0777,输入以下代码(以乐联网平台为例)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#! /bin/sh  
sensor_name='你的传感器名称'
API_key='你的密钥'
API_address='http://www.lewei50.com/api/v1/gateway/updatesensors/01'
while true
do

echo "waiting for input" > /dev/ttyS0
cat /dev/ttyS0 > /mnt/a & { sleep 6 ; eval 'kill -9 $!' &> /dev/null ; }
read value < /mnt/a
curl --request POST $API_address --data "[{\"Name\":\"$sensor_name\",\"Value\":\"$value\"}]" --header "userkey:$API_key"

sleep 10

done

cd到该目录,sh upload.sh即可运行,用USB-TTL线连接到路由的串口,设置好波特率,看到串口显示“waiting for input”就输入一个数,这个数就会被上传到你的乐联网平台上,十分有趣(关于该平台中添加设备和传感器的方法不再赘述)

完成这些工作后,在该平台上就能看到串口发来的数据了,要是串口上接一个单片机,单片机下连接温湿度等等各种传感器,玩法就多种多样了

pic2

读取上传的数据

数据上传到云平台之后,有时候需要自己进行一些处理分析,这时候就要从云平台上读取下来,以yeelink为例

1
curl --request GET --header "U-ApiKey: 密钥" http://api.yeelink.net/v1.0/device/设备编号/sensor/传感器编号/datapoint/

改命令能得到时间和数值

另外还能用

1
curl --request POST --data-binary @"图片文件完整路径" --header "U-ApiKey: 密钥"  http://api.yeelink.net/v1.0/device/设备编号/sensor/传感器编号/photos

来上传图片文件,这个可以用于一些监控产品的开发

如果文章有用,请随意打赏