陈拓 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数据库


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






