У меня есть задумка сделать у себя дома возле входной двери индикатор внешней температуры, а так же спрогнозированной синоптиками из интернета температуры, влажности и силы ветра. Самое сложное и интересное - это конечно сделать парсер погоды из интернета. Для тех, кто не в курсе, парсер - это автоматический вытягивальщик каких либо определённых данных, заключенных в лабиринте текста.
К примеру строка данных из одного метео-сайта, из которого я в последствии получал данные при помощи контроллера, выглядит вот так:
{"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);
}
Датчик влажности и температуры DHT21
Это точный и готовый к вывешиванию прямо на улице датчик относительной влажности и температуры со ст..
250.82грн.
Шестерня для зубчатого ремня на 36 зубьев под ось 8 мм
Используется для передачи и редукции крутящего момента от двигателя до оси 8 ммКоличество зубьев 36 ..
90.90грн.
Набор диодов 100 шт.
В наборе 8 типов диодов разного количества. В сумме 100 штук.В набор входят следующие типы диодов 1N..
148.13грн.
Драйвер шагового двигателя DRV8825 для шилда RAMPS
Драйвер шагового двигателя для системы RAMPS. Устанавливается на специальный CNC-шилд Arduino д..
84.96грн.
Парсер температуры и влажности на WiFi-контроллереNodeMcu ESP8266
У меня есть задумка сделать у себя дома возле входной двери индикатор внешней температуры, а так же ..