Raspberry 3 GPIO DHT22(AM2301)
Модератор: immortal
-
- Сообщения: 36
- Зарегистрирован: Вс янв 14, 2018 5:57 pm
- Благодарил (а): 17 раз
- Поблагодарили: 0
Raspberry 3 GPIO DHT22(AM2301)
Здравствуйте, помогите подключить датчик DHT22 через GPIO.
Температуру и влажность показывает из консоли командой
sudo ./dht.py 2302 4
как и чем данные подтянуть в MD?
Спасибо
Температуру и влажность показывает из консоли командой
sudo ./dht.py 2302 4
как и чем данные подтянуть в MD?
Спасибо
- VooDooN
- Сообщения: 307
- Зарегистрирован: Сб июн 11, 2016 12:02 am
- Благодарил (а): 170 раз
- Поблагодарили: 64 раза
Re: Raspberry 3 GPIO DHT22(AM2301)
Можно попробовать так:
1) Добавить в объект ThisComputer новое свойство типа TempFromDHT22.
2) В этом же объекте, добавить метод типа getTempFromDHT22.
3) Внутри вставить типа такой код:
4) В объекте onNewMinute добавить вызов метода
5) Если все сработает, то в ThisComputer.TempFromDHT22 будут попадать данные с датчика.
Писал на скорую руку, может где-то накосячил. Через скрипты тоже можно это сделать. Есть разные способы
[Updated]
Про влажность забыл добавить. Для нее тоже отдельное свойство нужно сделать и в том же самом методе getTempFromDHT22 разбирать с помощью регулярных выражений ответ от shell_exec и записывать в разные свойства температуру и влажность.
1) Добавить в объект ThisComputer новое свойство типа TempFromDHT22.
2) В этом же объекте, добавить метод типа getTempFromDHT22.
3) Внутри вставить типа такой код:
Код: Выделить всё
$answer = shell_exec("sudo ./dht.py 2302 4");
//$answer - если ответ содержит много текста, то разобрать его с помощью регулярных выражений
$this->setProperty('TempFromDHT22', $answer);
Код: Выделить всё
callMethod('ThisComputer.getTempFromDHT22');
Писал на скорую руку, может где-то накосячил. Через скрипты тоже можно это сделать. Есть разные способы
[Updated]
Про влажность забыл добавить. Для нее тоже отдельное свойство нужно сделать и в том же самом методе getTempFromDHT22 разбирать с помощью регулярных выражений ответ от shell_exec и записывать в разные свойства температуру и влажность.
- Рейтинг: 1.16%
-
- Сообщения: 36
- Зарегистрирован: Вс янв 14, 2018 5:57 pm
- Благодарил (а): 17 раз
- Поблагодарили: 0
Re: Raspberry 3 GPIO DHT22(AM2301)
при выполнении скрипта, выводятся такие данныеVooDooN писал(а):Можно попробовать так:
1) Добавить в объект ThisComputer новое свойство типа TempFromDHT22.
2) В этом же объекте, добавить метод типа getTempFromDHT22.
3) Внутри вставить типа такой код:4) В объекте onNewMinute добавить вызов методаКод: Выделить всё
$answer = shell_exec("sudo ./dht.py 2302 4"); //$answer - если ответ содержит много текста, то разобрать его с помощью регулярных выражений $this->setProperty('TempFromDHT22', $answer);
5) Если все сработает, то в ThisComputer.TempFromDHT22 будут попадать данные с датчика.Код: Выделить всё
callMethod('ThisComputer.getTempFromDHT22');
Писал на скорую руку, может где-то накосячил. Через скрипты тоже можно это сделать. Есть разные способы
[Updated]
Про влажность забыл добавить. Для нее тоже отдельное свойство нужно сделать и в том же самом методе getTempFromDHT22 разбирать с помощью регулярных выражений ответ от shell_exec и записывать в разные свойства температуру и влажность.
Temp=25.4* Humidity=34.7%
теоретически я могу их подправить убрать Temp= и Humidity
в каком формате лучше сделать ?
в php не силен поэтому прошу помощи
- VooDooN
- Сообщения: 307
- Зарегистрирован: Сб июн 11, 2016 12:02 am
- Благодарил (а): 170 раз
- Поблагодарили: 64 раза
Re: Raspberry 3 GPIO DHT22(AM2301)
Можно так (без различных проверок на ошибки):
Тогда температура будет попадать в ThisComputer.TempFromDHT22, а влажность в ThisComputer.HumFromDHT22.
Код: Выделить всё
$answer = shell_exec("sudo ./dht.py 2302 4");
$pattern = '(\d+\.*\d*)';
preg_match_all($pattern, $answer, $matches);
$this->setProperty('TempFromDHT22', $matches[0][0]);
$this->setProperty('HumFromDHT22', $matches[0][1]);
- Рейтинг: 1.16%
-
- Сообщения: 1555
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
Re: Raspberry 3 GPIO DHT22(AM2301)
Поскольку скрипт написан на питоне, то можно просто из самого скрипта отдавать параметры нужным объектам. Добавить в начало import urllibMisko писал(а):
при выполнении скрипта, выводятся такие данные
Temp=25.4* Humidity=34.7%
теоретически я могу их подправить убрать Temp= и Humidity
в каком формате лучше сделать ?
в php не силен поэтому прошу помощи
и в том месте, где выводятся параметры принтом сделать
#print "Temp : ", temperature, "C"
link="http://127.0.0.1/objects/?op=set&object ... p=value&v=" + str(round(temperature,1))
f=urllib.urlopen(link)
#print "Humidity : ", humidity, "%"
link="http://127.0.0.1/objects/?op=set&object ... p=value&v=" + str(round(humidity))
f=urllib.urlopen(link)
В первом блоке, то что было в переменной temperature будет присваиваться температурному датчику TempSensor01 (создать в Мажордомо свой и подставить своё название)
Во втором блоке, то что было в переменной humidity будет присваиваться датчику HumSensor01
Далее поставить питоновский скрипт в крон для выполнения каждую минуту и в PHP разбираться не придётся...
- Рейтинг: 1.16%
-
- Сообщения: 36
- Зарегистрирован: Вс янв 14, 2018 5:57 pm
- Благодарил (а): 17 раз
- Поблагодарили: 0
Re: Raspberry 3 GPIO DHT22(AM2301)
не выходит каменный цветок, не пойму в чем проблема, попроовал другой способ, добавил в onNewMinuteVooDooN писал(а):Можно так (без различных проверок на ошибки):Тогда температура будет попадать в ThisComputer.TempFromDHT22, а влажность в ThisComputer.HumFromDHT22.Код: Выделить всё
$answer = shell_exec("sudo ./dht.py 2302 4"); $pattern = '(\d+\.*\d*)'; preg_match_all($pattern, $answer, $matches); $this->setProperty('TempFromDHT22', $matches[0][0]); $this->setProperty('HumFromDHT22', $matches[0][1]);
Код: Выделить всё
$answer = shell_exec("sudo ./dht.py 2302 4");
$pattern = '(\d+\.*\d*)';
preg_match_all($pattern, $answer, $matches);
//$this->setProperty('TempFromDHT22', $matches[0][0]);
//$this->setProperty('HumFromDHT22', $matches[0][1]);
setGlobal("ThisComputer.TempFromDHT22",$matches[0][0]);
setGlobal("ThisComputer.HumFromDHT22",$matches[0][1]);
полагаю, показания показываются не сразу при выполнении скрипта, а от 3-10 секунд, мне кажется тут и затык.
как закончить собирать показания после ожидания ?
-
- Сообщения: 36
- Зарегистрирован: Вс янв 14, 2018 5:57 pm
- Благодарил (а): 17 раз
- Поблагодарили: 0
Re: Raspberry 3 GPIO DHT22(AM2301)
здравствуйте вот текст вывода, куда вставлять ваш код ?fandaymon писал(а):Поскольку скрипт написан на питоне, то можно просто из самого скрипта отдавать параметры нужным объектам. Добавить в начало import urllibMisko писал(а):
при выполнении скрипта, выводятся такие данные
Temp=25.4* Humidity=34.7%
теоретически я могу их подправить убрать Temp= и Humidity
в каком формате лучше сделать ?
в php не силен поэтому прошу помощи
и в том месте, где выводятся параметры принтом сделать
#print "Temp : ", temperature, "C"
link="http://127.0.0.1/objects/?op=set&object ... p=value&v=" + str(round(temperature,1))
f=urllib.urlopen(link)
#print "Humidity : ", humidity, "%"
link="http://127.0.0.1/objects/?op=set&object ... p=value&v=" + str(round(humidity))
f=urllib.urlopen(link)
В первом блоке, то что было в переменной temperature будет присваиваться температурному датчику TempSensor01 (создать в Мажордомо свой и подставить своё название)
Во втором блоке, то что было в переменной humidity будет присваиваться датчику HumSensor01
Далее поставить питоновский скрипт в крон для выполнения каждую минуту и в PHP разбираться не придётся...
Код: Выделить всё
if humidity is not None and temperature is not None:
print('Temp={0:0.1f}* Humidity={1:0.1f}%'.format(temperature, humidity))
else:
print('Failed to get reading. Try again!')
sys.exit(1)
-
- Сообщения: 1555
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
Re: Raspberry 3 GPIO DHT22(AM2301)
Код: Выделить всё
if humidity is not None and temperature is not None:
# print('Temp={0:0.1f}* Humidity={1:0.1f}%'.format(temperature, humidity))
link="http://127.0.0.1/objects/?op=set&object=TempSensor01&p=value&v=" + str(round(temperature,1))
f=urllib.urlopen(link)
link="http://127.0.0.1/objects/?op=set&object=HumSensor01&p=value&v=" + str(round(humidity))
f=urllib.urlopen(link)
else:
print('Failed to get reading. Try again!')
sys.exit(1)
- Рейтинг: 2.33%
-
- Сообщения: 36
- Зарегистрирован: Вс янв 14, 2018 5:57 pm
- Благодарил (а): 17 раз
- Поблагодарили: 0
Re: Raspberry 3 GPIO DHT22(AM2301)
Добавил датчик в объект ThisComputer.TempSensor01 и ThisComputer.HumSensor01 выполню скрипт данные не появляются.fandaymon писал(а):В Мажордомо должен быть датчик температуры TempSensor01 и датчик влажности HumSensor01. Конечно никто не мешает обозвать их по другому и поменять в тексте программы на свои названияКод: Выделить всё
if humidity is not None and temperature is not None: # print('Temp={0:0.1f}* Humidity={1:0.1f}%'.format(temperature, humidity)) link="http://127.0.0.1/objects/?op=set&object=TempSensor01&p=value&v=" + str(round(temperature,1)) f=urllib.urlopen(link) link="http://127.0.0.1/objects/?op=set&object=HumSensor01&p=value&v=" + str(round(humidity)) f=urllib.urlopen(link) else: print('Failed to get reading. Try again!') sys.exit(1)
Куда копать дальше может стоит сразу передавать {0:0.1f} - температура и {1:0.1f} - влажность ?