树莓派采集温度数据并存入数据库(Shell版)

本文介绍如何使用树莓派Zero W与DS18B20温度传感器进行温度监测,并通过Shell脚本将数据存储到SQLite及MariaDB数据库中。文章详细展示了硬件连接方式、获取温度数据的方法以及编写Shell脚本的具体步骤。

陈拓 2020.09.21/2020.09.21

1. 相关文档

《树莓派安装使用数据库SQLite》
树莓派安装使用数据库SQLite_树莓派 sqlite 客户端-优快云博客

《树莓派安装使用数据库MariaDB (MySQL)》

树莓派安装使用数据库MariaDB (MySQL)_树莓派5代 5数据库-优快云博客

《树莓派 Zero W+温度传感器DS18B20》

树莓派+温度传感器DS18B20_设备树dtb中 温度传感器-优快云博客

2. 硬件连接和基本操作

细节请看《树莓派 Zero W+温度传感器DS18B20》一文。

  • 查看DS18B20序列号

每个传感器有一个唯一的序列号。

ls /sys/bus/w1/devices/

我的DS18B20温度传感器序列号是28-000004d6162f。面我们通过序列号读传感器的温度值。

  • 读温度值

cat /sys/bus/w1/devices/28-000004d6162f/w1_slave

第二行的t=23125就是当前的温度值,要換算成攝氏度,除以1000,即当前温度为23125/1000=23.125攝氏度。

3. 编写Shell程序

在这里我们用Shell程序实现温度采样和数据存储功能,当然也可以用C语言、python语言等等其他语言实现。

3.1 安装bc让Shell支持浮点运算

sudo apt-get install bc

测试一下:

3.2 创建Shell脚本程序

  • 先进入工作目录

cd idata

在《树莓派安装使用数据库SQLite》一文中我们已经创建了SQLite的数据库文件:smarthome.db。

在《树莓派安装使用数据库MariaDB (MySQL)》一文中我们也已经创建了数据库smarthome。

  • 编写程序

nano read_data.sh

#!/bin/bash
# Set time zone
export TZ='Asia/Shanghai'

# local MySQL
User=ct
PW=ct

ideviceid="'temp001'"
ibattery_voltage=3333
substr=t=

while true
do

# Get datetime
time=$(date "+%Y-%m-%d_%H:%M:%S")
time=`printf "'%s'" $time`
echo $time

# Read ds18b20 value
temp=$(cat /sys/bus/w1/devices/28-000004d6162f/w1_slave)
echo "temp: $temp"
if [[ $temp = $sub* ]]
then
    #echo ${temp#*t=}
    itemp=$(echo ${temp#*t=})
    echo "itemp: $itemp"
    ftemp=$(echo "scale=2;$itemp/1000"|bc) #设定小数位2位,不够的补零
    echo "ftemp: $ftemp"

    # Building SQL statements
    sql=`printf "insert into temperature(deviceid, time, battery_voltage, celsius_temp) values(%s, %s, %d, %f);" $ideviceid $time $ibattery_voltage $ftemp`
    echo "sql: ${sql}"
    echo " "

    # 打开本地SQLite数据库smarthome.db,并将值写入表temperature
    sqlite3 /home/pi/idata/smarthome.db << EOF
    ${sql}
.quit
EOF
#.quit和EOF前后都不能有空格或其他符号,例如制表符Tab

    # 登录本地MariaDB(MySQL)数据库,并将值写入表temperature
    mysql -u$User -p$PW << EOF
    use smarthome;
    ${sql}
    commit;
    exit
EOF
#EOF前后都不能有空格或其他符号,例如制表符Tab

else
    echo 'Error!!!'
fi

sleep 5
done

数据同时写入SQLite和MySQL数据库,具体项目可根据情况取舍。

注意:

1) shell脚本赋值语句等号=两边不能有空格

2) 中括号[和]前后一定要加空格

3) 变量的引用是用$符号加上变量名,花括号加不加都可以,例如:${sql}或$sql

4) 有时缩进会出错,例如EOF前面不能缩进

  • 为read_data.sh添加可执行权限

chmod +x read_data.sh

 

3.3 运行脚本

./read_data.sh

3.4 查看数据库

  • 查看SQLite数据库

  • 查看MySQL数据库

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨之清风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值