本帖最后由 宙仔 于 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");
 - ?>
 
  复制代码
  
数据显示情况: 
  
 
 
以上只是练手,还不是自己想要的项目内容,假期继续完善…… 
 
 
 
 
 
 |