Пятница, 02.12.2016, 20:01
| RSS
Поиск
Главная |
Защита, контроль, управление
Форма входа
Логин:
Пароль:

Меню

Авторские проекты

Авторский блог

Raspberry Pi

Каталог схем

Полезная информация

Обратная связь

Каталог сайтов

Форум

Канал YouTube


Сузуки Клуб Россия

Календарь
«  Сентябрь 2015  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
282930

Наш опрос
Вы проживаете:
Всего ответов: 688

Ссылки




Яндекс.Метрика







.
Статистика

Онлайн всего: 7
Гостей: 4
Пользователей: 3
ppwwdd, Admin, Николай

Raspberry Pi для домашней автоматизации. Шина I2C

Raspberry Pi для домашней автоматизации. Шина I2C


В рассматриваемой системе домашней автоматизации  в основном применяются удаленные контроллеры, подключаемые по последовательному порту RS485 через преобразователь интерфейсов UART/RS485 или USB/RS485 к серверу Raspberry Pi. Вместе с тем Raspberry Pi имеет довольно приличный набор собственных портов GPIO (особенно в версии В+), позволяющих подключать различные устройства без дополнительных контроллеров. В качестве примера можно привести использование портов GPIO в режиме дискретных входов и выходов, который  был рассмотрен ранее в одной из предыдущих публикаций.

Порты  GPIO так же можно использовать и для организации различных интерфейсов – UART, I2C, SPI, 1-wire. Поэтому сегодня познакомимся, как подключить к Raspberry Pi датчик атмосферного давления ВМР085 (рис.1) по шине I2C с помощью фреймворка WebIOPi, который является «движком» нашей системы домашней автоматизации.

 

Рис.1

 

До этого при работе с портами GPIO мы обходились только средствами HTML и JavaScript. Но для работы с шиной I2C необходимо задействовать ещё  одну составляющую WebIOPi – язык программирования Python, на котором будет написан скрипт для работы с датчиком ВМР085.

Принцип взаимодействия JavaScript и Python в WebIOPi состоит в том, что HTML-страница посредством JavaScript выполняет запрос к макросу (подпрограмме), написанной на Python, а Python в свою очередь возвращает на HTML-страницу полученные данные для их визуализации.

Рассмотрим подключение датчика ВМР085 к Raspberry Pi по шине I2C. Шина I2Cсостоит из двух линий – линии передачи данных и линии синхронизации. В Raspberry Pi это соответственно выводы SDA и SCL разъема портов GPIO. Так же необходимо запитать датчик напряжением +3,3В (выводы 3,3V Power и Ground разъема). Общая схема подключения датчика к Raspberry Pi приведена на рис.2.

 

Рис.2

 

Выполним настройки конфигурационного файла config для работы с датчиком ВМР085. Открываем файл командой:

sudo nano /etc/webiopi/config

и в разделе [DEVICES] прописываем:

bmp = BMP085 (рис.3)

 

Рис.3

 

Сохраняем изменения в конфигурационном файле (Ctrl+O/Enter), перезапускаем WebIOPi (sudo /etc/init.d/webiopi restart) и вводим в браузере адрес встроенного в WebIOPi монитора девайсов :

http://192.168.1.8:8000/app/devices-monitor.html

Если датчик исправен и подключен правильно, то мы увидим в браузере показания температуры в градусах и атмосферного давления в гектопаскалях (рис.4).

 

Рис.4

 

Убедившись, что все подключено правильно и в мониторе девайсов выводятся данные, можно приступать к написанию собственного скрипта на Python и подключения его к HTML-странице (рис.5):

 

Рис.5

 

Работа скрипта описана в комментариях. Скрипт необходимо сохранить под именем script.py и скопировать в папку /home/pi/myproject/python

Далее напишем код для HTML и JavaScript, который вызывает макросы со скрипта script.py и выводит полученные значения давления и температуры на HTML-страницу (рис.6).

 

 

Сохраняем страницу под именем index.html и копируем ее в папку /home/pi/myproject/html

Затем необходимо снова открыть конфигурационный файл config и в разделе [SCRIPTS] прописать путь к скрипту Python:

myscript = /home/pi /myproject/python/script.py (рис.7):

 

Рис.7

 

Сохраняем изменения в конфигурационном файле (Ctrl+O/Enter), перезапускаем WebIOPi (sudo /etc/init.d/webiopi restartи вводим в браузере адрес http://192.168.1.8:8000/index.html

 После загрузки страницы мы должны получить данные давления и температуры с датчика BMP085. Обратите внимание, что значение температуры округлено до десятых долей градуса, а значение давления до целых, причем давление выводится уже не в гектопаскалях, а в более привычных для нас миллиметрах ртутного столба (рис.8).

 

Рис.8

 

Рассмотренный код JavaScript можно добавить на любую HTML страницу системы домашней автоматизации. На рис.9 показан пример получения данных с датчика BMP085 на web-странице шестиканального контроллера температуры и влажности. В этом примере HTML страница одновременно работает как с последовательным портом для связи с контроллером, собирающих показания температуры и влажности с шести точек контроля, так и с датчиком атмосферного давления BMP085 (нижняя строка таблицы).

 

Рис.9

 


 

Скрипты JavaScript, Python

 

Содержание всех статей сайта по теме Raspberry Pi




Категория: | Просмотров: 4451 | Добавил: Admin | Теги: | Рейтинг: 5.0/1 |
Всего комментариев: 9


8  
Здравствуйте.
Можно ли 2 датчика  ВМР085 подключить???
Если да А как??  по умолчанию адрес 77 эта нам ясно а как быт если хотим несколько ВМР085 подключить???

6  
Здравствуйте.

Есть вопрос как одновременно запускат несколко  скрипта ???
Вед они все лежать в папке /home/pi/myproject/python и называня скрипта script.py

0
7  
А где Вы видите "несколько скриптов"?
Здесь несколько макросов, которые находятся в одном скрипте script.py.
В папке python конечно может быть несколько скриптом, но они все будут иметь разное имя - например, script2.py

0
9  
А что мешает назвать скрипты разными именами smile

0
5  
Сейчас уже реально работают на шине I2C датчик давления и часы реального времени, на шине 1-wire - два датчика DS18B20, UART (USB) с контроллером радиомодуля и контроллером температуры и влажности. Плюс ко всему выводятся графики давления и температуры.

1  
Спасибо. Но хотел бы уточнить одну "мелочь". Вы пишите:
Цитата
Python, на котором будет написан скрипт для работы с датчиком ВМР085
Скрипт, макрос подразумевают режим интерпретации, а не компиляции. Неужели такой быстрый процессор и такая "параллельная" ОС, что успевают обрабатываться как системные функции ОС, драйвера встроенных девайсов (USB, Sound, video, ethernet), так еще и скрипты и макросы интерпретировать
Цитата
для организации различных интерфейсов – UARTI2CSPI1-wire
У меня это как-то не укладывается в голове. Прокомментируйте, пожалуйста. И пробовали Вы реально задействовать все перечисленные Вами интерфейсы вместе? Хочется представлять себе "нагрузочную" способность малины.

0
2  
Python действительно интерпретируемый язык. Насколько сильно выполняемые на нем макросы "грузят" систему, мне сказать сложно. Могу только отметить, что сейчас в моем сервере реально задействованы интерфейсы UART и I2C, все работает без проблем. В ближайшее время попробую добавить по 1-wire датчик DS18B20. В перспективе - SPI, как раз есть в наличии трансивер nRF24L01с таким интерфейсом
С другой стороны я не вижу серьезных предпосылок для чрезмерной нагрузки системы, ведь макросы Python в моем примере вызываются с периодом в 5 секунд.

И сразу поясню, почему я дополнительно начал использовать встроенные интерфейсы Raspberry. Далеко не каждому нужна "распределенная система"(т.е с использованием удаленных контроллеров), особенно при автоматизации небольшого дома или квартиры. Кроме того, многих отпугивает необходимость изготовлять дополнительные контроллеры. Намного проще подключить сразу к портам Raspberry нужный датчик или релейный модуль.

Так что рассмотрев ранее различные контроллеры для распределенной системы, сейчас я хочу написать несколько статей и по использованию внутренних ресурсов Raspberry. Надеюсь что это послужит популяризации системы

3  
Проблема не в том как часто вызываются макросы, а в том, что когда они вызваны, как хорошо делают своё дело. Ведь все перечисленные Вами интерфейсы времязависимы. Может макрос просто вызывает уже скомпилированный код, встроенный в Питон, который делает за нас все необходимые "ногодрыги"?
Боюсь, что бы не получилось как с ардуино - по отдельности встроенные примеры работают, а если запустить сразу два, а тем паче три примера, то скорее всего работать не будет. А когда уже "настроился" и "затарился", то очень чувствуешь себя обманутым.

0
4  
Так сейчас и работают два "примера" UART и I2C smile
Скоро ещё добавлю 1-wire, тогда посмотрим результат





T2M © 2016
Сайт управляется системой uCoz