宙仔 发表于 2024-1-8 23:58:31

树莓派PHP+mariadb实现传感器数据记录与显示

本帖最后由 宙仔 于 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:
mysql -u root -p 输入密码后,创建一个名为dht11的数据库:
CREATE DATABASE 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}*CHumidity={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");
?>
数据显示情况:



以上只是练手,还不是自己想要的项目内容,假期继续完善……





页: [1]
查看完整版本: 树莓派PHP+mariadb实现传感器数据记录与显示