Подключение DS18B20 и iButton по шине 1-Wire к MR3220
Модули прошивки
Для того, что-бы можно было получить шину 1-Wire на любом GPIO роутера необходимо загрузить несколько модулей ядра – wire, w1_therm, w1-gpio, w1-gpio-custom. Первые три модуля загрузятся автоматически, а для вызова загрузки четвётрого с нужными параметрами лучше всего создать фаил /etc/modules.d/59-w1-gpio-custom, содержащий строку:
w1-gpio-custom bus0=0,7,0
В данном примере bus0=0 означает, что необходимо создать новую шину 1-Wire (их может быть несколько), а число 7 указывает номер GPIO на который будут подключены датчики.
После подключения датчиков и перезагрузки роутера температуру с них можно получить командой:
awk -F= '/t=/ {printf "%.02f\n", $2/1000}' /sys/bus/w1/drivers/w1_slave_driver/*/w1_slave
Фото
В TP-Link MR3220 для экспериментов с 1-Wire лучше и проще всего взять свободный gpio7 – он никуда не подключен.
Напряжение 3,3V с TTL колодки консольного порта подаётся через резистор 3k на gpio7, делается так называемая “подтяжка”, pull-up.
Датчик температуры можно подключить как по двум проводам (data + gnd), так и по трём (data, vcc, gnd). Я всегда предпочитаю трёх-проводное подключение – Dallas-ы меньше глючат.
Примерно так выглядит тестовый стенд. В точку соединения gpio7 и резистора, помимо датчиков температуры DS18B20 можно подключать и ключи iButton.