1、在 /var/www/html新建DHT11.py,将以下程序复制到里面保存。

# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO  # 引入GPIO模块,重命名为GPIO
import time  # 引入时间模块channel = 4  # 设置端口号
j = 0  # 初始化计数器为0
data = []  # 初始化数据存储数组GPIO.setmode(GPIO.BCM)  # 设置gpio引脚编号模式,有两种编号模式可供选择,自己随意设置就好
time.sleep(1)  # 程序暂停一秒钟
GPIO.setup(channel, GPIO.OUT)  # 设置4号口为输出模式
GPIO.output(channel, GPIO.LOW)  # 4号口输出低电平,即发送触发信号
time.sleep(0.02)  # 低电平维持0.02秒
GPIO.output(channel, GPIO.HIGH)  # 输出高电平,标志低电平结束
GPIO.setup(channel, GPIO.IN)  # 设置端口模式为输入
while GPIO.input(channel) == GPIO.LOW:  # 跳过初始状态的低电平pass
while GPIO.input(channel) == GPIO.HIGH:  # 跳过初始状态的高电平pass# 进入循环
while j < 40:  # 仅仅存储40个数据k = 0while GPIO.input(channel) == GPIO.LOW:  # 跳过低电平continuewhile GPIO.input(channel) == GPIO.HIGH:  # 如果是高电平,则进入循环,高电平结束时停止k += 1  # 计数器自增if k > 100:  # 如果高电平计数器大于100,则跳出循环,数据错误breakif k < 8:  # 如果计数器数值小于8次(即高电平持续8次),则认为值为0data.append(0)else:  # 否则认为值为1data.append(1)j += 1  # 数据位数计数器加一# 按位切割数据
humidity_bit = data[0:8]     #python列表 取前不取后。即为0-7。
humidity_point_bit = data[8:16]
temperature_bit = data[16:24]
temperature_point_bit = data[24:32]
check_bit = data[32:40]humidity = 0
humidity_point = 0
temperature = 0
temperature_point = 0
check = 0# 计算各个数据结果和校验值
for i in range(8):    #python for循环 取前不取后。即0-7。#将前面读取的8位二进制数转换成十进制。humidity += humidity_bit[i] * 2 ** (7 - i)           #两个**代表乘方。humidity_point += humidity_point_bit[i] * 2 ** (7 - i)temperature += temperature_bit[i] * 2 ** (7 - i)temperature_point += temperature_point_bit[i] * 2 ** (7 - i)check += check_bit[i] * 2 ** (7 - i)
# 计算检查值
tmp = humidity + humidity_point + temperature + temperature_pointif check == tmp:print('数据正确')print("温度: " + str(temperature) +"℃" + " , 湿度: " + str(humidity) +"%")
else:print('数据错误')print("温度: " + str(temperature) +"℃" + " , 湿度: " + str(humidity) +"%"+"\t" + "校验值: " + str(check) + " 检查值: " + str(tmp))GPIO.cleanup()

2、使用以下命令安装python数据库包。

sudo apt-get install python-mysqldb

利用以下命令进入数据库。

mysql -u root -p

**(1)**若出现 ERROR 1698 (28000): Access denied for user ‘root’@’localhost’ 错误,是因为: 数据库默认使用系统用户登录,需要修改为使用密码登录。则按照以下步骤更改:

sudo mysql -u root ,登入数据库后,依次执行以下命令。 (切记要把命令后的分号也加上)
use mysql #切换到mysql数据库
update user set plugin=‘mysql_native_password’; #修改plugin字段
flush privileges; #刷新权限
exit; #退出数据库
再次使用mysql -u root -p即可通过密码登录数据库,无需root权限执行。

**(2)**在本地MYSQL创建库“test”,表“dht”和三个列“dht_tem”,“dht_hum”,“dht_time”。

create database test; #创建数据库”test”

use test; #选择数据库”test”

create table dht #创建表“dht”(此句后无分号。因为数据库中创建表时,要求至少有一列)

(dht_tem DECIMAL(4,1), dht_hum DECIMAL(4,1),dht_time char(25)); #创建列“dht_tem”,“dht_hum”,“dht_time”

备注:DECIMAL(4,1)中的
4是(有效位数:可储存的最大十进位数总数,小数点左右两侧都包括在内。有效位数必须是 1 至最大有效位数 38 之间的值。预设有效位数是 18。)
1是 (小数位数:小数点右侧所能储存的最大十进位数。小数位数必须是从 0 到 4 的值。只有在指定了有效位数时,才能指定小数位数。预设小数位数是 0。)

完成以上操作后可通过 SHOW TABLES;DESCRIBE dht; 命令查看列表是否已建成。

3、在上述新建的DHT11.py中打开,将以下语句加入(建议多开几个命令行窗口,上述数据库窗口建议不要退出,后面要用。):

import MySQLdbconn = MySQLdb.connect(host='localhost',user='root',passwd='raspberry',db='test')cur = conn.cursor()value = [temperature,humidity,str(time.strftime('%A %X %Z',time.localtime(time.time())))]cur.execute("insert into dht (dht_tem,dht_hum,dht_time) values(%s,%s,%s)",value)conn.commit()conn.rollback()

即源程序变为:

# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO  # 引入GPIO模块,重命名为GPIO
import time  # 引入时间模块import MySQLdbconn = MySQLdb.connect(host='localhost', user='root', passwd='raspberry',db='test')cur = conn.cursor()channel = 4  # 设置端口号
j = 0  # 初始化计数器为0
data = []  # 初始化数据存储数组GPIO.setmode(GPIO.BCM)  # 设置gpio引脚编号模式,有两种编号模式可供选择,自己随意设置就好
time.sleep(1)  # 程序暂停一秒钟
GPIO.setup(channel, GPIO.OUT)  # 设置4号口为输出模式
GPIO.output(channel, GPIO.LOW)  # 4号口输出低电平,即发送触发信号
time.sleep(0.02)  # 低电平维持0.02秒
GPIO.output(channel, GPIO.HIGH)  # 输出高电平,标志低电平结束
GPIO.setup(channel, GPIO.IN)  # 设置端口模式为输入
while GPIO.input(channel) == GPIO.LOW:  # 跳过初始状态的低电平pass
while GPIO.input(channel) == GPIO.HIGH:  # 跳过初始状态的高电平pass# 进入循环
while j < 40:  # 仅仅存储40个数据k = 0while GPIO.input(channel) == GPIO.LOW:  # 跳过低电平continuewhile GPIO.input(channel) == GPIO.HIGH:  # 如果是高电平,则进入循环,高电平结束时停止k += 1  # 计数器自增if k > 100:  # 如果高电平计数器大于100,则跳出循环,数据错误breakif k < 8:  # 如果计数器数值小于8次(即高电平持续8次),则认为值为0data.append(0)else:  # 否则认为值为1data.append(1)j += 1  # 数据位数计数器加一# 按位切割数据
humidity_bit = data[0:8]     #python列表 取前不取后。即为0-7。
humidity_point_bit = data[8:16]
temperature_bit = data[16:24]
temperature_point_bit = data[24:32]
check_bit = data[32:40]humidity = 0
humidity_point = 0
temperature = 0
temperature_point = 0
check = 0# 计算各个数据结果和校验值
for i in range(8):    #python for循环 取前不取后。即0-7。#将前面读取的8位二进制数转换成十进制。humidity += humidity_bit[i] * 2 ** (7 - i)           #两个**代表乘方。humidity_point += humidity_point_bit[i] * 2 ** (7 - i)temperature += temperature_bit[i] * 2 ** (7 - i)temperature_point += temperature_point_bit[i] * 2 ** (7 - i)check += check_bit[i] * 2 ** (7 - i)
# 计算检查值
tmp = humidity + humidity_point + temperature + temperature_pointif check == tmp:print('数据正确')print("温度: " + str(temperature) +"℃" + " , 湿度: " + str(humidity) +"%")
else:print('数据错误')print("温度: " + str(temperature) +"℃" + " , 湿度: " + str(humidity) +"%"+"\t" + "校验值: " + str(check) + " 检查值: " + str(tmp))
value = [temperature,humidity,str(time.strftime('%A %X %Z',time.localtime(time.time())))]cur.execute("insert into dht (dht_tem,dht_hum,dht_time) values(%s,%s,%s)",value)conn.commit()conn.rollback()
GPIO.cleanup()

远行python程序 sudo python DHT11.py ,多运行几次。

返回到数据库窗口,使用 SELECT * FROM dht; 查看所读取的所有数据。

4、在 /var/www/html 中新建一个DHT11.php的文件,将以下程序输入到其中。

<?php
$servername = "localhost";
$username = "root";
$password = "raspberry";
$dbname = "test";// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {die("连接失败: " . $conn->connect_error);
} $sql = "SELECT dht_tem, dht_hum, dht_time FROM dht";
$result = $conn->query($sql);if ($result->num_rows > 0) {// 输出数据while($row = $result->fetch_assoc()) {echo "温度: " . $row["dht_tem"]. " 湿度: " . $row["dht_hum"]. "时间:"$}
} else {echo "0 结果";
}
$conn->close();
?>

在浏览器中输入: ***.***.***.***/DHT11.php,(***.***.***.***为你树莓派的地址。)则看在网页中看到读取DHT11的数据。

参考博客:

https://www.52pojie.cn/forum.php?mod=viewthread&tid=927626 (树莓派第四课之DHT11湿温度传感器 )

https://maoyingdong.com/rapberry_pi_4b_install_php7.3_nginx_mysql/ (树莓派4B安装PHP7.3 + Nginx + MySQL 教程)

https://blog.csdn.net/qq_42712462/article/details/93756881
https://wenku.baidu.com/view/dc5718e5492fb4daa58da0116c175f0e7cd11982.html
都为 (基于树莓派的采集与存储)

https://blog.csdn.net/YJG7D314/article/details/103559637 (ERROR 1113 (42000): A table must have at least 1 column)

https://www.runoob.com/php/php-mysql-select.html (PHP MySQL 读取数据)

树莓派+PHP+Mairadb数据库读取DHT11相关推荐

  1. python温湿度传感器源代码_在树莓派上读取DHT11温湿度传感器-python代码实现及常见问题(全面简单易懂)...

    最近由于自己的课题需要,想要用在树莓派上使用DHT11温湿度传感器来读取空气中温湿度,遇到了几个问题,解决之后也对之前的知识进行了回顾,总结,特整理如下,希望能给也在学习树莓派的小伙伴们带来一些帮助. ...

  2. 《Clojure数据分析秘笈》——1.6节从JDBC数据库读取数据

    本节书摘来自华章社区<Clojure数据分析秘笈>一书中的第1章,第1.6节从JDBC数据库读取数据,作者(美)Eric Rochester,更多章节内容可以访问云栖社区"华章社 ...

  3. php从数据库读取中文显示问号??的解决办法

    出错原因: 1.数据库编码格式不对 2.PHP编码格式不对 3.浏览器编码格式不对 上面三者编码格式不统一,就会出现问题 数据库读取的时候在mysqli_connect()之后要设置连接字符编码mys ...

  4. java连接Excel数据库读取,写入,操纵Excel表格

    java连接Excel数据库读取,写入,操纵Excel表格 (2009-11-15 14:21:03) 转载 标签: java excel 连接 杂谈 分类:技术文档 java连接MicroSoft ...

  5. 数据库读取image类型发送到前端显示图片

    这几天要做一个数据采集的测试网页,然后碰到一个问题. 在调用采集接口的时候返回的图片数据是以数据流的方式返回的,然后我就各种查询怎么把数据流转化成本地文件或者是直接转化成可以让img.src直接赋值的 ...

  6. Python从数据库读取大量数据批量写入文件的方法

    今天小编就为大家分享一篇Python从数据库读取大量数据批量写入文件的方法,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 使用机器学习训练数据时,如果数据量较大可能我们不能够一次性将 ...

  7. C#(WinForm)上传图片保存到数据库和从数据库读取图片显示到窗体

    1 //浏览图片 2 3 private void btnUp_Click(object sender, EventArgs e) 4 5 { 6 7 OpenFileDialog ofd = new ...

  8. ASP.NET状缓存Cache的应用-提高数据库读取速度

    ASP.NET状缓存Cache的应用-提高数据库读取速度 原文:ASP.NET状缓存Cache的应用-提高数据库读取速度 一. Cache概述        既然缓存中的数据其实是来自数据库的,那么缓 ...

  9. matlab读取时间数据,Matlab有关数据库读取及时间项的设定

    Matlab有关数据库的读取需下载mysql-connector-java-5.1.26-bin.jar文件放到指定位置,并修改classpath.txt相关文件,具体可网上自行查找. 看一下实例: ...

最新文章

  1. Serverless 下的微服务实践
  2. 报名 | 风控中的A/B卡:申请模型和行为模型讲座
  3. JavaScript异步编程解决方案探究
  4. 解决ssh或ftp下root用户认证失败问题
  5. -Android的发展webservice-号码归属地查询
  6. 网工常用网络命令合集✨(建议收藏)
  7. 计算机英语解读,解释计算机Windows的学习英语
  8. MFC无边框窗体设置窗口圆角,并且绘制边框
  9. 速抢:500份粉丝购书优惠券
  10. 利用flex布局在父元素和子元素宽高不明的情况下设置某一子元素剩余父元素的宽高
  11. python统计英文单词个数_统计英文单词的个数的python代码 及 字符串分割
  12. python代码续航的方法_编写python高质量python代码的59个有效方法
  13. 备案过的域名解析到别的服务器,教你如何解析未备案的域名到国内服务器
  14. adb在小米电视上安装QQ 并使用遥控器操控部分功能
  15. 英特尔和瑞芯微合作发布面向入门市场的XMM6321双核处理器
  16. uniapp商城前端源码下载/uniapp多店铺PHP商城源码下载
  17. 微信小程序实现历史搜索功能(h5同理)
  18. Qt入门开发__贪吃蛇小游戏
  19. 记一次Spark两表join错误修复
  20. 神经网络机器翻译简单模型参考实现

热门文章

  1. 输入身份证号自动算出年龄,出生日期,性别
  2. Guava学习笔记:Google Guava 类库简介
  3. 数据集voc,coco注释格式,详情大全
  4. 混沌工程——各大厂实践分享汇总(上篇)
  5. jadx反编译程序未响应
  6. 亚马逊云科技为全球的可持续发展进程做出贡献
  7. Windos系统使用webdav协议将阿里云盘挂载在本地,并实现Notability等支持webdav协议软件的自动备份
  8. 小程序、APP、企业网站开发工具有哪些?如何使用软件开发工具?
  9. 知道IP入侵个人的电脑
  10. matlab矩阵特征分解,用MATLAB实现矩阵分解