ハイパー・マイコン mbedでインターネット 電子工作 2章 リスト2-2 InformEmailのプログラム

Dependencies:   EthernetInterface NTPClient SimpleSMTPClient TextLCD mbed-rtos mbed

main.cpp

Committer:
sunifu
Date:
2014-07-09
Revision:
0:cf3bc27b895f

File content as of revision 0:cf3bc27b895f:

// -- InformEmail --
#include "mbed.h"
#include "EthernetInterface.h"
#include "NTPClient.h"
#include "SimpleSMTPClient.h"
#include "TextLCD.h"

#define DOMAIN "mbed"
#define SERVER "smtp.mail.yahoo.co.jp"
#define PORT "587" //25 or 587(OutBound Port25 Blocking )

#define USER "yahoo-japan-ID" 
#define PWD "password"
#define FROM_ADDRESS "yahoo-japan-ID@yahoo.co.jp"
// TO_ADDRESS (Of some address is possible.)
// to-user1@domain, to-user2@domain, to-user3@domain ....
// The TO_ADDRESS are less than 128 characters.
#define TO_ADDRESS "to-address@domain" 

#define SUBJECT "Notice of the detection log"

#define INIT 5.0
#define NOISE 3.0
#define DELAY 10.0
#define INTERVAL 3600

TextLCD lcd(p24, p26, p27, p28, p29, p30);
DigitalOut led1(LED1); 
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalIn msensor(p20);
int cnt,flag,flag1;

void emailsendInterval(void const *args)
{
   while (true) {
        led1 = !led1;
        Thread::wait(1000);
        cnt++; 
        if ( cnt == INTERVAL ){ 
            cnt = 0;
            flag = 1;
        }    
    }
}

void lcdUpdate(void const *args)
{
    char lcdMsg[16];
    while(true){    
        Thread::wait(30000);
        time_t ctTime = time(NULL)+32400; 
        strftime(lcdMsg,16,"%y/%m/%d %H:%M",localtime(&ctTime));
        lcd.locate(0,0);
        lcd.printf("[%s]",lcdMsg);
    }   
}

void flip(void const *args) {
   while (true) {
        led1 = !led1;
        Thread::wait(200);
    }
}

int main()
{
    SimpleSMTPClient smtp;
    EthernetInterface eth;
    
    char sendMsg[512]="";
    char strTimeMsg[16];
    int ret;
    flag1 = 0;
    
    lcd.cls();
    printf("\n\n/* Inform Email System */\n");

    printf("Setting up ...\n");
    eth.init();    
    eth.connect();

    printf("Connected OK\n");    
    
    printf("IP Address is %s\n", eth.getIPAddress());
    lcd.locate(0,1);
    lcd.printf("%s", eth.getIPAddress());    

    printf("NTP setTime...\n");
    NTPClient ntp;
    ntp.setTime("ntp.nict.jp");
    
    time_t ctTime = time(NULL)+32400;   
    printf("\nTime is now (JST):%s\n", ctime(&ctTime));
    strftime(strTimeMsg,16,"%y/%m/%d %H:%M",localtime(&ctTime));
    lcd.locate(0,0);
    lcd.printf("[%s]",strTimeMsg);    
 
    led1 = 1;    
    Thread thread0(flip);
    wait(INIT);    
    thread0.terminate();    
    led1=0;
   
   
    Thread thread(emailsendInterval);
    Thread thread1(lcdUpdate);
         
    smtp.setFromAddress(FROM_ADDRESS);
    smtp.setToAddress(TO_ADDRESS);
    smtp.setMessage(SUBJECT,sendMsg);  
    
    while(1)
    {
        led2 = msensor;
        if ( led2 == 1 ){
            wait( NOISE );
            led2 = msensor;

            while ( led2 == 1 ){    
                led3 = 1;                     
                wait( DELAY ) ;
                led2 = msensor;
                if ( flag1 == 0 ){
                    ctTime = time(NULL)+32400; // JST
                    strftime(strTimeMsg,16,"%m/%d %H:%M\r\n",localtime(&ctTime));
                    smtp.addMessage(strTimeMsg);
                    printf("[%s]",strTimeMsg);
                }
                flag1 = 1;
            }
            flag1 = 0;
            led3 = 0;
        }
        if ( flag == 1 ) {      
            if ( smtp.msgLength() != 0 ){
                ret = smtp.sendmail(SERVER, USER, PWD, DOMAIN, PORT,SMTP_AUTH_LOGIN);
                smtp.clearMessage();
                if (ret) {       
                    printf("E-mail Transmission Error\r\n");
                } else {
                    printf("E-mail Transmission OK\r\n");  
                }
            }
            flag = 0;        
        }              
    }
}