Каталог

Связь с однопроводными устройствами

Протокол One-Wire - это протокол шины, который, как следует из названия, использует один провод для передачи данных между устройствами. Это позволяет контроллерам и процессорам, таким как Omega2, легко взаимодействовать с периферийными устройствами, такими как:

  • Датчики температуры, влажности и т.п.
  • Программируемые чипы ввода/вывода
  • Небольшие реле

Протокол One-Wire

One Wire аналогичен протоколу I2C (который иногда называют TWI - двухпроводным интерфейсом). Один провод имеет более низкую скорость передачи данных чем I2C, но это компенсируется большей дальностью.

Протокол соответствует архитектуре «ведущий-ведомый», где каждая шина допускает одного ведущего, в данном случае Omega, и множество ведомых устройств. Каждый тип устройства имеет свой уникальный однобайтовый (8-битный) идентификатор, например, 0x8F. Каждое устройство, в свою очередь, имеет свой собственный уникальный 8-байтовый (64-битный) серийный номер, который включает в себя байт для описания типа устройства, известного как код семейства, как наименее значимый байт (Least Significant Byte - LSB).

Пример серийного номера One-Wire устройства показан ниже:

one wire пример

One-Wire также называют 1W, 1-Wire, W1 и т. д.

Omega и One-Wire

Взаимодействие Omega с устройствами One-Wire немного отличается от устройств I2C, SPI и Serial, но вы увидите, что это не имеет большого значения. Поскольку на Omega нет выделенного аппаратного контроллера One-Wire, ваше устройство One-Wire может быть подключено к любому GPIO. Затем мы зарегистрируем ведущего One-Wire в Linux, связанного с выбранным GPIO, который позволит нам взаимодействовать с ведомыми One-Wire устройствами.

Обратите внимание, что прошивка должна быть b151 или выше!

Подключение оборудования

One-Wire устройства будут имеют доступных разъема:

  • Vcc (обычно 3,3 В)
  • GND
  • Data line (Линия данных)

Посмотрите на таблицу данных вашего конкретного датчика, чтобы определить контакты и определить рекомендуемое напряжение.

Сделайте следующие подключения к вашей Omega:

one wire подключения

Обратите внимание, что установить эту связь очень просто, если у вас есть Expansion, Power или Arduino Dock, так как все они предоставляют GPIO Omega.

Большинство GPIO работают, но пока давайте использовать GPIO19. Для некоторых One-Wire устройств требуется нагрузочный резистор на линии передачи данных. Например, для популярного датчика температуры DS18B20 для правильной работы требуется нагрузочный резистор 4,7 кОм. Некоторые One-Wire устройства имеют встроенные нагрузочные резисторы. Разные устройства могут требовать разные значения сопротивления.

В этом случае нагрузочный резистор является соединением между линией данных и линией напряжения. Когда линия данных неактивна, нагрузочный резистор будет «тянуть» сигнал до логического уровня. Затем, когда линия данных становится активной, она отменяет «подтягивание». По сути, это гарантирует, что логический уровень всегда действителен.

Регистрация One-Wire ведущего 

Нам нужно будет сообщить нашей операционной системе Linux, что мы намерены действовать как One-Wire ведущее устройство на GPIO19. Итак, давайте запустим следующую команду:

insmod w1-gpio-custom bus0 = 0,19,0

Эта команда выполняет следующие действия:

  • Говорит Linux загрузить модуль ядра w1-gpio-custom, который позволит Omega выступать в роли ведущего One-Wire устройства
  • Определяет, что это будет bus0
  • 0,19,0 означает:
    • Используется шина № 0
    • Используется GPIO19 в качестве вывода данных для связи с One-Wire устройствами
    • Последний 0 указывает, что не устанавливается вывод данных в открытом режиме

Если эта команда выполнена успешно, станет доступна следующая папка:

/SYS/devices/w1_bus_master1

Загляните в этот каталог, это будет наш One-Wire командный центр!

Удаление ведущего One-Wire устройства

Если вы закончили использовать One-Wire устройство и хотели бы вернуть GPIO, вы можете отключить его, выполнив следующую команду:

rmmod w1-gpio-custom

Поиск ведомых One-Wire устройств

Теперь давайте использовать новый каталог /sys/devices/w1_bus_master1, чтобы найти наши ведомые устройства.

Сначала давайте проверим, есть ли вообще какие-либо ведомые устройства:

cat/sys/devices/w1_bus_master1/w1_master_slave_count

На выходе будет число, которое сообщит нам, сколько подчиненных устройств подключено:

  • Если 1, у вас уже есть подключенное устройство, и вы готовы к работе.
  • Если вы видите 0, включите ваше устройство.
    • Главный модуль ядра шины One-Wire сканирует вывод данных каждые 10 секунд на наличие новых устройств, поэтому подождите немного и попробуйте снова

Поиск устройства

Если проверка подсчета ведомых устройств показала 1, значит устройство обнаружено. Запустите ls/sys/devices/w1_bus_master1, и вы должны увидеть каталог, который выглядит примерно так: 28-000123456789. Это каталог ведомого устройства, и он основан на уникальном серийном номере.

Обратите внимание, что у каждого устройства будет свой серийный номер, поэтому ваш может выглядеть немного по-другому. Это немного затрудняет программное использование One-Wire устройств, но есть решение!

В результате вызова следующей команды:

cat/sys/devices/w1_bus_master1/w1_master_slaves

выведется список (с разделителями новой строки) серийных номеров всех подключенных One-Wire устройств!

Считывание One-Wire устройства

Для считывания подключенного One-Wire устройства, выполните:

cat/sys/devices/w1_bus_master1//w1_slave

где - серийный номер вашего One-Wire устройства.

Используя датчик температуры DS18B20 из раздела выше, команда будет:

cat/sys/devices/w1_bus_master1/28-000123456789/w1_slave

На выходе будет что-то вроде:

b1 01 4b 46 7f ff 0c 10 d8: crc = d8 YES

b1 01 4b 46 7f ff 0c 10 d8 t = 27062

Где конечное значение t = 27062 означает, что температура составляет 27,062 ˚C.

Чтобы обрезать и отформатировать вывод, чтобы возвращалась только температура:

root@Omega-2970:/# awk -F= ’/t=/ {printf "%.03f ", $2/1000} /sys/devices/w1_bus_master1/28-000123456789/w1_slave

27.062

 

footer shadow
Контакты

г. Москва, Пятницкое ш. д. 18, пав. 566

zakaz@compacttool.ru

8-495-752-55-22

compacttool logoadaptive site

accepted payment systems

Информация представленная на данном информационном ресурсе преследует исключительно рекламные цели и не является договором-офертой !

© Все права защищены 2015 - 2024г https://compacttool.ru