Уведомление о непрочитанном входящем письме с помощью Arduino

Добрый день!

Совсем недавно заинтересовался платформой Arduino. После того, как плата Arduino Mega 2560 была получена в подарок на Новый Год я, как приличный начинающий любитель робототехники, поморгал диодом, в том числе через кнопочку (которые, кстати, были выпаяны со старой разобранной мышки для компьютера).

Вот после таких стандартных экспериментов я решил, что надо сделать что-то полезное. Вдохновился различными видео с youtube, в которых показывали, как с помощью Arduino + Python было реализовано физическое уведомление (у кого-то лампочка мигала, у кого-то флажок поднимался) о получении новой почты на ящик gmail.
image
В данной статье хочу рассказать о своем опыте создания такой «уведомлялки». Из «железа» необходимо совсем мало, вот то, что использовал я:

— Плата Arduino Mega 2560 – 1 шт.
— USB-кабель для поключения Arduino к компьютеру – 1 шт.
— Светодиод – 1 шт.

Программную часть я реализовал на C#. Программа, запущенная на компьютере, занимается следующим:

По таймеру, каждые 10 секунд проверяется состояние почтового ящика, если есть непрочитанные письма – то по COM-порту передается значение «1», если новых писем нет, то передается значение «2». Для общения программы на C# с Arduino используется компонент SerialPort, который является стандартным элементом Toolbox-а в проекте C# Windows Forms в Visual Studio 2010. Там же можно найти и таймер.

Для соединения с почтовым ящиком gmail и поиска непрочитанных писем используется Mail.dll, которую можно найти на www.lesnikowski.com (я бы не назвал это рекламой, скорее — копирайт, а автору отдельное спасибо). DLL-ка отлично документирована, поэтому на этом моменте останавливаться подробно не будем. Лучше рассмотрим код, который «читает письма»:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Lesnikowski.Client.IMAP; //используем в пространстве имен типы из подключенной Mail.dll 
using Lesnikowski.Mail; 
using Lesnikowski.Mail.Headers;
using Lesnikowski.Mail.Headers.Constants;

namespace Arduino_Mail_Notification
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

         private void timer1_Tick(object sender, EventArgs e) //обработчик срабатывания таймера
         {
             using (Imap imap = new Imap())
             {
                 imap.ConnectSSL("imap.gmail.com"); //подключаемся к IMAP-серверу
                 imap.Login("полный_адрес_e-mail", "пароль"); //заходим под собой
                 imap.SelectInbox(); //заходим в папку со входящими письмами
                 List<long> uids = imap.SearchFlag(Flag.Unseen); //выбираем все непрочитанные письма

                 serialPort1.PortName = "COM15"; //задаем имя COM-порта, с которым работает Arduino
                 serialPort1.Open(); //открываем COM-порт

                 if (uids.Count > 0) //если есть непрочитанные письма
                     serialPort1.Write("1"); //посылаем плате Arduino значение "1"
                 else //в противном случае
                     serialPort1.Write("2"); //посылаем плате Arduino значение "2"
                     
                 serialPort1.Close(); //закрываем COM-порт
                 imap.Close(); //закрываем соединение с IMAP-сервером
             }
         }

      }
}


По приведенному коду предвкушая вопросы сразу отвечу на некоторые из них. Да, можно было открывать порт и подключаться к серверу один раз, а не по таймеру, каждые 10 секунд. Да я пользуюсь чужими dll-ками в этом проекте, а не пишу свои классы. Причина тому – на данном этапе целью было создать не идеальный код на С# и не описать как на C# проверить почту, а заставить уведомлялку о новых письмах работать, с чем этот код успешно справляется.

Что же происходит в Arduino, когда на него приходят по COM-порту цифры «1» или «2»? А в нем происходит следующее:

int ledPin=13; //Плюс нашего диода подключен к 13му выходу на плате
int ser=0; //В эту переменную получаем с программы на C# "1"(есть письма) или "2" (нет писем)

void setup() {
  pinMode(ledPin,OUTPUT); //13 вывод на плате определяем как выход
  Serial.begin(9600);//работаем с COM-портом на скорости 9600 бит/с (обычно это стандартное значение для последовательного порта)
}

void loop () 
{
  ser = Serial.read();//читаем полученное значение
  if (ser == '1') //если это  1
  {
      digitalWrite(ledPin,HIGH); //зажигаем диод
  }
  if (ser =='2') //если 2
  {
      digitalWrite(ledPin, LOW);//диод выключаем
  }
}

Т.е. на Arduino записана довольно-таки простая программа, которая практически и занимается «физическим уведомлением» — в моем случае при появлении в ящике непрочитанных писем зажигается светодиод. Если же пользователь зашел в свой ящик и прочитал письмо – в течение ближайших 10и секунд срабатывания таймера диод выключится, что оповестит об отсутствии непрочитанных писем.

В качестве примера приведу один из многих роликов, которые вдохновили меня на создание своей собственной «уведомлялки»:



Вот так началось мое освоение Arduino. Надеюсь, данный проект когда-то найдет свое практическое применение и не только в моих руках.

Успехов!
Поделиться публикацией
Похожие публикации
Ой, у вас баннер убежал!

Ну. И что?
Реклама
Комментарии 35
    +8
    «1» и «2»… А почему не «1» и «0»? Все кулхацкеры просто обязаны мыслить бинарно ;)
      +6
      1
        0
        Да, все мы знаем, что двоек не существует!
          +1
          Существует только 10 типов людей: те, которые понимают двоичную систему, и которые ее не понимают.
            0
            Тогда уж типа, а не типов. ;)
              0
              Типа людей. Типа существуют…
          0
          Тоже недавно приобрел arduino uno. Сейчас в поисках интересной идеи, пока преобладает желание сделать ambilight, но ленточные RGB-светодиоды что-то чересчур дорогие для моего бюджета.
            0
            Что реально есть какой-то значимый эффект?
              0
              Прошу прощения, не понял сути вопроса.
                0
                Я про Ambilight
                  0
                  видимо, от ambilight во время просмотра видео
                    +2
                    Тут несколько аспектов.

                    Во-первых, ambilight — это взаимодействие между компьтером и микроконтроллером не на уровне «ноль или единица», как в случае с автором статьи.

                    Во-вторых, я являюсь поклонником фильмов (наверное по этой причине работаю в проекте ivi). Это какое-то эстетическое удовольствие, когда фильм выходит за рамки монитора, остается чувство что в таком «качестве» фильм нельзя посмотреть даже в кино.

                    Ну и в третьих, это можно охарактеризовать словом «бзик» )
                    0
                    Вот тут посмотрите. Мне понравилось, но прикупить ещё не успел.
                      0
                      ladyada.net/make/adalight/ — вот здесь описан интересный вариант ambilight на arduino. Видео в конце страницы классное.
                        0
                        Вот его и хотел реализовать, но те самые светодиоды с контроллером стоят около 40 баксов, мне это кажется перебором.
                  +2
                  Мне вот что интересно. Как люди используют Arduino? Собирают что-нить и интересное, поигрались, разобрали и следующее делают или постоянно докупают все новые и новые платы?

                  p.s. Вопрос задан не из праздного любопытства. Хочу попробывать свои силы в этой довольно интересной области.
                    +4
                    Собирают что-нибудь интересное, потом покупают либо отдельный микроконтроллер и собирают схему с уже готовой программой, либо другую версию arduino, более соответствующую выполненной задаче (более компактную, дешёвую, с беспроводным или ethernet-интерфейсом). Затем старый макет разбирают.
                      0
                      Все зависит от того, как хотите использовать. Допустим, Вы собрали робота, поигрались — все работает, все нравится. Пришла гениальная идея попробовать или сделать что-то другое. От робота всегда можно отсоединить плату, промаркировать что куда было подключено и заниматься другим проектом. Т.е. не обязательно разбирать, проще докупить деталей, которые необходимы в обеих «изобретениях». Ну а если бюджет позволяет то можно хоть каждый раз новую плату покупать.

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

                      Короче говоря, по разному пользуются, кому как удобней и все зависит от серьезности «изобретения».
                        0
                        я купил пару контроллеров, щас один из первых мелких проектов переношу с Adruino на отдельную микрохсему
                          0
                          отдельная микросхема чем отличается от ардуины?
                            0
                            практически ничем, кроме необходимости сделать плату (пока использую макетку). Фактически острой необходимости нету, но с платой будет красивее и более завершено.
                              0
                              можно поподробней?
                                0
                                Arduino и прочие аналоги созданы для быстрой разработки и отладки под микроконтроллеры, в итоге микроконтроллер должен быть запрограммирован снят с ардуины и установлен в некое устройство, вот здесь на пальцах правда не про ардуино но тоже отличный комплект для разработки.
                          +1
                          глупости же… подобных статей масса. Интереснее бы было, если бы это все было реализовано например через USB. Да и arduino mega 2560 для такого будет лишнего… Уверен на 100%, что даже моей голой atmega8 с 8кб памяти(2 из которых заняты usb-бутлоадером) хватит для этой задачи =)
                            0
                            Arduino mega 2560 покупалась не именно для этих целей. Это один из тренировочных проектов на пути к умному дому с управлением котлом (горячая вода в кране + отопление), освещением, солнечным коллектором (горячая вода в солнечные дни лета), автоматическим поливом газона и может еще чем-то.

                            Что вы имеет ввиду под «реализовано например через USB»? COM-порт здесь рассматривается совсем ни как девяти-пиновый разъем.
                              0
                              А еще можно через bluetooth, и расположить где нибудь в отдалении от компьютера и без проводов и с автономным питанием, благо китайцы штампуют недорогие bluetooth модули и это несколько проще в программной реализации.
                              0
                              Куда интереснее было бы засунуть в почтовый ящик, как на видео, принтер и печатать новую почту. :) Наверное, это нереально, а жаль.
                                0
                                Во всем цивилизованном мире призывают к экономии бумаги и сохранению лесов, а Вам — почту печатать. :)

                                В принципе, вывести на LCD дисплей заголовок и отправителя — вполне возможно. Да и печать возможна, как минимум тех же заголовка с адресом отправителя, как вариант — через bluetooth модуль отправлять на bluetooth-принтер.
                                –1
                                Объясните пожалуйста, зачем для такой простой конструкции использовать платформу за 30 долларов?
                                Когда тоже самое можно сделать на обычной mega8 за 4 доллара?
                                Да, я понимаю, что у ардуины куча библиотек, но эти же библиотеки есть и «нативные», но не понимаю таких растрат ресурсов на такие действия
                                Скоро уже дергать светодиодами по таймеру будут ARM'ами на 800 МГц
                                  +1
                                  Написано же — человек просто осваивает платформу. Надоест эта конструкция, разберёт и сделает новую, посложнее. Не сразу же киборгов собирать.
                                    –1
                                    да я так, спрашивал в общем у людей использующих ардуину, ведь особо ничего сложного на ней на хабре не делали :( вот и появляется такое ощущение, что гвоздь забивают отбойным молотком
                                  0
                                  А что такой нерусский почтовый ящик?
                                    0
                                    Так уж повелось, со времен, когда gmail был еще по инвайтам. Ну и ейчас так и осталось по ряду причин. А приведенный пример будет работать с любым почтовым сервисом, поддерживающим IMAP. А dll-ка умеет работать с POP3 кстати тоже.
                                      0
                                      Не, я не про е-мейл, а про американскую форму почтового ящика с флажком.
                                        0
                                        А, так это не мое видео. Свое на данный момент нет возможности снять. Просто пример того, что можно сделать, подключив моторчик вместо диода, грубо говоря.

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

                                  Самое читаемое