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:

Код:
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 желательно не занимать)

---------------------------------------------------------------------------------------------------------------------------------------------

Код
Код:
#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

static const unsigned char PROGMEM h[] = {                  //Закодированное стартовое изображение
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x80, 0x03,
   0x3e, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x7e, 0x00, 0x00, 0x00, 0xe0, 0x07,
   0xfe, 0x01, 0x00, 0x00, 0xf8, 0x07, 0xfe, 0x03, 0x00, 0x00, 0xfc, 0x07,
   0xfe, 0x0f, 0x00, 0x00, 0xff, 0x07, 0xfe, 0x1f, 0x00, 0x80, 0xff, 0x07,
   0xfe, 0x3f, 0x00, 0xc0, 0xff, 0x07, 0x9e, 0xff, 0x00, 0xf0, 0x9f, 0x07,
   0x3e, 0xfe, 0x01, 0xf8, 0xcf, 0x07, 0x1e, 0xfc, 0x07, 0xfe, 0x83, 0x07,
   0x3e, 0xf8, 0x0f, 0xff, 0xa9, 0x07, 0x1e, 0xe0, 0x9f, 0xff, 0xa0, 0x07,
   0x3e, 0xc0, 0xff, 0x3f, 0xca, 0x07, 0x1e, 0x00, 0xff, 0x9f, 0x88, 0x07,
   0x1e, 0x00, 0xfe, 0x07, 0xa5, 0x07, 0x1e, 0x00, 0xfc, 0x53, 0xa4, 0x07,
   0x3e, 0x00, 0xf0, 0x88, 0xd2, 0x07, 0x1e, 0x00, 0x60, 0x51, 0x84, 0x07,
   0x1e, 0x00, 0x00, 0x84, 0xaa, 0x07, 0x3e, 0x00, 0x00, 0x29, 0xa0, 0x07,
   0x1e, 0x00, 0x00, 0x44, 0xd5, 0x07, 0x1e, 0x00, 0x00, 0x90, 0x84, 0x07,
   0x3e, 0x00, 0x00, 0x40, 0xaa, 0x07, 0x1e, 0x00, 0x00, 0x80, 0xa2, 0x07,
   0x1e, 0x00, 0x00, 0x00, 0xcc, 0x07, 0x1e, 0x00, 0x00, 0x00, 0x88, 0x07,
   0x1e, 0x00, 0x00, 0x00, 0xd0, 0x07, 0x1e, 0x00, 0x00, 0x00, 0x80, 0x07,
   0x3c, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
   };

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
  display.clearDisplay();                     //Отчищаем дисплей
  display.drawXBitmap(128 / 2 - 44 / 2, 14, h, 44, 44, 1);  //Выводим картинку
  display.setTextSize(1);                     //Устанавливаем размер шрифта
  display.setTextColor(WHITE);                //Устанавливаем цвет шрифта
  display.setCursor(0,0);                     //Устанавливаем курсор
  display.print("   GMail Notifier");         //Выводим надпись "Gmail Notifier"
  display.display();
  delay(5000);                                //Ждем 5 секунд

}
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;                                                     //Возвращаем число непрочитанных сообщений
}

Вопросы писать сюда