В предыдущей статье мы считывали показания датчика DS18B20 без использования драйверов, написав собственную программу на C++. В этой статье мы попробуем настроить 1-Wire драйвер и, с его помощью, получить температуру с DS18B20, подключенного к Orange Pi PC.
Операционная система Armbian 5.35 (Ubuntu 16.04) имеет драйвер для работы с 1-Wire устройствами, а именно с датчиком температуры DS18B20. По умолчанию этот драйвер отключён и по этому нужно его настроить.
О наличии этого драйвера в других операционных системах (не Armbian) я не знаю, не проверял.
Настройка драйвера 1-Wire
- Для начала сделайте резервную копию script.bin, чтобы, в случае чего, вы смогли вернуть обратно все настройки:
sudo cp /boot/script.bin /boot/script.bak
- Преобразуйте бинарный файл script.bin в редактируемый файл fex:
bin2fex /boot/script.bin /boot/script.fex
- Теперь отредактируйте файл script.fex с помощью утилиты nano:
nano /boot/script.fex
- Найдите раздел [w1_para] и отредактируйте строки w1_used и gpio:
[w1_para] w1_used = 1 gpio = 20
где gpio — это номер пина по колонке BCM. Чтобы узнать, где и какой пин находится, выполняем gpio readall. В моём случае BCM=20, т.е. 37-й физический пин.

- Сохраните и закройте файл:
Ctrl X, Y (Yes), Enter
- Преобразуйте измененный script.fex в script.bin:
sudo fex2bin /boot/script.fex /boot/script.bin
- Отредактируйте файл /etc/modules с помощью утилиты nano:
nano /etc/modules
- Добавьте следующие строки:
w1-sunxi w1-gpio w1-therm
- Сохраните и закройте файл:
Ctrl X, Y (Yes), Enter
- Перезагрузите систему:
reboot
Схема подключения датчика DS18B20 к Orange Pi PC
Считывание температуры с датчика DS18B20
После перезагрузки выполняем команду:
dmesg | grep -E 'w1|wire'
вы должны получить примерно такой результат:
root@orangepipc:~# dmesg | grep -E 'w1|wire' [ 5.375196] W1_SUNXI: Added w1-gpio on GPIO-20 [ 5.379420] Driver for 1-wire Dallas network protocol.
Это означает, что драйвер 1-wire настроен на 20-й пин.
Чтобы увидеть все подключённые датчики выполняем:
ls -al /sys/bus/w1/devices
У меня два датчика, 28-000005464e04 и 28-00000547cabb:
root@orangepipc:~# ls -al /sys/bus/w1/devices total 0 drwxr-xr-x 2 root root 0 Dec 3 19:59 . drwxr-xr-x 4 root root 0 Dec 3 19:59 .. lrwxrwxrwx 1 root root 0 Dec 3 20:02 28-000005464e04 -> ../../../devices/w1_bus_master1/28-000005464e04 lrwxrwxrwx 1 root root 0 Dec 3 20:02 28-00000547cabb -> ../../../devices/w1_bus_master1/28-00000547cabb lrwxrwxrwx 1 root root 0 Dec 3 19:59 w1_bus_master1 -> ../../../devices/w1_bus_master1 root@orangepipc:~#
Температура и crc записаны в файле w1_slave каждого датчика и, чтобы узнать её, выводим на экран содержимое этого файла:
cat /sys/bus/w1/devices/28-000005464e04/w1_slave
результат:
61 01 4b 46 7f ff 0f 10 02 : crc=02 YES 61 01 4b 46 7f ff 0f 10 02 t=22062


