[Python + PHP] Erstellen Sie mit Raspberry Pi einen Temperatur-, Feuchtigkeits- und Druckmonitor

Ich hatte das Sensormodul AE-BME280, das ich zuvor verwendet habe, und habe versucht, das Aufrufen innerhalb des Netzwerks zu vereinfachen.

Überprüfungsumgebung

・ Himbeer Pi 2 Modell B. ・ Raspbian Jessie Lite Januar 2017 ・ Apache 2.4.10 ・ PHP 5.6.29 ・ Python 2.7.9

Vorbereitung

Installieren Sie die erforderlichen Pakete.

$ sudo aptitude update
$ sudo apt-get install i2c-tools python-smbus apache2 php5

Übrigens, warum Apache und PHP anstelle von Python alleine verwenden, wusste ich einfach nicht, wie man Web-Hosting in Python. Die Sicherheit ist also robust. Bitte beachten Sie. Öffnen Sie den Port nicht für den lokalen Gebrauch (Gebot)

Sensoranschluss

http://deviceplus.jp/hobby/raspberrypi_entry_039/ Stellen Sie eine Verbindung zu Raspberry Pi her, indem Sie sich auf dieses ↑ dieses ↓ beziehen.

Python-Seite

Ich habe gerade den Beispielcode in der obigen URL optimiert. Python Wakarimasen

bme280.py


#coding: utf-8

import smbus
import time

bus_number  = 1
i2c_address = 0x76

bus = smbus.SMBus(bus_number)

digT = []
digP = []
digH = []

t_fine = 0.0


def writeReg(reg_address, data):
  bus.write_byte_data(i2c_address,reg_address,data)

def get_calib_param():
  calib = []
  
  for i in range (0x88,0x88+24):
    calib.append(bus.read_byte_data(i2c_address,i))
  calib.append(bus.read_byte_data(i2c_address,0xA1))
  for i in range (0xE1,0xE1+7):
    calib.append(bus.read_byte_data(i2c_address,i))

  digT.append((calib[1] << 8) | calib[0])
  digT.append((calib[3] << 8) | calib[2])
  digT.append((calib[5] << 8) | calib[4])
  digP.append((calib[7] << 8) | calib[6])
  digP.append((calib[9] << 8) | calib[8])
  digP.append((calib[11]<< 8) | calib[10])
  digP.append((calib[13]<< 8) | calib[12])
  digP.append((calib[15]<< 8) | calib[14])
  digP.append((calib[17]<< 8) | calib[16])
  digP.append((calib[19]<< 8) | calib[18])
  digP.append((calib[21]<< 8) | calib[20])
  digP.append((calib[23]<< 8) | calib[22])
  digH.append( calib[24] )
  digH.append((calib[26]<< 8) | calib[25])
  digH.append( calib[27] )
  digH.append((calib[28]<< 4) | (0x0F & calib[29]))
  digH.append((calib[30]<< 4) | ((calib[29] >> 4) & 0x0F))
  digH.append( calib[31] )
  
  for i in range(1,2):
    if digT[i] & 0x8000:
      digT[i] = (-digT[i] ^ 0xFFFF) + 1

  for i in range(1,8):
    if digP[i] & 0x8000:
      digP[i] = (-digP[i] ^ 0xFFFF) + 1

  for i in range(0,6):
    if digH[i] & 0x8000:
      digH[i] = (-digH[i] ^ 0xFFFF) + 1  

def readData():
  data = []
  for i in range (0xF7, 0xF7+8):
    data.append(bus.read_byte_data(i2c_address,i))

  pres_raw = (data[0] << 12) | (data[1] << 4) | (data[2] >> 4)
  temp_raw = (data[3] << 12) | (data[4] << 4) | (data[5] >> 4)
  hum_raw  = (data[6] << 8)  |  data[7]
  
  return [compensate_T(temp_raw), compensate_H(hum_raw), compensate_P(pres_raw)]

def compensate_P(adc_P):
    global  t_fine
    pressure = 0.0
     
    v1 = (t_fine / 2.0) - 64000.0
    v2 = (((v1 / 4.0) * (v1 / 4.0)) / 2048) * digP[5]
    v2 = v2 + ((v1 * digP[4]) * 2.0)
    v2 = (v2 / 4.0) + (digP[3] * 65536.0)
    v1 = (((digP[2] * (((v1 / 4.0) * (v1 / 4.0)) / 8192)) / 8)  + ((digP[1] * v1) / 2.0)) / 262144
    v1 = ((32768 + v1) * digP[0]) / 32768
     
    if v1 == 0:
        return 0
    pressure = ((1048576 - adc_P) - (v2 / 4096)) * 3125
    if pressure < 0x80000000:
        pressure = (pressure * 2.0) / v1
    else:
        pressure = (pressure / v1) * 2
    v1 = (digP[8] * (((pressure / 8.0) * (pressure / 8.0)) / 8192.0)) / 4096
    v2 = ((pressure / 4.0) * digP[7]) / 8192.0
    pressure = pressure + ((v1 + v2 + digP[6]) / 16.0) 
    return pressure;

def compensate_T(adc_T):
  global t_fine
  v1 = (adc_T / 16384.0 - digT[0] / 1024.0) * digT[1]
  v2 = (adc_T / 131072.0 - digT[0] / 8192.0) * (adc_T / 131072.0 - digT[0] / 8192.0) * digT[2]
  t_fine = v1 + v2
  temperature = t_fine / 5120.0
  return temperature 

def compensate_H(adc_H):
  global t_fine
  var_h = t_fine - 76800.0
  if var_h != 0:
    var_h = (adc_H - (digH[3] * 64.0 + digH[4]/16384.0 * var_h)) * (digH[1] / 65536.0 * (1.0 + digH[5] / 67108864.0 * var_h * (1.0 + digH[2] / 67108864.0 * var_h)))
  else:
    return 0
  var_h = var_h * (1.0 - digH[0] * var_h / 524288.0)
  if var_h > 100.0:
    var_h = 100.0
  elif var_h < 0.0:
    var_h = 0.0
  return var_h


def setup():
  osrs_t = 1      #Temperature oversampling x 1
  osrs_p = 1      #Pressure oversampling x 1
  osrs_h = 1      #Humidity oversampling x 1
  mode   = 3      #Normal mode
  t_sb   = 5      #Tstandby 1000ms
  filter = 0      #Filter off
  spi3w_en = 0      #3-wire SPI Disable

  ctrl_meas_reg = (osrs_t << 5) | (osrs_p << 2) | mode
  config_reg    = (t_sb << 5) | (filter << 2) | spi3w_en
  ctrl_hum_reg  = osrs_h

  writeReg(0xF2,ctrl_hum_reg)
  writeReg(0xF4,ctrl_meas_reg)
  writeReg(0xF5,config_reg)

now.py


# coding: utf_8

import bme280 as bme

bme.setup()
bme.get_calib_param()
data = bme.readData()

print str(data[0]) + "," + str(data[1]) + "," + str(data[2] / 100)

Für den Ausgabeteil von now.py wird jeder numerische Wert durch Kommas (Temperatur, Luftfeuchtigkeit, Druck) getrennt ausgegeben. Da der Druck in Pa ausgegeben wird, wird er durch 100 geteilt, um hPa zu erzeugen.

Sudo Wand

Für dieses Python-Programm sind Sudo-Berechtigungen erforderlich. Deshalb Ich führe "sudo python now.py" aus, aber ich kann sudo nicht von PHPs exec () verwenden. Also lasst uns die Sudoer wechseln. (Sicherheit? Sie wissen es nicht.) Fügen Sie die folgende Zeile hinzu.

/etc/sudoers


www-data ALL=(root) NOPASSWD: ALL

PHP Seite

Sie müssen lediglich Python aufrufen. Ich habe es richtig entworfen.

index.php


<?php $data = explode(",", exec("sudo python now.py")); ?>
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Temp Monitor</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <link rel="stylesheet" href="css/font-awesome.min.css">
    <link rel="stylesheet" href="css/style.css">
  </head>
  <body>
    <div class="container">
      <div class="row">
        <div class="col-md-4" align="center" style="padding: 20px 10px">
          <h2><i class="fa fa-thermometer-three-quarters"></i></h2>
          <span class="num-large"><?= substr($data[0], 0, 2) ?></span>
          <span class="num-small"><?= substr($data[0], 2, 3) ?> ℃</span>
        </div>
        <div class="col-md-4" align="center" style="padding: 20px 10px">
          <h2><i class="fa fa-tint"></i></h2>
          <span class="num-large"><?= substr($data[1], 0, 2) ?></span>
          <span class="num-small"><?= substr($data[1], 2, 3) ?> %</span>
        </div>
        <div class="col-md-4" align="center" style="padding: 20px 10px">
          <h2><i class="fa fa-tachometer"></i></h2>
          <span class="num-large"><?= substr($data[2], 0, 4) ?></span>
          <span class="num-small"><?= substr($data[2], 4, 3) ?> hPa</span>
        </div>
      </div>
      <br>
    </div>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  </body>
</html>

css/style.css


body {
  background-color: #272727;
  color: #fff;
  font-family: "Segoe UI Light", sans-serif;
}

.num-large {
  font-size: 5em;
}

.num-small {
  font-size: 3em;
}

abschließend

Es ist im Grunde ein Chaos. Bitte mach dir keine Sorgen. Es gibt viele bessere Möglichkeiten zu schreiben.

Verknüpfung

・ Holen Sie sich Temperatur, Luftfeuchtigkeit und Druck gleichzeitig mit Himbeerkuchen! IC2-Kommunikation mit AE-BME280 | Device Plus - Devapla   http://deviceplus.jp/hobby/raspberrypi_entry_039/

・ Font Awesome, die ikonische Schriftart und das CSS-Toolkit   http://fontawesome.io/

· Bootstrap · Das weltweit beliebteste Mobile-First- und Responsive-Front-End-Framework.   http://getbootstrap.com/

Recommended Posts

[Python + PHP] Erstellen Sie mit Raspberry Pi einen Temperatur-, Feuchtigkeits- und Druckmonitor
Verwenden Sie den Temperatur- / Feuchtigkeits- / Drucksensor BME280 von Python mit Raspberry Pi 2
Machen Sie einen Waschtrocknungs-Timer mit Raspberry Pi
Erstellen Sie mit Raspberry Pi + DHT11 ganz einfach einen TweetBot, der Sie über Temperatur und Luftfeuchtigkeit informiert.
Ich habe versucht, mit Raspeye 4 (Python Edition) ein signalähnliches Signal zu erzeugen.
Holen Sie sich Temperatur und Luftfeuchtigkeit mit DHT11 und Raspberry Pi
Messen Sie die CPU-Temperatur von Raspeye mit Python
Erstellen eines Temperaturregelungssystems mit Himbeerkuchen und ESP32 (3) Empfangen einer Python-Datei
Notieren Sie Temperatur und Luftfeuchtigkeit mit systemd auf Raspberry Pi
Messen Sie Temperatur und Luftfeuchtigkeit mit Raspberry Pi3 und visualisieren Sie mit Ambient
Machen Sie eine Lotterie mit Python
Verwenden Sie Python auf Raspberry Pi 3, um "Temperatur (mit A / D-Wandler)" zu erkennen!
Ich habe einen Ressourcenmonitor für Raspberry Pi mit einer Tabelle erstellt
getrpimodel: Erkennen Sie das Himbeer-Pi-Modell (A, B, B +, B2, B3 usw.) mit Python
Verwenden Sie vl53l0x mit RaspberryPi (Python)
Lassen Sie uns eine GUI mit Python erstellen.
Erstellen Sie ein Empfehlungssystem mit Python
Lassen Sie uns ein Diagramm mit Python erstellen! !!
Verwenden einer Webkamera mit Raspberry Pi
Steuern Sie den Motor mit einem Motortreiber mit Python auf Raspberry Pi 3!
Machen wir einen Fahrradcomputer mit Raspberry Pi Zero (W, WH)
Machen Sie ein Thermometer mit Raspberry Pi und machen Sie es im Browser Teil 4 sichtbar
Erstellen Sie einen Kanji-Kompass mit Raspberry Pi und Sense Hat
[Hinweis] Verwenden eines 16x2-stelligen LCD-Zeichens (1602A) von Python mit Raspeye
So laden Sie Dateien mit Python in den Cloud-Speicher hoch [Erstellen Sie mit Raspberry PI # 1 eine Festkommakamera]
Lassen Sie uns mit Python ein Shiritori-Spiel machen
Erstellen Sie eine Tensorflow-Umgebung mit Raspberry Pi [2020]
Lassen Sie uns mit Python langsam sprechen
Erstellen Sie ein Webframework mit Python! (1)
Bedienen Sie das Oszilloskop mit dem Raspberry Pi
Ermitteln Sie die Temperatur mit Python auf Raspberry Pi 3!
Erstellen Sie eine Desktop-App mit Python mit Electron
Machen wir einen Twitter-Bot mit Python!
Erstellen Sie eine Auto-Anzeige mit Himbeer-Pi
Erstellen Sie ein Webframework mit Python! (2)
Arbeiten mit GPS in Python für Raspberry Pi 3
Erstellen Sie mit Raspberry Pi einen WLAN-Ethernet-Konverter und einen einfachen Router
Machen Sie ein Thermometer mit Raspberry Pi und machen Sie es im Browser Teil 3 sichtbar
Discord Bot Himbeere Pi Null mit Python [Hinweis]
Machen Sie Twitter Trend Bot mit Heroku + Python
Quellkompilieren Sie Apache2.4 + PHP7.4 mit Raspberry Pi und erstellen Sie einen Webserver --2 PHP Einführung
Ich möchte ein Spiel mit Python machen
Ich habe L-Chika mit Razpai 4 (Python Edition) ausprobiert.
Quellkompilieren Sie Apache2.4 + PHP7.4 mit Raspberry Pi und erstellen Sie einen Webserver. 1. Apache-Einführung
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
Holen Sie sich CPU-Informationen von Raspberry Pi mit Python
Stellen Sie DHT11 mit Raspeye + Python zur Verfügung (Hinweis)
Ersetzen wir UWSC durch Python (5) Machen wir einen Roboter
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Himbeere + am2302 Temperatur und Luftfeuchtigkeit mit Temperatur- und Feuchtigkeitssensor messen
Verwendung des digitalen 1-Draht-Temperatursensors DS18B20 mit Raspberry Pi von Python
Stellen Sie mit Python auf Raspberry Pi eine Verbindung zu MySQL her
Erstellen Sie eine Python-Entwicklungsumgebung auf Raspberry Pi
GPS-Tracking mit Raspeye 4B + BU-353S4 (Python)
Quellkompilieren Sie Apache2.4 + PHP7.4 mit Raspberry Pi und erstellen Sie einen Webserver --3. Verwenden Sie MySQL
Kombinieren Sie sich wiederholende Zeichenfolgen mit regulären Python-Ausdrücken zu einer.
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen
Überwachen Sie die Temperatur mithilfe der Cloud-IoT-Plattform Raspberry Pi + Alibaba