Ждёте новое сообщение на почту, но не хотите каждый раз отвлекаться, обновлять страницу и смотреть в монитор?! Тогда наше умное и одновременно дизайнерское устройство Технокуб для вас. Суть его довольна проста: пока у вас нет непрочитанных сообщений он горит красным, но как только на почте появляется что-то новенькое — мигает и загорается зелёным. Корпус куба создан из специального, разработанного нами, конструктора на основе ПВХ.
5
пину, зелёный к 6
пину. Вторую пару (ближняя панель светодиодов): красный к 9
пину , зелёный к 10
пину. В итоге должна получиться схема, как на рисунке ниже.Для проверки правильности сборки куба рекомендуем воспользоваться сборочным чертежом.
Данный раздел о том, как внести изменения в программу и сделать её совместимой с Windows. Если вы не собирается вносить изменения в логику работы программы, можете пропустить этот раздел.
Связь между платформой 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
отвечает за графический интерфейс программы, когда выбран ручной режим.
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.
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())
После того, как вы создали или изменили программу на языке 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
для запуска.Технокуб может быть многофункциональным индикатором самых разнообразных событий, происходящих в вашем компьютере. С ним вы сможете создать не только нотификатор почты, но и уйму других забавных устройств: индикатор уровня занятости, загруженности дорог, текущей клавиатурной раскладки…