树莓派(4B)DHT11实现温湿度获取+mysql数据库存储

前言:

本人于今年初查看许多资料实现了DHT11温湿度获取,并可视化展示,后因考证耽误,现需要实现传感器获取数据后上传区块链,区块链这里面技术太多了,好难啊,先把目前可以实现的一些功能内容记录一下,有感兴趣的同学可以共同交流一下。

1.硬件部分

使用杜邦线把DHT11和树莓派延展板连接,vcc是电源我连接到的是5v,GND接地,data接到引脚23(GPIO23),注意引脚不固定,现在我写的是23,到时候代码也要写引脚口23,你也可以接在4,到时候代码改一下就好。.
在这里插入图片描述
在这里插入图片描述

2. 运行环境搭建

其实在买树莓派的时候,商家应该都会给操作文档,我在这里简单说一下:如果你不太熟悉使用命令行的话,需要下载右侧的4个软件,不然你可以直接下载一个putty就好。

在这里插入图片描述

在联网部分有两种方法:
1.第一种方法:使用笔记本连接无线网,再用网线把树莓派和笔记本电脑连起来,在这里需要使用Advanced IP Scanner搜索一下,找到树莓派的IP地址,在putty中进行输入ip地址,端口号默认22不变,进入界面,今年初本人使用笔记本使用的是这种方法。
在这里插入图片描述

2.第二种方法:使用网线将树莓派和路由器相连,在路由器设备管理中找到你的树莓派设备,注意是有线连接这个,现在同方法一,在putty中输入这个ip,进入命令行,这时候要登陆,输入默认用户名pi密码raspberry,如果输入ip打开putty没有反应,则再查看扫描ip,输入附近的几个ip地址试一试,成功之后在命令行输入vncserver方可得到图形化界面ip,再登陆图形化界面。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.软件部分

本人使用的是pycharm,先创建一个项目,设置一下编译器,打开ssh interpreter,我之前已经设置了,你们选择新的服务器配置一下,选择自己下载好的python3.6.6(/home/pi/Python-3.6.6/python),当然如果你没有在树莓派安装3.66可以选择安装一个,或者使用自带的python3.7版本。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.实现

import RPi.GPIO as GPIO
import dht11
import time
import datetime

# initialize GPIO
GPIO.setwarnings(True)
GPIO.setmode(GPIO.BCM)

# read data using pin 18
instance = dht11.DHT11(pin=23)

try:
   while True:
      result = instance.read()
      if result.is_valid():
         print("Last valid input: " + str(datetime.datetime.now()))

         print("Temperature: %-3.1f C" % result.temperature)
         print("Humidity: %-3.1f %%" % result.humidity)

      time.sleep(6)

except KeyboardInterrupt:
   print("Cleanup")
   GPIO.cleanup()



在这里插入图片描述

5.mysql数据库交互部分

在这里插入图片描述
在这里插入图片描述

import RPi.GPIO as GPIO
from DHT11_Python import dht11
import time
import datetime
import pymysql

GPIO.setwarnings(True)
GPIO.setmode(GPIO.BCM)

my_con = pymysql.connect(user='root',password='root',host='192.168.1.117',port=3306, db='sensor', charset='utf8')
cur = my_con.cursor()
# read data using pin 18
instance = dht11.DHT11(pin=23)
try:
    while True:
        result = instance.read()
        if result.is_valid():
            ptime = datetime.datetime.now()
            print("Last valid input: " + str(ptime))
            tem = result.temperature
            print("Temperature: %-3.1f C" % tem)
            hum = result.humidity
            print("Humidity: %-3.1f %%" % hum)
            sql = f'insert into DHT_11(ptime,tem,hum) value("{ptime}",{tem},{hum})'
            print(sql)
            cur.execute(sql)
            my_con.commit()
        time.sleep(60)
except KeyboardInterrupt:
    print("Cleanup")
    my_con.close()
    GPIO.cleanup()

运行后控制台每隔几秒输出数据后,数据库表就会自动插入新增数据。

6.实现中遇到的一些问题

1.在实现读取数据过程中,遇到过读取数据全是255的情况,造成这个的原因很多,有的说这个包已经停用了,有的说这个传感器在外部IDE中成功率低,但我看来其实是代码的问题,这个包dht11是官方文档里的,可以直接摘过来。

2.在树莓派中安装mariadb和mysql花费了比较多的心思,查阅了很多资料,才把远程数据库搞定。

3.我还使用过Adafruit_Python_DHT.git,很遗憾,失败了,干脆就使用GPIO了。

4.如果你在pycharm中导包一直出错,请去远程端sudo apt-get update,sudo apt-get upgrade,再下载相应的包。

5.如果你要实现上传数据库,我这里是导包的,当然你也可以直接在example中写我连接数据库的那些代码运行。
在这里插入图片描述
如果你觉得对你有帮助,请点个赞,欢迎各位指正批评!

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论
要在树莓派上使用C语言读取DHT11温湿度传感器的值,可以通过GPIO接口进行读取。下面是一个示例程序: ```c #include <wiringPi.h> #include <stdio.h> #include <stdlib.h> #include <stdint.h> #define MAX_TIMINGS 85 #define DHT_PIN 7 int data[5] = { 0, 0, 0, 0, 0 }; void read_dht_data() { uint8_t laststate = HIGH; uint8_t counter = 0; uint8_t j = 0; data[0] = data[1] = data[2] = data[3] = data[4] = 0; pinMode(DHT_PIN, OUTPUT); digitalWrite(DHT_PIN, LOW); delay(18); digitalWrite(DHT_PIN, HIGH); delayMicroseconds(40); pinMode(DHT_PIN, INPUT); for (uint8_t i = 0; i < MAX_TIMINGS; i++) { counter = 0; while (digitalRead(DHT_PIN) == laststate) { counter++; delayMicroseconds(1); if (counter == 255) { break; } } laststate = digitalRead(DHT_PIN); if (counter == 255) break; if ((i >= 4) && (i % 2 == 0)) { data[j / 8] <<= 1; if (counter > 16) data[j / 8] |= 1; j++; } } } int main(void) { if (wiringPiSetup() == -1) exit(1); while (1) { read_dht_data(); printf("Humidity = %d.%d %% Temperature = %d.%d *C \n", data[0], data[1], data[2], data[3]); delay(2000); } return 0; } ``` 在上面的代码中,我们使用了wiringPi库来访问GPIO口。它提供了一组用于读写GPIO的函数,以及其他一些实用的功能。在代码中,我们首先定义了一些常量和变量,然后定义了一个read_dht_data()函数来读取DHT11传感器的数据。在函数中,我们先发送一个18ms的低电平信号,然后再发送一个40us的高电平信号。接着转换GPIO口为输入模式,开始读取数据。我们使用循环来读取每个位的值,最后将温度和湿度的值存储在data数组中。最后,在主函数中,我们不断调用read_dht_data()函数来读取传感器数据,并打印出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做毕设的大企鹅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值