Jump to content
iT4iT.CLUB

Leaderboard


Popular Content

Showing content with the highest reputation since 12/12/2024 in Posts

  1. 1 point
    Доброе время суток. Да конечно, но проверить работоспособность Вам придется самостоятельно. В первую очередь Вам понадобятся следующие библиотеки: OneWire https://github.com/PaulStoffregen/OneWire DallasTemperature https://github.com/milesburton/Arduino-Temperature-Control-Library Скачиваем и добавляем их в Arduino IDE. Первая необходима для реализации обмена данными через шину 1 wire, а вторая представляет из себя всю необходимую реализацию для работы с датчиками серии DS18. Теперь необходимо определиться с тем, какой порт мы задействуем под шину 1 wire, это важно т.к в проекте уже задействовано много портов, а ESP8266 очень в них ограничена. Из свободных и безопасных остался только GPIO16 (D0 на платах NodeMCU) но с ним могут быть проблемы, в любом случае это стоит проверить. Если вдруг не получится, то придется задействовать один из портов, используемых для управления нагрузкой, например, GPIO14 (D5 на платах NodeNCU). Ранее мы использовали его для управления нагрузкой по разности показаний между двумя датчиками BME280. ВАЖНО: если с GPIO16 не получится и придется использовать GPIO14, то в основном файле программы закомментируйте вызов функции инициализации данного порта // gpio_14(); Все необходимое для работы с DS18B20 будем описывать в файле users_bme280_x2.h т.к по всей видимости именно им Вы и пользуетесь в работе с двумя датчиками BME280. Подключаем дополнительные библиотеки. #include <OneWire.h> #include <DallasTemperature.h> Следом можно объявить все необходимые объекты для работы с шиной и датчиками. Я сразу укажу варианты для разных портов. DallasTemperature ds18b20(new OneWire(16)); // GPIO16 (D0) // DallasTemperature ds18b20(new OneWire(14)); // GPIO14 (D5) Теперь доработаем функцию sensors_config так, чтобы в ней появились следующие дополнительные строки void sensors_config() { /* тут описан код других датчиков */ ds18b20.begin(); cron.add(cron::time_5s, [&](){ ds18b20.requestTemperatures(); }, true); sensors.add(T, device::in, "ds18b20_s0", [&](){ return ds18b20.getTempCByIndex(0); }); sensors.add(T, device::in, "ds18b20_s1", [&](){ return ds18b20.getTempCByIndex(1); }); } Пару слов о том, что мы добавили в эту функцию. Инициализация шины 1 wire ds18b20.begin(); Добавляем в планировщик новое задание которое будет отвечать за рассылку телеграммы по шине с целью запроса температуры у всех имеющихся датчиков. Последний параметр (true) заставит задачу отработать сразу при добавлении в планировщик. cron.add(cron::time_5s, [&](){ ds18b20.requestTemperatures(); }, true); Далее описываем каким способом собирать данные с датчиков sensors.add(T, device::in, "ds18b20_s0", [&](){ return ds18b20.getTempCByIndex(0); }); sensors.add(T, device::in, "ds18b20_s1", [&](){ return ds18b20.getTempCByIndex(1); }); В данном представлении датчики объявлены как внутренние - device::in (можете объявить их как внешние device::out), и имеют идентификаторы в системе ds18b20_sX, где X это индекс датчика найденного библиотекой DallasTemperature. Эта информация будет полезна если появится необходимость вывода данных с этих датчиков на общий график. В теории все должно заработать. Отпишитесь пожалуйста о своих результатах.
×
×
  • Create New...