Подключение датчиков температуры к Octoprint
Цели:
Вывести температуру с датчиков температуры DS1820 в Octoprint, используя Orange PI.
Что потребуется:
- Датчики температуры DS1820, например такие https://qps.ru/6XdbW
- Установленный Octoprint на Orange PI (Например https://is.gd/Vvaclx), доступ по ssh.
- Резистор 4.7 кОм.
- Опционально: Макетная плата.
- Опционально: Паяльник, припой, флюс, изолента, термоусадка.
Начнем:
1. Подсоединяем датчики температуры к резистору 4.7 кОм и Orange PI, в соответствии с рисунком:
Для удобства коммутации я использовал небольшую макетную плату:
2. Приступаем к настройке. Заходим по ssh на наш одноплатный компьютер под пользователем root
3. Если уже реализовано управление питанием принтера через Octoprint статья в Вики то переходим сразу к пункту 7.
4. Переходим в домашнюю директорию пользователя, под которым работает Ocroprint. Для пользователей нашего установщика - пользователь octo).
cd /home/octo
5. Скачиваем библиотеку для управления пинами
git clone https://github.com/zhaolei/WiringOP.git -b h3 && cd WiringOP
6. Устанавливаем библиотеку
chmod +x ./build sudo ./build
7. Проверяем работоспособность
cd .. gpio readall
Должна появиться подобная таблица
+-----+-----+----------+------+---+-Orange Pi+---+---+------+---------+-----+--+ | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM | +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+ | | | 3.3v | | | 1 || 2 | | | 5v | | | | 12 | 8 | SDA.0 | ALT3 | 0 | 3 || 4 | | | 5V | | | | 11 | 9 | SCL.0 | ALT3 | 0 | 5 || 6 | | | 0v | | | | 6 | 7 | GPIO.7 | ALT3 | 0 | 7 || 8 | 0 | ALT3 | TxD3 | 15 | 13 | | | | 0v | | | 9 || 10 | 0 | ALT3 | RxD3 | 16 | 14 | | 1 | 0 | RxD2 | ALT3 | 0 | 11 || 12 | 0 | ALT3 | GPIO.1 | 1 | 110 | | 0 | 2 | TxD2 | ALT3 | 0 | 13 || 14 | | | 0v | | | | 3 | 3 | CTS2 | ALT3 | 0 | 15 || 16 | 0 | ALT3 | GPIO.4 | 4 | 68 | | | | 3.3v | | | 17 || 18 | 0 | ALT3 | GPIO.5 | 5 | 71 | | 64 | 12 | MOSI | ALT3 | 0 | 19 || 20 | | | 0v | | | | 65 | 13 | MISO | ALT3 | 0 | 21 || 22 | 0 | ALT3 | RTS2 | 6 | 2 | | 66 | 14 | SCLK | ALT3 | 0 | 23 || 24 | 0 | ALT3 | CE0 | 10 | 67 | | | | 0v | | | 25 || 26 | 0 | ALT3 | GPIO.11 | 11 | 21 | | 19 | 30 | SDA.1 | ALT3 | 0 | 27 || 28 | 0 | ALT3 | SCL.1 | 31 | 18 | | 7 | 21 | GPIO.21 | ALT3 | 0 | 29 || 30 | | | 0v | | | | 8 | 22 | GPIO.22 | ALT3 | 0 | 31 || 32 | 0 | ALT3 | RTS1 | 26 | 200 | | 9 | 23 | GPIO.23 | ALT3 | 0 | 33 || 34 | | | 0v | | | | 10 | 24 | GPIO.24 | ALT3 | 0 | 35 || 36 | 0 | ALT3 | CTS1 | 27 | 201 | | 20 | 25 | GPIO.25 | ALT3 | 0 | 37 || 38 | 0 | ALT3 | TxD1 | 28 | 198 | | | | 0v | | | 39 || 40 | 0 | ALT3 | RxD1 | 29 | 199 | +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+ | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM | +-----+-----+----------+------+---+-Orange Pi+---+------+----------+-----+-----+
8. Редактируем файл armbianEnv.txt
nano /boot/armbianEnv.txt
9. Прописываем в файле:
overlays=w1-gpio param_w1_pin=PA9 param_w1_pin_int_pullup=0
Строка param_w1_pin=PA9 указывает, что датчики подключены к пину PA9, который соответствует физическому пину 33 (см. таблицу выше).
Строка param_w1_pin_int_pullup=0 указывает, что используется резистор, если =1, значит резистор не используется.
10. Сохраняем и закрываем файл
Ctrl + O Enter Ctrl + X
11. Редактируем файл modules.conf:
nano /etc/modules-load.d/modules.conf
12. Прописываем в файле:
w1-gpio w1-therm
13. Сохраняем и закрываем файл
Ctrl + O Enter Ctrl + X
14. Перезагружаем систему:
reboot
15. После перезагрузки опять заходим по ssh под пользователем root и выполняем команду:
dmesg | grep -E 'w1|wire'
16. Если все сделали правильно, то должны увидеть примерно такое сообщение:
root@orangepilite:~# dmesg | grep -E 'w1|wire' [ 4.436632] Driver for 1-wire Dallas network protocol. [ 4.443777] gpio-9 (onewire@0): enforced open drain please flag it properly in DT/ACPI DSDT/board file [ 4.491932] w1_master_driver w1_bus_master1: Attaching one wire slave 28-03139779d52e crc 05 [ 4.584033] w1_master_driver w1_bus_master1: Attaching one wire slave 28-051680b9b3ff crc 50
17. Копируем номер между slave и crс - это своего рода серийный номер датчика, он пригодится нам дальше
В моем случае это: 28-03139779d52e и 28-051680b9b3ff
18. Для того, чтобы проверить температуру конкретного датчика вводим команду:
cat /sys/bus/w1/devices/серийный номер датчика/w1_slave
19. Если все ввели правильно, то должны увидеть примерно такое сообщение:
root@orangepilite:~# cat /sys/bus/w1/devices/28-051680b9b3ff/w1_slave 87 01 4b 46 7f ff 0c 10 b7 : crc=b7 YES 87 01 4b 46 7f ff 0c 10 b7 t=24437
t=24437 - это и есть температура без разделительного знака, т.е. по факту это 24,437 градусов Цельсия
20. Устанавливаем в Octoprint плагин Enclosure Plugin
21. Заходим в настройки плагина
22. Можем написать свое название датчика в строке Label
23. Input Type и Sensor Type устанавливаем как на картинке выше
24. В строке Sensor Pin указываем номер пина, как в строке 9
25. В строке DS18B20 Serial указываем серийный номер вашего датчика из строки 17
26. Устанавливаем галку напротив Show temperature on navbar и сохраняем
27. Таким образом можно добавить несколько датчиков, я добавил два.
28. Если все сделали правильно, то в верхнем правом углу появится иконка плагина и по нажатию на нее открывается список датчиков с фактической температурой:
Спасибо за внимание!