物联网开发入门记: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读串口数据curl上传到云服务平台_第1张图片

在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”就输入一个数,这个数就会被上传到你的乐联网平台上,十分有趣(关于该平台中添加设备和传感器的方法不再赘述)


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

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


读取上传的数据


数据上传到云平台之后,有时候需要自己进行一些处理分析,这时候就要从云平台上读取下来,以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

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

欢迎到我的博客查看更详细的信息https://hosea1008.github.io/

你可能感兴趣的:(物联网开发)