ESP8266:Примеры/Использование 0,96-дюймового OLED-дисплея с ESP8266 при помощи IDE Arduino
Использование 0,96-дюймового OLED-дисплея с ESP8266 при помощи IDE Arduino[1]
Эта статья объясняет, как использовать 0,96-дюймовый OLED-дисплей вместе с чипом ESP8266, используя среду разработки IDE Arduino. О том, как использовать этот дисплей с платой Arduino, читайте тут.
Описание устройства
0,96-дюймовый OLED-дисплей выглядит следующим образом:
Это очень маленький дисплей, который состоит из 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.
Если вы не знакомы с датчиком DHT11, лучше сначала ознакомьтесь с этими руководствами:
- Здесь рассказывается, как использовать датчик DHT11/DHT22 вместе с платой Arduino
- Здесь рассказывается, как показывать данные о температуре и влажности в браузере, используя чип ESP8266 и датчик DHT11/DHT22
Необходимые компоненты
- Один 0,96-дюймовый OLED-дисплей (см. на eBay)
- Один чип ESP8266 (см. на eBay)
- Один датчик температуры и влажности DHT11 (см. на eBay)
- Одна макетная плата
- Один резистор на 10 кОм
- Провода-перемычки
Схема
Подключите эти компоненты друг к другу согласно схеме, показанной ниже:
Код
Перед загрузкой кода на ESP8266 убедитесь, что установили все необходимые библиотеки. Какие именно библиотеки нужны для этого проекта, см. выше, в разделе «Библиотеки».
Вот код, который нужно загрузить на ESP8266:
/*
* Более подробно о проекте на: http://randomnerdtutorials.com
*
* Данный скетч распространяется по лицензии MIT
* Копирайт (c) 2016, Дэниэл Эйкорн (Daniel Eichhorn)
*/
// библиотека Wire для коммуникации по I2C:
#include <Wire.h> // нужна только для Arduino 1.6.5 и старее
// библиотека для монитора (в моем проекте используется SSD1306):
#include "SSD1306.h" // сокращенный вариант для #include "SSD1306Wire.h"
// для монитора SH1106 впишите #include "SH1106.h"
// сокращенный вариант для #include "SSD1306Wire.h"
// при коммуникации через I2C при помощи brzo_i2c
// (должна быть установлена), впишите следующее:
// #include <brzo_i2c.h> // нужна только для Arduino 1.6.5 и старее
// #include "SSD1306Brzo.h"
// #include "SH1106Brzo.h"
// библиотека для коммуникации по SPI:
// #include <SPI.h> // только для Arduino 1.6.5 и старее
// #include "SSD1306Spi.h"
// #include "SH1106SPi.h"
#include <DHT.h>
#define DHTPIN 5 // контакт, к которому подключен DHT11
#define DHTTYPE DHT11 // тип датчика DHT11
// инициализация OLED-дисплея с помощью библиотеки SPI:
// контакт D5 на ESP8266 -> к контакту CLK на дисплее
// D7 -> к MOSI (DOUT)
// D0 -> к RES
// D2 -> к DC
// D8 -> к CS
// SSD1306Spi display(D0, D2, D8);
// или
// SH1106Spi display(D0, D2);
// инициализация OLED-дисплея с помощью библиотеки brzo_i2c:
// контакт D3 на ESP8266 -> к контакту SDA на дисплее
// D5 -> к SCL
// SSD1306Brzo display(0x3c, D3, D5);
// или
// SH1106Brzo display(0x3c, D3, D5);
// инициализация OLED-дисплея с помощью библиотеки Wire:
SSD1306 display(0x3c, D3, D5);
// SH1106 display(0x3c, D3, D5);
// инициализация датчика DHT11 для обычной Arduino с 16 МГц:
DHT dht(DHTPIN, DHTTYPE);
void setup(){
// с инициализацией UI будет инициализирован и дисплей:
display.init();
display.flipScreenVertically();
display.setFont(ArialMT_Plain_16);
display.setTextAlignment(TEXT_ALIGN_LEFT);
dht.begin(); // инициализация DHT
}
void displayTempHumid(){
// считывание температуры и влажности занимает около 250 мс;
// кроме того, данные от датчика могут запаздывать
// примерно на 2 секунды (это очень медленный датчик):
float h = dht.readHumidity();
// считываем температуру в градусах Цельсия:
float t = dht.readTemperature();
// считываем температуру в градусах Фаренгейта:
float f = dht.readTemperature(true);
// проверяем, прочлись ли данные, и если нет,
// то выходим и пробуем снова:
if (isnan(h) || isnan(t) || isnan(f)){
display.clear(); // очищаем дисплей
display.drawString(5,0, "Failed DHT");
// "Не удалось прочесть данные от датчика DHT"
return;
}
display.clear();
display.drawString(0, 0, "Humidity: " + String(h) + "%\t");
// "Влажность: "
display.drawString(0, 16, "Temp: " + String(t) + "C");
// "Температура: "
display.drawString(0, 32, "Temp: " + String(f) + "F");
// "Температура: "
}
void loop(){
displayTempHumid();
display.display();
delay(2000);
}
Демонстрация
Результат должен быть примерно таким:
См.также
Внешние ссылки
ESP8266 AT-команды | |
---|---|
Список AT-команд | |
Базовые команды |
|
Команды для WiFi |
|
Команды для TCP/IP |
|