Технология 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.
Прошивка устройств UNC0xx позволяет управляющему компьютеру считывать серийные номера подключаемых и отключаемых устройств 1-Wire, узнавать, какие устройства 1-Wire подключены в настоящий момент; считывать показания датчиков температуры (собственно температуру); считывать текущее состояние линий двухканального ключа и устанавливать состояние его линий, работающих на выход (управляющих внешними цепями). Кроме того, прошивка предусматривает возможность оперативного реагирования на некоторые события без участия управляющего компьютера. В качестве таких событий рассматриваются:
- появление (подключение) устройства 1-Wire (обычно это ключ-«таблетка»), при этом можно задать выполнение действий, закодированных в одном из расширенных регистров;
- переход показаний температуры заданного датчика через указанную верхнюю границу вверх или через указанную нижнюю границу вниз; при этом можно задать выполнение любых действий, предусмотренных кодами действий.
В любом случае, поскольку код действия может задавать выполнение расширенного регистра, а исполняемый расширенный регистр содержит коды действий, прибор можно заставить реагировать на любое из перечисленных событий любой последовательностью автономных действий, какую только можно задать средствами прошивки, и такие действия могут быть достаточно сложными. Так, если к устройству UNC0xx через шину 1-Wire присоединён считыватель ключей-«таблеток», а к выходным линиям подключены электромагнитный дверной замок и звуковой извещатель, то можно заставить устройство при появлении любого из «известных» ему ключей отключить питание электромагнита (то есть отпереть дверь) на три секунды (или на любое другое удобное вам время), причём в течение этого времени заставить звуковой извещатель издавать прерывистый сигнал, причём длительность сигналов и пауз между ними тоже можно задать практически произвольно. Однако «таблетки» можно использовать и более интересным способом, нежели простое открывание двери: поскольку на разные серийные номера можно «повесить» разные реакции, вы можете использовать связку ключей, подписанных или, например, оправленных в держатели разного цвета, для управления своей автоматизированной системой: например, для включения и выключения вентиляции, для смены каких-либо режимов и т.п. Простейший вариант автономной реакции на показания температуры — это включение и выключение устройств отопления и вентиляции, но можно, разумеется, придумать и более хитрые варианты. При этом ваша фантазия ограничена разве что количеством расширенных регистров (устройства UNC0xx имеют 48 таких регистров). Подробности можно найти в руководствах по эксплуатации устройств UNC001 и UNC01x.
Подчеркнём, что речь здесь идёт об автономной работе устройства UNC0xx. При наличии постоянно включённого управляющего компьютера (в том числе Raspberry Pi) можно реализовать сколь угодно сложную систему, использующую шину 1-Wire, в этом случае ограничений нет вообще никаких, кроме разве что проблемы алгоритмической неразрешимости :)