Arduino Mega Server (AMS) - погодная станция

Модератор: Alex

serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server (AMS) - погодная станция

Сообщение serghei » Вс окт 29, 2017 12:26 am

....Даа...Не любит безумный робот цифровых художников ! Alex, снимите два бана! Картинки интересные!
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server (AMS) - погодная станция

Сообщение serghei » Сб ноя 04, 2017 11:45 pm

В процессе работы над проектом понял, что .htm страницу можно создать ТРЕМЯ способами:
1. Создать " в ручную" как написаны все страницы в АМС
2. Создать страницу в коде. Потом она переносится на SD карту и работаем как обычно. Пример кода. Тут создается 6 страниц.
СпойлерПоказать

Код: Выделить всё

#include <SD.h>
#include <OneWire.h>
#include <SPI.h>
#include <Ethernet.h>

/*********** SD Stuff ****************/
// On the Ethernet Shield, CS is pin 4. Note that even if it's not
// used as the CS pin, the hardware CS pin (10 on most Arduino boards,
// 53 on the Mega) must be left as an output or the SD library
// functions will not work.

const int chipSelect = 4;

/*********** ETHERNET STUFF ***********/
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 177 };
EthernetServer server(80);
#define BUFSIZ 100

/********** OneWire Stuff ************/
OneWire  ds(9); // OneWire bus on pin 9
float celsius[10], fahrenheit[10];
int cnt=0, maxCnt;

/********** Radial Stuff ************/
char *bcname[]={"HLT","MLT","RIMS","BOIL","TBD"};
char *bcrfn[]={"bcr100.htm","bcr150.htm","bcr200.htm","bcr250.htm","bcr300.htm","bcr350.htm"};
int bcrsize[]={100,150,200,250,300,350};

void setup()
{
 // Open serial communications and wait for port to open:
  Serial.begin(9600);

//  Serial.print("Initializingard...");
  // make sure that the default chip select pin is set to
  // output, even if you don't use it:
  pinMode(10, OUTPUT);
  
  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println(F("Card failed, or not present"));
    // don't do anything more:
    return;
  }
//  Serial.println(F("SD card initialized."));
 
 // set up bcradial.htm

void writeBCRfile(char *filename, int size)
{
  int cntz;
  
  File bcrWriteFile = SD.open(filename, FILE_WRITE);
    if (bcrWriteFile)
    {
      bcrWriteFile.println(F("<!DOCTYPE html>"));
      bcrWriteFile.println(F("<html lang=\"en\">"));
      bcrWriteFile.println(F("<head>"));
      bcrWriteFile.println(F(" <meta charset=\"utf-8\" />"));
      bcrWriteFile.println(F(" <title>ButtCrack Brewery</title>"));

      
     bcrWriteFile.println(F(" <script type='text/javascript' src='http://www.buttcrackbrewery.com/js/Arduino/tween.js'></script  bcrWriteFile.println(F(" <script type='text/javascript' src='http://www.buttcrackbrewery.com/js/Arduino/sslib1.js'></script  bcrWriteFile.println(F(""));

      
      bcrWriteFile.println(F(" <script type=\"application/javascript\">"));
      bcrWriteFile.println(F(""));
      bcrWriteFile.println(F("// Ajax request for xml data generated by Arduino"));
      bcrWriteFile.println(F("  function ajaxUpdateValues()"));
      bcrWriteFile.println(F("  {"));
      bcrWriteFile.println(F(""));
      bcrWriteFile.println(F("    var httpRequest;"));
      bcrWriteFile.println(F("    var xmlDoc;"));
      bcrWriteFile.println(F(""));
      bcrWriteFile.println(F("// get the xml document via Ajax/http"));
      bcrWriteFile.println(F("    httpRequest = new XMLHttpRequest();"));
      bcrWriteFile.println(F("    httpRequest.onreadystatechange=function() {"));
      bcrWriteFile.println(F("      if(httpRequest.readyState == 4) {"));
      bcrWriteFile.println(F("        steamPress = Number(httpRequest.responseText);"));
      bcrWriteFile.println(F("      }"));
      bcrWriteFile.println(F("    }"));

      
      bcrWriteFile.println(F("    httpRequest.open(\"GET\",\"http://192.168.1.177/butcrack.xml\",falseeFile.println(F("    httpRequest.send(null);"));

      
      bcrWriteFile.println(F("    xmlDoc=httpRequest.responseXML;"));
      bcrWriteFile.println(F("\n// update the global variables by parsing the xml document"));

      for(cntz = 0; cntz < maxCnt; cntz++)
      {
        bcrWriteFile.print(F("    Temp"));
        bcrWriteFile.print(cntz);

        
        bcrWriteFile.print(F("=Number(xmlDoc.getElementsByTagName(\"Temp   bcrWriteFile.print(cntz);

        
        bcrWriteFile.println(F("\")[0].childNodes[0].nodeValue);"));
      }

      bcrWriteFile.println(F(""));
      bcrWriteFile.println(F("  }"));
      bcrWriteFile.println(F(""));
      bcrWriteFile.println(F("  function init()"));
      bcrWriteFile.println(F("  {"));
      bcrWriteFile.println(F(""));
      bcrWriteFile.println(F("// Define section(s)"));

      bcrWriteFile.print(F("    sections = Array(steelseries.Section(68, 80,\"rgba(0, 0, 254, 0.9)\"),\n\t steelseries.Section(140, 160,\"rgba(0, 254, 0, 0.9)\"),\n\t steelseries.Section(160, 180,\"rgba(254, 254, 0, 0.9)\"),\n\t steelseries.Section(180, 220, \"rgba(254, 0, 0, 0.9)\"));\n"));
      bcrWriteFile.println(F(""));
      bcrWriteFile.println(F("// Define area(s)"));
      bcrWriteFile.print(F("    areas = Array(steelseries.Section(68, 80,\"rgba(0, 0, 254, 0.9)\"),\n\tsteelseries.Section(140, 160,\"rgba(0, 254, 0, 0.9)\"),\n\tsteelseries.Section(160, 180,\"rgba(254, 254, 0, 0.9)\"),\n\tsteelseries.Section(180, 220, \"rgba(254, 0, 0, 0.9)\"));\n"));
      bcrWriteFile.println(F(""));
      bcrWriteFile.println(F("// Initialize gauge"));
      
      for(cntz = 0; cntz < maxCnt; cntz++)
      {
        bcrWriteFile.print(F("    radial"));
        bcrWriteFile.print(cntz);
        bcrWriteFile.print(F(" = new steelseries.Radial(\"Temp"));
        bcrWriteFile.print(cntz);
        bcrWriteFile.println(F("\", "));
        bcrWriteFile.println(F("    {"));
//        bcrWriteFile.println(F("//        gaugeType: steelseries.GaugeType.TYPE3,"));
        bcrWriteFile.print(F("\tsize"));
        bcrWriteFile.print(size);
        bcrWriteFile.print(F(",\n\tminValuen\tmaxValue: 220,\n\tthreshold: 152,\n\tsection: sections,\n\tarea: areas,\n\ttitleString: \""));
        bcrWriteFile.print(bcname[cntz]);
        bcrWriteFile.println(F("\",\n\tunitString: \"°F\",\n\tpointerType: steelseries.PointerType.TYPE2,\n\tframeDesign: steelseries.FrameDesign.BLACK_METAL,\n\tforegroundType: steelseries.ForegroundType.TYPE3,\n\tbackgroundColor: steelseries.BackgroundColor.CARBON,\n\tledVisible: true"));
        bcrWriteFile.println(F("    });"));
        bcrWriteFile.println(F(""));
      }

      bcrWriteFile.println(F(""));
      bcrWriteFile.println(F("// Start the random update"));
      bcrWriteFile.println(F("  setInterval(function(){ ajaxUpdateValues(); }, 5000);      "));
      for(cntz = 0; cntz < maxCnt; cntz++)
      {
        bcrWriteFile.print(F("  setInterval(function(){ setValue(radial"));
        bcrWriteFile.print(cntz);
        bcrWriteFile.print(F(", Temp"));
        bcrWriteFile.print(cntz);
        bcrWriteFile.println(F("); }, 10000);"));
      }

 //     bcrWriteFile.println(F(""));
      bcrWriteFile.println(F("\n  }"));
      bcrWriteFile.println(F(""));
      bcrWriteFile.println(F("  function setValue(gauge, range)"));
      bcrWriteFile.println(F("  {"));
      bcrWriteFile.println(F("      gauge.setValueAnimated(range);"));
      bcrWriteFile.println(F("  }"));
      bcrWriteFile.println(F(""));
      bcrWriteFile.println(F(""));
      bcrWriteFile.println(F("</script>"));

      
     // bcrWriteFile.println(F("<style>body {background: url(\"http://www.buttcrackbrewery.com/images/Arduino/bc.png\");}</style    bcrWriteFile.println(F("</head>"));

      
      bcrWriteFile.println(F("<body onload=\"init()\">  "));
      for(cntz = 0; cntz < maxCnt; cntz++)
      {
        bcrWriteFile.print(F("\t<canvasmp"));
        bcrWriteFile.print(cntz);
        bcrWriteFile.println(F("\">\n\tNo canvas in your browser...sorry...\n\t</canvas>"));
      }
      bcrWriteFile.println(F("</body>"));
      bcrWriteFile.println(F("</html>"));
      bcrWriteFile.close();
      Serial.print(filename);
      Serial.println(F(" written"));
  } else {
    // if the file didn't open, print an error:
    Serial.println(F("error opening bcradial.htm"));
  }      
} 
3. Ну и наконец страница создается вообще не понятно как, но так работают все интернет-технологии. Используется библиотеки
СпойлерПоказать

Код: Выделить всё

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiClient.h>
#include <ArduinoJson.h>
#include <DNSServer.h>        
Ну и сам код страницы
СпойлерПоказать

Код: Выделить всё

void homepage(){
  append_page_header(); 
  webpage += F("<hr>");
  webpage += F("<table class='style7'>");
  webpage += F("      <tr>");
  webpage += "          <th>"+DWDay1+"</th>";
  webpage += "          <th>"+DWDay2+"</th>";
  webpage += "          <th>"+DWDay3+"</th>";
  webpage += "          <th>"+DWDay4+"</th>";
  webpage += F("      </tr>");
  webpage += F("      <tr>");
  webpage += F("        <td>");
  webpage += "            "+DDateDa1+"-"+DMon1+"-"+DDateYr1;
  webpage += F("        </td>");
  webpage += F("        <td>");
  webpage += "            "+DDateDa2+"-"+DMon2+"-"+DDateYr2;
  webpage += F("        </td>");
  webpage += F("        <td>");
  webpage += "            "+DDateDa3+"-"+DMon2+"-"+DDateYr3;
  webpage += F("        </td>");
  webpage += F("        <td>");
  webpage += "            "+DDateDa4+"-"+DMon3+"-"+DDateYr4;
  webpage += F("        </td>");
  webpage += F("      </tr>");
  webpage += F("      <tr>");
  webpage += "          <td> <img class='imgdisplay' alt='wx' height='70' src='"+Dicon_url1+"' width='70'/></td>";
  webpage += "          <td> <img class='imgdisplay' alt='wx' height='70' src='"+Dicon_url2+"' width='70'/></td>";
  webpage += "          <td> <img class='imgdisplay' alt='wx' height='70' src='"+Dicon_url3+"' width='70'/></td>";
  webpage += "          <td> <img class='imgdisplay' alt='wx' height='70' src='"+Dicon_url4+"' width='70'/></td>";
  webpage += F("      </tr>");
  webpage += F("      <tr>");  
  webpage += F("        <td class='style8'>Max - Min - Hum</td>");
  webpage += F("        <td class='style8'>Max - Min - Hum</td>");
  webpage += F("        <td class='style8'>Max - Min - Hum</td>");
  webpage += F("        <td class='style8'>Max - Min - Hum</td>");
  webpage += F("      </tr>");
  webpage += F("      <tr>");
  webpage += F("        <td class='style9'>");
  webpage += "            &nbsp"+DHtemp1+"&deg;&nbsp;&nbsp;&nbsp;&nbsp"+DLtemp1+"&deg;&nbsp;&nbsp;&nbsp;&nbsp"+DHumi1+"%</td>";
  webpage += F("        </td>");
  webpage += F("        <td class='style9'>");
  webpage += "            &nbsp"+DHtemp2+"&deg;&nbsp;&nbsp;&nbsp;&nbsp"+DLtemp2+"&deg;&nbsp;&nbsp;&nbsp;&nbsp"+DHumi2+"%</td>";
  webpage += F("        </td>");
  webpage += F("        <td class='style9'>");
  webpage += "            &nbsp"+DHtemp3+"&deg;&nbsp;&nbsp;&nbsp;&nbsp"+DLtemp3+"&deg;&nbsp;&nbsp;&nbsp;&nbsp"+DHumi3+"%</td>";
  webpage += F("        </td>");
  webpage += F("        <td class='style9'>");
  webpage += "            &nbsp"+DHtemp4+"&deg;&nbsp;&nbsp;&nbsp;&nbsp"+DLtemp4+"&deg;&nbsp;&nbsp;&nbsp;&nbsp"+DHumi4+"%</td>";
  webpage += F("        </td>");
  webpage += F("      </tr>");
  webpage += F("      <tr>");
  webpage += F("        <td class='style9'>");
  webpage += "            "+winddirsymbol(&DW_dir1) + " @ " + DW_mph1;
  webpage += F("        </td>");
  webpage += F("        <td class='style9'>");
  webpage += "            "+winddirsymbol(&DW_dir2) + " @ " + DW_mph2;
  webpage += F("        </td>");
  webpage += F("        <td class='style9'>");
  webpage += "            "+winddirsymbol(&DW_dir3) + " @ " + DW_mph3;
  webpage += F("        </td>");
  webpage += F("        <td class='style9'>");
  webpage += "            "+winddirsymbol(&DW_dir4) + " @ " + DW_mph4;
  webpage += F("        </td>");
  webpage += F("      </tr>");
  webpage += F("      <tr>");
  webpage += F("        <td class='style8'>");
  webpage += "            "+DPop1+"% chance of "+((DRain1=="0mm"||DRain1=="0in")?"rain":DRain1+" rain");
  webpage += F("        </td>");
  webpage += F("        <td class='style8'>");
  webpage += "            "+DPop2+"% chance of "+((DRain2=="0mm"||DRain2=="0in")?"rain":DRain2+" rain");
  webpage += F("        </td>");
  webpage += F("        <td class='style8'>");
  webpage += "            "+DPop3+"% chance of "+((DRain3=="0mm"||DRain3=="0in")?"rain":DRain3+" rain");
  webpage += F("        </td>");
  webpage += F("        <td class='style8'>");
  webpage += "            "+DPop4+"% chance of "+((DRain4=="0mm"||DRain4=="0in")?"rain":DRain4+" rain");
  webpage += F("        </td>");
  webpage += F("      </tr>");
  webpage += F("    </table>");
  webpage += F("<br>");
  append_page_footer();
  server.send(200, "text/html", webpage);
}
Учитывая,что в АМС на ЕСП8266 остается 15 % памяти, догадываюсь, что она лежит в ОЗУ. Но таким образом не получается создать саму страницу, потому что она вызывается по порту 5000. А в коде уже задействован порт 8080 для HTTP. Получается конфликт интересов.)) Поэтому просто нарисовал нужный контент и через Ажакс вывел необходимые цифры.
СпойлерПоказать
Wun8266.jpg
Wun8266.jpg (159.73 КБ) 4338 просмотров
Первая колонка реальная, остальные нарисованные. Вот только с картинкой тучек не получается - я могу через XML таблицу отправить ссылку в браузер.
СпойлерПоказать
  • <inputs>
    <mRtc>1</mRtc>
    <mEthernet>2</mEthernet>
    ===============
    <month>11</month>
    <weekday>7</weekday>
    <c1Temp1>0.00</c1Temp1>
    <mega>0</mega>
    <DHtemp1>13</DHtemp1>
    <DLtemp1>5</DLtemp1>
    <DHumi1>68</DHumi1>
    <DWDay1>Sat</DWDay1>
    <DDateDa1>04</DDateDa1>
    <DMon1>Nov</DMon1>
    <DDateYr1>17</DDateYr1>
    <Dicon_url1>http://icons.wxug.com/i/c/k/partlycloud ... Dicon_url1>
    </inputs>
Но как её (ссылку) вызвать на самой странице? Обратиться к ней просто
СпойлерПоказать

Код: Выделить всё

     <tr>          
      <td><img class='imgdisplay' alt='wx' height='70' src='http://icons.wxug.com/i/c/k/chancerain.gif' width='70'/></td>
      <!--<td><span id="dicon_url1"></span></td>--> // так не работает
      <td><img class='imgdisplay' alt='wx' height='70' src='http://icons.wxug.com/i/c/k/chancerain.gif' width='70'/></td>          
      <td><img class='imgdisplay' alt='wx' height='70' src='http://icons.wxug.com/i/c/k/rain.gif' width='70'/></td>          
      <td><img class='imgdisplay' alt='wx' height='70' src='http://icons.wxug.com/i/c/k/partlycloudy.gif' width='70'/></td>      
     </tr> 
Но надо чтобы она менялась согласно XML таблице.......

*** Сообщение запрещено. Сообщение похоже на спам. ***
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server (AMS) - погодная станция

Сообщение serghei » Вт ноя 14, 2017 12:04 am

....Проще было написать километровую страницу, чем бороться с роботом...

...Получил JSON строку , распарсил и через Ажакс отправил в браузер. На каждый из четырех дней аж 13 переменных. В том числе и картинка с тучками ( на сервисе . В ответ приходит URL ).
СпойлерПоказать
<DHtemp1>16</DHtemp1>
<DLtemp1>7</DLtemp1>
<DHumi1>94</DHumi1>
<DWDay1>Mon</DWDay1>
<DDateDa1>13</DDateDa1>
<DMon1>Nov</DMon1>
<DDateYr1>17</DDateYr1>
<Dicon_url1>http://icons.wxug.com/i/c/k/clear.gif</Dicon_url1> // Как её вытащить на страницу ??
<DHtemp2>11</DHtemp2>
<DLtemp2>3</DLtemp2>
<DHumi2>82</DHumi2>
<DWDay2>Tue</DWDay2>
<DDateDa2>14</DDateDa2>
<DMon2>Nov</DMon2>
<DDateYr2>17</DDateYr2>
<Dicon_url2>http://icons.wxug.com/i/c/k/cloudy.gif</Dicon_url2>
<DHtemp3>11</DHtemp3>
<DLtemp3>3</DLtemp3>
<DHumi3>82</DHumi3>
<DWDay3>Wed</DWDay3>
<DDateDa3>15</DDateDa3>
<DMon3>Nov</DMon3>
<DDateYr3>17</DDateYr3>
<Dicon_url3>http://icons.wxug.com/i/c/k/partlycloud ... Dicon_url3>
<DHtemp4>8</DHtemp4>
<DLtemp4>1</DLtemp4>
<DHumi4>70</DHumi4>
<DWDay4>Thu</DWDay4>
<DDateDa4>16</DDateDa4>
<DMon4>Nov</DMon4>
<DDateYr4>17</DDateYr4>
<Dicon_url4>http://icons.wxug.com/i/c/k/partlycloud ... Dicon_url4>
<Citi>Chisinau</Citi>
<Dtime>from 13 November, 2017</Dtime>
Числа расставить по местам очень просто. Сложнее с картинками. Самое легкое - вставить ссылку на иконку.

Код: Выделить всё

      <td> 
      <img class='imgdisplay' alt='wx' height='70' src='http://icons.wxug.com/i/c/k/chancerain.gif' width='70'/>
      </td> 
Ссылка реальная. А вот как её менять на странице в зависимости от XML таблицы ? Фокус со скриптом не получается. Как правильно это сделать ?
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server (AMS) - погодная станция

Сообщение serghei » Ср мар 28, 2018 10:35 pm

Что-то делать на втором сервере вообще не очень хорошая идея
В продолжение темы. Первоисточник я уже не найду , но все это удалось воткнуть в AMS , залезть на сайт, получить ответ в JSON и вывести кое что на страницу. В оригинале код страниц похоже сидит в памяти 8266 и выводится в браузер на 5000 порту. Полный код вкладки
wungergr.zip
(6.48 КБ) 173 скачивания
Тогда собственно остался один вопрос. В XML таблице выводятся 4 ссылки на иконки " тучек"
СпойлерПоказать
  • <DHtemp4>8</DHtemp4>
    <DLtemp4>1</DLtemp4>
    <DHumi4>70</DHumi4>
    <DWDay4>Thu</DWDay4>
    <DDateDa4>16</DDateDa4>
    <DMon4>Nov</DMon4>
    <DDateYr4>17</DDateYr4>
    <Dicon_url4>http://icons.wxug.com/i/c/k/partlycloud ... Dicon_url4>
    <Citi>Chisinau</Citi>
    <Dtime>from 13 November, 2017</Dtime>
Так вот как их превратить в картинки? Сами иконки я могу сохранить локально. Как вариант с днем недели прописью в даш-панели может преобразовать через case ?
СпойлерПоказать

Код: Выделить всё

function weekday(day) {
  switch (day) {
    case "1": return "Воскресенье"; break;
    case "2": return "Понедельник"; break;
    case "3": return "Вторник"; break;
    case "4": return "Среда"; break;
    case "5": return "Четверг"; break;
    case "6": return "Пятница"; break;
    case "7": return "Суббота"; break;
     default: return ""; break;
  }
}
только вместо 1 подставить ссылку из таблицы , а вместо " воскресенье " саму картинку ?

Еще раз. Это все отлично работает уже полгода. Дело техники вывести всё на TFT экран. Затык только с картинками.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Arduino Mega Server (AMS) - погодная станция

Сообщение nick7zmail » Чт мар 29, 2018 7:31 am

Не совсем понял зачем картинки по дням недели преобразовыаать...но если есть путь - на экране вроде должно легко отрисовываться...

Отправлено с моего Xperia XZ1 Compact через Tapatalk
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server (AMS) - погодная станция

Сообщение serghei » Чт мар 29, 2018 8:22 am

Это как вариант был. В XML попадает актуальная ссылка

Код: Выделить всё

<Dicon_url1>http://icons.wxug.com/i/c/k/clear.gif</Dicon_url1> // Как её вытащить на страницу ??   
Скрипта под рукой нет , а в HTML код вставляю так

Код: Выделить всё

     <tr>          
      <td><img class='imgdisplay' alt='wx' height='70' src='http://icons.wxug.com/i/c/k/chancerain.gif' width='70'/></td>
      <!--<td><span id="dicon_url1"></span></td>--> // так не работает
      <td><img class='imgdisplay' alt='wx' height='70' src='http://icons.wxug.com/i/c/k/chancerain.gif' width='70'/></td>          
      <td><img class='imgdisplay' alt='wx' height='70' src='http://icons.wxug.com/i/c/k/rain.gif' width='70'/></td>          
      <td><img class='imgdisplay' alt='wx' height='70' src='http://icons.wxug.com/i/c/k/partlycloudy.gif' width='70'/></td>      
     </tr>
В первой строчке честно вставляется картинка по ссылке. А надо из таблицы.

*** Сообщение запрещено. Сообщение похоже на спам. ***
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server (AMS) - погодная станция

Сообщение serghei » Пн май 21, 2018 10:33 pm

Если не получается стандартными средствами AMS вставить ссылку на картину из XML таблицы , то поднял всё таки другой сервер на 8266 и сформировал страницу в коде. Теперь вижу актуальную инфу .

И к стати о погоде )). Этот сайт работает очень адекватно вот уже год. Ключ API не менял. Выдает прогноз на 4 дня. Достаточно верный. Позволяет достукиваться до 500 раз в сутки. Обновление погоды не отслеживал. API бесплатный. 9 видов иконок.На ESP8266 выглядит так
СпойлерПоказать
AMS_wea.jpg
AMS_wea.jpg (127.96 КБ) 3547 просмотров
На ESP32 тот же код не достукивается до сайта. Хотя если запустить отдельно от AMS , то всё получается ( правда выводит на OLED экран 1"3 дюйма).
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Ответить