цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Управляем лампой через интернет с помощью Raspberry Pi и Flask

Управляем лампой через интернет с помощью Raspberry Pi и Flask

Автор: Mike(admin) от 17-12-2013, 14:24

В этой статье будет показан способ, позволяющий включать и выключать лампу из любой точки мира. Однако вы можете управлять таким образом любым устройством, переключая его источник питания, будь то телевизор, фонтан, гирлянда для новогодней елки, проектор и т.д.


Необходимое оборудование:



- Raspberry Pi

- Интернет-связь (Ethernet или WiFi)

- Объект управления (в данном случае лампа)

- Розетка, управляемая с пульта (например, 13569 Indoor Wireless Remote Control)

- 6 транзисторов 2N2222A

- Провода и макетная плата

- Припой

Первоочередной целью является «взлом» пульта ДУ, с помощью которого управляют розеткой, что позволит в дальнейшем «нажимать» на кнопки посредством линий ввода/вывода общего назначения (GPIO) Raspberry Pi.


Реверс инжиниринг пульта ДУ


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


Raspberry Pi и лампа

На картинке видно, что плата имеет два ряда кнопок – кнопки «вкл» и «выкл» для каждой из трех розеток. Наша цель – управлять этими кнопками с помощью Raspberry Pi. Мы можем достичь ее, воспользовавшись таким элементом как транзистор, работающий в режиме ключа.


Транзистор 2N222A


Все транзисторы 2N222A имеют три вывода, два из них (коллектор и эмиттер) нужно «врезать» в схему, а с помощью третьего (базы) управлять транзистором, то есть замыкать и размыкать ключ. Для того, чтобы по цепи К-Э протекал ток на базу нужно подать напряжение, для отключения цепи это напряжение нужно снять. В общем, имеем n-p-n транзистор.


Raspberry Pi и лампа

Документация на транзистор 2N222A.


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


Время пайки


Первым делом нужно припаять провода к каждому выводу кнопок. В данном случае обойдемся двумя кнопками (вкл и выкл) для розетки 1, но вы можете задействовать все шесть. На картинке ниже показаны точки присоединения проводов.


Raspberry Pi и лампа

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


Raspberry Pi и лампа

Также нужно соединить с помощью провода землю этой цепи и землю Raspberry Pi. Далее все что нужно, это соединить выводы GPIO с базами транзисторов. В данном случае это выводы 18 и 23.


Raspberry Pi и лампа

Программное обеспечение


Следующим шагом является использование микрофреймворка Flask для подключения нашей схемы к интернету. Для упрощения написания кода в данном случае применялась библиотека RobotBrain. Сначала приведем весь код, потом рассмотрим важные моменты. Сам код содержится в двух файлах lamp_control.py и templates/main.html (файл main.html должен быть в папке templates). Код, который приведен ниже, можно найти на гитхабе.


lamp_control.py



import time
from itertools import cycle
from flask import Flask, render_template
from robot_brain.gpio_pin import GPIOPin

app = Flask(__name__)
on_pin = GPIOPin(18)
off_pin = GPIOPin(23)
state_cycle = cycle(['on', 'off'])

@app.route("/")
@app.route("/")
def update_lamp(state=None):
if state == 'on':
on_pin.set(1)
time.sleep(.2)
on_pin.set(0)
if state == 'off':
off_pin.set(1)
time.sleep(.2)
off_pin.set(0)
if state == 'toggle':
state = next(state_cycle)
update_lamp(state)
template_data = {
'title' : state,
}
return render_template('main.html', **template_data)

if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)

Здесь мы используем Flask для ответа на HTTP-запросы. Всякий раз, когда запрашивается корневой URL или поддиректория корня, вызывается функция update_lamp(). При запросе любой поддиректории имя этой поддиректории становится аргументом функции. Например, если запрашивается /foo, то Flask вызовет update_lamp('foo'). Функция update_lamp() проверяет одно из трех состояний (включена, выключена или переключена) и выполняет желаемое действие.


templates/main.html



<!DOCTYPE html>
<head>
<title>{{ title }}</title>
<style type="text/css">
body {
padding: 0;
margin: 0;
}
.large_button {
position: absolute;
width: 100%;
height: 50%;
text-align: center;
text-decoration: none;
font-size: 1000%;

}
#on {
background-color: #fbf09a;
color: rgb(223, 204, 103);
text-shadow: 1px 1px 10px #5C4E17;
}
#off {
background-color: #1e170b;
top: 50%;
color: rgb(83, 71, 48);
text-shadow: 1px 1px 10px #000000;
}
</style>
</head>
<body>
<h1>
<a href="/on" id="on" class="large_button">ON</a>
</h1>
<h1>
<a href="/off" id="off" class="large_button">OFF</a>
</h1>
</body>
</html>

Это шаблон, который визуализирует приведенную выше Flask-функцию. В итоге это выглядит так:


Raspberry Pi и лампа

Для запуска сервера просто запустите скрипт с привилегиями суперпользователя:


sudo python lamp_control.py


Теперь просто перейдите на IP-адрес вашего Raspberry Pi и вы сможете управлять лампой!




Перевод © digitrode.ru


<Источник>


Теги: Raspberry Pi



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

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

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