Acquire Sensor data and email
Dependencies: C12832_lcd EthernetInterface LM75B NTPClient SimpleSMTPClient TextLCD USBHost mbed
Fork of USBHost-MSD_HelloWorld by
main.cpp@10:0902b3dc4d96, 2013-09-20 (annotated)
- Committer:
- nagarajbatta
- Date:
- Fri Sep 20 15:42:44 2013 +0000
- Revision:
- 10:0902b3dc4d96
- Parent:
- 9:3ca15106a7d1
Acquire Data to USB and Email
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
samux | 0:0d68fe822228 | 1 | #include "mbed.h" |
samux | 0:0d68fe822228 | 2 | #include "USBHostMSD.h" |
nagarajbatta | 10:0902b3dc4d96 | 3 | #include "LM75B.h" |
nagarajbatta | 10:0902b3dc4d96 | 4 | #include "EthernetInterface.h" |
nagarajbatta | 10:0902b3dc4d96 | 5 | #include "NTPClient.h" |
nagarajbatta | 10:0902b3dc4d96 | 6 | #include "SimpleSMTPClient.h" |
nagarajbatta | 10:0902b3dc4d96 | 7 | #include "TextLCD.h" |
nagarajbatta | 10:0902b3dc4d96 | 8 | //#include "C12832_lcd.h" |
nagarajbatta | 10:0902b3dc4d96 | 9 | |
nagarajbatta | 10:0902b3dc4d96 | 10 | #define DOMAIN "comcast.net" |
nagarajbatta | 10:0902b3dc4d96 | 11 | #define SERVER "smtp.comcast.net" |
nagarajbatta | 10:0902b3dc4d96 | 12 | #define PORT "587" //25 or 587,465(OutBound Port25 Blocking ) |
nagarajbatta | 10:0902b3dc4d96 | 13 | #define USER "ramyanagaraj" |
nagarajbatta | 10:0902b3dc4d96 | 14 | #define PWD "Abhi#123" |
nagarajbatta | 10:0902b3dc4d96 | 15 | #define FROM_ADDRESS "ramyanagaraj@comcast.net" |
samux | 0:0d68fe822228 | 16 | |
samux | 0:0d68fe822228 | 17 | DigitalOut led(LED1); |
nagarajbatta | 10:0902b3dc4d96 | 18 | LM75B tmp(p28,p27); |
nagarajbatta | 10:0902b3dc4d96 | 19 | //DigitalIn center(p14); |
nagarajbatta | 10:0902b3dc4d96 | 20 | //C12832_LCD screen; |
nagarajbatta | 10:0902b3dc4d96 | 21 | Ticker sense; |
nagarajbatta | 10:0902b3dc4d96 | 22 | int grab = 0; |
samux | 0:0d68fe822228 | 23 | |
nagarajbatta | 10:0902b3dc4d96 | 24 | InterruptIn center_button(p14); |
nagarajbatta | 10:0902b3dc4d96 | 25 | |
nagarajbatta | 10:0902b3dc4d96 | 26 | // TO_ADDRESS (Of some address is possible.) |
nagarajbatta | 10:0902b3dc4d96 | 27 | // to-user1@domain, to-user2@domain, to-user3@domain .... |
nagarajbatta | 10:0902b3dc4d96 | 28 | // The TO_ADDRESS are less than 128 characters. |
nagarajbatta | 10:0902b3dc4d96 | 29 | #define TO_ADDRESS "ramyanagaraj@comcast.net" |
nagarajbatta | 10:0902b3dc4d96 | 30 | |
nagarajbatta | 10:0902b3dc4d96 | 31 | #define SUBJECT "Sensor Data in USB" |
nagarajbatta | 10:0902b3dc4d96 | 32 | |
nagarajbatta | 10:0902b3dc4d96 | 33 | TextLCD lcd(p24, p26, p27, p28, p29, p30); |
nagarajbatta | 10:0902b3dc4d96 | 34 | |
nagarajbatta | 10:0902b3dc4d96 | 35 | |
nagarajbatta | 10:0902b3dc4d96 | 36 | |
nagarajbatta | 10:0902b3dc4d96 | 37 | /*void CENTER_ISR(){ //resets the metronome at beat rate 60 |
nagarajbatta | 10:0902b3dc4d96 | 38 | grab = 1; |
nagarajbatta | 10:0902b3dc4d96 | 39 | } */ |
samux | 0:0d68fe822228 | 40 | void msd_task(void const *) { |
nagarajbatta | 10:0902b3dc4d96 | 41 | //if (grab) { |
samux | 0:0d68fe822228 | 42 | USBHostMSD msd("usb"); |
samux | 0:0d68fe822228 | 43 | int i = 0; |
nagarajbatta | 10:0902b3dc4d96 | 44 | static long filesize; |
nagarajbatta | 10:0902b3dc4d96 | 45 | static long last_filesize = 0; |
nagarajbatta | 10:0902b3dc4d96 | 46 | #define MAX_FILESIZE 1000000L |
nagarajbatta | 10:0902b3dc4d96 | 47 | //float temp; |
samux | 0:0d68fe822228 | 48 | while(1) { |
samux | 0:0d68fe822228 | 49 | |
samux | 1:473f339c54c1 | 50 | // try to connect a MSD device |
samux | 1:473f339c54c1 | 51 | while(!msd.connect()) { |
samux | 1:473f339c54c1 | 52 | Thread::wait(500); |
avnisha | 9:3ca15106a7d1 | 53 | printf("waiting\n"); |
samux | 1:473f339c54c1 | 54 | } |
samux | 1:473f339c54c1 | 55 | |
samux | 4:f8a5c8aa895a | 56 | // in a loop, append a file |
samux | 4:f8a5c8aa895a | 57 | // if the device is disconnected, we try to connect it again |
samux | 1:473f339c54c1 | 58 | while(1) { |
samux | 1:473f339c54c1 | 59 | |
samux | 4:f8a5c8aa895a | 60 | // append a file |
nagarajbatta | 10:0902b3dc4d96 | 61 | // Check Last file size before appending? |
nagarajbatta | 10:0902b3dc4d96 | 62 | if( last_filesize >= MAX_FILESIZE ) |
nagarajbatta | 10:0902b3dc4d96 | 63 | { |
nagarajbatta | 10:0902b3dc4d96 | 64 | FILE * fp = fopen("/usb/text1.txt", "w"); // Create of make sure it is new. |
nagarajbatta | 10:0902b3dc4d96 | 65 | } |
nagarajbatta | 10:0902b3dc4d96 | 66 | else |
nagarajbatta | 10:0902b3dc4d96 | 67 | { |
nagarajbatta | 10:0902b3dc4d96 | 68 | FILE * fp = fopen("/usb/text1.txt", "a"); |
nagarajbatta | 10:0902b3dc4d96 | 69 | } |
nagarajbatta | 10:0902b3dc4d96 | 70 | // Get current file size |
nagarajbatta | 10:0902b3dc4d96 | 71 | FILE * fp = fopen("/usb/text1.txt", "a"); |
nagarajbatta | 10:0902b3dc4d96 | 72 | fseek(fp,0,SEEK_END); |
nagarajbatta | 10:0902b3dc4d96 | 73 | filesize=ftell(fp); |
nagarajbatta | 10:0902b3dc4d96 | 74 | printf("the file's length is %1dB\n",filesize); |
samux | 1:473f339c54c1 | 75 | |
samux | 1:473f339c54c1 | 76 | if (fp != NULL) { |
samux | 1:473f339c54c1 | 77 | fprintf(fp, "Hello fun SD Card World: %d!\r\n", i++); |
nagarajbatta | 10:0902b3dc4d96 | 78 | fprintf(fp, "C=%.2f \tF=%.2f\n",tmp.read(),(1.8)*tmp.read()+32); |
nagarajbatta | 10:0902b3dc4d96 | 79 | //temp = tmp.read(); |
nagarajbatta | 10:0902b3dc4d96 | 80 | //fprintf(fp, %d, i++,); |
nagarajbatta | 10:0902b3dc4d96 | 81 | //fprintf(fp,"\r\n%f,", temp); |
nagarajbatta | 10:0902b3dc4d96 | 82 | //fprintf(fp, "Goodbye World!\r\n"); |
samux | 1:473f339c54c1 | 83 | printf("Goodbye World!\r\n"); |
samux | 1:473f339c54c1 | 84 | fclose(fp); |
samux | 1:473f339c54c1 | 85 | } else { |
samux | 1:473f339c54c1 | 86 | printf("FILE == NULL\r\n"); |
samux | 1:473f339c54c1 | 87 | } |
samux | 1:473f339c54c1 | 88 | |
samux | 0:0d68fe822228 | 89 | Thread::wait(500); |
samux | 0:0d68fe822228 | 90 | |
samux | 1:473f339c54c1 | 91 | // if device disconnected, try to connect again |
samux | 1:473f339c54c1 | 92 | if (!msd.connected()) |
samux | 1:473f339c54c1 | 93 | break; |
nagarajbatta | 10:0902b3dc4d96 | 94 | } |
samux | 0:0d68fe822228 | 95 | } |
samux | 0:0d68fe822228 | 96 | } |
samux | 0:0d68fe822228 | 97 | |
samux | 0:0d68fe822228 | 98 | |
samux | 0:0d68fe822228 | 99 | int main() { |
nagarajbatta | 10:0902b3dc4d96 | 100 | |
nagarajbatta | 10:0902b3dc4d96 | 101 | /*screen.cls(); |
nagarajbatta | 10:0902b3dc4d96 | 102 | screen.locate(0,0); |
nagarajbatta | 10:0902b3dc4d96 | 103 | screen.printf("Press Center Button to Acq");*/ |
nagarajbatta | 10:0902b3dc4d96 | 104 | //sense.attach(&temp, 1); |
nagarajbatta | 10:0902b3dc4d96 | 105 | //center_button.rise(&CENTER_ISR); |
nagarajbatta | 10:0902b3dc4d96 | 106 | int t; |
nagarajbatta | 10:0902b3dc4d96 | 107 | unsigned char data[120*160]; |
nagarajbatta | 10:0902b3dc4d96 | 108 | unsigned char c; |
nagarajbatta | 10:0902b3dc4d96 | 109 | long length; |
nagarajbatta | 10:0902b3dc4d96 | 110 | EthernetInterface eth; |
nagarajbatta | 10:0902b3dc4d96 | 111 | char strTimeMsg[16]; |
nagarajbatta | 10:0902b3dc4d96 | 112 | lcd.cls(); |
nagarajbatta | 10:0902b3dc4d96 | 113 | printf("\n\n/* SimpleMTPClient library demonstration */\n"); |
nagarajbatta | 10:0902b3dc4d96 | 114 | |
nagarajbatta | 10:0902b3dc4d96 | 115 | printf("Setting up ...\n"); |
nagarajbatta | 10:0902b3dc4d96 | 116 | eth.init(); |
nagarajbatta | 10:0902b3dc4d96 | 117 | eth.connect(); |
nagarajbatta | 10:0902b3dc4d96 | 118 | printf("Connected OK\r\n"); |
nagarajbatta | 10:0902b3dc4d96 | 119 | |
nagarajbatta | 10:0902b3dc4d96 | 120 | // IP Address |
nagarajbatta | 10:0902b3dc4d96 | 121 | printf("IP Address is %s\r\n", eth.getIPAddress()); |
nagarajbatta | 10:0902b3dc4d96 | 122 | lcd.locate(0,1); |
nagarajbatta | 10:0902b3dc4d96 | 123 | lcd.printf("%s", eth.getIPAddress()); |
nagarajbatta | 10:0902b3dc4d96 | 124 | |
nagarajbatta | 10:0902b3dc4d96 | 125 | // NTP Client |
nagarajbatta | 10:0902b3dc4d96 | 126 | printf("NTP setTime...\r\n"); |
nagarajbatta | 10:0902b3dc4d96 | 127 | NTPClient ntp; |
nagarajbatta | 10:0902b3dc4d96 | 128 | ntp.setTime("pool.ntp.org"); |
nagarajbatta | 10:0902b3dc4d96 | 129 | |
nagarajbatta | 10:0902b3dc4d96 | 130 | time_t ctTime = time(NULL)- 25200; // PST |
nagarajbatta | 10:0902b3dc4d96 | 131 | printf("\nTime is now (PST): %d %s\r\n", ctTime, ctime(&ctTime)); |
nagarajbatta | 10:0902b3dc4d96 | 132 | strftime(strTimeMsg,16,"%y/%m/%d %H:%M",localtime(&ctTime)); |
nagarajbatta | 10:0902b3dc4d96 | 133 | |
nagarajbatta | 10:0902b3dc4d96 | 134 | lcd.locate(0,0); |
nagarajbatta | 10:0902b3dc4d96 | 135 | lcd.printf("[%s]",strTimeMsg); |
nagarajbatta | 10:0902b3dc4d96 | 136 | |
nagarajbatta | 10:0902b3dc4d96 | 137 | SimpleSMTPClient smtp; |
nagarajbatta | 10:0902b3dc4d96 | 138 | int ret; |
nagarajbatta | 10:0902b3dc4d96 | 139 | char msg[]="USB Sensor Data"; |
nagarajbatta | 10:0902b3dc4d96 | 140 | //t = tmp.read(); |
nagarajbatta | 10:0902b3dc4d96 | 141 | smtp.setFromAddress(FROM_ADDRESS); |
nagarajbatta | 10:0902b3dc4d96 | 142 | smtp.setToAddress(TO_ADDRESS); |
nagarajbatta | 10:0902b3dc4d96 | 143 | smtp.setMessage(SUBJECT,msg); |
nagarajbatta | 10:0902b3dc4d96 | 144 | smtp.addMessage("TEST TEST TEST\r\n"); |
nagarajbatta | 10:0902b3dc4d96 | 145 | FILE * fp = fopen("/usb/text1.txt", "r"); |
nagarajbatta | 10:0902b3dc4d96 | 146 | if(fp==NULL) { |
nagarajbatta | 10:0902b3dc4d96 | 147 | printf("file not found!\n"); |
nagarajbatta | 10:0902b3dc4d96 | 148 | } |
nagarajbatta | 10:0902b3dc4d96 | 149 | else |
nagarajbatta | 10:0902b3dc4d96 | 150 | { |
nagarajbatta | 10:0902b3dc4d96 | 151 | fseek(fp,0,SEEK_END); |
nagarajbatta | 10:0902b3dc4d96 | 152 | length=ftell(fp); |
nagarajbatta | 10:0902b3dc4d96 | 153 | printf("the file's length is %1dB\n",length); |
nagarajbatta | 10:0902b3dc4d96 | 154 | } |
nagarajbatta | 10:0902b3dc4d96 | 155 | fseek(fp,0,SEEK_SET); // Seek back to beginning of ile in case ftell moved the file pointer to the end? |
nagarajbatta | 10:0902b3dc4d96 | 156 | char *emailtextbuffer = (char*) malloc(sizeof(char)*(length+1)); // Adding one to include the NULL character at the end. |
nagarajbatta | 10:0902b3dc4d96 | 157 | while (!feof(fp)){ // while not end of file |
nagarajbatta | 10:0902b3dc4d96 | 158 | c=fgetc(fp); |
nagarajbatta | 10:0902b3dc4d96 | 159 | *emailtextbuffer++ = c; // save char into buffer |
nagarajbatta | 10:0902b3dc4d96 | 160 | //emailtextbuffer++; |
nagarajbatta | 10:0902b3dc4d96 | 161 | } |
nagarajbatta | 10:0902b3dc4d96 | 162 | *emailtextbuffer = NULL; |
nagarajbatta | 10:0902b3dc4d96 | 163 | fclose(fp); |
nagarajbatta | 10:0902b3dc4d96 | 164 | smtp.addMessage(emailtextbuffer); |
nagarajbatta | 10:0902b3dc4d96 | 165 | //smtp.addMessage("C=%.2f \tF=%.2f\n",tmp.read(),(1.8)*tmp.read()+32); |
nagarajbatta | 10:0902b3dc4d96 | 166 | |
nagarajbatta | 10:0902b3dc4d96 | 167 | ret = smtp.sendmail(SERVER, USER, PWD, DOMAIN,PORT,SMTP_AUTH_PLAIN); |
nagarajbatta | 10:0902b3dc4d96 | 168 | |
nagarajbatta | 10:0902b3dc4d96 | 169 | if (ret) { |
nagarajbatta | 10:0902b3dc4d96 | 170 | printf("E-mail Transmission Error\r\n"); |
nagarajbatta | 10:0902b3dc4d96 | 171 | } else { |
nagarajbatta | 10:0902b3dc4d96 | 172 | printf("E-mail Transmission OK\r\n"); |
nagarajbatta | 10:0902b3dc4d96 | 173 | } |
nagarajbatta | 10:0902b3dc4d96 | 174 | |
nagarajbatta | 10:0902b3dc4d96 | 175 | Thread msdTask(msd_task, NULL, osPriorityNormal, 1024 * 4); |
nagarajbatta | 10:0902b3dc4d96 | 176 | |
nagarajbatta | 10:0902b3dc4d96 | 177 | while(1) { |
samux | 0:0d68fe822228 | 178 | led=!led; |
samux | 0:0d68fe822228 | 179 | Thread::wait(500); |
samux | 0:0d68fe822228 | 180 | } |
nagarajbatta | 10:0902b3dc4d96 | 181 | free(emailtextbuffer); |
samux | 0:0d68fe822228 | 182 | } |