Добрый день!
Совсем недавно заинтересовался платформой Arduino. После того, как плата Arduino Mega 2560 была получена в подарок на Новый Год я, как приличный начинающий любитель робототехники, поморгал диодом, в том числе через кнопочку (которые, кстати, были выпаяны со старой разобранной мышки для компьютера).
Вот после таких стандартных экспериментов я решил, что надо сделать что-то полезное. Вдохновился различными видео с youtube, в которых показывали, как с помощью Arduino + Python было реализовано физическое уведомление (у кого-то лампочка мигала, у кого-то флажок поднимался) о получении новой почты на ящик gmail.
В данной статье хочу рассказать о своем опыте создания такой «уведомлялки». Из «железа» необходимо совсем мало, вот то, что использовал я:
— Плата 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-ка отлично документирована, поэтому на этом моменте останавливаться подробно не будем. Лучше рассмотрим код, который «читает письма»:
По приведенному коду предвкушая вопросы сразу отвечу на некоторые из них. Да, можно было открывать порт и подключаться к серверу один раз, а не по таймеру, каждые 10 секунд. Да я пользуюсь чужими dll-ками в этом проекте, а не пишу свои классы. Причина тому – на данном этапе целью было создать не идеальный код на С# и не описать как на C# проверить почту, а заставить уведомлялку о новых письмах работать, с чем этот код успешно справляется.
Что же происходит в Arduino, когда на него приходят по COM-порту цифры «1» или «2»? А в нем происходит следующее:
Т.е. на Arduino записана довольно-таки простая программа, которая практически и занимается «физическим уведомлением» — в моем случае при появлении в ящике непрочитанных писем зажигается светодиод. Если же пользователь зашел в свой ящик и прочитал письмо – в течение ближайших 10и секунд срабатывания таймера диод выключится, что оповестит об отсутствии непрочитанных писем.
В качестве примера приведу один из многих роликов, которые вдохновили меня на создание своей собственной «уведомлялки»:
Вот так началось мое освоение Arduino. Надеюсь, данный проект когда-то найдет свое практическое применение и не только в моих руках.
Успехов!
Совсем недавно заинтересовался платформой Arduino. После того, как плата Arduino Mega 2560 была получена в подарок на Новый Год я, как приличный начинающий любитель робототехники, поморгал диодом, в том числе через кнопочку (которые, кстати, были выпаяны со старой разобранной мышки для компьютера).
Вот после таких стандартных экспериментов я решил, что надо сделать что-то полезное. Вдохновился различными видео с youtube, в которых показывали, как с помощью Arduino + Python было реализовано физическое уведомление (у кого-то лампочка мигала, у кого-то флажок поднимался) о получении новой почты на ящик gmail.
В данной статье хочу рассказать о своем опыте создания такой «уведомлялки». Из «железа» необходимо совсем мало, вот то, что использовал я:
— Плата 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. Надеюсь, данный проект когда-то найдет свое практическое применение и не только в моих руках.
Успехов!