用物联网记录树莓派的工作温度

时间:2013年07月26日 22:13 星期五 栏目:未分类 作者: 评论:10 点击: 5,925 次

树莓派可以挖矿,当然也可以顺便做其它事情,装个温度传感器就可以定时记录温度了,只是在附近电子市场转了一圈没买到合适的温度传感器,网上买还没邮费那么贵,而且就是玩玩,也没什么必要。既然树莓派的内部有个传感器可以记录内核温度,就用这个来玩吧。

首先要准备两样东西:
1.可以上网的树莓派一个。
2.物联网的帐号一个,例如 yeelink.net 的帐号。

然后就可以开始了。
由于树莓派没有硬盘,是用SD卡当硬盘用的,所以为了避免擦写过于频繁,我们在内存里开辟一个小区域专用来存放要运行的文件和中间文件。

先在/mnt 下新建一个文件夹

1
 sudo mkdir /mnt/tmp

然后把这个文件夹挂进内存里

1
 sudo mount -t tmpfs -o size=5m  tmpfs /mnt/tmp

这句命令的意思就是把/mnt/tmp挂进内存里,上限是5m,不用就不占空间,更多的资料请搜一下linux 相关的 tmpfs 。挂进内存之后可以用 df 命查看。

测试成功之后我们要树莓派开机自动把文件夹挂进内存。在编辑/etc/fstab

1
 sudo nano /etc/fstab

在最后增加一行

1
 tmpfs /mnt/tmp tmpfs size=5m 0 0

然后回车再 Ctrl+X保存退出,这样开机的时候就会自动把文件夹挂进内存。
在pi的目录下(也就是/home/pi)新建 temp.py,这个是用python语言来取得树莓派的内核温度,并保存为一个内容为JSON格式的文本文件。之所以保存为JSON格式,是因为yeelink.net网站的要求,我们要把数值提交给物联网,要按照API接口行事。

1
 pi@raspberrypi ~ $nano temp.py

键入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
 #打开这个文件,内容就是派的内核温度,除以1000就是摄氏度。
tfile = open("/sys/class/thermal/thermal_zone0/temp")
text = tfile.read()
tfile.close()
#除以1000就是摄氏度的数值。
temperature = float(text)/1000
#作些处理,整容成JSON格式,并让数值保留小数点后一位。
res = '{"value":%.1f}' %temperature
#保存到/mnt/tmp/temp.txt
output = open('/mnt/tmp/temp.txt', 'w')
output.write(res)
output.close

照例Ctrl+X 保存退出。

然后再新建一个sh脚本:

1
 nano yeelink.sh

输入内容:

1
2
3
 #注意这句执行的是/mnt/tmp/下的文件,而不是home/pi/
sudo python /mnt/tmp/temp.py
curl --request POST --data-binary @"/mnt/tmp/temp.txt" --header "U-ApiKey:XXXXXXXXXXXXXX" --verbose http://api.yeelink.net/v1.0/device/XXXX/sensor/XXXX/datapoints

记得要把上面的ApiKey和API地址换成你在yeelink.net帐号对应的资料。
API KEY:进入yeelink.net的用户中心,点“帐户”-“我的帐户设置”就可以看到了。
API地址:进入yeelink.net的用户中心,点“我的设备”-“管理设备”,选择对应数值传感器的数据曲线 url就对了。没有传感器就新建一个,这就不多说了。
关于详细的API接口操作,可以点击“用户中心”里“API文档”查阅。

照样保存退出。但是作为.sh文件,必须修改一下属性让它可以被执行。

1
 sudo chmod +x yeelink.sh

每执行一次,就读一次内核温度后上传到yeelink。

OK了,最后就是设置系统启动的时候把 temp.py 和 yeelink.sh 从 home/pi/ 拷贝到 /mnt/tmp/,同时每10分钟执行一次yeelink.sh

1
 sudo nano /etc/rc.local

在exit 0这行之上写上

1
2
 sudo cp /home/pi/temp.py /mnt/tmp/
sudo cp /home/pi/yeelink.sh /mnt/tmp/

保存退出。

最后启用cron来每十分钟执行一次,cron是linux内置进程,专门掐时敲钟的干活。

1
 sudo crontab -e

在最后新增一行:

1
 */10 * * * * /mnt/tmp/yeelink.sh

回车保存退出。
这行代码的意思是每十分钟执行一次/mnt/tmp/yeelink.sh
具体关于cron的运行,启动停止重启之类的操作请自行搜索。
一般来说,把两个文件拷到/mnt/tmp/就可以正常运行了,重启系统也会自动运行。
有兴趣可以来这里围观我家树莓派的体温:
http://www.yeelink.net/devices/3908

后话:本来用python结合CURL,应该是可以直接提交数值的,用不着保存一个文件再把文件提交给yeelink的,但是我没用过python,又刚刚学linux。先这样吧。

相关文章

用物联网记录树莓派的工作温度:目前有10 条留言

  1. 5楼
    孟凡懂:

    有没有办法直接用python直接提交?

    2014-06-01 16:10
    • 有,把读文件那部分换成变量就行了。而这个变量可以按需要赋值。

      2014-06-02 14:19
      • 我在cubieboard上尝试了用python提交DHT11的数据到yeelink成功,谢谢你!

        2014-06-02 23:21
    • 经过测试,用 –data-binary “{“value”:120}” 这种格式可以成功提交,用变量构造这种格式就可以不成生成文件,直接提交。

      2014-08-04 12:51
      • 是的,我就是用的这样的提交的。现在正在做一个yeelink的python库。谢谢各位的帮助。

        2014-08-05 12:00
  2. 准备参加嵌入式比赛 现在才开始学习树莓派 不知道来得及不 您的这篇教材是我的入门第一篇啊 万分感谢!

    2014-04-11 13:48
  3. 后来用shell脚本可以读取linux系统的运行时间并截取转换后提交到BAE的数据库,同样的道理,这个也可以这样做,不需要用python生成文件。

    2013-08-15 08:04
  4. 今天突然出现一个85℃的值,上网搜一下,才知道这是DS18B20会出现的初始值,估计pi的内部用的就是这个传感器。对于这个非正常值,我觉得简单的判断一下,不小于85度就直接丢掉算了。

    2013-08-12 20:48
  5. 我OUT了,对物联网这玩意完全不懂

    2013-07-31 01:21

发表评论

您必须 [ 登录 ] 才能发表留言!

Baidu提供的广告

最近访客

    最新评论