24 декабря 2013 г.

Подключение контроллера сети 1-wire (DS9490R) к Cubietruck. Первое устройство в сети 1-wire (ds2401).

Ну что, теперь можно раскрыть секрет - не просто так же покупался cubietruck. А покупался он для создания сети умного дома 1-wire. Что это такое рассказывать не буду, в интернете полно информации. Просто буду записывать некоторые не очевидные для меня, как чайника вещи. Итак, для начала подключим контроллер DS9490R к нашему cubietruck.
Вставляем контроллер в cubietruck.


  1. # dmesg  
  2. [  512.230242] The port change to OHCI now!  
  3. [  512.532997] usb 5-1: new full-speed USB device number 2 using sw-ohci  
  4. # apt-get install owfs  
  5. # lsusb  
  6. Bus 005 Device 003: ID 04fa:2490 Dallas Semiconductor DS1490F 2-in-1 Fob, 1-Wire adapter  
  7. # mkdir /mnt/1wire  
  8. # owfs -C -uall -m /mnt/1wire --allow_other  
  9. # ls -lah /mnt/1wire  
  10. total 4.0K  
  11. drwxr-xr-x 1 root root    8 Dec 24 06:15 .  
  12. drwxr-xr-x 4 root root 4.0K Dec 24 06:14 ..  
  13. drwxrwxrwx 1 root root    8 Dec 24 06:16 05.4AEC29CDBAAB  
  14. drwxrwxrwx 1 root root    8 Dec 24 06:16 10.67C6697351FF  
  15. drwxrwxrwx 1 root root    8 Dec 24 06:16 81.EE6F32000000  
  16. drwxr-xr-x 1 root root    8 Dec 24 06:15 alarm  
  17. drwxr-xr-x 1 root root    8 Dec 24 06:15 bus.0  
  18. drwxr-xr-x 1 root root    8 Dec 24 06:15 bus.1  
  19. drwxr-xr-x 1 root root    8 Dec 24 06:15 settings  
  20. drwxrwxrwx 1 root root    8 Dec 24 06:16 simultaneous  
  21. drwxr-xr-x 1 root root    8 Dec 24 06:15 statistics  
  22. drwxr-xr-x 1 root root   32 Dec 24 06:15 structure  
  23. drwxr-xr-x 1 root root    8 Dec 24 06:15 system  
  24. 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)
  1. blacklist ds9490r  
  2. blacklist ds2490  
  3. blacklist wire  


Редактируем файл /etc/owfs.conf
  1. # Sample configuration file for the OWFS suite for Debian GNU/Linux.  
  2. # This is the main OWFS configuration file. You should read the  
  3. # owfs.conf(5) manual page in order to understand the options listed  
  4. # here.  
  5. ######################## SOURCES ########################  
  6. # With this setup, any client (but owserver) uses owserver on the  
  7. # local machine...  
  8. ! server: server = localhost:4304  
  9. # ...and owserver uses the real hardware, by default fake devices  
  10. # This part must be changed on real installation  
  11. #server: FAKE = DS18S20,DS2405  
  12. # USB device: DS9490  
  13. server: usb = all  
  14. # Serial port: DS9097  
  15. #server: device = /dev/ttyS1  
  16. # owserver tcp address  
  17. #server: server = 192.168.10.1:3131  
  18. # random simulated device  
  19. #server: FAKE = DS18S20,DS2405  
  20. ######################### OWFS ##########################  
  21. mountpoint = /mnt/1wire  
  22. allow_other  
  23. ####################### OWHTTPD #########################  
  24. http: port = 2121  
  25. ####################### OWFTPD ##########################  
  26. ftp: port = 2120  
  27. ####################### OWSERVER ########################  
  28. server: port = localhost:4304  


Редактируем /etc/fuse.conf:
  1. # Set the maximum number of FUSE mounts allowed to non-root users.  
  2. # The default is 1000.  
  3. #  
  4. #mount_max = 1000    
  5.   
  6. # Allow non-root users to specify the 'allow_other' or 'allow_root'  
  7. # mount options.  
  8. #  
  9.   
  10. 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 смотрим здесь.


Подключаем (геркон замкнут - вот эти две коричневые цилиндрические штуки и есть магнит с герконом):
  1. /mnt/1wire# ls -l  
  2. total 0  
  3. drwxrwxrwx 1 root root  8 Dec 24 14:47 01.E890ED150000  
  4. drwxrwxrwx 1 root root  8 Dec 24 14:47 81.EE6F32000000  
  5. drwxr-xr-x 1 root root  8 Dec 24 10:12 bus.0  
  6. drwxr-xr-x 1 root root  8 Dec 24 10:12 settings  
  7. drwxr-xr-x 1 root root  8 Dec 24 10:12 statistics  
  8. drwxr-xr-x 1 root root 32 Dec 24 10:12 structure  
  9. drwxr-xr-x 1 root root  8 Dec 24 10:12 system  
  10. drwxr-xr-x 1 root root  8 Dec 24 10:12 uncached  
  11.   
  12. /mnt/1wire/01.E890ED150000# cat type  
  13. DS2401  
  14.   
  15. /mnt/1wire/01.E890ED150000# cat r_address  
  16. A9000015ED90E801  
  17.   
  18. /mnt/1wire/01.E890ED150000# cat id  
  19. E890ED150000  
Вот у нас и новый элемент сети 1-wire. r_address это и есть уникальный id ds2401, который по идее гарантирует уникальность микросхемы. Я брал в китайском интернет магазине, где-то слышал что они штампуют все под одну гребенку (надо будет поставить вторую ds2401 и проверить). Пробуем убрать магнит от геркона. Смотрим - элемент отсутствует. Вот вам и элементарная проверка на открытую дверь. Я пока не выбрал (может кто посоветует) систему, которая все эти данные собирает в базу, имеет веб-интерфейс и разные плюшки (например работа с tcp сервером 1-wire, jabber), пока в поиске. Но смысл понятен.
Обратите внимание, что появление датчика в сети 1wire может занять некоторое время (около 15 секунд, а может и больше).
ps. Почти все элементы покупались онлайн, могу поделиться ссылками.

Комментариев нет:

Отправить комментарий