前言:
本人于今年初查看许多资料实现了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中写我连接数据库的那些代码运行。
如果你觉得对你有帮助,请点个赞,欢迎各位指正批评!