DySprozin aka xjmjk
DySprozin aka xjmjk
423 просмотров2 комментариев

Репка на проводе: 1-wire в один клик

Введение
Довольно редко, но метко приходится использовать в проектах 1-wire термометры DS18B20. Они весьма дешевы, подключаются по одному проводу (не считая земли и питания), а главное — цифровые. То есть, просто выдают температуру в готовом виде без необходимости танцев с бубном над каким-нибудь АЦП с калибровкой.

Но если для использования этих датчиков на малинке достаточно прописать строчку в конфиге и перезагрузиться, то у Репки с этим всё не так очевидно: нужно пересобирать дерево устройств, он же Device Tree, далее для краткости DT. В целом, статья будет небольшой, на пару глав, но никто не уйдет обиженным :) И те, кто не боится пересобирать DT, и те, кто хочет просто «нажать одну кнопку». Правда последним придется использовать Ansible, но мы его уже обсуждали в прошлой статье, так что есть смысл изучить этот прекрасный инструмент автоматизации.

1. Что менять в DTB
С пересборкой DTB под свои нужды мы уже встречались в статье про подключение дисплея. По тому же образу и подобию вы можете добавить следующие куски кода в DTS-файле (я стандартно использовал sun50i-h5-repka-pi3-alt-1ghz.dts):

  1. Ищете строчку reg_vcc3v3: vcc3v3 {
  2. Вставляете перед ней блок
      onewire: onewire {
          compatible = "w1-gpio";
          pinctrl-names = "default";
          pinctrl-0 = <&w1_pa7_pins>;
          gpios = <&pio 0 7 0>; /* PA7 */
          status = "okay";
      };
  1. Ищете строчку &pio {
  2. Вставляете после нее
      w1_pa7_pins: w1-pa7-pins {
          pins = "PA7";
          function = "gpio_in";
      };

После пересборки DTB (опять же, см. статью про дисплей), нужно заменить файл /boot/sun50i-h5-repka-pi3.dtb (не забываем про бекап!) и перезагрузиться.

Вот и в принципе и всё. Хотите немного автоматизации?

2. Ansible — то же самое, но без боли и страданий
В прошлой статье мы достаточно подробно разобрали, кто такой ансибл и что с ним делать, очень советую ознакомиться, заодно будет повод накатить систему с нуля, чтобы точно всё заработало.

Итак, будем исходить из того, что у вас свежая прошивка на Репке, версия платы 1.3 (на других тоже должно работать). Так же предполагается, что у вас есть к ней ssh-доступ, а на компьютере установлен Ansible.

Теперь:

source ~/.venv/ansible/bin/activate
git clone https://git.1qq.su/repka-pi-pub/ansible-roles.git repka-ansible-roles

Далее заходим в repka-ansible-roles и там создаем файл hosts.yml

all:
  hosts:
    repka-pi:
      ansible_host: 192.168.100.151
      ansible_user: root
      ansible_ssh_pass: 123

Вместо 192.168.100.151 вставляете ip-адрес Репки.

Теперь выполняете:

ansible-playbook repka_1wire.yml -i hosts.yml

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

3. Подключаем, проверяем
Зайдите в Репку по ssh и выполните команду:

dmesg | grep wire

Если всё прошло гладко, то выдаст сообщение:

В данном случае мы переопределили пин gpio7 (PA7):

Почему именно его? В данном случае, как думается, выбор пина не особенно принципиален (главное, чтобы это был GPIO), но мне захотелось сохранить максимальную схожесть с мануалом для малинки (например, с сайта circuitbasics.com):

Теперь подключаем датчик в соответствии с этой схемой (резистор 5-10 кОм) и делаем в консоли

ls -l /sys/bus/w1/devices

Выдаст список девайсов. Нам нужен НЕ-мастер. В примере ниже это 28-0623915fdabf

Теперь пробуем прочитать температуру:

cat /sys/bus/w1/devices/28-0623915fdabf/w1_slave

Видно, что t=25500, или, если поделить на 1000, то 25.5 градусов.

Заключение
Как видно, подключение 1-wire к Репке не так уж и сложно. Надо просто привыкнуть к такой сущности, как «дерево устройств». Тем не менее, глупо отрицать удобство настройки в малинке и было бы здорово, если бы команда Репки рассмотрела возможность реализации «оверлеев», когда можно компилировать отдельные (опциональные) части дерева устройств и подключать их через какой-нибудь config.txt.


Комментарии (2)

Для участия в обсуждении вы должны быть авторизованным пользователем
anatoly_ryabov
anatoly_ryabov  

Пожелание по отдельным веткам дерева устройств понятно, будем работать в этом направлении.

DySprozin aka xjmjk
DySprozin aka xjmjk  

Спасибо, будем очень ждать!

Навигация

ВойтиРегистрацияТемы