hi.t 发表于 2014-6-15 18:17:35

路由做物联网平台接口:OpenWrt+curl+stty+串口:路由+51单片机

本帖最后由 hi.t 于 2014-6-15 18:24 编辑

www.lewei50.com
www.yeelink.net
等等免费的物联网平台很不错!
不要买对应的开发硬件或arduino UNO+w5100扩展版;

用OpenWrt路由+单片机简单的方法就能实现。
先上HG255D+51单片机+18B20温度传感器

http://www.openwrt.org.cn/bbs/data/attachment/forum/201406/15/162812tezihft8y8uuu6w9.jpg

http://www.openwrt.org.cn/bbs/data/attachment/forum/201406/15/162810n0opp3u2p660777o.jpg

一、
路由已装软件:curl+stty
软件装不上可能是不兼容,在菜单: »管理 »系统 »软件包 » OPKG-配置后添加三条:
arch all 100
arch ralink 200
arch ramips 300

二、
菜单: »管理 »系统 »启动项
启动脚本:设置串口为9600,与单片机通信。
/usr/bin/stty -F /dev/ttyS1 raw speed 9600
echo "9600" > /dev/ttyS1
exit 0

三、
菜单: »管理 »系统 »计划任务
计划任务
自定义系统crontab中的计划任务。10分钟运行一次。
*/10 * * * * /root/le.sh

每10分钟发送‘aaa’到串口;等待单片机返回数据,然后上传到网上。
在/root/下新建两个文件:le.sh、a;属性改为0777

http://www.openwrt.org.cn/bbs/data/attachment/forum/201406/15/170513mqxtf4q5gnd2sv5v.jpg

a内容为单片机上传的数据,随便输个数据。
le.sh内容:
#! /bin/sh
Y_Name='你的传感器标识'
Y_key='你的key'
WG='http://www.lewei50.com/api/V1/Gateway/UpdateSensors/01'
echo "aaa" > /dev/ttyS1
cat /dev/ttyS1 > /root/a & { sleep 6 ; eval 'kill -9 $!' &> /dev/null ; }
read Va < /root/a
curl --request POST $WG --data "[{\"Name\":\"$Y_Name\",\"Value\":\"$Va\"}]" --header "userkey:$Y_key"

四、
单片机里面无需复杂编程,
串口收到‘aaa’后,上传温度数据即可。
相关文件:
http://url.cn/QdMXdy

远程开关控制、挂摄像头上传图片都可以用这个方法的!{:soso_e179:}

polo32081 发表于 2014-6-15 21:05:45

硬件连接能上些详细的图吗?分解的。

hi.t 发表于 2014-6-16 18:30:08

polo32081 发表于 2014-6-15 21:05 static/image/common/back.gif
硬件连接能上些详细的图吗?分解的。

硬件线路很简单了!
路由里面自带的串口接51单片机的串口,最小单片机系统加个18B20温度传感器。

laoliu1982 发表于 2014-6-17 11:17:23

好思路,以后其实openwrt+带串口的传感器 是一种好的搭配模式

904570220 发表于 2014-8-30 13:35:40

本帖最后由 904570220 于 2014-8-30 13:37 编辑

谢谢楼主!不过楼主最好补充一点,路由默认串口单向传输,单片机的数据没法上传到路由。我之前就是参照楼主做法,不成功,参考WiFi小车后,才找到解决办法。用winscp 重新登录路由器或者在界面里刷新,然后打开“/etc/inittab”文件,把该文件中“ttyS0::askfirst:/bin/ash --login”和“ttyS1::askfirst:/bin/ash --login”这两行最前面加一个#号注释掉。只有这样做,路由的串口才会真正的双向传输。

weijinhe 发表于 2014-8-31 09:56:20

有个python_serail的软件哦 在树莓派上用了可以 不知道这种路由器是否可以。

lining130965 发表于 2014-12-4 13:08:35

opkg update
opkg install kmod-usb-serial-cp210x//根据自己的USB转TTL 装相对的驱动   如果用路由本身自带的就不用了不过要自己引出 VCC GND 以给DS18B20供电。数据脚接TX和RX
opkg install kmod-usb-serial-pl2303// 短接TTL 的TX 和RX
opkg install digitemp
cd /usr/bin
/usr/bin/digitemp_DS9097 -i -s /dev/ttyUSB0 //如果用路由本身的TTL改为 /dev/ttyATH0执行后会有一堆数据表示安装成功 然后执行
digitemp_DS9097 -a -A -o "%.2C" //输出的温度精确到两位小数,最多可以精确到四位 改为“%.4C”即可
最后写个SH脚本。把温度提取到里面然后调用乐为的API上传到乐联网


lining130965 发表于 2014-12-4 13:17:12

首先在/root下面建两个文件   temp和2 名字可以自己取不过要和SH文本里相对应    le.sh的文件如下
#!/bin/sh
Y_Name='TEMP' //这里改为你自己的传感器名称 详情看乐联网的API文档
Y_key='96916727d22d4ad8ba2bd406e2f51412' //这里改为你自己的KEY
WG='http://www.lewei50.com/api/V1/gateway/UpdateSensors/02'//02是网关号根据自己的修改一般默认是01
/usr/bin/digitemp_DS9097 -a -A -o "%.2C" >/root/temp
tail -n 1 /root/temp>/root/2   //这句是用来提取第三行的温度数据保存到2文件当中
read Va</root/2
curl --request POST $WG --data "[{\"Name\":\"$Y_Name\",\"Value\":\"$Va\"}]" --header "userkey:$Y_key"

lining130965 发表于 2014-12-25 10:19:43

引出GPIO继续节约成本实现乐联网上传温度数据
opkg update
opkg install kmod-w1 kmod-w1-master-gpio kmod-w1-gpio-custom
insmod w1-gpio-custom bus0=0,6,0
echo "w1-gpio-custom bus0=0,6,0" > /etc/modules.d/59-w1-gpio-custom
opkg install kmod-w1-slave-therm
cat /sys/bus/w1/drivers/w1_slave_driver/*/w1_slave
7c 01 4b 46 7f ff 04 10 09 : crc=09 YES
7c 01 4b 46 7f ff 04 10 09 t=23750
awk -F= '/t=/ {printf "%.02f\n", $2/1000}' /sys/bus/w1/drivers/w1_slave_driver/*/w1_slave
把最后一句替换到SH脚本里就好

rhcsz 发表于 2015-8-16 21:45:10

本帖最后由 rhcsz 于 2015-8-17 09:29 编辑

我在openwrt路由安装了curl这个文件,
按乐联网这条命令
curl --request POST http://www.lewei50.com/api/V1/Gateway/UpdateSensors/01 --data "[{'Name':'T1','Value':'23'}]" --header "userkey:XXXXXXXXXXXXXXXXXXXXXX"
KEY换成自已的Key,一点反应都没有。
也用了楼主的方法也是一点反应都没有。
是我的openwrt路由还有什么东西要装进去的吗???还是那里出问题了。

mondaywoo 发表于 2015-8-20 22:54:57

初学者学习
页: [1]
查看完整版本: 路由做物联网平台接口:OpenWrt+curl+stty+串口:路由+51单片机