物联网成了当下越来越热门的话题,也有了已经建成的物联网服务平台,把各种设备连接到互联网似乎成了一种潮流,今天我也尝试物联网的应用开发。
还是选择做在openwrt上,开源的路由器操作系统,基于linux,可扩展各种软件包,不二之选
cURL,优秀的跨平台开源文件传输工具
yeelink和乐联网,这两家服务平台今天都分别试了一下
首先关于openwrt路由中串口的读取:
之前看过openwrt通过串口控制下位机再控制小车的教程,只涉及到从网页端控制串口,而读取串口几乎没有现成的教程,经过一番苦苦寻找和尝试,得到以下两种方法:
1. 使用lua语言编写脚本test.lua,代码如下:
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的话,路由就重启了。。。
2.cat命令
cat /dev/ttyS0
在shell中输入以上命令就可以获取串口输入,竟然是这么简单!
好了,言归正传,获取了串口传来的数据,接下来就是上传了
在openwrt下先得安装curl软件包,然后就可以用curl上传下载数据甚至文件了
在openwrt选一个目录新进uplode.sh文件,修改属性为0777,输入以下代码(以乐联网平台为例)
#! /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”就输入一个数,这个数就会被上传到你的乐联网平台上,十分有趣(关于该平台中添加设备和传感器的方法不再赘述)
完成这些工作后,在该平台上就能看到串口发来的数据了,要是串口上接一个单片机,单片机下连接温湿度等等各种传感器,玩法就多种多样了
读取上传的数据
数据上传到云平台之后,有时候需要自己进行一些处理分析,这时候就要从云平台上读取下来,以yeelink为例
curl --request GET --header "U-ApiKey: 密钥" http://api.yeelink.net/v1.0/device/设备编号/sensor/传感器编号/datapoint/
改命令能得到时间和数值
另外还能用
curl --request POST --data-binary @"图片文件完整路径" --header "U-ApiKey: 密钥" http://api.yeelink.net/v1.0/device/设备编号/sensor/传感器编号/photos
来上传图片文件,这个可以用于一些监控产品的开发
本文章由作者:佐须之男 整理编辑,原文地址: OpenWRT读串口数据curl上传到云服务平台