Arduino уведомляет о новых письмах


После первого знакомства с Arduino и Hello-World-овского мигания светодиодом, хочется сдлеать какой-нибудь прикольный проект.
Например, уведомление (мигание лампочкой или поднятие флажка) о получении новой почты на ящик gmail.
Чтобы это реализовать требуется всего лишь:
— Плата Arduino – 1 шт.
— USB-кабель типа A-B для поключения Arduino к компьютеру – 1 шт.
— Светодиод – 1 шт.

Таким образом, задача выглядит следующим образом:
1. узнать, что на почте есть непрочитанные письма
2. сообщить об этом Arduino
3. Контроллер Arduino должен принять сообщение и, в зависимости от его содержания — выполнить заданное действие (помигать светодиодом).

Первая и вторая задача решаются написанием простой программы на любом удобном языке программирования.
Например, вот как это дело можно реализовать на C# :
По таймеру, каждые 10 секунд, программа проверяет состояние почтового ящика и если есть непрочитанные письма – то по COM-порту передается значение «1», а если новых писем нет — то «2».
Для общения программы на C# с Arduino, используется стандартный компонент SerialPort, а для соединения с почтовым ящиком gmail и поиска непрочитанных писем используется Mail.dll, которую можно найти на 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 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-сервером
             }
         }

      }
}

Осталось написать скетч для Arduino, который бы считывал команду с последовательно порта и в зависимости от содержания: «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);//диод выключаем
  }
}

А если ещё добавить, например, сервомашинку и немного оформить это дело, то может получиться что-то вроде этого:

http://www.youtube.com/watch?v=HYnR_bWVKT4


А ещё

А ещё, можно сделать, чтобы ваш цветок напоминал о поливе через Twitter или собрать простенького робота, который будет сообщать о Twitter-сообщениях:
.
В общем, с ардуино главная проблема — это придумать идею или выбрать из готовых проектов 😉

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

По теме
Практическое программирование Arduino — программирование работы с COM-портом.
Arduino/CraftDuino и RSS
LiveStreet и Arduino/CraftDuino
Почему Arduino побеждает и почему он здесь, чтобы остаться?
Arduino как фреймворк


0 комментариев на «“Arduino уведомляет о новых письмах”»

    • Вот это было бы интереснее — способен ли arduino вообще справиться с этой задачей без компьютера.

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Arduino Bluetooth CraftDuino DIY Google IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение