Не удалось прочитать датчик 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");
}

, 👍3

Обсуждение

Эта библиотека предназначена для Галилео? Я вижу, что он работает на частоте 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


1 ответ


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