Датчик температуры DS18B20 для ESP8266
Добавлено: 28 авг 2026, 12:08
тест 9,7,1
Датчик так себе: слишком медленный, и, более того, сильно нагружает МК.
И чем ниже битность, тем сильнее, потому что время транзакции всегда одно и то же, а вот количество опросов — чем больше, тем выше спам этих транзакций.
+ выбор пина
+ период опроса
+ выбор битности разрешения
+ режим работы
+ каждый датчик имеет свои собственные настройки
Шаг измерения:
9 бит — 0,5;
10 бит — 0,25;
11 бит — 0,125;
12 бит — 0,0625.
Несколько шин: конверсии идут параллельно, но транзакции на шине последовательные; каждая дополнительная шина добавляет ~9 мс шинного времени в цикл. Для 5 шин накинь ~+40 мс к минимуму:
9 бит — 100 мс;
10 бит — 200 мс;
11 бит — 400 мс;
12 бит — 800 мс.
Можно запрограммировать сам датчик на пороги температуры, и он сам будет сравнивать и слать только флаг выхода за диапазоны. Ограничение — это только целые числа.
В итоге вместо транзакции получения данных температуры в 6,67 мс тратим транзакцию длиною в 1,32 мс.
Пригодится может там, где не нужны данные температуры, но нужен мониторинг вне диапазонов, а также можно построить терморегулятор, опять же, если не нужны показания температуры.
Можно прошить его EEPROM датчика, но я не нашёл этому применение; взамен просто на этапе загрузки закидываем в его SRAM пороги и битность.
Результаты тестов:
Диспетчер отключен.
Опрос раз в 1000 мс, 12 бит.
Замер 5 сек — от начала данных до начала шестых данных, итого имеем 5 полных периодов опроса данных, усредняем к 1 сек.
Все замеры в 9,7,1:
— профильный блок;
— блок кандидатов;
— блок пользовательский.
Про кандидата уже ничего не хотелось бы говорить, но пока он опрашивает один датчик, профильный опросил 4 датчика.
Для понимания масштаба загруженности: при работе этих датчиков пустой код с измерителем пина крутится 101 000 раз в сек.
Можно подрубить в МК турбо на 160 МГц — будет пошустрее.
Работать с датчиком можно, но когда их очень много, то уже никакая частота не поможет и никакой МК.
И чем больше датчиков, тем больше фиксированных «дырок» в лупе в единицу времени измерения. Вот если б разрабам хватило ума встроить овердрайв в датчик, то тогда датчик работал бы в х10 раз быстрее.
В итоге шина умеет это делать а датчик нет.
Датчик так себе: слишком медленный, и, более того, сильно нагружает МК.
И чем ниже битность, тем сильнее, потому что время транзакции всегда одно и то же, а вот количество опросов — чем больше, тем выше спам этих транзакций.
+ выбор пина
+ период опроса
+ выбор битности разрешения
+ режим работы
+ каждый датчик имеет свои собственные настройки
Шаг измерения:
9 бит — 0,5;
10 бит — 0,25;
11 бит — 0,125;
12 бит — 0,0625.
Несколько шин: конверсии идут параллельно, но транзакции на шине последовательные; каждая дополнительная шина добавляет ~9 мс шинного времени в цикл. Для 5 шин накинь ~+40 мс к минимуму:
9 бит — 100 мс;
10 бит — 200 мс;
11 бит — 400 мс;
12 бит — 800 мс.
Можно запрограммировать сам датчик на пороги температуры, и он сам будет сравнивать и слать только флаг выхода за диапазоны. Ограничение — это только целые числа.
В итоге вместо транзакции получения данных температуры в 6,67 мс тратим транзакцию длиною в 1,32 мс.
Пригодится может там, где не нужны данные температуры, но нужен мониторинг вне диапазонов, а также можно построить терморегулятор, опять же, если не нужны показания температуры.
Можно прошить его EEPROM датчика, но я не нашёл этому применение; взамен просто на этапе загрузки закидываем в его SRAM пороги и битность.
Результаты тестов:
Диспетчер отключен.
Опрос раз в 1000 мс, 12 бит.
Замер 5 сек — от начала данных до начала шестых данных, итого имеем 5 полных периодов опроса данных, усредняем к 1 сек.
Все замеры в 9,7,1:
— профильный блок;
— блок кандидатов;
— блок пользовательский.
Про кандидата уже ничего не хотелось бы говорить, но пока он опрашивает один датчик, профильный опросил 4 датчика.
Для понимания масштаба загруженности: при работе этих датчиков пустой код с измерителем пина крутится 101 000 раз в сек.
Можно подрубить в МК турбо на 160 МГц — будет пошустрее.
Работать с датчиком можно, но когда их очень много, то уже никакая частота не поможет и никакой МК.
И чем больше датчиков, тем больше фиксированных «дырок» в лупе в единицу времени измерения. Вот если б разрабам хватило ума встроить овердрайв в датчик, то тогда датчик работал бы в х10 раз быстрее.
В итоге шина умеет это делать а датчик нет.