Using Arduino to send or receive emails is a popular project among makers and hobbyists. Here's a breakdown of how you can set it up, along with potential applications and considerations:
Using an Ethernet or Wi-Fi Shield/Module:
Hardware:
Arduino board (e.g., Uno, Mega, Nano, etc.)
Network module (e.g., ESP8266, ESP32, or Ethernet Shield)
Libraries:
For Wi-Fi Modules: Use libraries like WiFi.h
(ESP32) or ESP8266WiFi.h
.
For SMTP Communication: Use libraries like ESP_Mail_Client
or direct SMTP commands.
Here’s a detailed description of the components necessary to send an email using Arduino UNO, a push button, an ESP8266 module, and SMTP:
Arduino UNO
Acts as the main controller to process the push button signal and communicate with the ESP8266 module for sending an email via SMTP.
ESP8266 Wi-Fi Module
Provides Wi-Fi connectivity to the Arduino UNO. It connects to the internet and sends the email using the SMTP protocol.
Push Button
Acts as the trigger for sending an email. When the button is pressed, the Arduino detects the signal and initiates the email process.
3V/5V power module
It supplies a stable 5V with sufficient current for the ESP8266.
4- Power supply
A 9V Battery is used as the primary power source for the setup. It is used power the board, ESP8266.
5- Jumper Wires
Jumper wires will be used to make connections between the components.
6- Breadboard:
A Breadboard provides a platform to arrange and connect components without soldering.
To perform the assembly, you can connect:
The RX pin of the ESP8266 board to pin 4 of the Arduino board
The TX pin of the ESP8266 board to pin 3 of the Arduino board
The GND pin of the ESP8266 board to the GND of the Arduino board
The two pins 3V3 and EN of the ESP8266 board to the 5V pin of the power supply module
The RST pin of the ESP8266 board to pin 8 of the Arduino board
the first leg of the push button to pin A0 of the Arduino board
the second leg of the push button to GND of the Arduino board
Below is the Arduino code to send an email using the ESP8266 and SMTP:
We must use this librariy: Adafruit_ESP8266.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 |
#include "Adafruit_ESP8266.h" /* -------------------------------------------------------------------------------------------------------------------------- -- @description A sketch for sending email via SMTP. Working Example: https://www.youtube.com/watch?v=n5WZ_BNRvRY -- You must use an account which can provide unencrypted authenticated access. -- This example was tested with an AOL and Time Warner email accounts. GMail does not offer unecrypted authenticated access. -- To obtain your email's SMTP server and port simply Google it e.g. [my email domain] SMTP settings -- For example for timewarner you'll get to this page http://www.timewarnercable.com/en/support/faqs/faqs-internet/e-mailacco/incoming-outgoing-server-addresses.html -- To Learn more about SMTP email visit: -- SMTP Commands Reference - http://www.samlogic.net/articles/smtp-commands-reference.htm -- See "SMTP transport example" in this page http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol ----------------------------------------------------------------------------------------------------------------------------- */ /*------------------------------------------------------------------------ Requires SoftwareSerial and an ESP8266 that's been flashed with recent 'AT' firmware operating at 9600 baud. Only tested w/Adafruit-programmed modules: https://www.adafruit.com/product/2282 The ESP8266 is a 3.3V device. Safe operation with 5V devices (most Arduino boards) requires a logic-level shifter for TX and RX signals. ------------------------------------------------------------------------*/ #include "SoftwareSerial.h" #define ESP_RX 3 #define ESP_TX 4 #define ESP_RST 8 SoftwareSerial softser(ESP_RX, ESP_TX); // Must declare output stream before Adafruit_ESP8266 constructor; can be // a SoftwareSerial stream, or Serial/Serial1/etc. for UART. Adafruit_ESP8266 wifi(&softser, &Serial, ESP_RST); // Must call begin() on the stream(s) before using Adafruit_ESP8266 object. #define ESP_SSID "************" // Your network name here #define ESP_PASS "************" // Your network password here char EMAIL_FROM[] = "adresse email émetteur"; char EMAIL_PASSWORD[] = "mot de passe"; char EMAIL_TO[] = "adresse email récepteur"; char SUBJECT[] = "My ESP8266"; char EMAIL_CONTENT[] = "Hello,\r\nThis is a message from your ESP8266."; // We'll need your EMAIL_FROM and its EMAIL_PASSWORD base64 encoded, you can use https://www.base64encode.org/ #define EMAIL_FROM_BASE64 "********************" #define EMAIL_PASSWORD_BASE64 "*****************" #define HOST "nom d'un serveur smtp" // Find/Google your email provider's SMTP outgoing server name for unencrypted email #define PORT 587 // Find/Google your email provider's SMTP outgoing port for unencrypted email int count = 0; // we'll use this int to keep track of which command we need to send next bool send_flag = false; // we'll use this flag to know when to send the email commands const int btnPin = A0; // le bouton est connecté à la broche A0 de la carte Adruino int btnVal = 0; void setup() { pinMode(btnPin,INPUT_PULLUP); char buffer[50]; // This might work with other firmware versions (no guarantees) // by providing a string to ID the tail end of the boot message: // comment/replace this if you are using something other than v 0.9.2.4! wifi.setBootMarker(F("Version:0.9.2.4]\r\n\r\nready")); softser.begin(9600); // Soft serial connection to ESP8266 Serial.begin(57600); while(!Serial); // UART serial debug Serial.println(F("Adafruit ESP8266 Email")); // Test if module is ready Serial.print(F("Hard reset...")); if(!wifi.hardReset()) { Serial.println(F("no response from module.")); for(;;); } Serial.println(F("OK.")); Serial.print(F("Soft reset...")); if(!wifi.softReset()) { Serial.println(F("no response from module.")); for(;;); } Serial.println(F("OK.")); Serial.print(F("Checking firmware version...")); wifi.println(F("AT+GMR")); if(wifi.readLine(buffer, sizeof(buffer))) { Serial.println(buffer); wifi.find(); // Discard the 'OK' that follows } else { Serial.println(F("error")); } Serial.print(F("Connecting to WiFi...")); if(wifi.connectToAP(F(ESP_SSID), F(ESP_PASS))) { // IP addr check isn't part of library yet, but // we can manually request and place in a string. Serial.print(F("OK\nChecking IP addr...")); wifi.println(F("AT+CIFSR")); if(wifi.readLine(buffer, sizeof(buffer))) { Serial.println(buffer); wifi.find(); // Discard the 'OK' that follows Serial.print(F("Connecting to host...")); Serial.print("Connected.."); wifi.println("AT+CIPMUX=0"); // configure for single connection, //we should only be connected to one SMTP server wifi.find(); wifi.closeTCP(); // close any open TCP connections wifi.find(); Serial.println("Type \"send it\" to send an email"); } else { // IP addr check failed Serial.println(F("error")); } } else { // WiFi connection failed Serial.println(F("FAIL")); } } void loop() { if(!send_flag){ // check if we expect to send an email btnVal=analogRead(btnPin); if(btnVal<200) // We press the push button { send_flag = true; // sending email //Serial.println(btnVal); delay(1000); } } if(send_flag){ // the send_flat is set, this means we are or need to start sending SMTP commands if(do_next()){ // execute the next command count++; // increment the count so that the next command will be executed next time. } } } // do_next executes the SMTP command in the order required. boolean do_next() { switch(count){ case 0: Serial.println("Connecting..."); return wifi.connectTCP(F(HOST), PORT); break; case 1: // send "HELO ip_address" command. Server will reply with "250" and welcome message return wifi.cipSend("HELO computer.com",F("250")); // ideally an ipaddress should go in place // of "computer.com" but I think the email providers // check the IP anyways so I just put anything. break; case 2: // send "AUTH LOGIN" command to the server will reply with "334 username" base 64 encoded return wifi.cipSend("AUTH LOGIN",F("334 VXNlcm5hbWU6")); break; case 3: // send username/email base 64 encoded, the server will reply with "334 password" base 64 encoded return wifi.cipSend(EMAIL_FROM_BASE64,F("334 UGFzc3dvcmQ6")); break; case 4: // send password base 64 encoded, upon successful login the server will reply with 235. return wifi.cipSend(EMAIL_PASSWORD_BASE64,F("235")); break; case 5:{ // send "MAIL FROM:<emali_from@domain.com>" command char mailFrom[50] = "MAIL FROM:<"; // If 50 is not long enough change it, do the same for the array in the other cases strcat(mailFrom,EMAIL_FROM); strcat(mailFrom,">"); return wifi.cipSend(mailFrom,F("250")); break; } case 6:{ // send "RCPT TO:<email_to@domain.com>" command char rcptTo[50] = "RCPT TO:<"; strcat(rcptTo,EMAIL_TO); strcat(rcptTo,">"); return wifi.cipSend(rcptTo,F("250")); break; } case 7: // Send "DATA" command, the server will reply with something like "334 end message with \r\n.\r\n." return wifi.cipSend("DATA",F("354")); break; case 8:{ // apply "FROM: from_name <from_email@domain.com>" header char from[100] = "FROM: "; strcat(from,EMAIL_FROM); strcat(from," "); strcat(from,"<"); strcat(from,EMAIL_FROM); strcat(from,">"); return wifi.cipSend(from); break; } case 9:{ // apply TO header char to[100] = "TO: "; strcat(to,EMAIL_TO); strcat(to,"<"); strcat(to,EMAIL_TO); strcat(to,">"); return wifi.cipSend(to); break; } case 10:{ // apply SUBJECT header char subject[50] = "SUBJECT: "; strcat(subject,SUBJECT); return wifi.cipSend(subject); break; } case 11: return wifi.cipSend("\r\n"); // marks end of header (SUBJECT, FROM, TO, etc); break; case 12: return wifi.cipSend(EMAIL_CONTENT); break; case 13: return wifi.cipSend("\r\n."); // marks end of data command break; case 14: return wifi.cipSend("QUIT"); break; case 15: wifi.closeTCP(); return true; break; case 16: Serial.println("Done"); send_flag = false; count = 0; return false; // we don't want to increment the count break; default: break; } } |
When the button is pressed, the Serial Monitor will display:
Wi-Fi connection status.
Email sending status (success or failure).
The recipient will receive an email with the subject "My ESP8266" and the message "Hello,This is a message from your ESP8266.".
Educational robotics refers to the use of robots and robotics technology to promote learning in educational settings. It involves the integration of technology, engineering, and computer science into the classroom, allowing students to engage in hands-on, project-based learning experiences.
In this context, our website represents an excellent resource for parents, teachers and children who wish to discover robotics.
Zaouiet Kontech-Jemmel-Monastir-Tunisia
+216 92 886 231
medaliprof@gmail.com
Robotic site created by MedAli-Teacher info