| Ваш IP: 18.206.16.123 | Online(25) - гости: 10, боты: 15 | Загрузка сервера: 0.15 ::::::::::::


Метеостанция NodeMcu v3 (ESP-12E) + TFT 320×240 (Arduino)

На платформе NodeMcu v3 (ESP-12E) на основе микроконтроллера ESP8266 можно создать простую погодную станцию. Погодная станция не содержит ни каких датчиков кроме модуля часов реального времени DS3231 (ZS-042), всю информацию погодная станция запрашивает с сайта https://export.yandex.ru, делая каждые полчаса GET запрос на страницу — https://export.yandex.ru/bar/reginfo.xml?region=xx, где хх — номер региона. Информацию о номере региона можно взять — https://yandex.ru/pogoda/omsk/informer из кода информера:

Погодная станция выводит на цветной TFT-дисплей SPI 320×240 следующую информацию:

  • Текущее время (ds3231)
  • День недели, дата, месяц, год (ds3231)
  • Температура в помещении (ds3231)
  • Температура на улице (Интернет)
  • Давление (мм.рт.ст) (Интернет)
  • Влажность (Интернет)
  • Скорость ветра (Интернет)
  • Время восхода солнца (Интернет)
  • Время заката солнца (Интернет)
  • Время прогноза

Самая нижняя строка показывает кол-во запросов в серверу погоды с момента включения.

Для нормальной работы погодной станции необходимо указать в скетче свой логин и пароль Wi-Fi сети, а так же указать свой номер региона.

const char* ssid = «логин»;

const char* password = «пароль»;

Link = «/bar/reginfo.xml?region=xx»; // где хх — номер региона

Для работы с NodeMcu v3 (ESP-12E) в среде Arduino IDE ознакомьтесь с статьей — https://rcl-radio.ru/?p=48790

Библиотеки:

Подключение:

  • DS3231 …….. SCL SDA — D1 D2
  • TFT ………….. SDI (MOSI), SCK, CS, RESET, DC == GPIO 13, 14, 15, 0, 12 == D7 D5 D8 D3 D6 (LED и VCC +3.3 В, остальные выводы TFT подсоединяются к плате NodeMcu напрямую без делителей напряжения)
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h> 
#include <Wire.h>
#include <UTFT.h>
#include <SPI.h>
#include <DS3231.h>//https://github.com/jarzebski/Arduino-DS3231/archive/master.zip
DS3231 vrem;// Связываем объект clock с библиотекой DS3231
RTCDateTime DateTime;// Определяем сущность структуры RTCDateTime (описанной в библиотеке DS3231) для хранения считанных с часов даты и времени
extern uint8_t BigFont[],SmallFont[];
UTFT myGLCD ( ILI9341_S5P, 13, 14, 15, 0, 12 );//SDI (MOSI), SCK, CS, RESET, DC == D7 D5 D8 D3 D6
 
const char* ssid = "Keenetic-9009";
const char* password = "32481975";
char host[] = "export.yandex.ru"; 
const int port = 443;
const char fingerprint[] PROGMEM = "F3 DB F7 38 AA 71 13 15 1E E8 53 FC 0F 29 8C AB 3D F4 80 9F"; 
 
int w=1,i,w1=1,y,y01,y02;
unsigned long times;
String line;
String Link;
 
void setup (  ) { Wire.begin();  vrem.begin();// Инициализируем работу с объектом библиотеки DS3231
  myGLCD.InitLCD(0);myGLCD.fillRect(0,0,320,240);myGLCD.setFont(BigFont);myGLCD.clrScr();myGLCD.setColor(0,0,0); // первоначальные настройки экрана
 // myGLCD.setBrightness(16);myGLCD.setContrast(64);
  //  vrem.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
    Serial.begin(9600); delay(1000);
    WiFi.mode(WIFI_STA); WiFi.begin(ssid, password);
   while (WiFi.status() != WL_CONNECTED) {delay(1000);
    myGLCD.setColor(0xffff);myGLCD.print("Connecting...",0,0);}
    myGLCD.print(ssid,0,15);Serial.print("IP address: ");Serial.println(WiFi.localIP());delay(3000);
    myGLCD.fillScr(0x0000);myGLCD.setColor(0x0000);myGLCD.setBackColor(0x0000);
}
 
void loop(){ to_Timer();delay(100);
  if(DateTime.minute==0&&DateTime.second==0||DateTime.minute==30&&DateTime.second==0||w==1){
    i++;
 
    WiFiClientSecure client;
    Serial.printf("Using fingerprint '%s'\n", fingerprint);
     client.setFingerprint(fingerprint);
     client.setTimeout(1000); // 5 Seconds
     delay(1000); while((!client.connect(host, port))){delay(100);}
 
     Link = "/bar/reginfo.xml?region=66";
     client.print(String("GET ") + Link + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +               
               "Connection: close\r\n\r\n");Serial.println("request sent");delay(1000);
 
  while (client.connected()) {String line = client.readStringUntil('\n');if (line == "\r") {Serial.println("headers received");break;}}
  delay(1000);while (client.available()) {line = client.readStringUntil('\r'); 
 
         myGLCD.setColor(0xffff);  
 
         int a;a =line.indexOf("<temperature class");
         myGLCD.print("TEMP_2",10,90);myGLCD.printNumI(line.substring(a+45, a+90).toInt(),130,90,2);myGLCD.print("C",200,90);
 
         myGLCD.drawLine(5,115,235,115);
 
         a =line.indexOf("<torr>"); 
         myGLCD.setColor(0xfdfd);myGLCD.print("Pressure",10,125);myGLCD.setColor(0xffff);myGLCD.printNumI(line.substring(a+6, a+15).toInt(),170,125,3);//myGLCD.print("C",200,125);
 
         a =line.indexOf("<dampness>"); 
         myGLCD.setColor(0xcdcd);myGLCD.print("Dampness",10,150);myGLCD.setColor(0xffff);myGLCD.printNumI(line.substring(a+10, a+15).toInt(),155,150,3);myGLCD.print("%",200,150);
 
         a =line.indexOf("<wind_speed>"); 
         myGLCD.setColor(0xeded);myGLCD.print("Wind_sp",10,175);myGLCD.setColor(0xffff);myGLCD.printNumI(line.substring(a+12, a+15).toInt(),140,175,2);myGLCD.print("m/s",180,175);
 
         a =line.indexOf("<sun_rise>"); 
         myGLCD.setColor(0xdddd);myGLCD.print("Sunrise",10,200);myGLCD.setColor(0xffff);myGLCD.print(line.substring(a+10, a+15),145,200,0);
 
         a =line.indexOf("<sunset>"); 
         myGLCD.setColor(0xdddd);myGLCD.print("Sunset",10,225);myGLCD.setColor(0xffff);myGLCD.print(line.substring(a+8, a+13),145,225,0);
 
         a =line.indexOf("<observation>"); 
         myGLCD.setFont(SmallFont);myGLCD.setColor(0xbbbb);myGLCD.setColor(0xffff);myGLCD.print(line.substring(a+13, a+32),CENTER,255,0);
 
         myGLCD.setColor(0xffff);  myGLCD.drawLine(5,280,235,280);
 
         myGLCD.setFont(SmallFont);
         myGLCD.setColor(0xf000);myGLCD.print("pogoda.yandex.ru",CENTER,285);
         myGLCD.setColor(0xcdcd);myGLCD.print("Number of requests",30,300);myGLCD.printNumI(i,200,300);
  }}w=0;
  }//loop
 
 void to_Timer(){
       DateTime = vrem.getDateTime();   // Считываем c часов текущие значения даты и времени в сущность DateTime
       myGLCD.setFont(BigFont);myGLCD.setColor(0xffff);
 
       if(DateTime.hour<10){myGLCD.printNumI(0,57,10);y02=15;}
       else{y02=0;}myGLCD.printNumI(DateTime.hour, 57+y02, 10);myGLCD.print(":", 90, 10,0);
       // минуты
       if(DateTime.minute<10){myGLCD.printNumI(0,105,10);y01=15;}
       else{y01=0;}myGLCD.printNumI(DateTime.minute, 105+y01, 10);myGLCD.print(":", 135, 10,0);
       //секунды
       if(DateTime.second<10){myGLCD.printNumI(0,150,10);y=15;}
       else{y=0;}myGLCD.printNumI(DateTime.second, 150+y, 10);
 
       String time_d = vrem.dateFormat("D d M Y", DateTime);
       if(DateTime.second==0||w==1){myGLCD.setFont(SmallFont);myGLCD.setColor(0xcdcd);myGLCD.print(time_d, CENTER,35,0);
       myGLCD.setColor(0xffff);myGLCD.drawLine(5,55,235,55);  
       myGLCD.setFont(BigFont);myGLCD.setColor(200,200,200);myGLCD.print("TEMP_1",10,65);myGLCD.printNumF(vrem.readTemperature(),1,130,65);myGLCD.print("C",200,65);}
  }


Различные цветовые решения

Секция setup()

myGLCD.fillScr(0x1010);myGLCD.setColor(0x0000);myGLCD.setBackColor(0x1010);// цвет фона


Русификация экрана

В папку с библиотекой New_UTFT вставить файл — RussianFonts и загрузите новый скетч — esp_rus_pogoda.zip

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • Схемы включения биполярных транзисторов

    Транзистор трех электродный прибор, его электроды: эмиттер, коллектор и база. При использовании транзистора в качестве усилителя напряжения, тока или мощности входной сигнал надо подавать на два других электрода и с двух электродов снимать сигнал (усиленный сигнал), при этом один из электродов будет обязательно общим. Это обстоятельство (общий электрод) и определяет …Подробнее...
  • Преобразователь частота-напряжение

    Преобразователь частота-напряжение преобразует импульсы с частотой от 0 до 9кГц в постоянное напряжение от 0 до 9В. Основа преобразователя микросхема ТС9401. Входной сигнал амплитуда которого не должна превышать напряжение питания (10…15В) подается на разъем CON1. Напряжение питания подается на разъем CON3. D2 препятствует протеканию тока в случае перепутывания полярности. Установка …Подробнее...
  • Ультралинейный усилитель мощности на 100Вт

    Ультралинейный усилитель мощности на 100Вт

    На рисунке представлена схема усилителя мощности НЧ в полосе частот от 10 до 600000Гц на 100Вт. Схема: Т1 Т2 и Т3 Т4 — входной усилитель выполненный по дифференциальной схеме, Т5 — каскад предварительного усиления, Т6 Т7 и Т8 Т9 — оконечный каскад с бестрансформаторым выходом по схеме с дополнительной симметрией …Подробнее...
  • Простой УМЗЧ (3)

    Простой УМЗЧ (3)

    Особенность данного УМЗЧ то, что в нем работают 3 составных транзистора. Это привело к минимуму используемых элементов. Такое построение пред оконечного каскада на VT2 обеспечило его высокое входное сопротивление и значительный коэффициент усиления и низкий уровень искажений при отсутствии ООС. Дополнительно увеличить коэффициент усиления позволила цепь R6 C5, что позволило …Подробнее...
  • Шестнадцатеричный дешифратор на одной микросхеме

    Широкодоступных микросхем дешифраторов способных отображать на цифровом табло числа от 0 до 15 соответственно поступающим на входы кодам от 0000 до 1111 практически нет. Для того что бы построить данное устройство необходимо несколько микросхем для индикации на семисегментном табло, но используя дешёвую микросхему ПЗУ К155РЕ3 и запрограммировать ее, можно получить …Подробнее...