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

Dependencies:   EthernetInterface NTPClient SimpleSMTPClient TextLCD mbed-rtos mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 // -- InformEmail --
00002 #include "mbed.h"
00003 #include "EthernetInterface.h"
00004 #include "NTPClient.h"
00005 #include "SimpleSMTPClient.h"
00006 #include "TextLCD.h"
00007 
00008 #define DOMAIN "mbed"
00009 #define SERVER "smtp.mail.yahoo.co.jp"
00010 #define PORT "587" //25 or 587(OutBound Port25 Blocking )
00011 
00012 #define USER "yahoo-japan-ID" 
00013 #define PWD "password"
00014 #define FROM_ADDRESS "yahoo-japan-ID@yahoo.co.jp"
00015 // TO_ADDRESS (Of some address is possible.)
00016 // to-user1@domain, to-user2@domain, to-user3@domain ....
00017 // The TO_ADDRESS are less than 128 characters.
00018 #define TO_ADDRESS "to-address@domain" 
00019 
00020 #define SUBJECT "Notice of the detection log"
00021 
00022 #define INIT 5.0
00023 #define NOISE 3.0
00024 #define DELAY 10.0
00025 #define INTERVAL 3600
00026 
00027 TextLCD lcd(p24, p26, p27, p28, p29, p30);
00028 DigitalOut led1(LED1); 
00029 DigitalOut led2(LED2);
00030 DigitalOut led3(LED3);
00031 DigitalIn msensor(p20);
00032 int cnt,flag,flag1;
00033 
00034 void emailsendInterval(void const *args)
00035 {
00036    while (true) {
00037         led1 = !led1;
00038         Thread::wait(1000);
00039         cnt++; 
00040         if ( cnt == INTERVAL ){ 
00041             cnt = 0;
00042             flag = 1;
00043         }    
00044     }
00045 }
00046 
00047 void lcdUpdate(void const *args)
00048 {
00049     char lcdMsg[16];
00050     while(true){    
00051         Thread::wait(30000);
00052         time_t ctTime = time(NULL)+32400; 
00053         strftime(lcdMsg,16,"%y/%m/%d %H:%M",localtime(&ctTime));
00054         lcd.locate(0,0);
00055         lcd.printf("[%s]",lcdMsg);
00056     }   
00057 }
00058 
00059 void flip(void const *args) {
00060    while (true) {
00061         led1 = !led1;
00062         Thread::wait(200);
00063     }
00064 }
00065 
00066 int main()
00067 {
00068     SimpleSMTPClient smtp;
00069     EthernetInterface eth;
00070     
00071     char sendMsg[512]="";
00072     char strTimeMsg[16];
00073     int ret;
00074     flag1 = 0;
00075     
00076     lcd.cls();
00077     printf("\n\n/* Inform Email System */\n");
00078 
00079     printf("Setting up ...\n");
00080     eth.init();    
00081     eth.connect();
00082 
00083     printf("Connected OK\n");    
00084     
00085     printf("IP Address is %s\n", eth.getIPAddress());
00086     lcd.locate(0,1);
00087     lcd.printf("%s", eth.getIPAddress());    
00088 
00089     printf("NTP setTime...\n");
00090     NTPClient ntp;
00091     ntp.setTime("ntp.nict.jp");
00092     
00093     time_t ctTime = time(NULL)+32400;   
00094     printf("\nTime is now (JST):%s\n", ctime(&ctTime));
00095     strftime(strTimeMsg,16,"%y/%m/%d %H:%M",localtime(&ctTime));
00096     lcd.locate(0,0);
00097     lcd.printf("[%s]",strTimeMsg);    
00098  
00099     led1 = 1;    
00100     Thread thread0(flip);
00101     wait(INIT);    
00102     thread0.terminate();    
00103     led1=0;
00104    
00105    
00106     Thread thread(emailsendInterval);
00107     Thread thread1(lcdUpdate);
00108          
00109     smtp.setFromAddress(FROM_ADDRESS);
00110     smtp.setToAddress(TO_ADDRESS);
00111     smtp.setMessage(SUBJECT,sendMsg);  
00112     
00113     while(1)
00114     {
00115         led2 = msensor;
00116         if ( led2 == 1 ){
00117             wait( NOISE );
00118             led2 = msensor;
00119 
00120             while ( led2 == 1 ){    
00121                 led3 = 1;                     
00122                 wait( DELAY ) ;
00123                 led2 = msensor;
00124                 if ( flag1 == 0 ){
00125                     ctTime = time(NULL)+32400; // JST
00126                     strftime(strTimeMsg,16,"%m/%d %H:%M\r\n",localtime(&ctTime));
00127                     smtp.addMessage(strTimeMsg);
00128                     printf("[%s]",strTimeMsg);
00129                 }
00130                 flag1 = 1;
00131             }
00132             flag1 = 0;
00133             led3 = 0;
00134         }
00135         if ( flag == 1 ) {      
00136             if ( smtp.msgLength() != 0 ){
00137                 ret = smtp.sendmail(SERVER, USER, PWD, DOMAIN, PORT,SMTP_AUTH_LOGIN);
00138                 smtp.clearMessage();
00139                 if (ret) {       
00140                     printf("E-mail Transmission Error\r\n");
00141                 } else {
00142                     printf("E-mail Transmission OK\r\n");  
00143                 }
00144             }
00145             flag = 0;        
00146         }              
00147     }
00148 }
00149