Пятница, 27.12.2024, 22:31
| RSS
Поиск
Главная |
Защита, контроль, управление
Форма входа

Меню

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

Статьи

Raspberry Pi

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

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

Ссылки

Форум

Чат

Канал YouTube

Группа в Facebook


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

Наш опрос

Ссылки


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





.
Статистика

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

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

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

Наш канал в YouTube


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




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


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

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

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

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

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

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

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

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

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

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

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

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

10 DrVicX  
1. Аппаратная платформа Raspbery Pi позволяет запустить ОС Linux ARM x64;

2. Интерпретатор Python потребляет НЕ настолько много ресурсов чтобы вешать устройство, на котором уже успешно работает Linux кроме того он постоянно НЕ запущен, а запускается только при выполнении скрипта;

3. На самом деле Python не чисто интерпретируемый язык, а смешанный. Он может и компилирует исходный код в байт-код (если программа написана в Объектно-Ориентированном Стиле (ООП);

4. Python и его модули написаны на Си и поэтому работает почти так-же быстро как Си;

5. Программа тормозит и вешает Систему в основном не из-за Языка реализации, а из-за того что криво написана (если вы напишете длительный цикл выполнения чего-либо без прерывания, то он повешает любую систему, даже со 100500 ядрами и кучей оперативки);

6. Я купил на днях готовый набор на Raspbery Pi 3 Model B:
    4-х ядерный x64 процессор ARM Cortex-A53 с тактовой частотой 1,2 ГГц
    очень сильно сомневаюсь что Python скрипты его смогут повесить, если я сам косячить не       буду в коде и создавать приложения рассчитанные на не Intel x86, а не на ARM;

11 DrVicX  
7. Работа с GPIO происходит на НИЗКОМ уровне. Ресурсы тратятся смешные. Можно хоть 500 датчиков повесить. Если задержка и будет, то она не настолько критична чтобы её заметить. Например, задержка в 500 мсек для человека НЕ критична если не требуется мгновенного отклика, а 500 мсек - это ОЧЕНЬ много для микроконтроллера. Он за это время сотни тысяч операций может выполнить с интерфейсами.

12 DrVicX  
8. Единственное что может подвешивать работу Системы - это работа с базой данных если выполняется какой-то сложный алгоритм выборки и анализа данных и его теребят много пользователей одновременно. Но в системах "Умный дом" не нужны сложные алгоритмы, большие базы данных и пользователей максимум 5 человек, поэтому этот можно тоже исключить.





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