Працюємо з 09:00 до 20: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

D1SCL
D2SDA
5VVCC
GNDGND

  Программировал я этот контроллер при помощи программы 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 разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Модуль SPI i2c для LCD индикаторов

Модуль SPI i2c для LCD индикаторов

Модуль припаивается на LCD-индикатор типа LCD 2004, LCD 1602.Обеспечивает связь жидкокристаллическог..

22.39грн.

Направляющая с линейным подшипником 8 мм ширина 30 мм

Направляющая с линейным подшипником 8 мм ширина 30 мм

Направляющая в составе 3D-принтера или CNC для крепления подвижного рабочего органа к направляющим ц..

82.72грн.

Штекер питания для Orange PI

Штекер питания для Orange PI

Разборный штекер для питания мини компьютеров Orange PI и Banana PIСодержит два вывода под пайку про..

14.09грн.

Шестерня для зубчатого ремня на 20 зубьев под ось 5 мм

Шестерня для зубчатого ремня на 20 зубьев под ось 5 мм

Используется для передачи и редукции крутящего момента от двигателяКоличество зубьев 20 шт.Диаметр о..

22.44грн.

Модуль реле 4-канальный 12В 10А

Модуль реле 4-канальный 12В 10А

4-канальный модуль реле для подключения напрямую к дискретному выходу контроллера. Светодиодная инди..

122.95грн.