本帖最后由 宙仔 于 2024-1-9 00:03 编辑
原本打算做一个树莓派实时显示传感器数值,并用图表显示的项目,由于时间和技术问题,只好做个半成品了~~~
器材:树莓派3B,温湿度传感器,杜邦线若干
软件:python3,PHP,nginx,Mariadb。
一、环境配置:
步骤1.安装nginx,php7.3,mariadb-Server;
- sudo apt-get install nginx
- sudo apt-get install php-fpm
- sudo apt-get install mariadb-server
复制代码
步骤2.配置nginx支持php;网上有教程,略
步骤3.配置mariadb,网上有教程,略。
在mariadb中创建数据库,在终端中输入以下命令登录mysql:
复制代码 输入密码后,创建一个名为dht11的数据库:
复制代码
然后创建一个名为dht11_data的表:
- USE dht11;
- CREATE TABLE dht11_data (
- id INT(11) NOT NULL AUTO_INCREMENT,
- temperature FLOAT(4,2) NOT NULL,
- humidity FLOAT(4,2) NOT NULL,
- time DATETIME NOT NULL,
- PRIMARY KEY (id)
- );
复制代码
二、硬件连接
DHT11 VCC→5V,GND→GND,DATA→GPIO4;为了稳定读取数据,加一个10KΩ的上拉电阻。
三、Python编程
需要安装几个库文件:Adafruit_DHT,pymysql
- import Adafruit_DHT
- import pymysql.cursors
- import time
- from datetime import datetime
-
- # 设置传感器类型和GPIO引脚
- sensor = Adafruit_DHT.DHT11
- pin = 4
-
- # 连接mysql数据库
- mydb = pymysql.connect(
- host="localhost",
- user="username",
- password="password",
- database="dht11"
- )
-
- # 获取游标
- mycursor = mydb.cursor()
-
- # 读取温湿度数据
- humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
-
- # 如果读取成功
- if humidity is not None and temperature is not None:
- with mycursor as cursor:
- while True:
- # 打印温湿度数据
- print('Temperature={0:0.1f}*C Humidity={1:0.1f}%'.format(temperature, humidity))
-
- # 将温湿度数据插入到mysql数据库中
- sql = "INSERT INTO dht11_data (temperature, humidity, time) VALUES (%s, %s, %s)"
- val = (temperature, humidity, datetime.now())
- mycursor.execute(sql, val)
- mydb.commit()
- time.sleep(10)
-
- # 如果读取失败
- else:
- print('Failed to get reading. Try again!')
复制代码
python程序运行情况:
通过登录数据库查看dht11表中的数据:
- SELECT * FROM dht11_data;
复制代码
四、编写php网页
1.数据连接
- <?php
-
- $cn=new mysqli("host","username","password","dht11",3306);//获取数据库连接
- if (!$cn)//判断连接是否为空
- {
- die("连接错误: " . mysqli_connect_error());//连接失败 打印错误日志
- }
- $cn->query("SET NAMES utf8");//设置 字符集为utf8格式
- $cn->select_db("dht11_data");//选择要操作的数据表
- ?>
复制代码
2.数据查询
- <?php
- require ("DBcon.php"); // 相对路径引用数据库连接类
- $sql="select * from dht11_data";
- mysqli_query($cn,$sql); //传入数据库连接参数,sql字符串。
- $res=$cn->query($sql); //接收查询产生的结果集
- $row=mysqli_fetch_assoc($res); //将结果集赋值给数组对象
- echo $row["id"]."".$row["temperature"]."".$row["humidity".$row["time"]; //输出结果
- ?>
复制代码
3.数据显示
- <?php
- $refreshTime = 5;
- #连接数据库
- $conn = mysqli_connect("host","username","password","dht11",3306);
-
- #判断是否连接成功
- if(!$conn){
- echo "失败";
- }
-
- //选择数据库
- mysqli_select_db($conn,"dht11");
-
- //准备sql语句
- $sql = "select * from dht11_data order by id desc";
-
- //发送sql语句
- $obj = mysqli_query($conn,$sql);
-
- echo "<center>";
- echo "<table border = 1 cellspacing = '0' cellpadding = '10'>";
- echo "<th>编号</th><th>温度</th><th>湿度</th><th>时间</th>";
- while($row = mysqli_fetch_assoc($obj)){
- echo "<tr>";
- echo '<td>'.$row['id'].'</td>';
- echo '<td>'.$row['temperature'].'</td>';
- echo '<td>'.$row['humidity'].'</td>';
- echo '<td>'.$row['time'].'</td>';
- echo "</tr>";
- }
-
- echo "</table>";
- echo "<center>";
-
- //关闭连接
- mysqli_close($conn);
- header("Refresh:$refreshTime");
- ?>
复制代码
数据显示情况:
以上只是练手,还不是自己想要的项目内容,假期继续完善……
|