Как Мы Делали Небольшую Систему Безопасности На Rpi. Часть 1

Привет Хабражители! Я думаю, многие из вас слышали о Raspberry Pi, более того, думаю, довольно большое количество из вас видели его лично.

В начале 2014 года я решил, что пора и мне заказать парочку RPi и сделать с ними что-нибудь интересное.

Так как я iOS-разработчик, меня вдохновила идея прикрепить к этому проекту iOS-приложение.

Ну а поскольку RPi достаточно хорошо умеет работать со сторонним оборудованием, поэтому я решил, что сделаю небольшую систему безопасности для личного использования.



Как мы делали небольшую систему безопасности на RPi. Часть 1



Введение

Первое, что нужно было сделать в этом случае, это определить, чего я хочу от этой системы.

Я считаю, что для такой задачи нет ничего лучше, чем интеллект-карта.

В общем после 5 минут глубоких раздумий получилось вот что:

Как мы делали небольшую систему безопасности на RPi. Часть 1

Примерно через месяц я получил две модели A RPi из Великобритании, т. е.

с одним USB и без Ethernet. Купил флешку на 16Гб и установил на нее Raspbian. И тут начал вырисовываться первый из подводных камней — драйвера и Интернет. У меня уже был 3G-роутер, который я выиграл на конкурсе пару лет назад, и именно его я планировал подключить к RPi, чтобы там появился Интернет. Как я ошибался.

Через полчаса я уже стоял в магазине в поисках переходника USB-Ethernet; Продавец с трудом нашел мне один экземпляр от D-Link. Перед отъездом я решил перестраховаться и купить еще и Wi-Fi адаптер от ASUS, потому что… Было поздно, а мне очень хотелось сегодня приступить к работе, поэтому права на ошибку просто не было.

Оба устройства, естественно, могли похвастаться поддержкой Linux.

Как мы делали небольшую систему безопасности на RPi. Часть 1



Как мы делали небольшую систему безопасности на RPi. Часть 1

Придя домой, я целый час пытался установить с диска, а затем найти в Интернете последние версии драйверов для D-Link. Оказалось, что ребята из этой компании 2 года назад просто прекратили поддержку данного устройства! Я понял, что мне продали барахло( которые я на следующий день успешно обменял еще на две флешки ).

Мне остался план Б, который на удивление сработал без всяких драйверов, я просто вставил переходник от ASUS в USB и он сразу распознался в системе как сетевая карта.

Скажу сразу, на RPi модели А работать в режиме графической оболочки просто невозможно, все очень сильно тормозит, после Макбука с SSD это ад. Поэтому я решил его не мучить, а просто настроил ssh под себя.

Далее встал вопрос о языке, на котором я буду писать систему работы с железом.

Из всех я выбрал Python, так как он работает с железом «из коробки», нет необходимости устанавливать какие-то дополнительные библиотеки и тому подобное, плюс я давно хотел выучить этот язык.

Примерно за неделю я освоил все необходимое из Python, это была очень интересная неделя.

Помните, в 9-й серии первого сезона «Теории большого взрыва» главные герои прикрепили к некоторым устройствам в своей квартире выключатели, которыми можно было управлять через Интернет, и каждый мог включать/выключать свет или аудиосистему? Я сделал то же самое со светодиодом, подключенным к RPi. Это, конечно, не аудиосистема, но когда от щелчка мышкой на противоположном полушарии планеты загорелся светодиод, ощущения были неописуемые :)

Как мы делали небольшую систему безопасности на RPi. Часть 1



Работаем с железом

Следующий вопрос, который мне пришлось решить, это как подключить и управлять железом, ведь датчик движения и дыма не светодиод, там все несколько сложнее.

С этим вопросом я обратился к своему хорошему знакомому, который просто хорошо разбирается в схемотехнике и лучше меня владеет паяльником.

С этого момента над проектом начали работать два человека, и я стал частым посетителем магазина радиолюбителей.

Подробнее о работе схемы я расскажу в другой статье, а пока кратко расскажу, как все работает.

Как мы делали небольшую систему безопасности на RPi. Часть 1

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

Забегая вперед, хочу сказать, что из схемы был исключен автоматический переход на питание от аккумулятора, поскольку был куплен аккумулятор, который просто подключается параллельно питанию от сети и автоматически начинает питание схемы при пропадании 220В.

Было решено заменить концевой выключатель двери на герконовые.

Для подключения и питания всей схемы были изготовлены две отдельные платы, на одной реализована работа с железом через оптроны, а на другой преобразование сетевого напряжения 220В в постоянное 12В и 5В.

Наши датчики и сирена питаются от 12В, а RPi от 5В соответственно.

Все это хорошо, но еще интереснее был следующий вопрос, как нам получить данные с датчиков.

Всю работу с железом мы решили делать через GPIO, если честно, я думаю, что это единственный путь, остальные входы/выходы предназначены для конкретного оборудования, а нам просто нужно получить состояние с датчиков в форма 1 или 0.

Как мы делали небольшую систему безопасности на RPi. Часть 1

GPIO имеет 26 контактов, из них: 2 — 5В, 2 — 3В, 5 — земля, остальные могут быть как входами, так и выходами, в зависимости от установленной вами конфигурации.



Как мы делали небольшую систему безопасности на RPi. Часть 1



Программирование аппаратной системы

Я решил сделать трехуровневую архитектуру: RPi — веб-сервер — iOS .

Во-первых, для повышения отказоустойчивости, ведь если исключить сервер из цепочки, то вся система становится очень уязвимой из-за того, что RPi может выйти из строя и мы никогда об этом не узнаем.

Во-вторых, я решил отказаться от отправки СМС и дозвона в пользу push-уведомлений, которые, естественно, будет отправлять сервер.

Итак, для программирования аппаратной системы я выбрал Python 2.5. Первое, что нужно сделать, это установить ВебИОПи .

Это отличный проект с открытым исходным кодом, позволяющий удобно отлаживать работу с оборудованием через браузер.

Он показывает состояние портов GPIO, позволяет настроить их как вход/выход и вручную установить для них выход 0 или 1. Установить все это очень просто; в Интернете есть даже подробные инструкции на русском языке.

Как я писал выше, Python умеет работать с GPIO «из коробки»; для этого вам просто нужно подключить специальную библиотеку.

  
  
  
  
  
  
   

import RPi.GPIO as GPIO

GPIO имеет два режима нумерации контактов: по учетной записи на плате и по внутреннему контактному номеру.

Рекомендую использовать нумерацию счетов, это проще.



GPIO.setmode(GPIO.BOARD)

Перед запуском системы нам необходимо инициализировать все необходимые порты, а именно указать, как они будут работать, на ввод или вывод, а также указать начальное значение порта.



GPIO.setup(12, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(11, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

Чтобы прочитать порт, вам нужно использовать следующий код:

if (GPIO.input(11) == GPIO.HIGH)

Чтобы установить выход на порт 1 или 0:

GPIO.output(12, GPIO.HIGH) GPIO.output(12, GPIO.LOW)

Так как датчик движения выдает сигнал очень короткий промежуток времени, нам нужно постоянно читать порты, и здесь надо сказать, что RPi.GPIO реализует это очень удобно.

Можно сделать так, чтобы при поступлении на вход 1 или 0 вызывалась определенная функция.

Частота чтения также устанавливается для каждого порта.



GPIO.add_event_detect(11, GPIO.FALLING, callback=move_sensor_callback, bouncetime=500)

Несколько важных ошибок.

В цикле программы необходимо выполнить Sleep(1), иначе процессор всегда будет загружен на 100%; также рекомендуется выполнить GPIO.cleanup() при выходе из программы.



try: while True: sleep(1) finally:

Теги: #Raspberry Pi #python #охранная сигнализация #сделай сам #сделай сам #разбери пирог #python

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.