• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

WeMosD1R1 зависает в неопределенный момент.

Автор установите вот эту библиотеку https://github.com/enjoyneering/AHTxx

И в инициализации AHT10 увеличитьте stretching interval (по умолчанию он 1000usec)

aht10.begin(100000, 1000); //100KHz, 1000usec by default
Я уже давно ей пользуюсь. Только Begin делаю без параметров. А на сколько увеличивать? 2000 поставить или 10000?
Одно меня смущает. В библиоте стартуется Wire. Но у меня Wire стартуется в скетче раньше. У меня ведь там еще часы и BME280. Я даже пробовал убрать из библиотеки старт Wire. В принципе все так же работало. В смысле так же зависало.
 

enjoynering

Well-known member
aht10.begin(100000, 1000);

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

насколько увеличивать? Это надо подобрать,так, чтоб у вас перестала перегружаться ESP8266. Пробуйте поставить 150 000...250 000 usec. Если не поможет, то уменьшайте скорость с 100 000Гц до 50 000Гц.
 
Подскажите, как проверять подключен датчик или отвалился?
Какой код будет?
aht10.getStatus();
Или что то другое?
 

enjoynering

Well-known member
Если отвалился он выдас 255 вместо Т и RH. Если дальше интересно, что и почему отвалилось вызываем getStatus(). Вы примеры смотрели? Там все разжеванно.
 
Вы примеры смотрели?
Код:
 switch (aht10.getStatus())
  {
    case AHTXX_NO_ERROR:
      Serial.println(F("no error"));
      break;

    case AHTXX_BUSY_ERROR:
      Serial.println(F("sensor busy, increase polling time"));
      break;

    case AHTXX_ACK_ERROR:
      Serial.println(F("sensor didn't return ACK, not connected, broken, long wires (reduce speed), bus locked by slave (increase stretch limit)"));
      break;

    case AHTXX_DATA_ERROR:
      Serial.println(F("received data smaller than expected, not connected, broken, long wires (reduce speed), bus locked by slave (increase stretch limit)"));
      break;

    case AHTXX_CRC8_ERROR:
      Serial.println(F("computed CRC8 not match received CRC8, this feature supported only by AHT2x sensors"));
      break;

    default:
      Serial.println(F("unknown status"));  
      break;
  }
Сделаю так
if (AHT10.getStatus() != AHTXX_DATA_ERROR || AHT10.getStatus() != AHTXX_ACK_ERROR) {
//чтение данных с сенсора
} else {
//датчик утерян
}
 

enjoynering

Well-known member
какой стыд... чем вам метод из примера не понравился? он проще и исполняется за меньше тактов те быстрее.
 

enjoynering

Well-known member
я не про это. вы поняли что написано ниже?
Если отвалился он выдаст 255 вместо Т и RH. Если дальше интересно, что и почему отвалилось вызываем getStatus().
найдите эквивалент этого текста в примерах и покажите здесь.
 

papsi789

New member
Yes the full one and R1. I could not find it anywhere hopefully the R2 is not that much different . I did say it would not work with usb or the power jack.
 
Сверху Снизу