WeMOS Mail
| WeMOS WiFi Processor | |
|---|---|
| WeMOS | Server Connection - Simpel Server - Flere SSID - ESP8266 - Watchdog - Interrupt |
| Anvendelse | LED-eksempel - AD-eksempel - Mail - POST metode - Web Publicering |
Den grundlæggende ide i denne kode er at sende en kommando fra den serielle monitor, og via WeMOS WiFi sende en henvendelse til en webserver[1] med et lille PHP-script, der kan sende en mail, med et indhold bestem af det der er indtastet i Serial Monitor
Forbindelse til WiFi
Selve forbindelsen til WiFi er lavet som beskrevet ved WeMOS Server Connection, og skal blot etablere forbindelsen til WiFi netværket.
For at den samlede kode kan fungere, så skal det netværk der forbindes til have forbindelse til internettet, så man kan komme i kontakt med webserveren med PHP-scriptet.
Opsætning til HTTP-request
For at man kan sende en besked til webserveren, så skal man have adgange til HTTP-request biblioteket, og der skal oprettes at HTTP-objekt.
Dette sker i følgende kode:
#include <ESP8266HTTPClient.h>
HTTPClient http;
int httpCode;Webserver henvendelse
For at henvende sig til webserveren på simpel vis anvendes GET-metoden. Hvis man skulle gøre det med større sikkerhed, så skulle man anvende POST-metoden[2], og man burde også sikre webserveren med et login - det er ikke gjort i dette eksempel.
Selve webserveren har en http-adresse, der angives i en variabel som vist her:
const String serverAddress = "http://htx-elev.ucholstebro.dk/HX-class/user/"; // Webserverens URL
String stringToSend = serverAddress; // Serveradressen der skal henvendes tilPå Holstebro HTX har vi webserver på adressen htx-elev.ucholstebro.dk, hvor man kan uploade sine scipts, når holdet er oprettet med de brugere der er på holdet. Serveren har installeret en mailserver, så man kan sende mails fra scriptet. Webserveren er nærmere beskrevet på Beskrivelse af htx-elev Webserver.
Man kan naturligvis også anvende andre webservere, hvis de understøtter PHP og har en mailserver tilknyttet.
Inde på webserveren ligger PHP-filen, som skal tilføjes henvendelsen som vist her:
stringToSend += "sendMail.php?send="; // Filnavnet og parameter-navnDer tilføjes også navnet på parameteren (send).
Endelig tages et input fra den serielle monitor, og der sikres at det kun er selve det indtastede man tager med. Dette tilføjes henvendelsen:
String param = Serial.readStringUntil('\n'); // Læs en hel streng
param.trim(); // Fjern mellemrum og linjeskift fra start og slut
stringToSend += param; // Indholdet der skal sendesHerefter foretages selve henvendelsen til webserveren med en HTTP-henvendelse:
http.setTimeout(2000); // Use 2 seconds timeout for HTTP connection
http.begin(stringToSend); // Start HTTP connection and send HTTP headerConnection response
Henvendelsen til webserveren giver en respons, som man skal tjekke for at se om henvendelsen gik godt.
Dette returnerer en kode:
httpCode = http.GET(); // Get response from HTTP requestHenvendelsen giver også en respons, der her udskrives til seriel monitor
if(httpCode > 0) // httpCode will be negative on error
{
Serial.printf("[HTTP] GET... code: %d\n", httpCode); // Response from server is not an error
if(httpCode == HTTP_CODE_OK) { // Response from server is HTTP CODE 200
String payload = http.getString();
Serial.println(payload);
}
} else {
Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();Efter endt henvendelse lukkes forbindelsen igen.
Eksempel på hele koden
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
HTTPClient http;
int httpCode;
const String serverAddress = "http://htx-elev.ucholstebro.dk/HX-hold/user/"; // Webserverens URL
const char* ssid = "ssid-name";
const char* password = "ssid-password";
WiFiServer server(80);
void setup() {
Serial.begin(115200);
delay(10);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Start the server
server.begin();
Serial.println("Server started");
// Print the IP address
Serial.print("Use this URL : ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.println("/");
}
void loop() {
String stringToSend = serverAddress; // Serveradressen der skal henvendes til
if (Serial.available()) {
stringToSend += "sendMail.php?send="; // Filnavnet og parameter-navn
String param = Serial.readStringUntil('\n'); // Læs en hel streng
param.trim(); // Fjern mellemrum og linjeskift fra start og slut
stringToSend += param; // Indholdet der skal sendes
http.setTimeout(2000); // Use 2 seconds timeout for HTTP connection
http.begin(stringToSend); // Start HTTP connection and send HTTP header
httpCode = http.GET(); // Get response from HTTP request
if (httpCode > 0) // httpCode will be negative on error
{
Serial.printf("[HTTP] GET... code: %d\n", httpCode); // Response from server is not an error
if (httpCode == HTTP_CODE_OK) { // Response from server is HTTP CODE 200
String payload = http.getString();
Serial.println(payload);
}
} else {
Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
}
}PHP-kode
Inde på webserveren placeres et lille PHP-script, der ser ud som følger. Scriptet udnytter PHP's mail-funktion[3].
<?php
/*
* Mail example
* Bent Arnoldsen, Holstebro HTX 2018
*
* Aktiveres med domæne/path/sendMail.php?send=Alarm
*/
if (isset($_GET['send'])) {
if ($_GET['send'] == "Alarm") {
mail("mail@domain.dk", "Mail fra Alarmsystem", "Der er Alarm");
} else if ($_GET['send'] == "Open") {
mail("mail@domain.dk", "Mail fra Alarmsystem", "Der er Open");
} else {
mail("mail@domain.dk", "Mail fra Alarmsystem", "Ikke specificeret");
}
}
?>
<html>
<h2>Mail-System</h2>
</html>