Віримо в перемогу ЗСУ!
Працюємо з 09:00 до 18:00 Пн-Сб

У меня есть задумка сделать у себя дома возле входной двери индикатор внешней температуры, а так же спрогнозированной синоптиками из интернета температуры, влажности и силы ветра. Самое сложное и интересное - это конечно сделать парсер погоды из интернета. Для тех, кто не в курсе, парсер - это автоматический вытягивальщик каких либо определённых данных, заключенных в лабиринте текста.

К примеру строка данных из одного метео-сайта, из которого я в последствии получал данные при помощи контроллера, выглядит вот так:

{"coord":{"lon":30.52,"lat":50.43},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10n"}],"base":"cmc stations","main":{"temp":274.971,"pressure":1010.17,"humidity":97,"temp_min":274.971,"temp_max":274.971,"sea_level":1025.15,"grnd_level":1010.17},"wind":{"speed":1.31,"deg":250},"rain":{"3h":1.85},"clouds":{"all":92},"dt":1456515713,"sys":{"message":0.007,"country":"UA","sunrise":1456462063,"sunset":1456500878},"id":703448,"name":"Kiev","cod":200}

Из этой толщи текта контроллер должен найти слово temp и вычленить после него 7 символов (температура тут показана в кельвинах, но у СНГ-шных служб можно найти и сразу в градусах цельсия). После этого таким же способом нужно достать влажность - humidity.

В данном проекте я использовал жидкокристаллический индикатор LCD 2004A с I2C - интерфейсом для отображения полученных данных, а так же контроллер с WiFi интерфейсом NodeMcu на базе ESP8266, который позволил подключаться к интернету прямо через мой домашний WiFi-роутер, парсить метео-данные синоптиков и передавать текстовую информацию на индикатор.

Для электрического соединения индикатора с контроллером необходимо руководствоваться следующей табличкой:


NodeMcu ESP8266

LCD 2004A

D1 SCL
D2 SDA
5V VCC
GND GND

  Программировал я этот контроллер при помощи программы Arduino IDE. Как настроить Arduino IDE для работы с контроллером NodeMcu ESP8266 описано в отдельной статье. 

Я не буду останавливаться здесь на особых ньюансах метеостанции, как выбор метео-сайта, перевод кельвинов в градусы, подключение своих датчиков температуры. Потому как проект призван показать как легко можно сделать автономный WiFi-WEB-клиент на контроллере NodeMcu ESP8266 и получать на него данные из информационных сайтов.




// подключение библиотек
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#define USE_SERIAL Serial
ESP8266WiFiMulti WiFiMulti;
LiquidCrystal_I2C lcd(0x3F, 20, 4);
void setup() {
  // инициализация LCD
  lcd.begin();
  // Включить подсветку и написать текст.
  lcd.backlight();
  lcd.print("Hello GEEKMATIC!");
    USE_SERIAL.begin(115200);
   // USE_SERIAL.setDebugOutput(true);
    USE_SERIAL.println();
    USE_SERIAL.println();
    USE_SERIAL.println();
    for(uint8_t t = 4; t > 0; t--) {
        USE_SERIAL.printf("[SETUP] WAIT %d...\n", t);
        USE_SERIAL.flush();
        delay(1000);
    }
    WiFiMulti.addAP("Название вайфай сети", "Пароль");
}
void loop() {
    // ожидание WiFi соединения
    if((WiFiMulti.run() == WL_CONNECTED)) {
        HTTPClient http;
        USE_SERIAL.print("[HTTP] begin...\n");
        http.begin("VASH_DOMEN.COM", 80, "/vasha_stranica.html"); //HTTP
        USE_SERIAL.print("[HTTP] GET...\n");
        // начало соединения и отсылка HTTP заголовка
        int httpCode = http.GET();
        if(httpCode) {
            // HTTP header has been send and Server response header has been handled
            USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode);
            // файл найден на сервере
            if(httpCode == 200) {
               String payload = http.getString();
               //USE_SERIAL.println(payload.substring(145,230));
               
               lcd.clear();
               lcd.print("Temp:"+payload.substring(payload.indexOf('temp', 135)+3,payload.indexOf('pres',150)-5)+" C");
               lcd.setCursor(0, 1);
               lcd.print("Vlazhnost:"+payload.substring(payload.indexOf('humid', 150)+6,payload.indexOf('temp_min',155)-9)+" %");
            }
        } else {
            USE_SERIAL.print("[HTTP] GET... failed, no connection or no HTTP server\n");
        }
    }
    delay(10000);
}
Эта программа позволяет контроллеру подключиться к вашей WiFi-сети, и каждые 10 секунд загружать указанную вами страничку сайта, вытягивать из неё нужные данные и отображать их на жидкокристаллическом индикаторе.
 Прочитав эту статью, вам открывается море возможностей по усовершенствованию и расширению функционала системы. Ведь на экран можно выводить множество и другой полезной информации для человека, собирающегося выходить на работу утром. Если вам не хватит строк своего индикатора, можно организовать перелистывание страниц при помощи встроенной в плату контроллера пользовательской кнопки. Вобщем ширина данного проекта может ограничиваться только шириной вашей фантазии.
<< Проекти << Усі товари >> Статті, уроки >>

Написати відгук

Примітка: HTML размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
AT24C02 EEPROM I2C

AT24C02 EEPROM I2C

Мікросхема постійної пам'яті EEPROMНапруга живлення 2,7 ... 5,5 ВОб'єм 256 БайтКоммунікація I2C..

4.36грн.

Цифровий вольтметр + амперметр 100В 10А

Цифровий вольтметр + амперметр 100В 10А

Цифровий вольтметр та амперметр постійного струмуДіапазон вимірювання напруги 0 ...100 ВДіапазон вим..

122.27грн.

Кусачки PLATO 170

Кусачки PLATO 170

Довгограючі кусачки зі зручними потужними ручкамиЗастосовуються під час монтажу любительських електр..

128.62грн.

Стерео підсилювач потужності 15Втх2 на TDA7297

Стерео підсилювач потужності 15Втх2 на TDA7297

Двохканальний підсилювач звукової частоти на основі мікросхеми TDA7297Містить захист від перевантаже..

120.18грн.

Динамік 50 мм 0,5 Вт 8 Ом

Динамік 50 мм 0,5 Вт 8 Ом

Мініатюрний легкий широкополосний динамік для компактних електронних пристроївМаксимальна потужність..

55.22грн.