OpenWRT读串口数据curl上传到云服务平台

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

还是选择做在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上传到云服务平台
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资 源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。

相关推荐