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

 
» » » Управляем лампой через интернет с помощью 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




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

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

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