メールサーバお知らせランプ

投稿日:

 今朝の着想、「Arduinoのメールサーバお知らせランプ」というのを実際に作った。

 自分のプロバイダのメールサーバを定期的に監視して、メールがたまっていなければ緑、少し多ければ黄、たまりすぎていれば赤、早急に読み出さなければならないようなら赤の点滅、というふうに、ランプで知らせてくれるのである。

 以前作った「未読メールメータ」とは違って、「ETHERNET SHIELD 2」を使って単独でネットにつながるように作ってあり、パソコンを立ち上げたりサーバを上げたりする必要はないので、使い方も単純だ。電源をつなぎ、そのへんにのたくっているカテ5のケーブルを突っ込めば終わりである。

 まず、100円ショップで買ったアクリルの枠にEHTERNET SHIELD 2を取り付けたArduino UNOをねじ止めする。

 LEDは昨日も使ったアノードコモンのものを、大きく見えるよう、これまた100円ショップで買ってきたピンポン玉の中に封入し、クリップでアクリルの枠にとりつける。

 RGBそれぞれのピンをデジタルの3,4,5番につなぎ、アノードに+5Vを加える。それぞれのピンに330Ωの抵抗を付けておくことを忘れてはならない。

組み付けた様子
IMG_3023

 回路図については、描くほどのものではないが、まあ、描けばこうなる。

回路図
mailLampCircuit

 そうすると、メールの量に応じて、こんな具合に光り方が変わる。

メール10通以下は緑
IMG_3019

メールが50通くらいまでは黄
IMG_3021

メールが100通近くなってくると赤、100通を超えると赤点滅
IMG_3022

 写真の彩度が悪いが、実物はもっと鮮やかな色に見える。

 スケッチはこんな感じだ。

//
//  メールの残りによりランプの色を変える。
//    佐藤俊夫
//    27.06.14(日) 1500~
//
#include <SPI.h>
#include <Ethernet2.h>

byte MAC[] = {
  0x90, 0xA2, 0xDA, 0x0F, 0xF6, 0x74
};
IPAddress IP(192, 168, 1, 129);
IPAddress MY_DNS(192, 168, 1, 1);
EthernetClient CLIENT;
const char MAIL_SERVER[] = "pop.hogehoge.ne.jp", USER[] = "USER hoge@pop.hage.ne.jp", PASS[] = "PASS passpass";
unsigned long LAST_CONNECTION_TIME = 0;
const unsigned long CONNECTION_INTERVAL = 300L * 1000L;
int R = 0, G = 0, B = 0;
const int LEDR = 3, LEDG = 4, LEDB = 5;
unsigned long LAST_LED_BLINK_TIME = 0;
boolean LED_BLINK_RED = true;
const int LED_BLINK_INTERVAL = 1000;
int MAIL_NUM = 0;
String RECEIVE_STR = "";

void setup() {
  pinMode(LEDR, OUTPUT);
  pinMode(LEDG, OUTPUT);
  pinMode(LEDB, OUTPUT);
  digitalWrite(LEDR, HIGH);
  digitalWrite(LEDG, HIGH);
  digitalWrite(LEDB, HIGH);
  delay(1000);
  Ethernet.begin(MAC, IP, MY_DNS);
}

void loop() {
  if (CLIENT.available()) {
    char c = CLIENT.read();
    RECEIVE_STR += c;
  }
  if (millis() - LAST_CONNECTION_TIME > CONNECTION_INTERVAL) {
    pop3connect();
    if(RECEIVE_STR.indexOf("+OK server ready\r\n+OK ") >= 0){
      RECEIVE_STR = RECEIVE_STR.substring(RECEIVE_STR.indexOf("+OK server ready\r\n+OK ") + 22);
      RECEIVE_STR = RECEIVE_STR.substring(0, RECEIVE_STR.indexOf(" "));
      MAIL_NUM = RECEIVE_STR.toInt();
    }
    RECEIVE_STR = "";
  }
  if(MAIL_NUM <= 10){
    digitalWrite(LEDR, HIGH);
    digitalWrite(LEDG, LOW);
    digitalWrite(LEDB, HIGH);
  }else
  if(MAIL_NUM <= 50){
    digitalWrite(LEDR, LOW);
    digitalWrite(LEDG, LOW);
    digitalWrite(LEDB, HIGH);
  }else
  if(MAIL_NUM <= 100){
    digitalWrite(LEDR, LOW);
    digitalWrite(LEDG, HIGH);
    digitalWrite(LEDB, HIGH);
  }else
  if(MAIL_NUM > 100){
    if(millis() - LAST_LED_BLINK_TIME > LED_BLINK_INTERVAL){
      if(LED_BLINK_RED){
        digitalWrite(LEDR, HIGH);
        digitalWrite(LEDG, HIGH);
        digitalWrite(LEDB, HIGH);
        LED_BLINK_RED = false;
      }else{
        digitalWrite(LEDR, LOW);
        digitalWrite(LEDG, HIGH);
        digitalWrite(LEDB, HIGH);
        LED_BLINK_RED = true;
      }
      LAST_LED_BLINK_TIME = millis();
    }
  }
}
void pop3connect() {
  CLIENT.stop();
  if (CLIENT.connect(MAIL_SERVER, 110)) {
    CLIENT.println(USER);
    delay(1000);
    CLIENT.println(PASS);
    delay(1000);
    CLIENT.println("STAT");
    delay(1000);
    CLIENT.println("QUIT");
    delay(1000);
    CLIENT.println();
    LAST_CONNECTION_TIME = millis();
  }
}


投稿者: 佐藤俊夫

 50代後半の爺。技術者。元陸上自衛官。2等陸佐で定年退官。ITストラテジストテクニカルエンジニア(システム管理)基本情報技術者

「メールサーバお知らせランプ」への2件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください