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

Меню

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

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

Raspberry Pi

Каталог схем

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

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

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

Форум

Канал YouTube

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


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

Наш опрос
Как Вы узнали об этом сайте?
Всего ответов: 524

Ссылки




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





.
Статистика

Онлайн всего: 13
Гостей: 13
Пользователей: 0

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

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


BMP085

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

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

 

Шина I2C Raspberry Pi

Рис.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.

 

Выводы GPIO I2C Raspberry Pi

Рис.2

 

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

sudo nano /etc/webiopi/config

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

bmp = BMP085 (рис.3)

 

Putty I2C Raspberry Pi

Рис.3

 

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

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

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

 

Монитор I2C Raspberry Pi

Рис.4

 

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

 

Python I2C Raspberry Pi

Рис.5

 

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

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

 

HTML I2C Raspberry Pi

 

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

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

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

 

Конфигурация I2C Raspberry Pi

Рис.7

 

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

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

 

Вывод данных I2C Raspberry Pi

Рис.8

 

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

 

Web интерфейс I2C Raspberry Pi

Рис.9

 


 

Скрипты JavaScript, Python

 

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




Категория: | Просмотров: 5732 | Добавил: 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 © 2017
Сайт управляется системой uCoz