Не удалось прочитать датчик DHT22 с помощью платы Intel Galileo Gen2.
Почему у меня появляется дисплей
Не удалось прочитать данные датчика DHT!
в последовательном мониторе в большинстве случаев, когда я запускаю приведенный ниже код? Когда я уменьшаю задержку до 1000 мс, показания показывают 0,00 как для температуры, так и для влажности, что также в значительной степени неверно. Любая помощь будет высоко оценена.
// Пример скетча тестирования для различных датчиков влажности/температуры DHT
// Автор ladyada, общественное достояние
#include "DHT.h"
#define DHTPIN 2 // к какому выводу мы подключены
// Раскомментируйте любой тип, который вы используете!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Инициализируем датчик DHT для обычного Arduino 16 МГц
DHT dht(DHTPIN, DHTTYPE);
// ПРИМЕЧАНИЕ. Для работы с более быстрым чипом, например Arduino Due или Teensy, вам
// возможно, потребуется увеличить порог для количества циклов, считающегося 1 или 0.
// Вы можете сделать это, передав третий параметр для этого порога. Это немного
// возиться, чтобы найти правильное значение, но в целом, чем быстрее процессор, тем
// выше значение. По умолчанию для AVR 16 МГц установлено значение 6. Для
// Arduino Due, работающий на частоте 84 МГц, работает значение 30.
// Пример инициализации датчика DHT для Arduino Due:
//DHT dht(DHTPIN, DHTTYPE, 30);
void setup() {
Serial.begin(9600);
Serial.println("DHTxx test!");
dht.begin();
}
void loop() {
// Подождите несколько секунд между измерениями.
delay(2000);
// Чтение температуры или влажности занимает около 250 миллисекунд!
// Показания датчика также могут быть устаревшими до 2 секунд (это очень медленный датчик)
float h = dht.readHumidity();
// Считываем температуру в градусах Цельсия
float t = dht.readTemperature();
// Считываем температуру в градусах Фаренгейта
float f = dht.readTemperature(true);
// Проверяем, не удалось ли какое-либо чтение, и выходим раньше (чтобы повторить попытку).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Вычисление индекса тепла
// Необходимо отправить температуру в градусах Фаренгейта!
float hi = dht.computeHeatIndex(f, h);
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t");
Serial.print("Heat index: ");
Serial.print(hi);
Serial.println(" *F");
}
@Jay M, 👍3
Обсуждение1 ответ
Ссылка на статью Ника аналогична той, которую я нашел, так что, должно быть, это хороший поиск проблема.
На форуме Intel описано, что Galileo не способен напрямую связываться с датчиком, поскольку это компьютер, а не микроконтроллер, поэтому ему не хватает возможности точного измерения времени, требуемого датчиком, а также DHT * считается периферийным устройством и поэтому требует наличия способа взаимодействия с «ПК».
В посте описано использование двух контактов для создания правильного цифрового сигнала для DHT.
В схеме используется диод для защиты выходного контакта.
ОП на форуме описывает соединения следующим образом:
Пин 2 Galileo подключен к контакту данных DHT11.
Катод диода подключен к контакту 3 Галилео.
Анод диода подключен к выводу данных DHT11.
Диод может быть стандартным, возможно, быстропереключающимся сигнальным диодом, как 1N4143. Резистор будет стандартным повышающим резистором сопротивлением 10 кОм.
Вот схема ОП:
(источник: intel.com)
Вам также необходимо будет использовать код, на который ОП связан в связанном сообщении, поскольку он был изменен для работы с обходным решением.
Здесь написано: «контакт 2 подключен к DHT11», но чей контакт 2 подключить к DHT и к какому контакту DHT мне следует подключиться., @Jay M
@JayM привет, PIN2 — это Galileo, а PIN3 — это тоже Galileo. Контакт 2 подключен к контакту данных DHT, а контакт 3 подключен к катоду диода, а анод диода - к контакту данных DHT. Проверьте эту схему на странице https://communities.intel. com/servlet/JiveServlet/downloadImage/2-245223-237707/DHTGal.PNG, @RSM
- Какова работа pulseIn?
- Сколько датчиков может поддерживать один модуль Arduino?
- Получение BPM из данного кода
- Как получить данные о весе с датчиков стеклянных электронных весов для ванной?
- DS18B20 дает высокие показания. Как заставить его вернуть правильную температуру?
- Какой тип разъема использует система GROVE?
- Улавливают ли ультразвуковые датчики прозрачные материалы?
- Как подключить более 10 датчиков к Arduino uno r3
Эта библиотека предназначена для Галилео? Я вижу, что он работает на частоте 400 МГц, тогда как библиотека (когда я ее последний раз использовал) была для Arduino с частотой 16 МГц. DHT11 использует протокол, строго зависящий от времени. Поиск по запросу «intel galileo dht11» выявил [обходной путь DHT для Galileo и Galileo Gen2 с использованием двух контактов вместо одного](https://communities.intel.com/thread/53869?tstart=0)., @Nick Gammon
Это только потому, что я использую тот же материал, из которого были сделаны ctrl+c и ctrl+v! :) В дополнение, можно пожалуйста подробно указать контакты? Проще говоря, это означает, например, к какому контакту подключить диод, к какому контакту подключить резистор по ссылке, которой вы поделились выше! (также спецификация диода и резистора). Спасибо дружище за помощь!!! Ваше здоровье.., @Jay M
Кроме того, я использую 3-контактный DHT22 (Vcc, Out, Gnd)., @Jay M