Датчик температуры DS18B20 дает сбой MbedOS на Arduino Nano RP2040?

ds18b20 arduino-nano-rp2040

Я пытаюсь использовать датчик DS18B20 с Arduino Nano RP2040. Независимо от того, какую библиотеку я использую, она, похоже, приводит к сбою MbedOS, как только драйвер инициализируется. Я получаю 4 коротких и 4 длинных вспышки оранжевого светодиода, что, как я где-то нашел, указывает на сбой.

Я пытался использовать библиотеку DS18B20 (https://github.com/matmunk/DS18B20), а также DallasTemperature. (https://github.com/milesburton/Arduino-Temperature-Control-Library).
Сначала я подозревал, что проблема в моем коде, поскольку он взаимодействует с несколькими различными устройствами (EEPROM, SHT30 и т. д.), и это может мешать интерфейсу 1-wire, но если я загружаю только примеры из этих библиотек, эффект то же самое.

Я знаю, что с Arduino все в порядке, так как он может абсолютно нормально выполнять другой код, и датчик тоже в порядке, поскольку я могу считывать его с помощью RaspberryPi.

Есть ли у кого-нибудь подобные проблемы? Есть ли обходной путь?

, 👍0

Обсуждение

Трудно сказать много, не имея возможности воссоздать проблему или, по крайней мере, проверить код и, возможно, проводку. Для определенных значений «похожих» вы можете получить ответы, которые не совсем являются ответами, поскольку они могут не иметь ничего общего с проблемой, с которой вы столкнулись. Вы можете отредактировать свой вопрос, чтобы включить более подробную информацию., @timemage

@timemage Как я уже сказал, проблема возникает даже с примером кода из связанных библиотек. Проводка не особо интересная, просто резистор 4,7к между Vcc и линиями данных. Я знаю, что с проводкой все в порядке, так как я могу подключить RPi вместо Arduino и получить показания. Я также подозреваю, что неправильная проводка помешает связи с датчиком, но не приведет к полному сбою ОС., @daneos

Да, извините, я пропустил это. Если я наткнусь на DS18B20, я, по крайней мере, попробую его с пико RPI (наиболее близкое к тому, что вы используете). Но я не знаю, насколько вероятно, что я найду его и когда. Я могу по крайней мере отменить -1. Надеюсь, кто-то воссоздаст проблему и скажет что-то полезное задолго до того, как я смогу это сделать., @timemage

добавить много кода отладки в вашу программу ... определить, где он зависает, @jsotola

@jsotola Я обнаружил, что он зависает в конструкторе DS18B20 для библиотеки DS18B20 и в методе begin() для DallasTemperature., @daneos


1 ответ


Лучший ответ:

2

Настройка теста

Я подключил DS18B20+ к RPI Pico и использовал подтяжку 4,7 К. RPI Pico заменит вашу плату. Он использует ядро arduino:mbed_rp2040:pico, а не arduino:mbed_nano:nanorp2040connect, как у вас. Однако я предполагаю, что они достаточно похожи.

Результат теста

Когда я пытаюсь использовать упомянутую вами библиотеку matmonk DS18B20, я вижу аналогичную картину на встроенном светодиоде RPI Pico. Одной попытки создать объект было достаточно, чтобы произошел сбой. Конструкция напрямую относится к библиотеке OneWire. Итак, я попробовал собственный пример чтения DS18B20 из библиотеки OneWire ( с соответствующей модификацией), и он падает таким же образом. Это привело к поиску и обнаружению проблем с RP2040 на странице github OneWire, что привело (среди прочего) к этой находке . В ответе упоминается OneWireNG.

Пример OneWireNG DallasTemperature работает

Вернее, работает библиотека. Но это соответствующий пример, который работает для меня. Я сделал следующие изменения.

  • Все варианты использования Serial были заменены на SerialUSB, поскольку я использую USB-соединение для Serial Monitor (ну, эмулятор терминала).

  • Я изменил объект с одним проводом, чтобы использовать GPIO28, потому что он был удобно расположен рядом с контактами, с которых я собирал 3,3 В и GND: OneWire ds(28);

Кажется правдоподобным, что вы могли бы изменить использование #include <DS18B20.h> в двух упомянутых вами библиотеках на #include " ;OneWireNg_CurrentPlatform.h" и обнаруживают, что после этого они работают нормально. Я еще не пробовал это. Если это представляет для вас особый интерес, я попробую и обновлю(обновление ниже). Тем не менее, этот стандартный пример из библиотеки OneWireNG не дает сбоев и печатает температуры, которые растут и падают, как ожидается, когда я манипулирую температурой датчика.

OneWireNg с библиотеками Matmunk и DallasTemperature

В целом

Оказалось, что ненужно изменять библиотеки, которые использовали оригинальный OneWire, даже не просто изменяя #include. Несмотря на то, что в примере OneWireNg используется "OneWireNg_CurrentPlatform.h", он также предоставляет заголовок OneWire.h. Достаточно установить OneWireNg, но исходная библиотека OneWire должна быть удалена (или перемещена из каталога библиотек), чтобы не путать процесс сборки с выбором исходной библиотеки на основе имени заголовка, а не Библиотека OneWireNg. Авторы OneWireNg, возможно, использовали специальный заголовок OneWireNg в примерах, чтобы избежать этой проблемы с их примерами, когда были установлены обе библиотеки. Они приложили все усилия, чтобы сделать его совместимым с оригиналом, но ниже приведены отчеты о конкретных тестах с двумя упомянутыми библиотеками.

Библиотека Matmunk с OneWireNg

Если OneWireNg установлен, а оригинальный OneWire не установлен, файл Несколько примеров из библиотеки matmunk, работающей с теми же небольшими изменениями, упомянутыми ранее (я использовал контакт 28, а не 2, и SerialUSB, а не Serial). Если вам интересно, единственная причина, по которой я переключился с тестирования Single на Multiple, заключается в том, что последнее не требует, чтобы я сначала нашел и ввел адрес своей части. Этот пример — температура печати, которая повышается и понижается в зависимости от манипуляций с датчиком.

DallasTemperature с OneWireNg

Точно так же я тестировал несколько примеров из библиотеки DallasTemperature. . Такие же модификации примера. Я изменил ONE_WIRE_BUS на 28 для своей настройки. Я изменил Serial на SerialUSB. И работает нормально и печатает ожидаемую температуру при манипулировании датчиком.

,

Спасибо! Использование OneWireNg вместо OneWire действительно решает проблему. Искал проблемы в библиотеках DallasTemperatur e и DS18B20, но как-то не пришло в голову заглянуть в сам OneWire., @daneos

Это не сработало для меня. Я удалил библиотеку OneWire и установил OneWireNg. Я установил библиотеку DS18B20 Матиаса Мунка Хэнсона и загрузил скетч, найденный по этому адресу: https://github.com/matmunk/DS18B20/blob/1.0.0/examples/Multiple/Multiple.ino Arduino Nano RP2040 падает, как только скетч загружен., @Mauro Pagano

@MauroPagano, я вижу, ваш комментарий был преобразован из ответа. Я указываю на это в основном для пользы всех (большинства людей), которые этого не видят. Похоже, это тот же контент, который я разместил под заголовком «Библиотека Matmunk с OneWireNg». Возможно, поэтому он был преобразован в комментарий. Если вы пытались решить эту часть моего ответа, то я не совсем уверен, что сказать, за исключением, возможно, того, что вы нашли разницу в версии OneWireNg, которая для меня почти наверняка была 0.12.2, которую я бы связаны., @timemage