• DIY远程监控室内温度设备(tiny6410+ds18b20+yeelink+curl)


           春节了,趁着假期的空闲时间,抽空捣鼓了下tiny6410开发板,发现这个东东尘封许久,很长时间没用过了。貌似最近物联网大热,谷歌收购Nest,其设计的恒温器能够智能调节和远程控制房间的温度,UI和设计理念都非常棒。物联网是什么东东,这个百度、google一下就能得到很多说法或概念,但到底是什么呢,这个我想还是DIY一个简单的东东来体验一下吧。

     
    一、目的
          DIY一个可以简易的远程监控室内温度设备,实现通过web/android/ios/微信进行查看家中温度的电子设备。(最终的效果相当不错,虽然简单,只要家中未断电断网,就可以用随时随地掌握家中的温度变化,做到遥知冷暖,很新鲜啊,提供个链接,欢迎大家围观:http://www.yeelink.net/devices/7376
     
    二、软硬件环境
          硬件:tiny6410+ds18b20+有线网络 or USB wifi
          软件:linux+QT/curl/crontab/shell/YeeLink服务(云存储、各种接入方式web/android/ios/微信甚至微博、邮件及相关社交网络分享,这点很赞)
     
    三、ds18b20驱动及应用
    见参考资料5,这个有前人的经验总结,就不展开说,源码如下:
     
     
    四、curl移植到tiny6410
    1、移植openssl到tiny6410。
    下载openssl-1.0.0l.tar.gz
    解压tar xzvf openssl-1.0.0l.tar.gz
    配置编译(ubuntu中进行交叉编译)
     1 #!/bin/sh
     2 export LD_LIBARY_PATH=/opt/FriendlyARM/toolschain/4.5.1/lib/
     3 export CPPFLAGS=-I/opt/FriendlyARM/toolschain/4.5.1/include/
     4 export LDFLAGS=-L/opt/FriendlyARM/toolschain/4.5.1/lib/
     5 export CC=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc
     6 
     7 cd openssl-1.0.0l
     8 ./config no-asm --prefix=/home/share/tool/tiny6410/openssl os/compiler:/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc
     9 make
    10 make install
    2、移植curl到tiny6410。(依赖openssl)
    下载openssl-1.0.0l.tar.gz
    解压tar xzvf curl-7.35.0.tar.gz
    配置编译(ubuntu中进行交叉编译)
     1 #!/bin/sh
     2 export LD_LIBARY_PATH=/opt/FriendlyARM/toolschain/4.5.1/lib/
     3 export CPPFLAGS=-I/opt/FriendlyARM/toolschain/4.5.1/include/
     4 export LDFLAGS=-L/opt/FriendlyARM/toolschain/4.5.1/lib/
     5 export CC=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc
     6 
     7 cd curl-7.35.0
     8 ./configure --host=i686 --target=arm-linux --prefix=/home/share/tool/tiny6410/curl --with-ssl=/home/share/tool/tiny6410/openssl --with-random=/dev/urandom
     9 make
    10 make install
    五、yeelink环境
         为了实现远程监控功能,在此使用了yeelink基于物联网应用免费的云存储服务器及相关的客户端(android/IOS/微信服务号/微博发布),作为一种物联网应用,该平台确实非常不错。
    1、yeelink之注册用户、添加设备、添加传感器、上传数据、取回数据。详情见官网http://www.yeelink.net/
    2、根据yeelink的api接口上传数据。在tiny6410 linux系统上采用shell脚本调用curl工具来实现。
     
     1 #!/bin/sh
     2 
     3 #在单引号中填入yeelink给你的API KEY
     4 YL_ApiKey='xxxxxxxx'
     5 YL_URL=http://api.yeelink.net/v1.0/device/7376/sensor/11615/datapoints
     6 temp=$(/dev/shm/read_ds18b20)
     7 echo $temp
     8 
     9 upcmd="curl --request POST --data '{"value":$temp}' --header U-ApiKey:$YL_ApiKey --verbose $YL_URL"
    10 
    11 echo $upcmd|sh

      

    六、busybox crontab使用
     1、在crontab服务中加入下面加红的一行, 让脚本每分钟运行一次, 保存退出。
    */1 * * * * /dev/shm/post_ds18b20_data_to_yeelink.sh
    2、开启crond服务(tiny6410 linux+qt系统默认未开启)。
     
     1 [root@FriendlyARM crontabs]# crond&
     2 [root@FriendlyARM crontabs]# ps
     3   PID USER       VSZ STAT COMMAND
     4     1 root      2992 S    init
     5     2 root         0 SW   [kthreadd]
     6     3 root         0 SW   [ksoftirqd/0]
     7     5 root         0 SW   [kworker/u:0]
     8     6 root         0 SW<  [khelper]
     9   346 root         0 SW   [sync_supers]
    10   348 root         0 SW   [bdi-default]
    11   349 root         0 SW<  [kblockd]
    12   359 root         0 SW   [khubd]
    13   455 root         0 SW<  [rpciod]
    14   456 root         0 SW   [kworker/0:1]
    15   464 root         0 SW   [khungtaskd]
    16   465 root         0 SW   [kswapd0]
    17   515 root         0 SW   [fsnotify_mark]
    18   517 root         0 SW<  [aio]
    19   527 root         0 SW<  [nfsiod]
    20   531 root         0 SW<  [crypto]
    21   615 root         0 SW   [mtdblock0]
    22   620 root         0 SW   [mtdblock1]
    23   625 root         0 SW   [mtdblock2]
    24   634 root         0 SW   [ubi_bgt0d]
    25   793 root         0 SW   [pvrusb2-context]
    26   866 root         0 SW   [kworker/u:2]
    27   915 root         0 SW   [ubifs_bgt0_0]
    28   917 root         0 SW   [mmcqd/0]
    29   948 root      2992 S    syslogd
    30   951 root      3312 S    /usr/sbin/inetd
    31   955 root      2028 S    /usr/sbin/boa
    32   958 root      1504 S    /usr/bin/led-player
    33   968 root     18480 S    /opt/Qtopia/bin/qpe
    34   969 root      2992 S    init
    35   970 root      2992 S    init
    36   971 root      2992 S    init
    37   973 root      2992 S    init
    38   979 root         0 SW   [kworker/0:2]
    39   980 root         0 SW   [flush-ubifs_0_0]
    40   987 root      8708 S <  /opt/Qtopia/bin/qss
    41   988 root     12552 S N  /opt/Qtopia/bin/quicklauncher
    42   990 root      3320 S    /usr/sbin/telnetd -i
    43   991 root      3316 S    -sh
    44 1025 root      3320 S    /usr/sbin/telnetd -i
    45 1026 root      3316 S    -sh
    46 1098 root      3312 S    crond
    47 1100 root      3316 R    ps
    48 [root@FriendlyARM crontabs]# 
    七、实现效果
    1、网页浏览效果
     
    2、android客户端显示效果
     
    3、 下面提供了交叉编译后的可执行文件(交叉工具链为:FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc)
    使用说明:
     1 /**
     2  * @file readme.txt
     3  * @brief 基于tiny6410、ds18b20、curl的远程温度监测实现说明
     4  * @details
     5  * @version V1.0.0
     6  * @author Richard.hmm
     7  * @date 2014-2-4
     8  */
     9 
    10 1、在tiny6410上安装ds18b20驱动
    11 insmod ds18b20.ko
    12 
    13 2、拷贝curl到usr/bin/14 cp curl /usr/bin/
    15 
    16 3、拷贝read_ds18b20和post_ds18b20_data_to_yeelink.sh到tiny6410的内存文件系统/dev/shm中
    17 cp read_ds18b20 /dev/shm/
    18 cp post_ds18b20_data_to_yeelink.sh /dev/shm/
    19 
    20 4、配置crontab
    21 [root@FriendlyARM crontabs]# crontab -e
    22 */1 * * * * /dev/shm/post_ds18b20_data_to_yeelink.sh  // 新增任务
    23 [root@FriendlyARM crontabs]# crond&  // 开启crond
    八、参考资料
    1、树莓派玩家5分钟内将树莓派-USB摄像头与Yeelink连接–最好玩的网页监控器 http://blog.yeelink.net/?p=468
    2、远程监控树莓派BT上传/下载状态 http://bbs.yeelink.net/forum.php?mod=viewthread&tid=112&extra=page%3D2
    3、如何使用busybox的cron实现计划任务 http://bbs.csdn.net/topics/190017224
    5、基于Tiny6410的ds18b20驱动 http://blog.csdn.net/tandesir/article/details/7247558
     
     
  • 相关阅读:
    topcoder SRM 592 DIV2 LittleElephantAndBooks
    codeforces round #201 Div2 A. Difference Row
    Codeforces Round #199 (Div. 2) A Xenia and Divisors
    objective-c "performSelector may cause a leak because its selector is unknown".
    ccrendertexture to uiimage
    TopCoder SRM 588 DIV2 KeyDungeonDiv2
    ios clang: error: linker command failed with exit code 1 (use -v to see invocation)解决方法
    c++ for_each()与仿函数
    c++ map删除元素
    c++ map和mutimaps 插入值
  • 原文地址:https://www.cnblogs.com/IDoIUnderstand/p/3537858.html
Copyright © 2020-2023  润新知