最初使用了openwrt的路由器,后来发现这个东东能和单片机串口能通讯
于是乎我就开始折腾起来了,偶这个学机械的人单片机很烂,但是却有一种说不出的喜欢这方面的爱好。
申报了这么个关于物联网的课题,用的乐联网的平台,单片机用的51,路由用的db120。还有一个来月的时间,现在遇到的这么个困惑。
单片机用ttl转usb连接,这是STC的串口助手作为上位机,发送aaa后,单片机返回温度值,在这里倒是没什么问题(如图)
,但是单片机和路由器连接上就出现读数不全的情况(见下图)
读数2度,但偶尔有读准的时候。底下平的时候是两度。
路由端是这样操作的,在root目录下新建了两个文件,a文件和lelian.sh文件,权限0777,a文件主要
sh脚本里写的是这个
#! /bin/sh
Y_Name='你的传感器标识' #设置对应乐联网上传感器的标号
Y_key='你的key' #填上自己的key
WG='com/api/V1/Gateway/UpdateSensors/01' #乐联的网关地址,这里是第一个
echo "aaa" > /dev/ttyS1 #在串口里发aaa字符
cat /dev/ttyS1 > /root/a & { sleep 6 ; eval 'kill -9 $!' &> /dev/null ; } #cat命令这个可以获取串口输入,但是向右的这个箭头> 和后面的 /root/a & { sleep 6 ; eval 'kill -9 $!' &> /dev/null ; } 干嘛用的不清楚这是
read Va < /root/a #用的read函数把a文件的数写到Va中了
curl --request POST $WG --data "[{\"Name\":\"$Y_Name\",\"Value\":\"$Va\"}]" --header "userkey:$Y_key" #用curl命令发送出去了
串口的波特率都设置好了用的9600,用Linux crontab 设置定时时间*/1 * * * * /root/lelian.sh 一分钟执行一次。测试了下,就出现我刚才的情况,读数会读不全。
我试着把 { sleep 6 ; eval 'kill -9 $!' &> /dev/null ; }中的sleep 6该成了9,以为能增加延时时间,但还是不行,
那么我应该在openwrt的脚本里做修改,还是改单片机的程序有了问题呢,恳请赐教。
如果您有更好的方案,我倒是很想学习一下的,并打赏酬劳哈。。。arduino方案看过,其他方案……我现在真的没底了,,,,
|