Raspberry 4 GPIO DHT22

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Gena
Сообщения: 11
Зарегистрирован: Пт ноя 13, 2020 11:45 am
Благодарил (а): 9 раз
Поблагодарили: 0

Raspberry 4 GPIO DHT22

Сообщение Gena » Пт дек 11, 2020 7:59 pm

Здравствуйте, помогите подключить датчик DHT22 через GPIO.
Температуру и влажность показывает из консоли командой
python3 Adafruit_CircuitPython_DHT/examples/AdafruitDHT.py
как и чем данные подтянуть в MD?
Экспериментировал, читая ветку Raspberry 3 GPIO DHT22(AM2301). не получается

код файла AdafruitDHT.py:
import time
import board
import adafruit_dht

# Initial the dht device, with data pin connected to:
dhtDevice = adafruit_dht.DHT22(board.D18)

# you can pass DHT22 use_pulseio=False if you wouldn't like to use pulseio.
# This may be necessary on a Linux single board computer like the Raspberry Pi,
# but it will not work in CircuitPython.
# dhtDevice = adafruit_dht.DHT22(board.D18, use_pulseio=False)

while True:
try:
# Print the values to the serial port
temperature_c = dhtDevice.temperature
temperature_f = temperature_c * (9 / 5) + 32
humidity = dhtDevice.humidity
print(
"Temp: {:.1f} F / {:.1f} C Humidity: {}% ".format(
temperature_f, temperature_c, humidity
)
)

except RuntimeError as error:
# Errors happen fairly often, DHT's are hard to read, just keep going
print(error.args[0])
time.sleep(2.0)
continue
except Exception as error:
dhtDevice.exit()
raise error

time.sleep(2.0)

Спасибо
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Raspberry 4 GPIO DHT22

Сообщение fandaymon » Пт дек 11, 2020 9:32 pm

Gena писал(а):
Пт дек 11, 2020 7:59 pm
Здравствуйте, помогите подключить датчик DHT22 через GPIO.
Температуру и влажность показывает из консоли командой
python3 Adafruit_CircuitPython_DHT/examples/AdafruitDHT.py
как и чем данные подтянуть в MD?
Экспериментировал, читая ветку Raspberry 3 GPIO DHT22(AM2301). не получается
Что именно не получается?
В принципе МДМ сейчас поддерживает сценарии, написанные на питоне (по крайней мере альфа-ветка)
Gena
Сообщения: 11
Зарегистрирован: Пт ноя 13, 2020 11:45 am
Благодарил (а): 9 раз
Поблагодарили: 0

Re: Raspberry 4 GPIO DHT22

Сообщение Gena » Пт дек 11, 2020 9:57 pm

Здравствуйте Уважаемый fandaymon
Подскажите, пожалуйста, правильно все ли я сделал:
1. в ThisComputer создал два свойства TempFromDHT22 и HumFromDHT22
2. тут же в "метод" - создал getTempFromDHT22 и вставил код:

$answer = shell_exec('python3 Adafruit_CircuitPython_DHT/examples/AdafruitDHT.py');
$matches = explode(' ',$answer);
setGlobal("TempSensor01.value",$matches[1]);
setGlobal("HumSensor01.value",$matches[0]);

3. в ClockChime - onNewMinute - вставил код:

if($m%5 == 0){
runScript('temphum');
}

и выполнил

в МДМ не отображается температура и влажность
ТempSensor01 - нет
HumSensor01 - нет
Подскажите, пожалуйста, алгоритм? Или ссылки, где про это все почитать?
Не судите строго. Я только начал изучать МДМ.
Заранее благодарен
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Raspberry 4 GPIO DHT22

Сообщение fandaymon » Сб дек 12, 2020 12:10 am

Gena писал(а):
Пт дек 11, 2020 9:57 pm
Здравствуйте Уважаемый fandaymon
Подскажите, пожалуйста, правильно все ли я сделал:
1. в ThisComputer создал два свойства TempFromDHT22 и HumFromDHT22
2. тут же в "метод" - создал getTempFromDHT22 и вставил код:

$answer = shell_exec('python3 Adafruit_CircuitPython_DHT/examples/AdafruitDHT.py');
$matches = explode(' ',$answer);
setGlobal("TempSensor01.value",$matches[1]);
setGlobal("HumSensor01.value",$matches[0]);

3. в ClockChime - onNewMinute - вставил код:

if($m%5 == 0){
runScript('temphum');
}

и выполнил

в МДМ не отображается температура и влажность
ТempSensor01 - нет
HumSensor01 - нет
Подскажите, пожалуйста, алгоритм? Или ссылки, где про это все почитать?
Не судите строго. Я только начал изучать МДМ.
Заранее благодарен

Конечно не правильно. Какая-то каша несъедобная получилась. Надо создать 2 объекта - датчик температуры и датчик влажности. (Ну или один, у которого есть и температура и влажность) Проще всего создавать в Простых устройствах - Новое простое устройство, класс - Датчик температуры и поставить галочку создать объект автоматически. При этом добавятся объект Датчик температуры с какими-то именем - например TempSensor01 (но не обязательно имя будет таким). Потом добавить ещё одно простое устройство - Датчик влажности. У этих 2 объектов будут свойства value. Команда setGlobal заполняет свойство указанное справа от точки соответствующего объекта, указанного слева от точки - т.е. формат такой - объект.свойство. Если в команде sg объект не указан, тогда по умолчанию используется объект ThisComputer

Комнда runScript вызывает сценарий. Для того чтобы его вызывать, нужно этот сценарий создать и в него добавить весь этот код запускающий питон и т.д.

Начинать конечно лучше всего с Базы знаний и https://kb.mjdm.ru/faq/#toc37
За это сообщение автора fandaymon поблагодарили (всего 2):
Gena (Сб дек 12, 2020 1:04 pm) • Samir77 (Пт янв 15, 2021 3:13 pm)
Рейтинг: 2.33%
Gena
Сообщения: 11
Зарегистрирован: Пт ноя 13, 2020 11:45 am
Благодарил (а): 9 раз
Поблагодарили: 0

Re: Raspberry 4 GPIO DHT22

Сообщение Gena » Сб дек 12, 2020 12:55 am

Спасибо огромное
Gena
Сообщения: 11
Зарегистрирован: Пт ноя 13, 2020 11:45 am
Благодарил (а): 9 раз
Поблагодарили: 0

Re: Raspberry 4 GPIO DHT22

Сообщение Gena » Сб дек 12, 2020 1:21 pm

Здравствуйте Уважаемый fandaymon
Как Вы и писали, создал в Простых устройствах - Новые простые устройства, класс - Датчик температуры и Датчик влажности ( создалось автоматически: Sensor_temp02 и Sensor_humidity02)
Затем создал сценарий файл temphum с кодом:

$answer = shell_exec('python3 Adafruit_CircuitPython_DHT/examples/AdafruitDHT.py');
$matches = explode(' ',$answer);
setGlobal("Sensor_temp02.value",$matches[1]);
setGlobal("Sensor_humidity02.value",$matches[0]);

в ClockChime - onNewMinute - вставил код:

if($m%5 == 0){
runScript('temphum');
}

В свойствах value этих объектов значения не отображаются ((src: /api.php/method/ClockChime.onNewMinute?m_c_s[0]=ClockChime.onNewMinute&r_s_m=1&no_session=1)), график - сплошная линия.
Я подозреваю, что проблема в коде файла AdafruitDHT.py
import time
import board
import adafruit_dht

# Initial the dht device, with data pin connected to:
dhtDevice = adafruit_dht.DHT22(board.D4)

# you can pass DHT22 use_pulseio=False if you wouldn't like to use pulseio.
# This may be necessary on a Linux single board computer like the Raspberry Pi,
# but it will not work in CircuitPython.
# dhtDevice = adafruit_dht.DHT22(board.D4, use_pulseio=False)

while True:
try:
# Print the values to the serial port
temperature_c = dhtDevice.temperature
temperature_f = temperature_c * (9 / 5) + 32
humidity = dhtDevice.humidity
print(
" {:.1f} C {}% ".format(
temperature_c, humidity
)
)

except RuntimeError as error:
# Errors happen fairly often, DHT's are hard to read, just keep going
print(error.args[0])
time.sleep(2.0)
continue
except Exception as error:
dhtDevice.exit()
raise error

time.sleep(2.0)

В консоли командой python3 Adafruit_CircuitPython_DHT/examples/AdafruitDHT.py значения отображаются

Подскажите, пожалуйста, в чем ошибка
Заранее благодарен
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Raspberry 4 GPIO DHT22

Сообщение fandaymon » Сб дек 12, 2020 1:31 pm

Gena писал(а):
Сб дек 12, 2020 1:21 pm
Здравствуйте Уважаемый fandaymon
Как Вы и писали, создал в Простых устройствах - Новые простые устройства, класс - Датчик температуры и Датчик влажности ( создалось автоматически: Sensor_temp02 и Sensor_humidity02)
Затем создал сценарий файл temphum с кодом:

$answer = shell_exec('python3 Adafruit_CircuitPython_DHT/examples/AdafruitDHT.py');
$matches = explode(' ',$answer);
setGlobal("Sensor_temp02.value",$matches[1]);
setGlobal("Sensor_humidity02.value",$matches[0]);

в ClockChime - onNewMinute - вставил код:

if($m%5 == 0){
runScript('temphum');
}

В свойствах value этих объектов значения не отображаются, график - сплошная линия.
Я подозреваю, что проблема в коде файла AdafruitDHT.py
import time
import board
import adafruit_dht

# Initial the dht device, with data pin connected to:
dhtDevice = adafruit_dht.DHT22(board.D4)

# you can pass DHT22 use_pulseio=False if you wouldn't like to use pulseio.
# This may be necessary on a Linux single board computer like the Raspberry Pi,
# but it will not work in CircuitPython.
# dhtDevice = adafruit_dht.DHT22(board.D4, use_pulseio=False)

while True:
try:
# Print the values to the serial port
temperature_c = dhtDevice.temperature
temperature_f = temperature_c * (9 / 5) + 32
humidity = dhtDevice.humidity
print(
" {:.1f} C {}% ".format(
temperature_c, humidity
)
)

except RuntimeError as error:
# Errors happen fairly often, DHT's are hard to read, just keep going
print(error.args[0])
time.sleep(2.0)
continue
except Exception as error:
dhtDevice.exit()
raise error

time.sleep(2.0)

В консоли командой python3 Adafruit_CircuitPython_DHT/examples/AdafruitDHT.py значения отображаются

Подскажите, пожалуйста, в чем ошибка
Заранее благодарен
Добавить в сценарий отображение ответа и запустить сценарий вручную

Код: Выделить всё

$answer = shell_exec('python3 Adafruit_CircuitPython_DHT/examples/AdafruitDHT.py');
echo $answer;
$matches = explode(' ',$answer);
setGlobal("Sensor_temp02.value",$matches[1]);
setGlobal("Sensor_humidity02.value",$matches[0]);
скорее всего проблема в том что скрипт на питоне в консоли и в МДМ запускается под разными пользователями, соответственно библиотека board была поставлена только для пользователя pi (ну или рута)
За это сообщение автора fandaymon поблагодарил:
Gena (Сб дек 12, 2020 2:53 pm)
Рейтинг: 1.16%
Gena
Сообщения: 11
Зарегистрирован: Пт ноя 13, 2020 11:45 am
Благодарил (а): 9 раз
Поблагодарили: 0

Re: Raspberry 4 GPIO DHT22

Сообщение Gena » Сб дек 12, 2020 3:34 pm

Уважаемый fandaymon
Я может не правильно выразился
Данные видны в консоле Raspberry при вводе
pi@raspberrypi:~ $ python3 Adafruit_CircuitPython_DHT/examples/AdafruitDHT.py
19.0 C 56%
19.0 C 56%
И я прошу прощения, не могли бы Вы подсказать, как добавить в сценарий отображение ответа или посмотреть где-то пример

Не судите строго. Я уже говорил, что только начинаю изучать МДМ.
Заранее благодарен
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Raspberry 4 GPIO DHT22

Сообщение fandaymon » Сб дек 12, 2020 4:14 pm

Gena писал(а):
Сб дек 12, 2020 3:34 pm
Уважаемый fandaymon
Я может не правильно выразился
Данные видны в консоле Raspberry при вводе
pi@raspberrypi:~ $ python3 Adafruit_CircuitPython_DHT/examples/AdafruitDHT.py
19.0 C 56%
19.0 C 56%
И я прошу прощения, не могли бы Вы подсказать, как добавить в сценарий отображение ответа или посмотреть где-то пример

Не судите строго. Я уже говорил, что только начинаю изучать МДМ.
Заранее благодарен
Я же добавил команду echo $answer; - при запуске сценария вручную она выведет что там вернул вызов скрипта на питоне
За это сообщение автора fandaymon поблагодарил:
Gena (Сб дек 12, 2020 4:27 pm)
Рейтинг: 1.16%
Gena
Сообщения: 11
Зарегистрирован: Пт ноя 13, 2020 11:45 am
Благодарил (а): 9 раз
Поблагодарили: 0

Re: Raspberry 4 GPIO DHT22

Сообщение Gena » Сб дек 12, 2020 4:48 pm

Уважаемый fandaymon
Извините, я не увидел изменения в коде
Я заменил свой код на Ваш - показаний нет
Sensor_temp02.value (H) - (src: /objects/?script=temphum)
Sensor_humidity02.value (H) - (src: /objects/?script=temphum)

Что делать? Не знаю.
Ответить