Components and supplies
Jumper wires (generic)
Breadboard (generic)
Arduino Mega 2560
ESP8266 ESP-01
Project description
Code
Fritzing project Arduino (mega) with ESP8266
arduino
Send email via Arduino with ESP8266 in plain code (no wifi libraries)
1// 2// original project by Sebastiaan Ebeltjes (domoticx.nl) 3// 4// Hardware: Arduino (Mega 2650) + ESP8266 module or other Arduino : adapt pint to used arduino! 5// 6// ----------------------------- 7// | 1 2 | 8// | 3 4 component side | 9// | 5 6 ESP8266 | 10// | 7 8 | 11// ----------------------------- 12// 13// 1 - Mega 2650 pin 18 - TX1 14// 2 - Gnd 15// 3 - 3v3 16// 4 - nc 17// 5 - nc 18// 6 - nc 19// 7 - 3v3 20// 8 - Mega 2650 pin 19 - RX1 21// 22// tried several wifi projects but all failed to complile due to errors in the WIFI6266 libraries 23// (if sombody has a working set availible, pse let me know where to find it :-) 24// found a webserver example by Sebastiaan Ebeltjes (domoticx.nl) and used this as starting point 25// Did some rough programming to send an SMTP email 26// To run the program, adapt to your WiFi settings (ssid and ssid-password), change to your own SMPT-server, 27// change the email addresses used to valid email addresses 28// After sending the email the program goes in an idle state. Adapt this to your wishes tot triger the email sending 29 30 31#include <SoftwareSerial.h> 32 33char aux_str[129]; 34 35String SndTxt = ""; 36unsigned int lastStringLength = SndTxt.length(); // previous length of the String 37 38char buf[150]; 39 40boolean viewdata = true; 41boolean authentication = false; 42boolean sendemail = true; 43int casevar = 1; 44 45// WiFi settings SSID & pwd 46const char SSID_string[ ] = "MyWifi"; // just change MyWifi into your ssid 47const char PASS_string[ ] = "MyPwd"; // just change MyPwd into the ssid pwd 48 49String Mailuser = ("dXNlcmlk"); //base64 userid 50String Mailpwd = ("cGFzc3dvcmQ="); // base 64 pwd 51 52 53const char smtp_server[ ] = "smtp.orange.fr"; // SMTP server 54const char smtp_protocol[ ] = "TCP"; 55const char smtp_port[ ] = "25"; 56 57// mail sender and receipients 58String MailFrom = "MAIL FROM: <hans@mymail.com>\ \ 59"; // change to valid sender email address 60String HeaderFrom = "From: Hans <hans@mymail.com>\ \ 61"; // change to valid sender email address 62String MailRCPT1 = "RCPT TO: <john@hismail.com>\ \ 63"; // 2 separate lines or like RCPT TO: friend@hotmail.com, friend2@yahoo.com 64String HeaderTo1 = "To: john@hismail.com\ \ 65"; 66String MailRCPT2 = "RCPT TO: <ronald@anothermail.com>\ \ 67"; 68// String MailRCPT2 = ""; // to leave out this 2nd receiver 69String HeaderTo2 = "CC: ronald@anothermail.com\ \ 70"; 71 72void setup() { 73 Serial.begin(115200); // Start de seriele monitor op 9600 baud. 74 Serial1.begin(19200); // Start de software monitor op 9600 baud. 75} 76 77void loop() { 78 // we end execution op sending email if something is not going up to plan.... 79 switch (casevar) { 80 case 0: 81 Serial.println("Error during sending email"); 82 delay(10000); 83 casevar = 100; 84 break; 85 case 1: 86 Serial.println("\ \ 87----- [ Snelheid ESP naar 115200 bps ] -----a"); 88 sendcommand("AT+CIOBAUD=115200\ \ 89", "OK", 1000, viewdata); 90 Serial1.end(); 91 Serial1.begin(115200); // Start de software monitor op 115200 baud. 92 casevar = 2; 93 break; 94 case 2: 95 Serial.println("\ \ 96----- [ check if ESP reacts ] -----"); 97 if (sendcommand("AT\ \ 98", "OK\ \ 99", 3000, viewdata) == 1) {casevar = 3;} else {casevar = 0;}; 100 break; 101 case 3: 102 Serial.println("\ \ 103----- [ disconnect WiFi ] -----"); 104 sendcommand("AT+CWQAP\ \ 105", "OK\ \ 106", 3000, viewdata); 107 casevar++; 108 break; 109 case 4: 110 Serial.println("\ \ 111----- [ disconnect WiFi ] -----"); 112 sendcommand("AT+CWQAP\ \ 113", "OK\ \ 114", 3000, viewdata); 115 casevar++; 116 break; 117 case 5: 118 Serial.println("\ \ 119----- [ RESET DE MODULE (RST) ] -----"); 120 sendcommand("AT+RST\ \ 121", "ready\ \ 122", 8000, viewdata); 123 casevar++; 124 break; 125 case 6: 126 Serial.println("\ \ 127----- [ disconnect WiFi ] -----"); 128 if (sendcommand("AT+CWQAP\ \ 129", "OK\ \ 130", 3000, viewdata) == 1) {casevar++;} else {casevar = 0;}; 131 break; 132 case 7: 133 Serial.println("\ \ 134----- [ ZET ESP IN STATION MODE (CWMODE) ] -----"); 135 if (sendcommand("AT+CWMODE=1\ \ 136", "OK\ \ 137", 2000, viewdata) == 1) {casevar++;} else {casevar = 0;}; 138 break; 139 case 8: 140 Serial.println("\ \ 141----- [ INLOGGEN OP WIFI (CWJAP_CUR) ] -----"); 142 sprintf(aux_str, "AT+CWJAP_CUR=\\"%s\\",\\"%s\\"\ \ 143", SSID_string , PASS_string); 144 if (sendcommand(aux_str, "\ \ 145OK\ \ 146", 10000, viewdata) == 1) {casevar++;} else {casevar = 0;}; 147 break; 148 case 9: 149 Serial.println("\ \ 150----- [IP ADRES] -----"); 151 if (sendcommand("AT+CIFSR\ \ 152", "OK", 2000, viewdata) == 1) {casevar++;} else {casevar = 0;}; 153 break; 154 case 10: 155 Serial.println("Configuring Email.."); 156 sprintf(aux_str, "AT+CIPSTART=\\"%s\\",\\"%s\\",%s\ \ 157", smtp_protocol, smtp_server, smtp_port); 158 if (sendcommand(aux_str, "server ready\ \ 159", 2000, viewdata) == 1) {casevar++;} else {casevar = 0;}; 160 break; 161 case 11: 162 Serial.println("\ \ 163----- [ SENDING MESSAGE IN 2 STEPS - 1rst length string; 2nd the string... ] -----"); 164 SndTxt = "HELO Maison Neuve\ \ 165"; 166 lastStringLength = SndTxt.length(); 167 sprintf(buf, "AT+CIPSEND=%d\ \ 168", lastStringLength); 169 if (sendcommand(buf, "OK\ \ 170>", 3000, viewdata) == 1) {casevar++;} else {casevar = 0;}; 171 break; 172 case 12: 173 SndTxt.toCharArray(buf, lastStringLength+1); 174 if (sendcommand(buf, "meet you\ \ 175", 9000, viewdata)) {casevar++;} else {casevar = 0;}; 176 break; 177 case 13: 178 if (authentication) {casevar = 14;} else {casevar = 30;}; 179 break; 180 case 14: 181 // authentication ---- to be checked and senddata changed in sendcommand with updated case statements 182 //see "http://base64-encoder-online.waraxe.us/" 183 SndTxt = "AUTH PLAIN LOGIN GSSAPI DIGEST-MD5\ \ 184"; 185 lastStringLength = SndTxt.length(); 186 sprintf(buf, "AT+CIPSEND=%d\ \ 187", lastStringLength); 188 sendData(buf, 500, viewdata); 189 delay(3000); 190 sendData(SndTxt, 500, viewdata); 191 SndTxt = Mailuser+"\ \ 192"; 193 lastStringLength = SndTxt.length(); 194 sprintf(buf, "AT+CIPSEND=%d\ \ 195", lastStringLength); 196 sendData(buf, 500, viewdata); 197 delay(1000); 198 sendData(SndTxt, 500, viewdata); 199 SndTxt = Mailpwd+"\ \ 200"; 201 lastStringLength = SndTxt.length(); 202 sprintf(buf, "AT+CIPSEND=%d\ \ 203", lastStringLength); 204 sendData(buf, 500, viewdata); 205 delay(1000); 206 sendData(SndTxt, 500, viewdata); 207 break; 208 case 30: 209 if (sendemail) {casevar = 31;} else {casevar = 100;}; 210 break; 211 case 31: 212 SndTxt = MailFrom; 213 lastStringLength = SndTxt.length(); 214 sprintf(buf, "AT+CIPSEND=%d\ \ 215", lastStringLength); 216 if (sendcommand(buf, "OK\ \ 217>", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 218 break; 219 case 32: 220 SndTxt.toCharArray(buf, lastStringLength+1); 221 if (sendcommand(buf, "sender ok", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 222 break; 223 case 33: 224 SndTxt = MailRCPT1; 225 lastStringLength = SndTxt.length(); 226 sprintf(buf, "AT+CIPSEND=%d\ \ 227", lastStringLength); 228 if (sendcommand(buf, "OK\ \ 229>", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 230 break; 231 case 34: 232 SndTxt.toCharArray(buf, lastStringLength+1); 233 if (sendcommand(buf, "recipient ok", 5000, viewdata)) {casevar++;} else {casevar = 0;}; 234 break; 235 case 35: 236 if (MailRCPT2 == "") { 237 casevar = casevar + 2; 238 break;} 239 SndTxt = MailRCPT2; 240 lastStringLength = SndTxt.length(); 241 sprintf(buf, "AT+CIPSEND=%d\ \ 242", lastStringLength); 243 if (sendcommand(buf, "OK\ \ 244>", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 245 break; 246 case 36: 247 SndTxt.toCharArray(buf, lastStringLength+1); 248 if (sendcommand(buf, "recipient ok", 5000, viewdata)) {casevar++;} else {casevar = 0;}; 249 break; 250 case 37: 251 SndTxt = "DATA\ \ 252"; 253 lastStringLength = SndTxt.length(); 254 sprintf(buf, "AT+CIPSEND=%d\ \ 255", lastStringLength); 256 if (sendcommand(buf, "OK\ \ 257>", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 258 break; 259 case 38: 260 SndTxt.toCharArray(buf, lastStringLength+1); 261 if (sendcommand(buf, "SEND OK\ \ 262", 5000, viewdata)) {casevar++;} else {casevar = 0;}; 263 break; 264 case 39: 265 SndTxt = HeaderFrom; 266 lastStringLength = SndTxt.length(); 267 sprintf(buf, "AT+CIPSEND=%d\ \ 268", lastStringLength); 269 if (sendcommand(buf, "OK\ \ 270>", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 271 break; 272 case 40: 273 SndTxt.toCharArray(buf, lastStringLength+1); 274 if (sendcommand(buf, "SEND OK\ \ 275", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 276 break; 277 case 41: 278 SndTxt = HeaderTo1; 279 lastStringLength = SndTxt.length(); 280 sprintf(buf, "AT+CIPSEND=%d\ \ 281", lastStringLength); 282 if (sendcommand(buf, "OK\ \ 283>", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 284 break; 285 case 42: 286 SndTxt.toCharArray(buf, lastStringLength+1); 287 if (sendcommand(buf, "SEND OK\ \ 288", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 289 break; 290 case 43: 291 if (MailRCPT2 == "") { 292 casevar = casevar + 2; 293 break;} 294 SndTxt = HeaderTo2; 295 lastStringLength = SndTxt.length(); 296 sprintf(buf, "AT+CIPSEND=%d\ \ 297", lastStringLength); 298 if (sendcommand(buf, "OK\ \ 299>", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 300 break; 301 case 44: 302 SndTxt.toCharArray(buf, lastStringLength+1); 303 if (sendcommand(buf, "SEND OK\ \ 304", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 305 break; 306 case 45: 307 SndTxt = "Bcc: \ \ 308"; 309 lastStringLength = SndTxt.length(); 310 sprintf(buf, "AT+CIPSEND=%d\ \ 311", lastStringLength); 312 if (sendcommand(buf, "OK\ \ 313>", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 314 break; 315 case 46: 316 SndTxt.toCharArray(buf, lastStringLength+1); 317 if (sendcommand(buf, "SEND OK\ \ 318", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 319 break; 320 case 47: 321 SndTxt = "Subject: test\ \ 322"; 323 lastStringLength = SndTxt.length(); 324 sprintf(buf, "AT+CIPSEND=%d\ \ 325", lastStringLength); 326 if (sendcommand(buf, "OK\ \ 327>", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 328 break; 329 case 48: 330 SndTxt.toCharArray(buf, lastStringLength+1); 331 if (sendcommand(buf, "SEND OK\ \ 332", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 333 break; 334 case 49: 335 SndTxt = "Testing Success\ \ 336"; 337 lastStringLength = SndTxt.length(); 338 sprintf(buf, "AT+CIPSEND=%d\ \ 339", lastStringLength); 340 if (sendcommand(buf, "OK\ \ 341>", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 342 break; 343 case 50: 344 SndTxt.toCharArray(buf, lastStringLength+1); 345 if (sendcommand(buf, "SEND OK\ \ 346", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 347 break; 348 case 51: 349 SndTxt = "Testing Success no 2 pse reply!!\ \ 350"; 351 lastStringLength = SndTxt.length(); 352 sprintf(buf, "AT+CIPSEND=%d\ \ 353", lastStringLength); 354 if (sendcommand(buf, "OK\ \ 355>", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 356 break; 357 case 52: 358 SndTxt.toCharArray(buf, lastStringLength+1); 359 if (sendcommand(buf, "SEND OK\ \ 360", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 361 break; 362 case 53: 363 SndTxt = "\ \ 364.\ \ 365"; 366 lastStringLength = SndTxt.length(); 367 sprintf(buf, "AT+CIPSEND=%d\ \ 368", lastStringLength); 369 if (sendcommand(buf, "OK\ \ 370>", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 371 break; 372 case 54: 373 SndTxt.toCharArray(buf, lastStringLength+1); 374 if (sendcommand(buf, "SEND OK\ \ 375", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 376 break; 377 case 55: 378 SndTxt = "QUIT\ \ 379"; 380 lastStringLength = SndTxt.length(); 381 sprintf(buf, "AT+CIPSEND=%d\ \ 382", lastStringLength); 383 if (sendcommand(buf, "OK\ \ 384>", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 385 break; 386 case 56: 387 SndTxt.toCharArray(buf, lastStringLength+1); 388 if (sendcommand(buf, "SEND OK\ \ 389", 3000, viewdata)) {casevar = 100;} else {casevar = 0;}; 390 Serial.println("Email Sent..."); 391 break; 392 case 100: // close connection with server (might have been done already....) 393 sendcommand("AT+CIPCLOSE\ \ 394", "OK\ \ 395", 9000, viewdata); 396 casevar++; 397 break; 398 case 101://close wifi connection 399 if (sendcommand("AT+CWQAP\ \ 400", "OK\ \ 401", 9000, viewdata)) {casevar++;} else {casevar = 0;}; 402 casevar = 200; 403 Serial.println("Done.... starting to do nothing usefull for the moment"); 404 break; 405 case 200: 406// Serial.println("Ready"); 407 delay(10000); 408 break; 409 } 410} 411 412int8_t sendcommand(char* command, char* expected_answer, unsigned int timeout, boolean debug){ 413 414 uint8_t x=0, answer=0; 415 char response[1000]; 416 unsigned long previous; 417 418 memset(response, '\\0', 1000); // Initialice the string 419 420 while( Serial1.available() > 0) Serial1.read(); // Clean the input buffer 421 if (debug) { 422 Serial.print("--> sendcommand out : "); 423 Serial.println(command);} 424 Serial1.print(command); // Send the command 425 426 x = 0; 427 previous = millis(); 428 429 // this loop waits for the answer 430 do{ 431 // if there are data in the UART input buffer, reads it and checks for the answer 432 if(Serial1.available() != 0){ 433 response[x] = Serial1.read(); 434 x++; 435 // check if the desired answer is in the response of the module 436 if (strstr(response, expected_answer) != NULL) 437 { 438 answer = 1; 439 if (debug) { 440 Serial.print("response found : "); 441 Serial.println(expected_answer);} 442 } 443 } 444 // Waits for the answer with time out 445 } 446 while((answer == 0) && ((millis() - previous) < timeout)); 447 448 if (debug) { 449 Serial.println("--> sendcommand response from server : "); 450 Serial.println(response);} 451 return answer; 452} 453 454String sendData(String command, const int timeout, boolean debug) { 455 String response = ""; 456 if (debug) { Serial.print("--> Senddata : "); 457 Serial.print(command);} 458 Serial1.print(command); // Stuur een "lees" karakter naar de ESP. 459 long int time = millis(); 460 if (debug) {Serial.println("--> Senddata - timeoutloop start");} 461 462 while ( (time + timeout) > millis()) { 463 while (Serial1.available()) { // De ESP heeft data om weer te geven, laat het zien in de serial monitor. 464 char c = Serial1.read(); // Lees het volgende karakter. 465 response += c; 466 } 467 } 468 if (debug) { 469 Serial.print("--> Senddata finished : "); 470 Serial.println(response); 471 } 472 return response; 473}
Fritzing project Arduino (mega) with ESP8266
arduino
Send email via Arduino with ESP8266 in plain code (no wifi libraries)
1// 2// original project by Sebastiaan Ebeltjes (domoticx.nl) 3// 4// 5 Hardware: Arduino (Mega 2650) + ESP8266 module or other Arduino : adapt pint to 6 used arduino! 7// 8// ----------------------------- 9// | 1 2 | 10// 11 | 3 4 component side | 12// | 5 6 ESP8266 | 13// | 7 8 | 14// 15 ----------------------------- 16// 17// 1 - Mega 2650 pin 18 - TX1 18// 2 - 19 Gnd 20// 3 - 3v3 21// 4 - nc 22// 5 - nc 23// 6 - nc 24// 7 - 3v3 25// 8 - 26 Mega 2650 pin 19 - RX1 27// 28// tried several wifi projects but all failed to 29 complile due to errors in the WIFI6266 libraries 30// (if sombody has a working 31 set availible, pse let me know where to find it :-) 32// found a webserver example 33 by Sebastiaan Ebeltjes (domoticx.nl) and used this as starting point 34// Did some 35 rough programming to send an SMTP email 36// To run the program, adapt to your 37 WiFi settings (ssid and ssid-password), change to your own SMPT-server, 38// change 39 the email addresses used to valid email addresses 40// After sending the email 41 the program goes in an idle state. Adapt this to your wishes tot triger the email 42 sending 43 44 45#include <SoftwareSerial.h> 46 47char aux_str[129]; 48 49String 50 SndTxt = ""; 51unsigned int lastStringLength = SndTxt.length(); // previous 52 length of the String 53 54char buf[150]; 55 56boolean viewdata = true; 57boolean 58 authentication = false; 59boolean sendemail = true; 60int casevar = 1; 61 62// 63 WiFi settings SSID & pwd 64const char SSID_string[ ] = "MyWifi"; // just change 65 MyWifi into your ssid 66const char PASS_string[ ] = "MyPwd"; // just change 67 MyPwd into the ssid pwd 68 69String Mailuser = ("dXNlcmlk"); //base64 userid 70String 71 Mailpwd = ("cGFzc3dvcmQ="); // base 64 pwd 72 73 74const char smtp_server[ 75 ] = "smtp.orange.fr"; // SMTP server 76const char smtp_protocol[ ] = "TCP"; 77 78const char smtp_port[ ] = "25"; 79 80// mail sender and receipients 81String 82 MailFrom = "MAIL FROM: <hans@mymail.com>\ \ 83"; // change to valid sender email 84 address 85String HeaderFrom = "From: Hans <hans@mymail.com>\ \ 86"; // change 87 to valid sender email address 88String MailRCPT1 = "RCPT TO: <john@hismail.com>\ \ 89"; 90 // 2 separate lines or like RCPT TO: friend@hotmail.com, friend2@yahoo.com 91String 92 HeaderTo1 = "To: john@hismail.com\ \ 93"; 94String MailRCPT2 = "RCPT TO: <ronald@anothermail.com>\ \ 95"; 96// 97 String MailRCPT2 = ""; // to leave out this 2nd receiver 98String HeaderTo2 = 99 "CC: ronald@anothermail.com\ \ 100"; 101 102void setup() { 103 Serial.begin(115200); 104 // Start de seriele monitor op 9600 baud. 105 Serial1.begin(19200); // Start de 106 software monitor op 9600 baud. 107} 108 109void loop() { 110 // we end execution 111 op sending email if something is not going up to plan.... 112 switch (casevar) 113 { 114 case 0: 115 Serial.println("Error during sending email"); 116 delay(10000); 117 118 casevar = 100; 119 break; 120 case 1: 121 Serial.println("\ \ 122----- 123 [ Snelheid ESP naar 115200 bps ] -----a"); 124 sendcommand("AT+CIOBAUD=115200\ \ 125", 126 "OK", 1000, viewdata); 127 Serial1.end(); 128 Serial1.begin(115200); 129 // Start de software monitor op 115200 baud. 130 casevar = 2; 131 break; 132 133 case 2: 134 Serial.println("\ \ 135----- [ check if ESP reacts ] -----"); 136 137 if (sendcommand("AT\ \ 138", "OK\ \ 139", 3000, viewdata) == 1) {casevar 140 = 3;} else {casevar = 0;}; 141 break; 142 case 3: 143 Serial.println("\ \ 144----- 145 [ disconnect WiFi ] -----"); 146 sendcommand("AT+CWQAP\ \ 147", "OK\ \ 148", 149 3000, viewdata); 150 casevar++; 151 break; 152 case 4: 153 Serial.println("\ \ 154----- 155 [ disconnect WiFi ] -----"); 156 sendcommand("AT+CWQAP\ \ 157", "OK\ \ 158", 159 3000, viewdata); 160 casevar++; 161 break; 162 case 5: 163 Serial.println("\ \ 164----- 165 [ RESET DE MODULE (RST) ] -----"); 166 sendcommand("AT+RST\ \ 167", "ready\ \ 168", 169 8000, viewdata); 170 casevar++; 171 break; 172 case 6: 173 Serial.println("\ \ 174----- 175 [ disconnect WiFi ] -----"); 176 if (sendcommand("AT+CWQAP\ \ 177", "OK\ \ 178", 179 3000, viewdata) == 1) {casevar++;} else {casevar = 0;}; 180 break; 181 case 182 7: 183 Serial.println("\ \ 184----- [ ZET ESP IN STATION MODE (CWMODE) ] 185 -----"); 186 if (sendcommand("AT+CWMODE=1\ \ 187", "OK\ \ 188", 2000, viewdata) 189 == 1) {casevar++;} else {casevar = 0;}; 190 break; 191 case 8: 192 Serial.println("\ \ 193----- 194 [ INLOGGEN OP WIFI (CWJAP_CUR) ] -----"); 195 sprintf(aux_str, "AT+CWJAP_CUR=\\"%s\\",\\"%s\\"\ \ 196", 197 SSID_string , PASS_string); 198 if (sendcommand(aux_str, "\ \ 199OK\ \ 200", 201 10000, viewdata) == 1) {casevar++;} else {casevar = 0;}; 202 break; 203 case 204 9: 205 Serial.println("\ \ 206----- [IP ADRES] -----"); 207 if (sendcommand("AT+CIFSR\ \ 208", 209 "OK", 2000, viewdata) == 1) {casevar++;} else {casevar = 0;}; 210 break; 211 212 case 10: 213 Serial.println("Configuring Email.."); 214 sprintf(aux_str, 215 "AT+CIPSTART=\\"%s\\",\\"%s\\",%s\ \ 216", smtp_protocol, smtp_server, smtp_port); 217 218 if (sendcommand(aux_str, "server ready\ \ 219", 2000, viewdata) == 1) 220 {casevar++;} else {casevar = 0;}; 221 break; 222 case 11: 223 Serial.println("\ \ 224----- 225 [ SENDING MESSAGE IN 2 STEPS - 1rst length string; 2nd the string... ] -----"); 226 227 SndTxt = "HELO Maison Neuve\ \ 228"; 229 lastStringLength = SndTxt.length(); 230 231 sprintf(buf, "AT+CIPSEND=%d\ \ 232", lastStringLength); 233 if (sendcommand(buf, 234 "OK\ \ 235>", 3000, viewdata) == 1) {casevar++;} else {casevar = 0;}; 236 break; 237 238 case 12: 239 SndTxt.toCharArray(buf, lastStringLength+1); 240 if 241 (sendcommand(buf, "meet you\ \ 242", 9000, viewdata)) {casevar++;} else {casevar 243 = 0;}; 244 break; 245 case 13: 246 if (authentication) {casevar 247 = 14;} else {casevar = 30;}; 248 break; 249 case 14: 250 // authentication 251 ---- to be checked and senddata changed in sendcommand with updated case statements 252 253 //see "http://base64-encoder-online.waraxe.us/" 254 SndTxt = "AUTH 255 PLAIN LOGIN GSSAPI DIGEST-MD5\ \ 256"; 257 lastStringLength = SndTxt.length(); 258 259 sprintf(buf, "AT+CIPSEND=%d\ \ 260", lastStringLength); 261 sendData(buf, 262 500, viewdata); 263 delay(3000); 264 sendData(SndTxt, 500, viewdata); 265 266 SndTxt = Mailuser+"\ \ 267"; 268 lastStringLength = SndTxt.length(); 269 270 sprintf(buf, "AT+CIPSEND=%d\ \ 271", lastStringLength); 272 sendData(buf, 273 500, viewdata); 274 delay(1000); 275 sendData(SndTxt, 500, viewdata); 276 277 SndTxt = Mailpwd+"\ \ 278"; 279 lastStringLength = SndTxt.length(); 280 281 sprintf(buf, "AT+CIPSEND=%d\ \ 282", lastStringLength); 283 sendData(buf, 284 500, viewdata); 285 delay(1000); 286 sendData(SndTxt, 500, viewdata); 287 288 break; 289 case 30: 290 if (sendemail) {casevar = 31;} else {casevar 291 = 100;}; 292 break; 293 case 31: 294 SndTxt = MailFrom; 295 lastStringLength 296 = SndTxt.length(); 297 sprintf(buf, "AT+CIPSEND=%d\ \ 298", lastStringLength); 299 300 if (sendcommand(buf, "OK\ \ 301>", 3000, viewdata)) {casevar++;} else {casevar 302 = 0;}; 303 break; 304 case 32: 305 SndTxt.toCharArray(buf, lastStringLength+1); 306 307 if (sendcommand(buf, "sender ok", 3000, viewdata)) {casevar++;} else {casevar 308 = 0;}; 309 break; 310 case 33: 311 SndTxt = MailRCPT1; 312 lastStringLength 313 = SndTxt.length(); 314 sprintf(buf, "AT+CIPSEND=%d\ \ 315", lastStringLength); 316 317 if (sendcommand(buf, "OK\ \ 318>", 3000, viewdata)) {casevar++;} else {casevar 319 = 0;}; 320 break; 321 case 34: 322 SndTxt.toCharArray(buf, lastStringLength+1); 323 324 if (sendcommand(buf, "recipient ok", 5000, viewdata)) {casevar++;} else 325 {casevar = 0;}; 326 break; 327 case 35: 328 if (MailRCPT2 == "") 329 { 330 casevar = casevar + 2; 331 break;} 332 SndTxt = MailRCPT2; 333 334 lastStringLength = SndTxt.length(); 335 sprintf(buf, "AT+CIPSEND=%d\ \ 336", 337 lastStringLength); 338 if (sendcommand(buf, "OK\ \ 339>", 3000, viewdata)) 340 {casevar++;} else {casevar = 0;}; 341 break; 342 case 36: 343 SndTxt.toCharArray(buf, 344 lastStringLength+1); 345 if (sendcommand(buf, "recipient ok", 5000, viewdata)) 346 {casevar++;} else {casevar = 0;}; 347 break; 348 case 37: 349 SndTxt 350 = "DATA\ \ 351"; 352 lastStringLength = SndTxt.length(); 353 sprintf(buf, 354 "AT+CIPSEND=%d\ \ 355", lastStringLength); 356 if (sendcommand(buf, "OK\ \ 357>", 358 3000, viewdata)) {casevar++;} else {casevar = 0;}; 359 break; 360 case 361 38: 362 SndTxt.toCharArray(buf, lastStringLength+1); 363 if (sendcommand(buf, 364 "SEND OK\ \ 365", 5000, viewdata)) {casevar++;} else {casevar = 0;}; 366 break; 367 368 case 39: 369 SndTxt = HeaderFrom; 370 lastStringLength = SndTxt.length(); 371 372 sprintf(buf, "AT+CIPSEND=%d\ \ 373", lastStringLength); 374 if (sendcommand(buf, 375 "OK\ \ 376>", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 377 break; 378 379 case 40: 380 SndTxt.toCharArray(buf, lastStringLength+1); 381 if 382 (sendcommand(buf, "SEND OK\ \ 383", 3000, viewdata)) {casevar++;} else {casevar 384 = 0;}; 385 break; 386 case 41: 387 SndTxt = HeaderTo1; 388 lastStringLength 389 = SndTxt.length(); 390 sprintf(buf, "AT+CIPSEND=%d\ \ 391", lastStringLength); 392 393 if (sendcommand(buf, "OK\ \ 394>", 3000, viewdata)) {casevar++;} else {casevar 395 = 0;}; 396 break; 397 case 42: 398 SndTxt.toCharArray(buf, lastStringLength+1); 399 400 if (sendcommand(buf, "SEND OK\ \ 401", 3000, viewdata)) {casevar++;} else 402 {casevar = 0;}; 403 break; 404 case 43: 405 if (MailRCPT2 == "") 406 { 407 casevar = casevar + 2; 408 break;} 409 SndTxt = HeaderTo2; 410 411 lastStringLength = SndTxt.length(); 412 sprintf(buf, "AT+CIPSEND=%d\ \ 413", 414 lastStringLength); 415 if (sendcommand(buf, "OK\ \ 416>", 3000, viewdata)) 417 {casevar++;} else {casevar = 0;}; 418 break; 419 case 44: 420 SndTxt.toCharArray(buf, 421 lastStringLength+1); 422 if (sendcommand(buf, "SEND OK\ \ 423", 3000, viewdata)) 424 {casevar++;} else {casevar = 0;}; 425 break; 426 case 45: 427 SndTxt 428 = "Bcc: \ \ 429"; 430 lastStringLength = SndTxt.length(); 431 sprintf(buf, 432 "AT+CIPSEND=%d\ \ 433", lastStringLength); 434 if (sendcommand(buf, "OK\ \ 435>", 436 3000, viewdata)) {casevar++;} else {casevar = 0;}; 437 break; 438 case 439 46: 440 SndTxt.toCharArray(buf, lastStringLength+1); 441 if (sendcommand(buf, 442 "SEND OK\ \ 443", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 444 break; 445 446 case 47: 447 SndTxt = "Subject: test\ \ 448"; 449 lastStringLength 450 = SndTxt.length(); 451 sprintf(buf, "AT+CIPSEND=%d\ \ 452", lastStringLength); 453 454 if (sendcommand(buf, "OK\ \ 455>", 3000, viewdata)) {casevar++;} else {casevar 456 = 0;}; 457 break; 458 case 48: 459 SndTxt.toCharArray(buf, lastStringLength+1); 460 461 if (sendcommand(buf, "SEND OK\ \ 462", 3000, viewdata)) {casevar++;} else 463 {casevar = 0;}; 464 break; 465 case 49: 466 SndTxt = "Testing Success\ \ 467"; 468 469 lastStringLength = SndTxt.length(); 470 sprintf(buf, "AT+CIPSEND=%d\ \ 471", 472 lastStringLength); 473 if (sendcommand(buf, "OK\ \ 474>", 3000, viewdata)) 475 {casevar++;} else {casevar = 0;}; 476 break; 477 case 50: 478 SndTxt.toCharArray(buf, 479 lastStringLength+1); 480 if (sendcommand(buf, "SEND OK\ \ 481", 3000, viewdata)) 482 {casevar++;} else {casevar = 0;}; 483 break; 484 case 51: 485 SndTxt 486 = "Testing Success no 2 pse reply!!\ \ 487"; 488 lastStringLength = SndTxt.length(); 489 490 sprintf(buf, "AT+CIPSEND=%d\ \ 491", lastStringLength); 492 if (sendcommand(buf, 493 "OK\ \ 494>", 3000, viewdata)) {casevar++;} else {casevar = 0;}; 495 break; 496 497 case 52: 498 SndTxt.toCharArray(buf, lastStringLength+1); 499 if 500 (sendcommand(buf, "SEND OK\ \ 501", 3000, viewdata)) {casevar++;} else {casevar 502 = 0;}; 503 break; 504 case 53: 505 SndTxt = "\ \ 506.\ \ 507"; 508 509 lastStringLength = SndTxt.length(); 510 sprintf(buf, "AT+CIPSEND=%d\ \ 511", 512 lastStringLength); 513 if (sendcommand(buf, "OK\ \ 514>", 3000, viewdata)) 515 {casevar++;} else {casevar = 0;}; 516 break; 517 case 54: 518 SndTxt.toCharArray(buf, 519 lastStringLength+1); 520 if (sendcommand(buf, "SEND OK\ \ 521", 3000, viewdata)) 522 {casevar++;} else {casevar = 0;}; 523 break; 524 case 55: 525 SndTxt 526 = "QUIT\ \ 527"; 528 lastStringLength = SndTxt.length(); 529 sprintf(buf, 530 "AT+CIPSEND=%d\ \ 531", lastStringLength); 532 if (sendcommand(buf, "OK\ \ 533>", 534 3000, viewdata)) {casevar++;} else {casevar = 0;}; 535 break; 536 case 537 56: 538 SndTxt.toCharArray(buf, lastStringLength+1); 539 if (sendcommand(buf, 540 "SEND OK\ \ 541", 3000, viewdata)) {casevar = 100;} else {casevar = 0;}; 542 Serial.println("Email 543 Sent..."); 544 break; 545 case 100: // close connection with server (might 546 have been done already....) 547 sendcommand("AT+CIPCLOSE\ \ 548", "OK\ \ 549", 550 9000, viewdata); 551 casevar++; 552 break; 553 case 101://close 554 wifi connection 555 if (sendcommand("AT+CWQAP\ \ 556", "OK\ \ 557", 9000, 558 viewdata)) {casevar++;} else {casevar = 0;}; 559 casevar = 200; 560 Serial.println("Done.... 561 starting to do nothing usefull for the moment"); 562 break; 563 case 564 200: 565// Serial.println("Ready"); 566 delay(10000); 567 break; 568 569 } 570} 571 572int8_t sendcommand(char* command, char* expected_answer, unsigned 573 int timeout, boolean debug){ 574 575 uint8_t x=0, answer=0; 576 char response[1000]; 577 578 unsigned long previous; 579 580 memset(response, '\\0', 1000); // Initialice 581 the string 582 583 while( Serial1.available() > 0) Serial1.read(); // Clean 584 the input buffer 585 if (debug) { 586 Serial.print("--> sendcommand out : "); 587 588 Serial.println(command);} 589 Serial1.print(command); // Send the command 590 591 592 x = 0; 593 previous = millis(); 594 595 // this loop waits for the 596 answer 597 do{ 598 // if there are data in the UART input buffer, reads it and 599 checks for the answer 600 if(Serial1.available() != 0){ 601 response[x] 602 = Serial1.read(); 603 x++; 604 // check if the desired answer is in the 605 response of the module 606 if (strstr(response, expected_answer) != NULL) 607 608 { 609 answer = 1; 610 if (debug) { 611 Serial.print("response 612 found : "); 613 Serial.println(expected_answer);} 614 } 615 } 616 617 // Waits for the answer with time out 618 } 619 while((answer == 0) && ((millis() 620 - previous) < timeout)); 621 622 if (debug) { 623 Serial.println("--> sendcommand 624 response from server : "); 625 Serial.println(response);} 626 return answer; 627} 628 629String 630 sendData(String command, const int timeout, boolean debug) { 631 String response 632 = ""; 633 if (debug) { Serial.print("--> Senddata : "); 634 Serial.print(command);} 635 636 Serial1.print(command); // Stuur een "lees" karakter naar de ESP. 637 long 638 int time = millis(); 639 if (debug) {Serial.println("--> Senddata - timeoutloop 640 start");} 641 642 while ( (time + timeout) > millis()) { 643 while (Serial1.available()) 644 { // De ESP heeft data om weer te geven, laat het zien in de serial monitor. 645 646 char c = Serial1.read(); // Lees het volgende karakter. 647 response 648 += c; 649 } 650 } 651 if (debug) { 652 Serial.print("--> Senddata finished 653 : "); 654 Serial.println(response); 655 } 656 return response; 657}
Downloadable files
Fritzing project Arduino (mega) with ESP8266
To send email in plain code (no wifi libraries)
Fritzing project Arduino (mega) with ESP8266
Fritzing project Arduino (mega) with ESP8266
To send email in plain code (no wifi libraries)
Fritzing project Arduino (mega) with ESP8266
Arduino code to send email via SMTP
Arduino code to send email via SMTP
Arduino code to send email via SMTP
Comments
Only logged in users can leave comments
Hans63
0 Followers
•0 Projects
Table of contents
Intro
10
0