1-Wire в домашних условиях
Технология 1-Wire® была предложена компанией Dallas Semiconductor (ныне — Maxim Integrated) для соединения между собой простых цифровых устройств и подразумевает две основные составляющие: шину, к которой подключаются устройства, и протокол обмена физического уровня, в соответствии с которым на этой шине осуществляется обмен информацией. Само название «1-Wire» переводится буквально как «один провод», но реально проводов нужно по меньшей мере два: один для обмена информацией и заодно в некоторых случаях для питания подключённых устройств, второй — «возвратный», он же «масса», «земля» и т.п. Название, тем не менее, оправдывается: во многих случаях шина 1-Wire используется внутри одного сложного устройства, такого как принтер или стиральная машина, для подключения периферийных датчиков и других компонентов к управляющему контроллеру, и в этом случае провод действительно требуется один, поскольку выход на общую для всех деталей «массу» есть в любой схеме и в любой части агрегата.
Часто к сигнальному и возвратному проводам добавляют ещё третий провод для подачи питания, но делают это не всегда. Дело в том, что многие периферийные устройства, расчитанные на работу через 1-Wire, поддерживают так называемый паразитный режим питания, когда необходимая для работы электроэнергия берётся с сигнального провода.
Одно из самых известных устройств 1-Wire — это обыкновенный и хорошо нам знакомый домофонный ключ-«таблетка» (iButton key). Внимательно разглядев такую «таблетку», мы можем заметить, что у неё всего два контакта; из этих контактов, собственно говоря, состоит весь корпус «таблетки». Интересно заметить, что «периферийным устройством», то есть тем устройством, с которым контроллер осуществляет работу, является в данном случае именно таблетка, тогда как её «считыватель» представляет собой просто два контакта, присоединённых к шине 1-Wire, никакой электроники он не содержит. Когда мы прижимаем ключ к считывателю, наш ключ оказывается подключён через шину непосредственно к контроллеру, находящемуся внутри домофона. «Таблетка» — это самое простое из существующих устройств 1-Wire: всё, что она умеет — это сообщить контроллеру свой серийный номер. Оригинальные ключи, выпущенные фирмой Maxim или по её лицензии, имеют уникальные, никогда не повторяющиеся серийные номера, но слепо верить в их уникальность не следует: на рынке существуют клоны «таблеток», выпускаемые сторонними производителями, в которых значение серийного номера может задать (запрограммировать) пользователь. Именно на этих устройствах основаны изредка встречающиеся услуги по «копированию» электронных ключей.
Серийный номер «таблетки» представляет собой 8-байтное число, которое обычно записывается в шестнадцатеричной системе счисления в виде 16 цифр, например: 2E000008971E8B01 . Интересно, что здесь только средние шесть байт 000008971E8B представляют собой собственно серийный номер. Младший байт здесь обозначает тип устройства (в данном случае это 01 , что соответствует ключам-«таблеткам»), а старший байт (в данном случае 2E ) отведён для контрольной суммы — это число, получаемое определённой последовательностью арифметических операций из остальных семи байтов. Сверив это число с тем, которое должно было получиться, мы можем с хорошей степенью достоверности узнать, правильно ли прочитан серийный номер или при его передаче вкрались ошибки.
Пока ключ-«таблетка» новый, его серийный номер можно легко прочитать — он выгравирован лазером на контактной поверхности устройства. К сожалению, контактная поверхность быстро покрывается царапинами и затирается, так что уже через полтора-два года прочитать выгравированную надпись практически невозможно. Важно помнить, что создание копии такого ключа технически очень просто, и оригинал ключа для этого иметь не обязательно, достаточно узнать серийный номер, а для этого, в свою очередь, достаточно получить ключ в руки хотя бы на пару секунд. Поэтому доверить такому ключу дверь подъезда, в принципе, можно, ведь попадание постороннего человека в подъезд само по себе хотя и неприятно, но не катастрофично; а вот использовать iButton в качестве ключа от квартиры, пожалуй, всё-таки не стоит.
Конечно, «таблетки» iButton — далеко не единственный вид устройств 1-Wire, их существует несколько десятков — это всевозможные датчики, управляющие устройства и прочее. Надо отметить, что функциональностью «таблеток» — именно, уникальным серийным номером и способностью его сообщать контроллеру шины — обладает любое устройство 1-Wire, «таблетки» отличаются лишь тем, что для них это единственная функция, больше они ничего не могут. В данной статье мы рассмотрим ещё два типа устройств: это, во-первых, датчики температуры DS18S20 и DS18B20 (коды типа устройства, соответственно, 10 и 28 ), и, во-вторых, двухканальный ключ DS2413 (код 3A ). Все эти устройства, наряду с «таблетками», поддерживаются прошивкой универсальных контроллеров UNC0xx
Датчики температуры 1-Wire бывают двух типов, DS18S20 и DS18B20. Первые измеряют температуру с точностью до 0.5 градуса, вторые — с точностью до 0.0625, то есть одной шестнадцатой; при этом более старые и менее точные датчики DS18S20 вдобавок ещё и продаются по более высокой цене. Принцип работы и даже команды у обоих датчиков одинаковые, но показания температуры приходится корректировать, поскольку под дробную часть градуса у DS18S20 выделен один бит, тогда как у DS18B20 — естественно, четыре бита.
Ключ DS2413 имеет два канала, каждый из которых может работать как на выход, например, для управления электромагнитным реле, так и на вход, регистрировать замыкание и размыкание входной цепи.
Устройства линеек UNC0xx способны исполнять роль контроллера шины 1-Wire и работать со всеми вышеперечисленными типами устройств — «таблетками», датчиками температуры и двухканальными ключами; линии последних могут использоваться как на вход, так и на выход. Шина 1-Wire выведена в виде трёх контактов, на устройствах UNC001-x это «гребёнка», на UNC01x — трёхконтактный клеммник. В обоих случаях контакты соответствуют (слева направо) интерфейсному проводу (собственно 1-Wire), «массе» и проводу питания; в шину подаётся питание 5В постоянного тока. Подробно подключение шины 1-Wire к контроллерам UNC0xx описано в их руководствах по эксплуатации, которые можно скачать на нашей странице загрузок.
В принципе, этого вполне достаточно, чтобы заставить работать устройства 1-Wire в домашних условиях. Так, ключи-«таблетки» имеют очень простую цоколёвку: их корпус (внешний контакт «считывателя») соответствует «массе» шины, а с проводом данных (собственно 1-Wire) должен соединяться внутренний контакт «считывателя», к которому прижимается «передняя» поверхность таблетки. С термометрами всё чуть сложнее: там контактов не два, а целых три; цоколёвка термодатчиков в различных исполнениях приведена на рисунке (рис. с сайта datasheetdir.com). В принципе, термодатчики тоже могут работать по двум проводам, получая питание из провода данных (это называется «паразитное питание»), но это требует дополнительной функциональности от мастера шины; контроллеры UNC0xx эту возможность не поддерживают.
Двухканальные ключи DS2413 представляют собой микросхему с шестью выводами, один из которых не используется, два подключаются к «массе», два используются в качестве каналов ввода и вывода (собственно ради них всё и затевается) и последний подключается к 1-Wire. Цоколёвку мы не приводим, поскольку, чтобы на основе DS2413 самостоятельно сделать что-то полезное, в любом случае придётся изучать её подробное описание, взятое, например, на сайте производителя. Любопытно, что DS2413 не имеет отдельного контакта для питания; всю необходимую энергию она берёт от провода данных. Таким образом, третий провод шины 1-Wire (провод питания) при работе с UNC0xx нужен только для датчиков температуры.
Если паяльник брать в руки не хочется, можно воспользоваться устройствами 1-Wire, предлагаемыми на нашем сайте. Устройства стандарта 1-Wire, предлагаемые нашей компанией, оснащаются штекерами RJ-11, что позволяет использовать стандартные телефонные соединительные принадлежности (провода, разветвители, соединители, розетки). В настоящее время мы можем предложить вам снабжённые штекерами термодатчики DS18B20 и «считыватели» для ключей iButton; оба типа устройств предлагаются с различной длиной соединительного шнура. В ближайшее время в продажу поступит также периферийное устройство на основе двухканального ключа. Для удобства подключения шины к устройствами UNC0xx мы предлагаем переходники UNC001/1w и UNC010/1w.
- появление (подключение) устройства 1-Wire (обычно это ключ-«таблетка»), при этом можно задать выполнение действий, закодированных в одном из расширенных регистров;
- переход показаний температуры заданного датчика через указанную верхнюю границу вверх или через указанную нижнюю границу вниз; при этом можно задать выполнение любых действий, предусмотренных кодами действий.
В любом случае, поскольку код действия может задавать выполнение расширенного регистра, а исполняемый расширенный регистр содержит коды действий, прибор можно заставить реагировать на любое из перечисленных событий любой последовательностью автономных действий, какую только можно задать средствами прошивки, и такие действия могут быть достаточно сложными. Так, если к устройству UNC0xx через шину 1-Wire присоединён считыватель ключей-«таблеток», а к выходным линиям подключены электромагнитный дверной замок и звуковой извещатель, то можно заставить устройство при появлении любого из «известных» ему ключей отключить питание электромагнита (то есть отпереть дверь) на три секунды (или на любое другое удобное вам время), причём в течение этого времени заставить звуковой извещатель издавать прерывистый сигнал, причём длительность сигналов и пауз между ними тоже можно задать практически произвольно. Однако «таблетки» можно использовать и более интересным способом, нежели простое открывание двери: поскольку на разные серийные номера можно «повесить» разные реакции, вы можете использовать связку ключей, подписанных или, например, оправленных в держатели разного цвета, для управления своей автоматизированной системой: например, для включения и выключения вентиляции, для смены каких-либо режимов и т.п. Простейший вариант автономной реакции на показания температуры — это включение и выключение устройств отопления и вентиляции, но можно, разумеется, придумать и более хитрые варианты. При этом ваша фантазия ограничена разве что количеством расширенных регистров (устройства UNC0xx имеют 48 таких регистров). Подробности можно найти в руководствах по эксплуатации устройств UNC001 и UNC01x.
Подчеркнём, что речь здесь идёт об автономной работе устройства UNC0xx. При наличии постоянно включённого управляющего компьютера (в том числе Raspberry Pi) можно реализовать сколь угодно сложную систему, использующую шину 1-Wire, в этом случае ограничений нет вообще никаких, кроме разве что проблемы алгоритмической неразрешимости 🙂
АРХИТЕКТУРА
Базовыми решениями, на которых основана платформа, являются следующие:
A. Двухпроводный интерфейс.
Интерфейс 1-Wire имеет всего два провода — общий, который часто именуют «обратным» (return) и сигнальный, по которому передаются сигналы управления и данные. Напряжение питания абонентов при этом формируется путем пикового детектирования напряжения на сигнальном проводе, т.е. используется т.н. «паразитное» питание (рис.2), возможность реализации которого достигается низким энергопотреблением разработанной для 1-Wire элементной базы и применением выходных каскадов с открытым коллектором.
Рис.2. Схема формирования «паразитного» питания.
Вместе с тем в устройствах, имеющих функцию автономной регистрации данных, т.е. без подключения к магистрали, предусматривается внутренний источник питания (литиевая батарейка), а питание устройств с повышенным потреблением производится от внешнего источника по отдельной линии.
Ограничение магистрали всего двумя линиями позволяет обеспечить гарантированный контакт внешних цепей устройства iButton с цепями контактного устройства магистрали «легким движением руки», т.к. для этого требуется механическое сопряжение всего двух пар элементов. Именно в этом, собственно говоря, и заключается главное достоинство «двухпроводности» применительно к первоначальным задачам платформы 1-Wire.
B. Индикация подключения в горячем режиме.
Протокол 1-Wire предусматривает выдачу устройством, поключаемым к магистрали в горячем режиме, импульса, оповещающего о появлении на магистрали нового устройства. Необходимость такого оповещения также дикутется особенностями целевого назначения платформы, поскольку обмен с устройством iButton должен инициироваться в момент его подключения к магистрали.
C. Уникальный идентификатор устройства
Каждая микросхема 1-Wire содержит уникальный 64-битный код, записываемый на этапе производства. Данный код позволяет индивидуализировать все выпускаемые устройства 1-Wire, для чего производитель гарантирует отсутствие одинаковых кодов (аналогично MAC-адресам сетевых адаптеров). При подключении к магистрали данный код считывается контроллером и используется для идентификации связанного с этим устройством объекта, а также для определения типа устройства. При подключении к магистрали нескольких устройств их коды могут использоваться в качестве их адресов, что позволяет строить технологические сети, получившие название MicroLAN.
Замечание. Для задач автоматизированного управления, к которым, в том числе, относятся и задачи «умного дома», данные решения не дают каких-либо преимуществ. Так, нет ощутимой разницы при использовании в современном интерьере двухпроводного и, например, четырехпроводного кабеля, тем более, что использование исполнительных устройств все равно потребует отдельной линии питания. Также не актуальна для домашней автоматики возможность подключения устройства в «горячем» режиме, если только это не ключ электронного замка. Использование же в качестве адреса устройства его идентификатора вместо установки фиксированного, регламентированного проектом, вообще сопряжено с определенными неудобствами наладки и ремонта сети, хотя разработчик и предлагает соответствующие алгоритмы самонастройки и адаптации, а также возможность установки с помощью внешних перемычек для ряда устройств дополнительного 4-х битного локального адреса. Пригодность платформы для отдельных ниш автоматизации вытекает из ее дешевизны, простоты применения, наличия в составе ряда востребованных датчиков, устройств сопряжения со стандартными интерфейсами, драйверов для распространенных операционных систем, а также наличием возможности расширения функционала за счет применения элементной базы общего назначения.
Сеть на базе протокола 1-Wire имеет централизованную архитектуру. Информационный обмен происходит под управлением центрального контроллера — «мастера», остальные сетевые устройства имеют статус «слэйв» (рис.3). В качестве контроллера сети может использоваться любое программируемое устройство, имеющее внешний интерфейс. Для согласования контроллеров с магистралью 1-Wire в составе программно-технических средств платформы имеются адаптеры и драйверы для проводных последовательных интерфейсов RS-232, RS-485, I2C, SPI, Ethernet, для параллельного интерфейса LPT, а также для Wi-Fi.
Рис.3. Конфигурация сети MicroLAN на базе протокола 1-Wire
- максимальная длина магистрали при использовании витой пары — до 300 м;
- максимальное количество абонентов на магистрали максимальной длины — до 250;
- скорость обмена по магистрали максимальной длины — до 16,3 кбит/c;
Для магистрали рекомендуется ипользовать стандартную витую телефонную пару CAT5. В случае использования стандартного телефонного провода с двумя парами вторую пару использовать для других целей не рекомендуется во избежание увеличения емкости линии, т.е. в случае подачи внешнего питания на устройства желателен отдельный кабель.
- фазу сброса, включающую импульс сброса от контроллера и ответный импульс подтверждения присутствия от абонента (абонентов);
- фазу выборки устройства, включающую команду его выборки (по коду, без кода, групповую, поиска) и его код, если командой он предусмотрен;
- фазу записи/чтения данных, включающую код команды и данные.
Рис.4. Циклограмма обмена данными
Логика всех устройств тактируется отрицательным фронтом сигналов контроллера как в режиме записи, так и в режиме чтения. Биты кодируются длительностью положительного импульса: «1» передается длинным импульсом, а «0» — коротким. В режиме записи все импульсы данных формируются контроллером. В режиме чтения контроллер формирует последовательность единиц, а абонент накладывает на них свою маску нулей (рис.5).
Рис.5. Тактирование и кодирование на физическом уровне
Архитектура ЗУ и регистров периферийных устройств платформы организована таким образом, что совокупность всех сетевых устройств может быть представлена как единая файловая система, что позволяет работать с сетью как с интегрированным носителем данных. Описание ее структуры приведено в AN114 1-Wire File Structure.
Контроллер для компьютера для подключения 1 wire датчиков
Технология достаточно старая и широко употребляемая
Изначально, выведена на рынок компанией Dallas — Все помнят таблетки для домофонов iButton- это оно
Устройство соединяется с контроллером по одному проводу (кроме общего) — отсюда название. Большое преимущество в том, что каждый чип имеет свой адрес, что позволяет термометры соединять просто параллельно
Я провел массу экспериментов с данным стандартом. Изначально, предполагая очень широко использовать его для управления Умным Домом
Спешу поделиться результатами:
Хуже всего, если для управления 1-wire шиной не использовать никаких специализированных контроллеров (подключение напрямую к PIN у Arduino устройств) — в этом случае, проблемы возникают уже при длине кабеля более 3-х метров
Для моих целей такое расстояние не подходило, поэтому я использовал I2C to 1-wire мост DS2482-100
Стоимость чипа на Aliexpress менее 100 руб, чип имеет аппаратный драйвер шины с режимом strong-pullup, что в разы увеличивает надежность работы системы.
Альтернативные решения, как правило, используют USB контроллеры шины 1-Wire на основе DS2490 но это подразумевает использование компьютера в составе контура управления. По опыту, надежность комплексного решения, включающего в себя PC, операционную систему, ПО, сетевую инфраструктуру, в любом случае ниже решения, локализованного в пределах одного контроллера. Поэтому ответственные задачи регулирования я реализовывал таким образом, что это регулирование происходит автономно, контроллером.
У себя я использую шлейф длиной около 150 м.
Термометры опрашиваются, относительно, устойчиво, что позволило предельно дешево и управляемо реализовать систему управления теплыми полами. Но сбои в считывании значений датчиков присутствуют. (В особенности, когда задействовано диммирование освещения или работает приточная вентиляция с фазовой регулировкой мощности нагревательного элемента)
Контроллер опрашивает датчики циклично, поэтому, единичные сбои не влияют на функционирование.
Если датчик не смог прочитаться 20 раз — нагревательный элемент отключается.
На практике, я рекомендовал бы, все же, не превышать длину шлейфа в 100м для более устойчивой работы.
Кроме термометров, я пробовал использовать самую разнообразную перефирию, вооружившись Datasheet — ами написав множество процедур для управления следующими чипами и устройствами на их базе:
Цифровой сенсор
В данном режиме реле будет включать или выключать нагрузку в зависимости от состояния цифрового датчика, который подключается через устройство по шине 1-wire на основе микросхемы DS2413. Если необходимо просто скопировать состояние какого-либо реле или включить или выключить нагрузку на заданный интервал времени в зависимости от состояния другого реле в системе.
Состояние реле включается или выключается в зависимости от уровня напряжения на входе датчика-вольтметра.
Используемый интерфейс
Обмен данными с iButton TM производится через интерфейс 1-Wire TM , также являющийся фирменной разработкой Dallas Semiconductor. Информация в этом интерфейсе передается по единственному проводнику, то есть шина данных – однопроводная. Питание iButton TM получают из этого же проводника, заряжая внутренний конденсатор в моменты, когда на шине нет обмена данными. Скорость обмена достаточна для обеспечения передачи данных в момент касания контактного устройства.
Схема организации сетей MicroLAN
Протокол интерфейса 1-Wire обеспечивает возможность работы с множеством iButton, подключенных параллельно к линии данных. Команды интерфейса позволяют определить ID всех iButton, подключенных в данный момент к линии и затем работать с конкретным прибором, переведя остальные в режим ожидания. Управление линией данных и выдачу команд производит ведущее устройство, в качестве которого может использоваться любой микроконтроллер или персональный компьютер (ПК). Для обеспечения целостности данных используется вычисление контрольных кодов, а также аппаратный промежуточный буфер в ОЗУ iButton?. Данные сначала записываются в этот буфер, затем ведущий проверяет их правильность, и только после этого выдает команду ведомому устройству — скопировать их из буфера в основную память.