Я не знаю, как отправить данные датчика с Raspberry P ie на MySQL Сервер с Python - PullRequest
0 голосов
/ 20 апреля 2020

Я работаю над проектом на работе, и у меня возникли небольшие проблемы, у меня есть сервер LAMP с установленным сервером Ubuntu 18.04, на стороне сервера у меня есть сценарий PHP, который реализует данные, полученные от клиента в таблица в базе данных MySQL через URl. Я говорю о клиенте Raspberry P ie 3, подключенном к датчику DHT22 через последовательный порт.

Проблема, с которой я столкнулся сейчас, заключается в том, что у меня совсем нет опыта работы с Python. Я сделал скрипт, который печатает данные с датчика в консоли. Но я понятия не имею, как отправить эти данные от клиента в БД.

Если я собираюсь использовать сценарий PHP, клиенту потребуется распечатать данные в пути URl сценария PHP (например, так: http://192.168.0.101?temp=20.1&hum=30.2), но я надеялся, что ваш парень подскажет мне, как это сделать, или я могу как-нибудь пропустить весь сценарий PHP и реализовать способ подключения к БД и печати данных прямо в таблицу со скриптом Python.

PHP скрипт, который я использую:

<?php
  class DBtable {
  public $link='';
  function __construct($temperature, $humidity) {
    $this->connect();
    $this->storeInDB($temperature, $humidity);
  }
  function connect() {
    $this->link = mysqli_connect('localhost','Generic_user','Generic_passwd') or die('Cannot connect to DB');
    mysqli_select_db($this->link,'DBtable') or die('Cannot choose DB.');
  }
  function storeInDB($temperature, $humidity) {
    $query = "insert into DBtable set Hum='".$humidity."', Temp='".$temperature."'";
    $result =mysqli_query($this->link,$query) or die('Errant query: '.$query);
    ("Data was implemented correct! Temp = '".$temperature."'°C og Hum = '".$humidity."'%'");
  }
}
if($_GET['Temp'] != '' and $_GET['Hum'] != '') {
  $DBtable=new DBtable($_GET['Temp'],$_GET['Hum']);
}
?>

(Я изменил некоторую информацию по соображениям безопасности, но могу вас заверить, что я ее проверил, и она работает.)

Сценарий изначально был создан для Arduino, но я не смог заставить его работать, поэтому я переключился на платформу Raspberry.

Сценарий Python на клиенте:

import Adafruit_DHT as dht
from time import sleep
DHT = 3
while True:
    h,t = dht.read_retry(dht.DHT22, DHT)
    print('temp={0:0.1f}*C hum={1:0.1f}%'.format(temperature, humidity))
    sleep(1)

Вывод на консоль:

temp=20.1*C hum=30.2%

Тогда возникает вопрос: что мне нужно сделать, чтобы отправить данные в сценарий PHP или, если это не удалось, пропустить часть PHP и использовать Python скрипт напрямую?

Если вам, ребята, нужна дополнительная информация, просто спросите, и я предоставлю как можно лучше. Спасибо!

----- ОБНОВЛЕНИЕ -----

Итак! Я нашел что-то, что могло бы работать, я пытаюсь POST данные с Requests. Я делаю сценарий PHP на сервере, который будет вводить полученные данные в базу данных MySQL. Затем идет тестирование, я собираюсь сообщить вам, ребята, как все прошло.

Если у вас есть какой-либо совет, просто стреляйте, и я все еще буду здесь, если вам нужна дополнительная информация или у вас есть вопросы!

1 Ответ

0 голосов
/ 27 апреля 2020

Так! Я узнал, как можно отправить данные о температуре и влажности в базу данных с Raspberry Pi 3. Я использовал внешний модуль requests, предложенный @furas, вот сценарий Python, который я написал.

import Adafruit_DHT
import requests
sensor = Adafruit_DHT.DHT22
pin = 2
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
if humidity is not None and temperature is not None:
    print('Temperature ={0:0.1f}*C  Humidity = {1:0.1f}%'.format(temperature, humidity))
    payload = {'temp': temperature, 'hum': humidity}
    r = requests.post('http://192.168.1.7/test/MySQL_POST_Test.php, data=payload')
    print(r.text)
else:
    print('Failed to read the sensor, try "sudo python3 sensor-post.py" again.')

и сценарий PHP:

$servername = "localhost";
$username = "Test"
$password = "passwd";
$dbname = "TestDB";
$temperature = $_POST["temp"];
$humidity = $_POST["hum"];
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO SensorTest (Temperature, Humidity) VALUES ($temperature, $humidity)";
if ($conn->query($sql) === TRUE) {
  echo "New record created successfully!";
}
else {
  echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>

Результат после запуска сценария Python:

Temperature =22.1*C  Humidity =34.2%
New record created successfully!

Я пытался добавить schedule к Python сценарий, но я еще не заставил его работать, но эти сценарии прекрасно работают без schedule.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...