Теперь мы можем выводить нужные нам данные на экран. Следующим шагом узнаем, как получать необходимые данные из сети Интернет.
Самостоятельная работа: изучить исходный текст библиотеки рисования по адресу https://github.com/ThingPulse/esp8266-oled-ssd1306/blob/master/OLEDDisplay.h. Помимо функции drawString, там описано множество других полезных функций, например drawCircle или drawProgressBar. Испытать их в программе.
3.5 Получаем время от атомных часов
Раз уж мы подключились к Интернет, можно сделать много чего полезного. Например, получить точное время с атомных часов от NTP-сервера, тем более что библиотеки для этого уже есть.
Добавим в программу соединения с WiFi код вывода точного времени.
#include
#include
const char* ssid = "TP-LINK_AB11";
const char* password = "12345678";
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 3600;
const int daylightOffset_sec = 3600;
void setup() {
Serial.begin(115200);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
WiFi.begin(ssid, password);
}
Serial.println("WiFi connected!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// Настройки службы времени
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
}
void loop() {
// Получение времени
struct tm timeinfo;
if (!getLocalTime(&timeinfo)){
Serial.println("getLocalTime: error");
delay(10000);
return;
}
Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
delay(30000);
}
Как можно видеть, мы добавили вызов двух функций: configTime и getLocalTime. Первая функция настраивает нужные параметры (например часовой пояс), вторая получает время. Кстати, само время хранится в структуре tm, которая хранится в файле time.h и имеет следующий вид:
struct tm {
int tm_sec; // Seconds after the minute [0, 59]
int tm_min; // Minutes after the hour [0, 59]
int tm_hour; // Hours since midnight [0, 23]
int tm_mday; // Day of the month [1, 31]
int tm_mon; // Months since January [0, 11]
int tm_year; // Years since 1900
int tm_wday; // Days since Sunday [0, 6]
int tm_yday; // Days since January 1 [0, 365]
int tm_isdst; // Daylight Saving Time flag
int tm_gmtoff; // Seconds east of UTC
char *tm_zone; // Timezone abbreviation
};
Все эти поля можно использовать. Например, можно зажечь светодиод (или запустить зуммер) в 8 часов утра: