树莓派、MQTT。 DHT11、MFRC522(一)

系列文章目录

二、树莓派、MQTT。树莓派定时温湿度采集,图片采集(二)
三、树莓派、MQTT。MQTT数据收发(三)
四、树莓派、MQTT(四)


前言

进入主页查看系列文章
安装PC端MQTT服务器;树莓派mqtt服务;
编写DHT11驱动,RFID驱动

一、MQTT服务器

1.PC搭建MQTT服务器(Windows)

1、下载MQTT服务器,网址为:https://www.emqx.cn/downloads#broker,选择Windows版本的EMQ X Broker下载,该版本为开源版本;
在这里插入图片描述
2、安装MQTT服务器,将下载的zip压缩包直接解压到某一文件夹下即可;
3、进入命令行界面,默认打开的是C盘的路径,需要使用cd命令进入安装目录bin文件夹内:先输入盘· 符,如果上述的文件加压在G盘,则先输入G: <回车>,进入G盘盘符;然后使用cd指令进入到bin文件夹内,这里的cd后面的路径为bin文件夹所在路径。下图是G:\MQTT\emqx\bin。
4、使用命令:emqx start开启MQTT服务器:
5、用emqx stop命令关闭MQTT服务器。
6、在浏览器地址栏输入:http://127.0.0.1:18083/#/login,打开服务器的控制台,可以查看服务器的相关内容,如当前的订阅主题,连接的主机数量等;用户名为admin,密码为public。

2、树莓派安装MQTT服务

MQTT官网树莓派安装指导:
https://www.emqx.com/zh/blog/use-mqtt-with-raspberry-pi#%E5%AE%89%E8%A3%85-mqtt-%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%BA%93

二、MFRC522,DHT11准备

1.MFRC522

1、打开SPI接口

raspi-config

选择Interfacing Options
开启SPI
2、安装SPI接口支持库,MFRC522包

sudo apt-get install python-spidev python3-spidev
cd ~
git clone https://github.com/lthiery/SPI-Py.git
cd SPI-Py
git checkout 8cce26b9ee6e69eb041e9d5665944b88688fca68
sudo python setup.py install
sudo python3 setup.py install
cd ~
git clone https://github.com/mxgxw/MFRC522-python.git

git提交或克隆报错fatal: unable to access

git config --global --unset http.proxy//取消http代理
git config --global --unset https.proxy//取消https代理 

3、引脚连接

SDA     24     GPIO8 `在这里插入代码片`
SCK     23     GPIO11 
MOSI    19     GPIO10 
MISO    21     GPIO9 
IRQ     None    None 
GND     Any     Any Ground 
RST    22     GPIO25
3.3V    1      3V3

4、RFID_Read.py:
将安装的MFRC522-python里的MFRC522.c复制到同一个目录下。

# -*- coding: utf-8 -*-
"""
Created on Thu Feb 24 21:14:53 2022

@author: 嗯哒
"""

import RPi.GPIO as GPIO
import signal
import time
import MFRC522

continue_reading = True

def end_read(signal, frame):
        global continue_reading
        print
        "Ctrl+C captured, ending read."
        continue_reading = False
        GPIO.cleanup()

def RFID_Read():

    # 连接信号
    signal.signal(signal.SIGINT, end_read)

    # 创建MFRC522类的对象
    MIFAREReader = MFRC522.MFRC522()

    # 这个循环一直在检查芯片。如果有一个在附近,它将获得UID并进行身份验证
    while continue_reading:

        # 扫描卡片
        (status, TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)

        # 如果找到一张卡
        if status == MIFAREReader.MI_OK:
            print ("Card detected")

        # 获取卡的UID
        (status, uid) = MIFAREReader.MFRC522_Anticoll()

        flag = 1

        # 如果我们有UID,继续
        if status == MIFAREReader.MI_OK:

            # 打印UID
            print ("Card read UID: %s,%s,%s,%s %s" % (uid[0], uid[1], uid[2], uid[3], uid[4]))

            # 这是身份验证的默认密钥
            key = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]

            # 选择扫描的标签
            MIFAREReader.MFRC522_SelectTag(uid)

            # 认证
            status = MIFAREReader.MFRC522_Auth(MIFAREReader.PICC_AUTHENT1A, 8, key, uid)

            # 检查是否已验证
            if status == MIFAREReader.MI_OK:
                MIFAREReader.MFRC522_Read(8)
                MIFAREReader.MFRC522_StopCrypto1()
                flag = 0
                return True
            else:
                # 身份验证错误
                print ("Authentication error")
                return False
    if __name__ =='__main__':
    RFID_Read()

2.DHT11

Dht11.py:

# -*- coding: utf-8 -*-
"""
Created on Sat Apr  2 14:06:23 2022

@author: 嗯哒
"""

import RPi.GPIO as GPIO
import time

def Dht11():

    while True:
        channel = 3
        data = []
        j = 0
    
        GPIO.setmode(GPIO.BOARD) #bcm模式
        time.sleep(1)
    
        GPIO.setwarnings(False)
        GPIO.setup(channel, GPIO.OUT) #bcm模式下 gpio2 输出
        GPIO.output(channel, GPIO.LOW) #bcm模式下 gpio2 输出低电平
        time.sleep(0.02) #间隔
        GPIO.output(channel, GPIO.HIGH) #gpio2 输出高电平
        GPIO.setup(channel, GPIO.IN) #gpio2输入模式
    
        while GPIO.input(channel) == GPIO.LOW:
          continue
        while GPIO.input(channel) == GPIO.HIGH:
          continue
    
        while j < 40:
          k = 0
          while GPIO.input(channel) == GPIO.LOW:
            continue
          while GPIO.input(channel) == GPIO.HIGH:
            k += 1
            if k > 100:
              break
          if k < 8:
            data.append(0)
          else:
            data.append(1)
          j += 1
    
        print("sensor is working.")
    
        humidity_bit = data[0:8]
        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):
            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_point
    
        if check == tmp:
          print("temperature :", temperature, "*C, humidity :", humidity, "%")
          break
        else:
          print ("wrong")
          #print ("temperature :", temperature, "*C, humidity :", humidity, "% check :", check, ", tmp :", tmp)
    
    time.sleep(1)
    GPIO.cleanup()
    
    return temperature,humidity

if __name__ == '__main__':
    Dht11()

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值