Hello! Представляю на суд свой проект нотификатора электронной почты Gmail. ------ Спойлер: В основе проекта... ESP8266 NodeMCU 1.0 I₂C OLED дисплей 0.96 дюйма ----- Дисплей подключен к NodeMCU так: Vcc - 3V Gnd - Gnd SCL - D5 SDA - D3 ----- Спойлер: Перед заливкой скетча В строке №39 необходимо указать отпечаток SHA-1 сертификата SSL сайта mail.google.ru который можно узнать командой для Mac/Linux: Код (Bash): openssl s_client -connect mail.google.com:443 < /dev/null 2>/dev/null | openssl x509 -fingerprint -noout -in /dev/stdin | sed 's/:/ /g' В строке №40 необходимо указать ваш email и пароль зашифрованный в формате Base64. Закодировать можно здесь. Писать нужно в формате email@gmail.com: password, где email@gmail.com - ваш email; password - ваш пароль В строке №44 впишите ваши данные для подключения к WiFi В строке №47 укажите пины к которым вы подключили дисплей(D4 желательно не занимать) ----- Спойлер: Код Код (C++): #include <WiFiClientSecure.h> //Библиотека для работы с HTTPS #include <ESP8266WiFi.h> //Библиотека для работы с WIFI на ESP8266 #include <ESP8266WiFiMulti.h> //Библиотека для подключения к одной из заданных сетей WIFI #include <Wire.h> //Библиотека для работы с I₂C #include <Adafruit_SSD1306.h> //Библиотека для работы с OLED дисплеями с чипом SSD1306 ESP8266WiFiMulti wifiMulti; //Объявляем объект типа ESP8266WifiMulti с именем wifiMulti Adafruit_SSD1306 display(5); const char* host = "mail.google.com"; //Сервер Gmail const char* url = "/mail/feed/atom"; //Ссылка для проверки новых сообщений const int httpsPort = 443; //Порт для соеденения с сервером const char* fingerprint = "AD 42 C6 54 9A C5 63 6E 73 FA 51 0A 8F CF 07 21 AA 78 14 5B"; //SSL сертификат SHA-1 для соеденения с сервером const char* credentials = "ZW1haWxAZ21haWwuY29tOnBhc3N3b3Jk"; //Ваш email и пароль закодированный в формате Base64 int led = D4; //Светодиод для индикации void setup() { pinMode(led, OUTPUT); //Пин светодиода как вход wifiMulti.addAP("SSID", "PASSWORD"); //Добавляем WIFI сеть к которой нужно подключиться int i = 0; wifiMulti.run(); //Подключаемся к WIFI сети Wire.pins(D3,D5); //Назначаем пины I₂C для подключения дисплея D3-SDA, D6-SCL display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //Тип дисплея - ssd1306 128x64 } void loop() { display.clearDisplay(); //Отчищаем дисплей int unread = getUnread(); //Создаем переменную с числом непрочитанных сообщений if (unread == 0) { //Если нет непрочитанных сообщений... display.setTextSize(1); //Устанавливаем размер шрифта display.setCursor(0, 18); //Устанавливаем курсор display.print("No unread emails"); //Выводим надпись "No unread emails" digitalWrite(led, HIGH); //Выключаем светодиод } else if (unread > 0) { //Если есть непрочитанные сообщения... display.setTextSize(1); //Устанавливаем размер шрифта display.setCursor(1, 18); //Устанавливаем курсор display.print("Unread emails: " + String(unread)); //Выводим надпись "Unread emails: " и количество непрочитанных сообщений digitalWrite(led, LOW); //Включаем светодиод } else { //Иначе... display.setTextSize(1); //Устанавливаем размер шрифта display.setCursor(0, 18); //Устанавливаем курсор display.println("Error get unread emails"); //Выводим надпись "Error get unread emails" } delay(5000); //Ждем 5 секунд } int getUnread() { //Функция проверки числа непрочитанных сообщений WiFiClientSecure client; //Используем WiFiClientSecure для создания HTTPS соеденения if (!client.connect(host, httpsPort)) { //Подключаемся к серверу Gmail с номером порта 443 return -1; } if (client.verify(fingerprint, host)) { //Проверяем SHA-1 отпечаток SSH сертификата } else { //Иначе... return -1; } client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Authorization: Basic " + credentials + "\r\n" + "User-Agent: ESP8266\r\n" + "Connection: close\r\n\r\n"); //Передаем серверу данные для получения данных :/ int unread = -1; while (client.connected()) { //Ждем данных в формате XML client.readStringUntil('<'); //Читаем от открывающего тега... String tagname = client.readStringUntil('>'); //До закрывающего и объявляем то что внутри тега как переменную tagname if (tagname == "fullcount") { //Если имя тега равно <fullcount> String unreadStr = client.readStringUntil('<'); //Ищем закрывающий тег </fullcount> unread = unreadStr.toInt(); //Конвентируем из строки в переменную unread типа int break; //Останавливаем чтение } //Если тег <fullcount> не найден то переходим к следующему тегу } return unread; //Возвращаем число непрочитанных сообщений } Вопросы писать сюда