Технокуб
- Платформы: Iskra Neo
- Языки программирования: Arduino (C++), Python
- Тэги: куб, конструктор, мониторинг почты, нотификатор почты, firmata.
Что это?
Ждёте новое сообщение на почту, но не хотите каждый раз отвлекаться, обновлять страницу и смотреть в монитор?! Тогда наше умное и одновременно дизайнерское устройство Технокуб для вас. Суть его довольна проста: пока у вас нет непрочитанных сообщений он горит красным, но как только на почте появляется что-то новенькое — мигает и загорается зелёным. Корпус куба создан из специального, разработанного нами, конструктора на основе ПВХ.
Что нам понадобится?
- Светодиод «Пиранья» (Troyka-модуль) красный 2 шт. и зелёный 2 шт.
- Крепёжные элементы: винты и гайки
- Конструктор ПВХ
Как собрать?
- Возьмите платформу Iskra Neo и нижнюю панель кубa (7x7), соедините её с помощью винтов и гаек, так чтобы гайки располагались между панелью и платформой.
- Далее возьмите два светодиода «Пиранья» ,красный и зелёный, прикрутите их к панели для крепления двух Troyka-модулей. Повторите процесс с двумя оставшимися светодиодными модулями и второй панелью для крепления двух Troyka-модулей.
- Установите Troyka Shield на платформу Iskra Neo. Подключите через стандартные 3-проводные шлейфы к Troyka Shield одну пару светодиодных модулей (дальняя панель светодиодов): красный к
5
пину, зелёный к6
пину. Вторую пару (ближняя панель светодиодов): красный к9
пину , зелёный к10
пину. В итоге должна получиться схема, как на рисунке ниже. - Соедините заднюю панель куба (6x7) с нижней панелью кубa (7x7) и дальней панелью со светодиодами, укладывая 3-проводные шлейфы между Troyka Shield и дальней панелью со светодиодами
- Возьмите левую боковую панель куба (7x7), соедините её с нижней панелью куба (7x7) и с дальней панелью со светодиодами. Также возьмите ближнюю панель со светодиодами и соедините её с левой боковой панелью куба (7x7), укладывая 3-проводные шлейфы между Troyka Shield и ближней панелью со светодиодами
- Теперь возьмите правую панель куба (7x7) и соедините её с нижней панелью куба (7x7), а также с ближней и дальней панелью со светодиодами. После этого установите верхнюю панель (7x7) на левую, правую и заднюю панели куба.
- Соедините переднюю панель куба (7x2) c передней панелью (7x3) через панель крестиков (1x6).
- Закрепите собранную панель из предыдущего пункта с левой и правой панелью куба.
Для проверки правильности сборки куба рекомендуем воспользоваться сборочным чертежом.
Как запустить?
- Установите и настройте платформу Iskra в ОС Windows. Помните платформа Iskra Neo является эквивалентом итальянской Arduino Leonardo, поэтому везде при выборе платформы выбирайте Arduino Leonardo.
- Подготовьте платформу Iskra Neo для работы с приложениями из компьютера. Для этого прошейте её специальной прошивкой Firmata, которую вы можете найти среди стандартных примеров из библиотеки Firmata:и загрузить в платформу Iskra Neo, как обычный скетч.
- Далее скачайте и установите программу для управления кубом на компьютер.
Доработка приложения для Windows
Данный раздел о том, как внести изменения в программу и сделать её совместимой с Windows. Если вы не собирается вносить изменения в логику работы программы, можете пропустить этот раздел.
Протокол Firmata
Связь между платформой Iskra Neo и программой на компьютере идёт через стандартный протокол Firmata. Любое программное обеспечение на любом компьютере, которое совместимо с Serial-соединением, может обмениваться данными с микроконтроллером, используя Firmata.
Установка среды разработки
Для создания и программирования приложения воспользуемся языком программирования Python.
Помимо самой среды, необходимо установить wxPython — библиотеку графического интерфейса пользователя для Python.
Скачать wxPython 3.0 для Python 2.7
для 32-битного Windows
для 64-битного Windows
Создание проекта
Скачайте проект и поместите его содержимое в отдельную директорию на жёстком диске, допустим: C:\Projects\Cube\
. Проект состоит из файлов и директорий:
main.py
— графический пользовательский интерфейс;device.py
— управление светодиодами на низком уровне;modes.py
— файл, который отвечает за проверку почтыsetup.py
— файл, для конвертации приложения под Windows.icons.py
— информация об иконках- директория
icons
— в этой директории, хранятся иконки программы. .gitignore
— файл для работы с Git — Запись изменений в репозиторий.
Также в нашем проекте мы воспользуемся готовой библиотекой pyfirmata для Python. Её необходимо установить вручную:
- Зайдите в командную строку::
- Используя команды командной строки перейдите в директорию, куда вы поместили исходные файлы проекта
C:\Projects\Cube\
- Допишите такую строку
C:\Python27\Scripts\pip.exe install pyfirmata
и дождитесь сообщения об удачной установке.
Пробный запуск
Теперь попробуем запустить проект. Оставаясь в командной строке, в директории с проектом введите строку main.py
. Если вы сделали всё правильно, должна запуститься форма с пользовательским интерфейсом.
Теперь вы смело можете изменять и редактировать код программы.
Например в файле main.py
класс ManualControlPanel
отвечает за графический интерфейс программы, когда выбран ручной режим.
- main.py
class ManualControlPanel(wx.Panel): def __init__(self, parent, device): super(ManualControlPanel, self).__init__(parent) self.device = device self.InitUI() def InitUI(self): self.red_button = wx.Button(self, label=u'Красный') self.green_button = wx.Button(self, label=u'Зелёный') self.red_button.Bind(wx.EVT_BUTTON, self.OnRedButton) self.green_button.Bind(wx.EVT_BUTTON, self.OnGreenButton) box = wx.BoxSizer(wx.HORIZONTAL) box.Add(self.red_button, 1, wx.EXPAND | wx.BOTTOM, 10) box.Add(self.green_button, 1, wx.EXPAND | wx.BOTTOM, 10) self.SetSizer(box) def OnRedButton(self, event): self.device.go_red() def OnGreenButton(self, event): self.device.go_green() def ActivateMode(self): pass def DeactivateMode(self): pass
А в файле modes.py
класс ImapMode
, отвечает за логику программы проверки новых писем на сервере IMAP.
- modes.py
class ImapMode(Mode): def __init__(self, device, interval=20): super(ImapMode, self).__init__() self.device = device self.interval = interval self.status = u'' self._prev_count = 0 self._host = None self._port = None self._login = None self._password = None def set_host_port(self, host, port): self._host = host self._port = port def set_credentials(self, login, password): self._login = login self._password = password def loop(self): self._stopped = False while not self._stopped: self.set_status(u"Проверка почты…") count = 0 try: count = self._fetch_unread_count() message = u"Писем: {}".format(count) except imaplib.IMAP4.error as e: message = u"Неверные логин/пароль" except socket.error: message = u"Нет соединения с сервером" self.set_status(message) if self._stopped: break if count > self._prev_count: self.device.blink() if count: self.device.go_green() else: self.device.go_red() self._prev_count = count countdown = self.interval while countdown > 0 and not self._stopped: sleep(0.1) countdown -= 0.1 self.set_status(u"{} ~ {:.0f}".format(message, countdown)) def stop(self): self._stopped = True def set_status(self, status): self.status = status self._post_event(StatusChangedEvent(status=status)) def _fetch_unread_count(self): connection = imaplib.IMAP4_SSL(self._host, self._port) connection.login(self._login, self._password) connection.select() resp = connection.search(None, 'UnSeen') return len(resp[1][0].split())
Запуск программы в Windows
После того, как вы создали или изменили программу на языке Python, встаёт вопрос, как же её запустить на Windows, так как не у всех пользователей Microsoft установлен интерпретатор python с нужными библиотеками.
Для этого можно использовать приложение py2exe
, которое позволяет упаковать программу на python в .exe
файл и кучу полезного хлама, после чего она будет запускаться на любой windows-машине. Для этого необходимо проделать ряд манипуляций:
- Скачайте и установите приложение
py2exe
Скачать py2exe
для 32-битного Windows
для 64-битного Windows - Найдите у себя на компьютере в системной директории
c:\windows\system32\
библиотекуMSVCP90.dll
и скопируйте её в директорию DLLs, которая находиться в директории с установленным Python. По умолчанию:c:\Python27\DLLs\
. - Зайдите через командную строку в директорию с проектом, введите строку:
setup.py py2exe
и дождитесь сообщение об удачной операции.
Если вы всё сделали правильно, в директории с проектом должны были появиться две новых директории:
build
— служебная, её можно сразу удалить.dist
— собственно, в ней лежит наша программа с файлом.exe
для запуска.
Алгоритм
- Сразу после запуска приложения, программа проверяет количество подключенных COM-портов.
- Если больше одного, то программа предложит выбрать один из них.
- Если один — сразу подключится к нему автоматически.
- Если ни одного — сообщит об ошибке и предложит повторить попытку.
- Выбор режима работы приложения (бесконечный цикл):
- Ручное управление
- Кликнув на первую кнопку загораются красные светодиоды.
- Кликнув на вторую кнопку загораются зеленные светодиоды.
- Проверка почты на GMail / Mail
- Вводим данные: Логин/пароль и подтверждаем.
- Если писем нет, горит красный светодиод.
- Если есть новое письмо, мигаем попеременно светодиодами в течении 3 секунд и оставляем гореть зеленый.
- Проверка почты через сервер IMAP
- Вводим данные: Логин, пароль, сервер IMAP и подтверждаем.
- Если писем нет, горит красный светодиод.
- Если есть новое письмо, мигаем попеременно светодиодами в течении 3 секунд и оставляем гореть зеленый.
Демонстрация работы устройства
Что дальше?
Технокуб может быть многофункциональным индикатором самых разнообразных событий, происходящих в вашем компьютере. С ним вы сможете создать не только нотификатор почты, но и уйму других забавных устройств: индикатор уровня занятости, загруженности дорог, текущей клавиатурной раскладки…