树莓派加上温度传感器实现室内温度监控. 可用于家庭, 轿车, 工业, 农业 等许多方面. 可做温度预警, 自动降温等操作. 各位小伙伴可自行脑补发挥.
1. 硬件准备
a. 树莓派 (Raspberry Pi) 一个
b.DS18B20 温度传感器一个
c.4.7kΩ电阻一个 或 DS18B20 模块一个
d. 杜邦线(双头母)
2. 组装(如图)
按照例图接好线 组装完成以后, 确认硬件接线是否正确并生效. 首先使用命令升级内核, 命令如下:
- apt-get update
- apt-get upgrade
打开配置文件 sudo nano /boot/config.txt 在最后一行手动添加
dtoverlay=w1-gpio-pullup,gpiopin=4, 保存并重启树莓派.
确认设备是否生效
- sudo modprobe w1-gpio
- sudo modprobe w1-therm
- cd /sys/bus/w1/devices/
- ls
显示结果:
- pi@raspberrypi:~$ cd /sys/bus/w1/devices/
- pi@raspberrypi: /sys/bus/w1/devices$ ls
- 28-00000494cb79 w1_bus_master1
查看当前温度:
- cd 28-00000494cb79
- cat w1_slave
显示结果:
- 70 01 4b 46 7f ff 10 10 e1 : crc=e1 YES
- 70 01 4b 46 7f ff 10 10 e1 t=25000
第二行的 t=23000 就是当前的温度值, 要换算成摄氏度, 除以 1000, 即当前温度为 25000/1000=25 摄氏度.
3. 用 python 读取温度值
- #/home/pi/temperature.py
- # 打开温度传感器文件
- tfile = open("/sys/bus/w1/devices/28-00000494cb79/w1_slave")
- # 读取文件所有内容
- text = tfile.read()
- # 关闭文件
- tfile.close()
- # 用换行符分割字符串成数组, 并取第二行
- secondline = text.split("\n")[1]
- # 用空格分割字符串成数组, 并取最后一个, 即 t=23000
- temperaturedata = secondline.split(" ")[9]
- # 取 t = 后面的数值, 并转换为浮点型
- temperature = float(temperaturedata[2:])
- # 转换单位为摄氏度
- temperature = temperature / 1000
- # 打印值
- print temperature
将以上代码文件存放:/home/pi/temperature.py 命令行运行代码.
python /home/pi/temperature.py 就可得出结果数值
4. 数据上报物联网平台
yeelink 是国内比较知名的免费物联网数据平台, 国外有 COSM(https://cosm.com). 注册 yeelink 账号并添加设备和传感器.
修改刚刚写好的 Python 文件 , 将温度值用 JSON 格式保存到一个文本文件.
- #/home/pi/temperature.py
- # 打开温度传感器文件
- tfile = open("/sys/bus/w1/devices/28-00000494cb79/w1_slave")
- # 读取文件所有内容
- text = tfile.read()
- # 关闭文件
- tfile.close()
- # 用换行符分割字符串成数组, 并取第二行
- secondline = text.split("\n")[1]
- # 用空格分割字符串成数组, 并取最后一个, 即 t=23000
- temperaturedata = secondline.split(" ")[9]
- # 取 t = 后面的数值, 并转换为浮点型
- temperature = float(temperaturedata[2:])
- # 转换单位为摄氏度
- temperature = temperature / 1000
- # 拼接 API 所需 JSON 数据
- res = '{"value":%f}' %temperature
- # 打开创建文件, 将温度值写入:/home/pi/datafile.txt
- output = open('/home/pi/datafile.txt', 'w')
- # 写入数据
- output.write(res)
- # 关闭文件
- output.close
新增 yeelink.sh 脚本, 文件位置:/home/pi/yeelink.sh , 内容如下:
- sudo python /home/pi/temperature.py
- curl --request POST --data-binary @"/home/pi/datafile.txt" --header "U-ApiKey:XXXXXXXXXXXXXXXX" http://api.yeelink.net/v1.0/device/1969/sensor/2533/datapoints
将 U-ApiKey:XXXXXXXXXXXXXXXX 替换为自已账户的 API Key.
后面的 URL 也需要替换为自己申请的传感器 URL.
添加到计划任务
- # 为脚本增加可执行权限
- sudo chmod +x yeelink.sh
- # 将脚本加入 cronjob(计划任务)
- sudo crontab -e
- # 在 cornjob 文件中添加下面一行, 并保存(表示 20 分钟执行一下脚本, 时间可自行修改)
- */20 * * * */home/pi/yeelink.sh
这样就好 20 分钟讲温度数据上传到 yeelink 物联网平台, 然后就可以在个人页面 看到数据变化曲线了. 当然你也可以自己在树莓派上自己做页面, 做曲线图分析数据及其他功能. 这个就要靠各位自己发挥想象了. 嘿嘿~~