duinozone.cz - Arduino a Raspberry fórum

Autor Téma: Odosielanie e-mailu cez Arduino/NodeMCU  (Přečteno 572 krát)

Offline martinius96

  • Bastlíř začátečník
  • *
  • Příspěvků: 15
Odosielanie e-mailu cez Arduino/NodeMCU
« kdy: Březen 15, 2018, 13:45:02 odpoledne »
Ahoj, dotazy ako odosielať e-maily Arduino sa množia, preto som spísal ako nato.. Využijeme Arduino s Ethernet shieldom W5100 a NodeMCU v klientskom móde pre odosielanie mailov cez PHP script, na ktorý sa daný mikrokontróler ako klient pripojí.

Budeme odosielať text, ktorý bude preddefinovaný v php súbore, ktorý sa odošle na zadaný mail.
Väčšina hostingov, kde sa umiestňujú webové stránky podporujú aj rozšírenia ako funkciu mail, čo umožňuje komunikáciu so SMTP serverom.  Budeme teda využívať externý webový sever, kam sa budeme pripájať ako klient. Vďaka spomínanej mail funkcii môžeme priamo z webových stránok odosielať e-maily na rôzne e-mailové adresy, pričom je odosielateľom e-mailová adresa registrátora danej domény (vaša e-mailová adresa), z ktorej sa budú tieto maily odosielať.

Testované hostingy: php5.sk (php5.cz), sweb.cz

PHP kód (univerzálny pre všetky dosky):
Kód: [Vybrat]
<?php
$sprava
"Ahoj svet!";
$spravawordwrap($msg,70);
mail("adresaprijimatela@jehomail.com","Predmet spravy",$sprava);
?>

Arduino + Ethernet shield W5100 sketch (HTTP):
Kód: [Vybrat]
#include <SPI.h>
#include <Ethernet.h>
#define Hostname "Arduino"   
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};   
char server[] = "www.mojweb.php5.sk";     
IPAddress ip(192, 168, 1, 254);
EthernetClient client;   
void setup() {
 Serial.begin(9600);
}
 
void loop() {
   if (Ethernet.begin(mac) == 0) {   
    Serial.println("Chyba konfiguracie cez DHCP, nastavujem pevnu IP");
    Ethernet.begin(mac, ip);                       
  } 


if (client.connect(server, 80)) {
    Serial.println("Pripojenie uspesne na webserver, vykonavam request: ");
    client.print("GET /email.php");     
    client.println(" HTTP/1.1");             
    client.println("Host: www.mojweb.php5.sk");
    client.println("Connection: close");   
    client.println();                       
 client.stop();                               
  } else {                                         
    Serial.println("Pripojenie zlyhalo...");
  } 
delay(10000);
}

NodeMCU - HTTP sketch:
Kód: [Vybrat]
#include <ESP8266WiFi.h>

const char* ssid     = "wifimeno";
const char* password = "wifiheslo";

const char* host = "mojweb.php5.sk";

void setup() {
  Serial.begin(9600);

  Serial.println();
  Serial.println();
  Serial.print("Pripajam sa na wifi ");
  Serial.println(ssid);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
  }
  String url = "/email.php";
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Connection: close\r\n\r\n");
 
delay(10000);
}

NodeMCU - HTTPS sketch:
Kód: [Vybrat]
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>

const char* ssid = "wifimeno";
const char* password = "wifiheslo";

const char* host = "mojweb.php5.sk";
const int httpsPort = 443;
const char* fingerprint = "35 85 74 EF 67 35 A7 CE 40 69 50 F3 C0 F6 80 CF 80 3B 2E 19"; //odtlacok sha1 certifikatu

void setup() {
  Serial.begin(9600);
  Serial.println();
  Serial.print("connecting to ");
  Serial.println(ssid);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

 

}

void loop() {
  // Use WiFiClientSecure class to create TLS connection
  WiFiClientSecure client;
  Serial.print("connecting to ");
  Serial.println(host);
  if (!client.connect(host, httpsPort)) {
    Serial.println("connection failed");
    return;
  }

  if (client.verify(fingerprint, host)) {
    Serial.println("certificate matches");
  } else {
    Serial.println("certificate doesn't match");
  }

  String url = "/email.php";
  Serial.print("requesting URL: ");
  Serial.println(url);

  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "User-Agent: BuildFailureDetectorESP8266\r\n" +
               "Connection: close\r\n\r\n");
               delay(10000);
}

Nezabudnite pri HTTPS uviesť aj fingerprint HTTPS certifikátu v SHA1 formáte, inak pripojenie nebude úspešné.
Freehostingy pracujú pri SMTP serveroch s e-mailovou adresou, ktorú ste si registrovali. Pozor na adresu g-mail. Z tejto adresy e-maily nebudú odosielané z dôvodu blokácie g-mailu pre odosielanie mailov externými službami/stránkami. E-maily centrum, zoznam fungovali ok.
E-maily sa dajú využiť napríklad pri rôznych situáciách, napríklad vytečenie vody, zadymenie..

Offline Henriette

  • Bastlíř začátečník
  • *
  • Příspěvků: 2
Re:Odosielanie e-mailu cez Arduino/NodeMCU
« Odpověď #1 kdy: Červen 07, 2018, 11:35:32 dopoledne »
Suggest that the disclosure to follow, making it easy to access.