Вставляем контроллер в cubietruck.
# dmesg [ 512.230242] The port change to OHCI now! [ 512.532997] usb 5-1: new full-speed USB device number 2 using sw-ohci # apt-get install owfs # lsusb Bus 005 Device 003: ID 04fa:2490 Dallas Semiconductor DS1490F 2-in-1 Fob, 1-Wire adapter # mkdir /mnt/1wire # owfs -C -uall -m /mnt/1wire --allow_other # ls -lah /mnt/1wire total 4.0K drwxr-xr-x 1 root root 8 Dec 24 06:15 . drwxr-xr-x 4 root root 4.0K Dec 24 06:14 .. drwxrwxrwx 1 root root 8 Dec 24 06:16 05.4AEC29CDBAAB drwxrwxrwx 1 root root 8 Dec 24 06:16 10.67C6697351FF drwxrwxrwx 1 root root 8 Dec 24 06:16 81.EE6F32000000 drwxr-xr-x 1 root root 8 Dec 24 06:15 alarm drwxr-xr-x 1 root root 8 Dec 24 06:15 bus.0 drwxr-xr-x 1 root root 8 Dec 24 06:15 bus.1 drwxr-xr-x 1 root root 8 Dec 24 06:15 settings drwxrwxrwx 1 root root 8 Dec 24 06:16 simultaneous drwxr-xr-x 1 root root 8 Dec 24 06:15 statistics drwxr-xr-x 1 root root 32 Dec 24 06:15 structure drwxr-xr-x 1 root root 8 Dec 24 06:15 system drwxr-xr-x 1 root root 8 Dec 24 06:15 uncached
Информация:
owfs - это программа, которая отображает сеть в виде файловой системы. То, что owfs совпадает с названием всего пакета - чистая случайность.
owhttpd - это программа, которая делает доступной сеть по HTTP протоколу (по-народному, через браузер)
И та и другая программы могу работать с мастером сети самостоятельно, но не вместе!
Чтобы owfs и owhttpd работали одновременно, нужно запустить owserver.
owserver -u -p 3000
Запускает сервер работы с сетью, -u значит физическое устройство USB типа DS9490R, и отвечает на запросы по 3000 порту.
owhttpd -s 3000 -p 3001
-s 3000 - порт, на котором запущено owserver
-p 3001 - порт, на котором owhttpd сам отвечает по протоколу HTTP
owfs -s 3000 /mnt/1wire/
-s 3000 понятно, дальше идет mount point, который является обязательным параметром
Пробуем зайти http://192.168.xx.xx:2121/
Добавим в /etc/modprobe.d/fbdev-blacklist.conf (чтобы не использовать модули ядра линукс, а брать из пакета owfs)
blacklist ds9490r blacklist ds2490 blacklist wire
Редактируем файл /etc/owfs.conf
# Sample configuration file for the OWFS suite for Debian GNU/Linux. # This is the main OWFS configuration file. You should read the # owfs.conf(5) manual page in order to understand the options listed # here. ######################## SOURCES ######################## # With this setup, any client (but owserver) uses owserver on the # local machine... ! server: server = localhost:4304 # ...and owserver uses the real hardware, by default fake devices # This part must be changed on real installation #server: FAKE = DS18S20,DS2405 # USB device: DS9490 server: usb = all # Serial port: DS9097 #server: device = /dev/ttyS1 # owserver tcp address #server: server = 192.168.10.1:3131 # random simulated device #server: FAKE = DS18S20,DS2405 ######################### OWFS ########################## mountpoint = /mnt/1wire allow_other ####################### OWHTTPD ######################### http: port = 2121 ####################### OWFTPD ########################## ftp: port = 2120 ####################### OWSERVER ######################## server: port = localhost:4304
Редактируем /etc/fuse.conf:
# Set the maximum number of FUSE mounts allowed to non-root users. # The default is 1000. # #mount_max = 1000 # Allow non-root users to specify the 'allow_other' or 'allow_root' # mount options. # user_allow_other
После этого монтировать можно командой # owfs. Хотя в прицнипе монтирование нам особо и не нужно ибо есть tcp owserver, монтировать датчики в файловую систему удобно для тестов. Поэтому процесс автомонтирования при загрузке рассматривать не будем (примеры скрипта можно найти в сети) update. или здесь.
Создание сети 1-wire.
Небольшой ликбез по поводу сети 1-wire для новичков как я (после моего месячного изучения урывками). Если профи увидят ошибки, прошу комментировать. Итак, сеть 1-wire - сеть на одной шине, компоненты которой подключаются последовательно. Компонентами могут выступать как уже готовые микросхемы с датчиками и так и микросхемы управления вводом\выводом (то есть для подключения дополнительных цифровых или аналоговых датчиков). В сети 1-wire по умолчанию всего два контакта - data и земля. В data передаются данные (как видно по названию), а также т.н. паразитное питание. То есть можно использовать всего два провода. Вначале я не очень понимал это принцип, поэтому накупил штук 10 ds2401 которые как раз от него и работают - сегодня будем тестировать сеть на них. Так вот, строить сеть на паразитном питании (питание идет с контроллера DS9490R) можно, но не нужно. :) Для пары датчиков и короткой шине можно использовать паразитное питание, а вот если шина длиной более 30 метров и датчиков много - ожидается просадка по напряжению, поэтому умные люди придумали (по ссылке много интересного про 1wire) и используют отдельное питание 5V, но не простое, а канал с повышенным напряжением. По ссылке прекрасно все описано. Я лишь дополню зачем это надо - 12 V в каждом модуле преобразуется стабилизатором в 5V, а 18V в 12V. Это сделано для того, чтобы даже при просадке напряжения в шине на компоненты гарантировано поступало 5V и на некоторые датчики 12V. Далее, сразу используем витую пару 5ой категории, чтобы не переделывать потом. Для коммутации также используем телефонные (rj11\12) коннекторы и внешние телефонные розетки.
Ну вот в принципе и все.
Делаем первое устройство сети 1-wire.
Сейчас мы будем делать устройство с паразитным питанием, потому что пока у меня нет нужной микросхемы 1-wire с внешним питанием. Тырим одну картинку по ссылке выше:
Итак, используем так:
светло-зеленый:data (3ий пин в контроллере)
зеленый:земля(GRND) (4ый пин в контроллере)
Обжимаем два провода, остальные пока не нужны. Обжато не очень, в следующий раз наверное по другому обожму. Но для теста пойдет.
Подключать мы будем устройство, которое выдает уникальный id (например, если устройство с определенным id доступно - дверь закрыта, а если не доступно - значит дверь открыта) - ds2401. Нагло тырим еще одну картинку с форума.
Второй конец я впаял в макет плату. Распиновку ds2401 смотрим здесь.
Подключаем (геркон замкнут - вот эти две коричневые цилиндрические штуки и есть магнит с герконом):
/mnt/1wire# ls -l total 0 drwxrwxrwx 1 root root 8 Dec 24 14:47 01.E890ED150000 drwxrwxrwx 1 root root 8 Dec 24 14:47 81.EE6F32000000 drwxr-xr-x 1 root root 8 Dec 24 10:12 bus.0 drwxr-xr-x 1 root root 8 Dec 24 10:12 settings drwxr-xr-x 1 root root 8 Dec 24 10:12 statistics drwxr-xr-x 1 root root 32 Dec 24 10:12 structure drwxr-xr-x 1 root root 8 Dec 24 10:12 system drwxr-xr-x 1 root root 8 Dec 24 10:12 uncached /mnt/1wire/01.E890ED150000# cat type DS2401 /mnt/1wire/01.E890ED150000# cat r_address A9000015ED90E801 /mnt/1wire/01.E890ED150000# cat id E890ED150000Вот у нас и новый элемент сети 1-wire. r_address это и есть уникальный id ds2401, который по идее гарантирует уникальность микросхемы. Я брал в китайском интернет магазине, где-то слышал что они штампуют все под одну гребенку (надо будет поставить вторую ds2401 и проверить). Пробуем убрать магнит от геркона. Смотрим - элемент отсутствует. Вот вам и элементарная проверка на открытую дверь. Я пока не выбрал (может кто посоветует) систему, которая все эти данные собирает в базу, имеет веб-интерфейс и разные плюшки (например работа с tcp сервером 1-wire, jabber), пока в поиске. Но смысл понятен.
Обратите внимание, что появление датчика в сети 1wire может занять некоторое время (около 15 секунд, а может и больше).
ps. Почти все элементы покупались онлайн, могу поделиться ссылками.