Skip to content

FreeBSD на armv7. Подключение датчиков dht11/dht22 и ds18b20

АквариумИдея подключить термометр к arm-платформе, да ещё и под управлением ОС FreeBSD появилась у меня в процессе автоматизации управления аквариумом. Не буду углубляться в причины выбора FreeBSD, тогда как выбор платформы мне видится очевидным большинству (невысокая стоимость, удобство разработки, привычное ПО, многообразие доступных датчиков, да и моду на SoC следует упомянуть). Собрав воедино Orange PI Zero, 4-хканальное реле на 250в и четыре розетки, написав ПО на python для управления ими по 7-дневному расписанию и визуализировав управляемые события с помощью веб-связки nginx + php-fpm я с удивлением осознал "... что это хорошо" (копирайт не указываю). Захотелось добавить рюшечек и цветочков. Отображение температуры воды в банке стало одной из таких рюшечек. Беда в том, что информация о том, как подключить разнообразные устройства к ПК под FreeBSD значительно глубже закопана и найти её сложнее, чем аналогичные примеры и даже уроки по подключению устройств к Linux Armbian и Raspbian.
Сложнее, но не невозможно. Итак...

Вам необходим следующий DHT-оверлей, назовём его, к примеру, sun8i-h3-w1-gpio.dtso:
CODE:
/dts-v1/; /plugin/; / {     compatible = "allwinner,sun8i-h3"; }; &pio {     w1_pins: w1_pins {         allwinner,pins = "PA13";         allwinner,function = "gpio_in"; #       allwinner,drive = <0>; #       allwinner,pull = <1>; // on     }; }; &{/} {     onewire@0 {         compatible = "w1-gpio";         pinctrl-names = "default";         pinctrl-0 = <&w1_pins>;         gpios = <&pio 0 13 0>; // PA13         status = "okay";     }; };

Далее, скомпилируем из этого исходника блоб оверлея:
CODE:
/usr/bin/dtc -@ -I dts -O dtb -o ./sun8i-h3-w1-gpio.dtbo ./sun8i-h3-w1-gpio.dtso

Положим его в папку с оверлеями /boot/dtb/overlays/ и добавим в его в загрузчик /boot/loader.conf (тип файла .dtbo можно не писать). Также добавим необходимые модули:
CODE:
fdt_overlays="<ваши,другие,оверлеи,>sun8i-h3-w1-gpio" ow_load="YES" ow_temp_load="YES" owc_load="YES"

Здесь уместны несколько замечаний:
  • Если у Вас не h3, а h2-plus, файл назовём sun8i-h2-plus-w1-gpio.dtso, и заменим значение первой строки compatible на allwinner,sun8i-h2-plus. Это важно!
  • Параметр gpios = <&pio 0 13 0> определяет пин, на который мы назначаем роль onewire шины, по следующим правилам: первое число (0) означает вторую букву (0=A, 1=B и т.д.) в названии пина, т.е. PAnn, а второе номер пина - выходит PA13. Таким образом, <&pio 3 14 0> означает PD14;
  • Если у Вас на шине изменения, например, Вы подключили еще один градусник (для второй банки), то следует перезагрузить модуль контроллера owc для актуализации изменений: kldunload owc; kldload owc.
Можно перегружаться!
Осталось подключить сам термометр: чёрный - на пин GND, красный - на пин VCC (у меня на +5в), а жёлтый - на назначенный нами пин onewire. Не забываем про подтягивающий шину к питанию резистор 4.7кОм (у меня 10кОм). К одной шине параллельно можно подключить несколько устройств. Они опрашиваются системой по-умолчанию раз в 10сек и проверить их работу можно командой: sysctl dev.ow_temp.

Не составит никакого труда аналогичным образом подключить датчик температуры и влажности dht11/dht22. DHT-оверлей для этого случая sun8i-h3-dht11-gpio.dtso ещё короче:
CODE:
/dts-v1/; /plugin/; / {     compatible = "allwinner,sun8i-h3"; }; &{/} {     dht0 {         compatible = "dht11";         gpios = <&pio 0 14 0>; // PA14     }; };

Сборка бинарника:
CODE:
/usr/bin/dtc -@ -I dts -O dtb -o ./sun8i-h3-dht11-gpio.dtbo ./sun8i-h3-dht11-gpio.dtso

Модуль ядра и оверлей в /boot/loader.conf:
CODE:
fdt_overlays="<ваши,другие,оверлеи,>sun8i-h3-dht11-gpio" gpioths_load="YES"

Компилируем блоб, кладём на место, правим "loader.conf" и перегружаемся.
Подключаем тремя проводками, про подтягивающий резистор тоже не забываем, если только он уже не распаян, как в моём случае, с датчиком на плате.
Проверить работу датчика можно так: sysctl dev.gpioths.

Да, чтобы совсем уж было просто, вот ссылка на проект allwinner-fdt-overlays на gitlab.com. Здесь можно найти пару-другую оверлеев.

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.
E-Mail addresses will not be displayed and will only be used for E-Mail notifications.
To leave a comment you must approve it via e-mail, which will be sent to your address after submission.
Опции формы