0% found this document useful (0 votes)
3 views8 pages

Programmation pour le Système de détection des fuites de gaz intelligent contrôlé par Arduino

This document outlines the programming for an intelligent gas leak detection system controlled by Arduino, utilizing an ESP8266 module for WiFi connectivity. It includes code for setting up the hardware, connecting to a WiFi network, and sending email alerts when gas is detected. The program reads analog values from a gas sensor and triggers an email notification if gas levels exceed a specified threshold.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views8 pages

Programmation pour le Système de détection des fuites de gaz intelligent contrôlé par Arduino

This document outlines the programming for an intelligent gas leak detection system controlled by Arduino, utilizing an ESP8266 module for WiFi connectivity. It includes code for setting up the hardware, connecting to a WiFi network, and sending email alerts when gas is detected. The program reads analog values from a gas sensor and triggers an email notification if gas levels exceed a specified threshold.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 8

Programmation pour le Système de

détection des fuites de gaz intelligent


contrôlé par Arduino

#include <Adafruit_ESP8266.h>

#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 de l’émetteur”;

char EMAIL_PASSWORD[] = “************”;

char EMAIL_TO[] = “adresse email du récepteur”;

char SUBJECT[] = “My ESP8266”;

char EMAIL_CONTENT[] = “Attention!!! ,\r\n il y a un feu .”;


// We’ll need your EMAIL_FROM and its EMAIL_PASSWORD base64 encoded, you can use
https://www.base64encode.org/

#define EMAIL_FROM_BASE64 “bm9yZXBseUBtZXNhcnRpc2Fucy5mcg==”

#define EMAIL_PASSWORD_BASE64 “WVlMdVhKelphVg==”

#define HOST “Nom du 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

int analogPin = A0; // Capteur de gaz MQ-4 analog interface

int analogVal; //analog readings

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

// Read the analog interface

analogVal = analogRead(analogPin);

if (analogVal<=60) // Si le capteur détecte un fuite de gaz

send_flag = true; // envoi d’un email d’alerte

//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:<[email protected]>” 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 protected]>” 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 <[email protected]>” 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;

You might also like