美文网首页
2020-01-16.树莓派+bme280温度传感器傻瓜版说明

2020-01-16.树莓派+bme280温度传感器傻瓜版说明

作者: 普通市民小李 | 来源:发表于2020-01-16 16:26 被阅读0次

    Title: 树莓派+bme280温度传感器傻瓜版说明[2020-01-16]

    去年(2019年)的时候买了一台树莓派3b+,除了监控过一段时间汇率外,一直在吃灰。当时同步购入了BME280温度、气压、湿度传感器,只进行了试用。近日又试了试,用Python实现了传感器数据的读取,整理过程如下。代码较丑,见谅。

    1. 硬件准备

      树莓派3b+

      BME280传感器


      BME280

    根据针脚图,将线插好

    关于针脚图,文末参考网址1里可以查看,树莓派的接口可以很容易的从网络获得,此处不再引用。

    我自己的接线是:

    黄、蓝、红(顶部靠里的针脚)


    针脚接好后的状态
    1. 配置树莓派接口

      sudo raspi-config
      

      选择Interfacing Options -> I2C -> yes 启动I2C内核驱动

      选择Interfacing Options -> SPI -> yes启动SPI内核驱动

      sudo reboot
      

      重启树莓派

      lsmod
      

      查看I2C,SPI模块是否已启动,启动时i2c_bcm2835会显示,结果如下:

      红圈中可见i2c_bcm2835
    sudo apt-get install i2c-tools
    i2cdetect -y 1
    

    安装i2c-tools工具,确认BME280模块地址。这里我只接了4根线,ADDR未连接,因此地址为0x77,结果如下:

    显示地址为0x77
    1. 安装Python库

      在文末参考网址1中,接下来会使用C对硬件进行驱动。由于我只会一点Python,因此参考了第二个网址的内容

      sudo pip install RPi.bme280
      // 由于默认环境多数为Python3,因此一般会使用以下而不是以上
      sudo pip3 install RPi.bme280
      
    2. 简单测试一下时候成功

      import smbus2
      import bme280
      
      port = 1
      address = 0x77 # 这里根据第2步中i2cdetect -y 1的结果填写0x77或0x76
      bus = smbus2.SMBus(port)
      
      calibration_params = bme280.load_calibration_params(bus, address)
      
      data = bme280.sample(bus, address, calibration_params) # 通过这一行,可以获取数据
      
      print(data.id)
      print(data.timestamp)
      print(data.temperature) # 温度
      print(data.pressure) # 压力
      print(data.humidity) # 湿度
      

      显示结果如下:

      测试输出结果.PNG
    1. 一个每隔30秒获取温度、压力、湿度的程序,数据会保存在log.csv文件中

      import smbus2
      import bme280
      import time
      import csv
      import os
      
      def write_log(data, head=False):
          with open("log.csv", "a+", encoding="utf-8", newline="") as f:
              writer = csv.writer(f)
              if head:
                  writer.writerow(["Time", "Temperature", "Pressure", "Humidity"])
              else:
                  writer.writerow(data)
      port = 1
      address = 0x77
      bus = smbus2.SMBus(port)
      
      if os.path.exists("log.txt"):
          pass
      else:
          write_log("", head=True)
      
      calibration_params = bme280.load_calibration_params(bus, address)
      
      while True:
          data = bme280.sample(bus, address, calibration_params)
          time_string = data.timestamp.strftime("%H:%M:%S")
          temperature = "{:.2f}".format(data.temperature)
          pressure = "{:.2f}".format(data.pressure)
          humidity = "{:.2f}".format(data.humidity)
          print("Time:", time_string)
          print("Temperature:", temperature, "°C")
          print("Pressure:", pressure, "hPa")
          print("Humidity:", humidity, "% rH")
          string_data = [time_string, temperature, pressure, humidity]
          write_log(string_data)
          print("-"*30)
          time.sleep(30)
      

      可以看到,午休时段(12-14时),空调打高到了30℃以上,所以湿度有所下降,上班后,温度又降回26℃。


      办公室午休温度

    参考网址:

    1. http://www.waveshare.net/wiki/BME280_Environmental_Sensor
    2. https://pypi.org/project/RPi.bme280/

    相关文章

      网友评论

          本文标题:2020-01-16.树莓派+bme280温度传感器傻瓜版说明

          本文链接:https://www.haomeiwen.com/subject/adgfzctx.html