ESP8266:Примеры/Использование 0,96-дюймового OLED-дисплея с ESP8266 при помощи IDE Arduino

Материал из ВикиСправочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 1784 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Ambox content.png Черновик


Использование 0,96-дюймового OLED-дисплея с ESP8266 при помощи IDE Arduino[1]

Эта статья объясняет, как использовать 0,96-дюймовый OLED-дисплей вместе с чипом ESP8266, используя среду разработки IDE Arduino. О том, как использовать этот дисплей с платой Arduino, читайте тут.

Описание устройства

0,96-дюймовый OLED-дисплей выглядит следующим образом:

OLED 1.jpg

Это очень маленький дисплей, который состоит из OLED-пикселей, расположенных в формате 128x64. Подсветка этому дисплею не требуется. Кроме того, он использует интерфейс I2C, и это значит, что он может коммуницировать с ESP8266, используя всего 2 контакта.

Библиотеки

Чтобы управлять OLED-дисплеем, вам нужно установить в IDE Arduino библиотеку «esp8266 oled ssd1306». Для этого сделайте следующее:

  • Кликните тут, чтобы скачать ZIP-архив с библиотекой (он должен загрузиться в папку «Загрузки» на вашем компьютере).
  • Распакуйте этот ZIP-архив. В результате у вас должна появиться папка под названием «esp8266-oled-ssd1306-master».
  • Переименуйте ее на «esp8266_oled_ssd1306».
  • Переместите папку «esp8266_oled_ssd1306» в папку «libraries» IDE Arduino.
  • Перезапустите IDE Arduino.

Кроме того, нам нужно будет измерять температуру, для чего понадобится датчик DHT11, а для работы с этим датчиком – библиотека «DHT_sensor_library». Чтобы установить ее, сделайте следующее:

  • Кликните тут, чтобы скачать ZIP-архив с библиотекой (он должен загрузиться в папку «Загрузки» на вашем компьютере).
  • Распакуйте этот ZIP-архив. В результате у вас должна появиться папка под названием «DHT-sensor-library-master».
  • Переименуйте ее на «DHT_sensor_library» (все верно, тире нужно поменять на нижние подчеркивания)
  • Переместите папку «DHT_sensor_library» в папку «libraries» IDE Arduino.
  • Перезапустите IDE Arduino.

Скетч: Показ на OLED-дисплее данных о температуре и влажности

Теперь давайте создадим проект, который будет замерять в окружающем воздухе температуру и влажность, а потом показывать эти данные на OLED-дисплее. Цель этого примера – показать, как интегрировать OLED-дисплей в одну цепь с чипом ESP8266 при помощи IDE Arduino.

Интерфейс между OLED-дисплеем и ESP8266 будет проводным, но этот проект можно выполнить и при помощи веб-сервера (т.е. данные будут отображаться не на OLED-дисплее, а в браузере).

Температура и влажность будут измеряться при помощи датчика DHT11.

Dht-11 2.jpg

Если вы не знакомы с датчиком DHT11, лучше сначала ознакомьтесь с этими руководствами:

  • Здесь рассказывается, как использовать датчик DHT11/DHT22 вместе с платой Arduino
  • Здесь рассказывается, как показывать данные о температуре и влажности в браузере, используя чип ESP8266 и датчик DHT11/DHT22

Необходимые компоненты

  • Один 0,96-дюймовый OLED-дисплей (см. на eBay)
  • Один чип ESP8266 (см. на eBay)
  • Один датчик температуры и влажности DHT11 (см. на eBay)
  • Одна макетная плата
  • Один резистор на 10 кОм
  • Провода-перемычки

Схема

Подключите эти компоненты друг к другу согласно схеме, показанной ниже:

Display-dht11-OLED bb 3.png

Код

Перед загрузкой кода на ESP8266 убедитесь, что установили все необходимые библиотеки. Какие именно библиотеки нужны для этого проекта, см. выше, в разделе «Библиотеки».

Вот код, который нужно загрузить на ESP8266:

  1. /*
  2.  * Более подробно о проекте на: http://randomnerdtutorials.com
  3.  *
  4.  * Данный скетч распространяется по лицензии MIT
  5.  * Копирайт (c) 2016, Дэниэл Эйкорн (Daniel Eichhorn)
  6.  */
  7.  
  8. // библиотека Wire для коммуникации по I2C:
  9. #include <Wire.h>  // нужна только для Arduino 1.6.5 и старее
  10.  
  11. // библиотека для монитора (в моем проекте используется SSD1306):
  12. #include "SSD1306.h" // включает в себя также «SSD1306Wire.h»`
  13.  
  14. // для монитора SH1106 впишите #include "SH1106.h"
  15. // (включает в себя «SH1106Wire.h»)`
  16.  
  17. // при коммуникации через I2C при помощи brzo_i2c
  18. // (должна быть установлена), впишите следующее:
  19. // #include <brzo_i2c.h> // нужна только для Arduino 1.6.5 и старее
  20. // #include "SSD1306Brzo.h"
  21. // #include "SH1106Brzo.h"
  22.  
  23. // библиотека для коммуникации по SPI:
  24. // #include <SPI.h> // только для Arduino 1.6.5 и старее
  25. // #include "SSD1306Spi.h"
  26. // #include "SH1106SPi.h"
  27.  
  28. #include <DHT.h>
  29.  
  30. #define DHTPIN 5       // контакт, к которому подключен DHT11
  31. #define DHTTYPE DHT11  // экземпляр класса для датчика DHT11
  32.  
  33. // инициализация OLED-дисплея с помощью библиотеки SPI:
  34.  
  35. // контакт D5 на ESP8266 -> к контакту CLK на дисплее
  36. // D7 -> к MOSI (DOUT)
  37. // D0 -> к RES
  38. // D2 -> к DC
  39. // D8 -> к CS
  40. // SSD1306Spi        display(D0, D2, D8);
  41. // или
  42. // SH1106Spi         display(D0, D2);
  43.  
  44. // инициализация OLED-дисплея с помощью библиотеки brzo_i2c:
  45.  
  46. // контакт D3 на ESP8266 -> к контакту SDA на дисплее
  47. // D5 -> к SCL
  48. // SSD1306Brzo display(0x3c, D3, D5);
  49. // или
  50. // SH1106Brzo  display(0x3c, D3, D5);
  51.  
  52. // инициализация OLED-дисплея с помощью библиотеки Wire:
  53.  
  54. SSD1306  display(0x3c, D3, D5);
  55. // SH1106 display(0x3c, D3, D5);
  56.  
  57. // инициализация датчика DHT11 для обычной Arduino с 16 МГц:
  58. DHT dht(DHTPIN, DHTTYPE);
  59.  
  60. void setup(){
  61.   // с инициализацией UI будет инициализирован и дисплей:
  62.   display.init();
  63.  
  64.   display.flipScreenVertically();
  65.   display.setFont(ArialMT_Plain_16);
  66.   display.setTextAlignment(TEXT_ALIGN_LEFT);
  67.   dht.begin();  //  инициализация DHT
  68. }
  69.  
  70. void displayTempHumid(){
  71.   // считывание температуры и влажности занимает около 250 мс;
  72.   // кроме того, данные от датчика могут запаздывать
  73.   // примерно на 2 секунды (это очень медленный датчик):
  74.   float h = dht.readHumidity();
  75.   // считываем температуру в градусах Цельсия:
  76.   float t = dht.readTemperature();
  77.   // считываем температуру в градусах Фаренгейта:
  78.   float f = dht.readTemperature(true);
  79.  
  80.   // проверяем, корректны ли считанные данные, и если нет,
  81.   // то выходим и пробуем снова:
  82.   if (isnan(h) || isnan(t) || isnan(f)){
  83.     display.clear();  //  очищаем дисплей
  84.     display.drawString(5,0, "Failed DHT");
  85.                          // "От DHT пришли некорректные данные"
  86.     return;
  87.   }
  88.   display.clear();
  89.   display.drawString(0, 0, "Humidity: " + String(h) + "%\t");
  90.                         // "Влажность: "
  91.   display.drawString(0, 16, "Temp: " + String(t) + "C");
  92.                         // "Температура: "
  93.   display.drawString(0, 32, "Temp: " + String(f) + "F");
  94.                         // "Температура: "
  95. }
  96. void loop(){
  97.   displayTempHumid();
  98.   display.display();
  99.   delay(2000);
  100. }

Демонстрация

Результат должен быть примерно таким:

Demonstration-ESP8266-OLED 4.jpg

См.также

Внешние ссылки

  1. randomnerdtutorials.com - ESP8266 0.96 inch OLED Display with Arduino IDE