Модуль WiFi ESP8266 и платы на его основе позволяют производителям добавить дополнительный уровень интеллекта, полезности, ценности и крутости к своим творениям, поскольку он обеспечивает простой и дешевый способ создания проектов Интернета вещей.
Сегодняшний пример будет посвящен отправке электронной почты с использованием ESP8266 в качестве демонстрации возможностей этого модуля. Этот урок будет особенно полезен, если вы создаете проекты, которые предусматривают оповещения и уведомления, такие как система охранной сигнализации или система оповещения об утечке газа.

Вдохновение для этого проекта основано на размышлениях о различных способах получения отчетов от модуля. Было бы здорово, если бы проект, например, мог отправлять почасовые или поминутные отчеты на основе показаний датчика по электронной почте. Поэтому для этого урока мы подключим датчик температуры и влажности DHT22 к плате Wemos D1 (на основе ESP8266), чтобы при загрузке проекта он измерял температуру и влажность и отправлял данные на веб-сервер, расположенный на Bluehost. Веб-сервер, на котором выполняется простой 7-строчный PHP-скрипт, пересылает полученные данные на заранее определенный адрес электронной почты.

Вместо того, чтобы использовать наш собственный веб-сервер, мы могли бы использовать облачную платформу Интернета вещей, такую как adafruit.io, и настроить триггер / оповещение по электронной почте, но, возможно, предлагаемый в данном примере маршрут более эффективен и гибок, поскольку у вас есть полный контроль над исходным кодом. Как упоминалось выше, веб-сервер также необходим для этого урока. Существует несколько бесплатных веб-хостинговых платформ, которые вы можете использовать для этого проекта, в данном случае был использован Bluehost.
Схема подключения для этого проекта проста. Все, что нам нужно сделать, это подключить датчик температуры и влажности DHT22 к плате ESP8266. Хотя для этой схемы использовался Wemos D1 mini, вы можете использовать любую из других доступных плат ESP8266. Подключите компоненты, как показано на схеме далее.

В проекте есть две части кода для работы концепции. Первый – это PHP-скрипт, который будет работать на веб-сервере. Этот скрипт будет принимать данные, отправленные Wemos, и пересылать их на указанный адрес электронной почты. Вторая часть кода – это скетч Arduino, который будет работать на Wemos. Он получит данные о температуре и влажности от DHT22 и отправит их на веб-сервер Bluehost через соединение по WiFi.
Начнем со скетча для ESP8266. Если вы впервые используете Arduino IDE для программирования платы на основе ESP8266, вам необходимо загрузить файлы поддержки платы. Это можно легко сделать с помощью менеджера плат Arduino, просто введите ESP8266 в строку поиска и выберите ESP8266. Наряду с файлами поддержки платы также будут установлены несколько библиотек, которые могут понадобиться при работе с любой платой на базе ESP8266. Полный код этого проекта доступен далее.
#include <ESP8266WiFi.h>
#include "DHT.h"
const char* ssid = "ZyXEL"; // SSID локальной сети
const char* password = "YourPasswordGoesHere"; // Пароль в сети
WiFiClient client;
char servername[]="educ8s.tv"; // удаленный сервер, к которому мы будем подключаться
String result;
float temperature;
float humidity;
#define DHTPIN D8
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
dht.begin();
delay(2000);
Serial.begin(115200);
Serial.println("Connecting");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
}
Serial.println("Connected");
delay(1000);
readSensor();
String temperatureString = String(temperature,1);
String humidityString = String(humidity,1);
sendDataToServer(temperatureString,humidityString);
}
void loop() {
}
void sendDataToServer(String temperature, String humidity)
{
if (client.connect(servername, 80)) { // запускаем клиентское соединение, проверяем соединение
Serial.println("connected");
client.println("GET /send_email.php?temperature="+temperature+"&humidity="+humidity+" HTTP/1.1"); //Send data
client.println("Host: educ8s.tv");
client.println("Connection: close"); // закрыть 1.1 постоянное соединение
client.println(); //end of get request
}
else {
Serial.println("connection failed"); // сообщение об ошибке, если нет подключения клиента
Serial.println();
}
while(client.connected() && !client.available()) delay(1); // ждем поступления данных
while (client.connected() || client.available()) { // подключен или данные доступны
char c = client.read(); // получаем байт из сетевого буфера
result = result+c;
}
client.stop(); // остановить клиента
Serial.println(result);
}
void readSensor()
{
humidity = dht.readHumidity();
temperature = dht.readTemperature();
Serial.println("Temperature:");
Serial.println(temperature);
Serial.println("Humidity:");
Serial.println(humidity);
}
Вторая часть кода – это PHP-скрипт, который получает данные от Wemos и пересылает их на указанный адрес электронной почты. Код начинается с получения данных о температуре и влажности и объединяет их в текстовую строку. Затем добавляются данные электронной почты отправителя и получателя, после чего электронное письмо отправляется с помощью функции mail(). Она принимает электронную почту отправителя, тему, тело и адрес электронной почты получателя в качестве аргументов. Вот полный код на PHP.
<?php
$temperature = $_GET["Temperature"];
$humidity= $_GET["Humidity"];
$text ="Temperature: {$temperature} C Humidity: {$humidity} %";
$admin_email = "youremail@something.com";
$email = "youremail@something.com";
$subject ="Temperature and Humidity Report";
//send email
mail($admin_email,"$subject",$text,"From:" .$email);
?>
Загрузите код в ESP8266, через некоторое время, в зависимости от уровня сигнала вашего интернет-соединения, вы получите электронное письмо с уведомлением о текущей температуре и влажности.

Как упоминалось ранее, это можно сделать с помощью нескольких других методов. Мы могли бы использовать MQTT с облачной платформой, такой как adafruit.io или shiftr.io, но оассмотренный процесс наиболее полезен из-за его низкой стоимости и того факта, что у вас есть полный контроль над всем.
© digitrode.ru