<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[forum.rcl-radio.ru &mdash; Wi-Fi метеостанция (рус)]]></title>
		<link>http://forum.rcl-radio.ru/viewtopic.php?id=58</link>
		<atom:link href="http://forum.rcl-radio.ru/extern.php?action=feed&amp;tid=58&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Wi-Fi метеостанция (рус)».]]></description>
		<lastBuildDate>Sat, 07 Sep 2019 18:19:51 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Wi-Fi метеостанция (рус)]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=66#p66</link>
			<description><![CDATA[<p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2019/09/1a780f2db673f98cd8ce20d7c7b474b4.png" alt="http://forum.rcl-radio.ru/uploads/images/2019/09/1a780f2db673f98cd8ce20d7c7b474b4.png" /></span> </p><p>Основная статья - <a href="http://rcl-radio.ru/?p=66004">http://rcl-radio.ru/?p=66004</a></p><p><span class="attention-yellow"></span> </p><br /><div class="codebox"><pre><code>#include &lt;ESP8266WiFi.h&gt;
#include &lt;WiFiClientSecure.h&gt; 
#include &lt;Wire.h&gt;
#include &lt;UTFT.h&gt;
#include &lt;SPI.h&gt;
#include &lt;DS3231.h&gt;//https://github.com/jarzebski/Arduino-DS3231/archive/master.zip
DS3231 vrem;// Связываем объект clock с библиотекой DS3231
RTCDateTime DateTime;// Определяем сущность структуры RTCDateTime (описанной в библиотеке DS3231) для хранения считанных с часов даты и времени

 UTFT myGLCD ( ILI9341_S5P, 13, 14, 15, 0, 12 );//SDI (MOSI), SCK, CS, RESET, DC == D7 D5 D8 D3 D6
 extern uint8_t SmallRusFont[];
 extern uint8_t BigRusFont[];
const uint8_t utf8_rus_charmap[] PROGMEM = {&#039;A&#039;,128,&#039;B&#039;,129,130,&#039;E&#039;,131,132,133,134,135,&#039;K&#039;,136,&#039;M&#039;,&#039;H&#039;,&#039;O&#039;,137,&#039;P&#039;,&#039;C&#039;,&#039;T&#039;,138,139,&#039;X&#039;,140,141,
142,143,144,145,146,147,148,149,&#039;a&#039;,150,151,152,153,&#039;e&#039;,154,155,156,157,158,159,160,161,162,&#039;o&#039;,163,&#039;p&#039;,&#039;c&#039;,164,&#039;y&#039;,165,&#039;x&#039;,166,167,168,169,170,
171,172,173,174,175};
char * den[7] = {&quot;ПОН&quot;,&quot;ВТР&quot;,&quot;СРД&quot;,&quot;ЧЕТ&quot;,&quot;ПЯТ&quot;,&quot;СУБ&quot;,&quot;ВСК&quot;};
char * mes[12] = {&quot;ЯНВАРЯ&quot;,&quot;ФЕВРАЛЯ&quot;,&quot;МАРТА&quot;,&quot;АПРЕЛЯ&quot;,&quot;МАЯ&quot;,&quot;ИЮНЯ&quot;,&quot;ИЮЛЯ&quot;,&quot;АВГУСТА&quot;,&quot;СЕНТЯБРЯ&quot;,&quot;ОКТЯБРЯ&quot;,&quot;НОЯБРЯ&quot;,&quot;ДЕКАБРЯ&quot;};

 
const char* ssid = &quot;Keenetic-9009&quot;;
const char* password = &quot;32481975&quot;;
char host[] = &quot;export.yandex.ru&quot;; 
const int port = 443;
const char fingerprint[] PROGMEM = &quot;F3 DB F7 38 AA 71 13 15 1E E8 53 FC 0F 29 8C AB 3D F4 80 9F&quot;; 
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(BigRusFont);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);printRus(myGLCD,&quot;Connecting...&quot;,0,0,0);}
 //   printRus(myGLCD,ssid,0,15,0);Serial.print(&quot;IP address: &quot;);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&amp;&amp;DateTime.second==0||DateTime.minute==30&amp;&amp;DateTime.second==0||w==1){
    i++;
 
    WiFiClientSecure client;
    Serial.printf(&quot;Using fingerprint &#039;%s&#039;\n&quot;, fingerprint);
     client.setFingerprint(fingerprint);
     client.setTimeout(1000); // 5 Seconds
     delay(1000); while((!client.connect(host, port))){delay(100);}
 
     Link = &quot;/bar/reginfo.xml?region=66&quot;;
     client.print(String(&quot;GET &quot;) + Link + &quot; HTTP/1.1\r\n&quot; +
               &quot;Host: &quot; + host + &quot;\r\n&quot; +               
               &quot;Connection: close\r\n\r\n&quot;);Serial.println(&quot;request sent&quot;);delay(1000);
 
  while (client.connected()) {String line = client.readStringUntil(&#039;\n&#039;);if (line == &quot;\r&quot;) {Serial.println(&quot;headers received&quot;);break;}}
  delay(1000);while (client.available()) {line = client.readStringUntil(&#039;\r&#039;); 
 
         myGLCD.setColor(0xffff);  
 
         int a;a =line.indexOf(&quot;&lt;temperature class&quot;);
         printRus(myGLCD,&quot;Темп_2&quot;,10,90,0);myGLCD.printNumI(line.substring(a+45, a+90).toInt(),130,90,2);printRus(myGLCD,&quot;C&quot;,200,90,0);
 
         myGLCD.drawLine(5,115,235,115);
 
         a =line.indexOf(&quot;&lt;torr&gt;&quot;); 
         myGLCD.setColor(0xfdfd);printRus(myGLCD,&quot;Давление&quot;,10,125,0);myGLCD.setColor(0xffff);myGLCD.printNumI(line.substring(a+6, a+15).toInt(),170,125,3);//printRus(myGLCD,&quot;C&quot;,200,125,0);
 
         a =line.indexOf(&quot;&lt;dampness&gt;&quot;); 
         myGLCD.setColor(0xcdcd);printRus(myGLCD,&quot;Влажность&quot;,10,150,0);myGLCD.setColor(0xffff);myGLCD.printNumI(line.substring(a+10, a+15).toInt(),155,150,3);printRus(myGLCD,&quot;%&quot;,200,150,0);
 
         a =line.indexOf(&quot;&lt;wind_speed&gt;&quot;); 
         myGLCD.setColor(0xeded);printRus(myGLCD,&quot;Скор.ветра&quot;,10,175,0);myGLCD.setColor(0xffff);myGLCD.printNumI(line.substring(a+12, a+15).toInt(),140,175,2);printRus(myGLCD,&quot;м/с&quot;,180,175,0);
 
         a =line.indexOf(&quot;&lt;sun_rise&gt;&quot;); 
         myGLCD.setColor(0xdddd);printRus(myGLCD,&quot;Восход&quot;,10,200,0);myGLCD.setColor(0xffff);myGLCD.print(line.substring(a+10, a+15),145,200,0);
 
         a =line.indexOf(&quot;&lt;sunset&gt;&quot;); 
         myGLCD.setColor(0xdddd);printRus(myGLCD,&quot;Закат&quot;,10,225,0);myGLCD.setColor(0xffff);myGLCD.print(line.substring(a+8, a+13),145,225);
 
         a =line.indexOf(&quot;&lt;observation&gt;&quot;); 
         myGLCD.setFont(SmallRusFont);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(SmallRusFont);
         myGLCD.setColor(0xf000);printRus(myGLCD,&quot;pogoda.yandex.ru&quot;,CENTER,285,0);
         myGLCD.setColor(0xcdcd);printRus(myGLCD,&quot;Количество запросов&quot;,20,300,0);myGLCD.printNumI(i,200,300);
  }}w=0;
  }//loop
 
 void to_Timer(){
       DateTime = vrem.getDateTime();   // Считываем c часов текущие значения даты и времени в сущность DateTime
       myGLCD.setFont(BigRusFont);myGLCD.setColor(0xffff);
 
       if(DateTime.hour&lt;10){myGLCD.printNumI(0,57,10);y02=15;}
       else{y02=0;}myGLCD.printNumI(DateTime.hour, 57+y02, 10);printRus(myGLCD,&quot;:&quot;, 90, 10,0);
       // минуты
       if(DateTime.minute&lt;10){myGLCD.printNumI(0,105,10);y01=15;}
       else{y01=0;}myGLCD.printNumI(DateTime.minute, 105+y01, 10);printRus(myGLCD,&quot;:&quot;, 135, 10,0);
       //секунды
       if(DateTime.second&lt;10){myGLCD.printNumI(0,150,10);y=15;}
       else{y=0;}myGLCD.printNumI(DateTime.second, 150+y, 10);
       
       if(DateTime.second==0||w==1){myGLCD.setFont(SmallRusFont);myGLCD.setColor(0xcdcd);printRus(myGLCD,den[DateTime.dayOfWeek-1], 50,35,0);
       myGLCD.setColor(0xcdcd);myGLCD.printNumI(DateTime.day, 95,35,2);
       myGLCD.setColor(0xcdcd);printRus(myGLCD,mes[DateTime.month-1], 130,35,0);
       
       
       myGLCD.setColor(0xffff);myGLCD.drawLine(5,55,235,55);  
       myGLCD.setFont(BigRusFont);myGLCD.setColor(200,200,200);printRus(myGLCD,&quot;Темп_1&quot;,10,65,0);myGLCD.printNumF(vrem.readTemperature(),1,130,65);printRus(myGLCD,&quot;C&quot;,200,65,0);}
  }

  void printRus(UTFT rus,char *st, int x, int y_r, int deg){
 int stl, i_r;
 stl = strlen(st);
 if (rus.orient==PORTRAIT){
    if (x==RIGHT) x=(rus.disp_x_size+1)-(stl*rus.cfont.x_size);
    if (x==CENTER) x=((rus.disp_x_size+1)-(stl*rus.cfont.x_size))/2;
 } else {
  if (x==RIGHT) x=(rus.disp_y_size+1)-(stl*rus.cfont.x_size);
  if (x==CENTER) x=((rus.disp_y_size+1)-(stl*rus.cfont.x_size))/2;
 }
 uint8_t utf_high_byte = 0;
 uint8_t ch, ch_pos = 0;
 for (i_r = 0; i_r &lt; stl; i_r++) {
  ch = st[i_r];
   if ( ch &gt;= 128) {
     if ( utf_high_byte == 0 &amp;&amp; (ch ==0xD0 || ch == 0xD1)) {
         utf_high_byte = ch;
      continue;
     } else {
     if ( utf_high_byte == 0xD0) {
    if (ch == 0x81) { //Ё
      ch = 6;
    } else {
    if(ch &lt;= 0x95) {
       ch -= 0x90;
    } else if( ch &lt; 0xB6){
    ch -= (0x90 - 1);
    } else {
    ch -= (0x90 - 2);
    }}
    ch = pgm_read_byte(utf8_rus_charmap + ch);
    } else if (utf_high_byte == 0xD1) {
           if (ch == 0x91) {//ё
           ch = 39;
       } else {
        ch -= 0x80;
        ch += 50;
       }
           ch = pgm_read_byte(utf8_rus_charmap + ch);
    }
    utf_high_byte = 0;
   }
   } else {
     utf_high_byte = 0;
     }
     if (deg==0) {rus.printChar(ch, x + (ch_pos * (rus.cfont.x_size)), y_r);} else {
          rus.rotateChar(ch, x, y_r, ch_pos, deg);
        }
      ++ch_pos;
 }
};</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Sat, 07 Sep 2019 18:19:51 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=66#p66</guid>
		</item>
	</channel>
</rss>
