Ethernet Shild - обновление страницы через определенный промежуток времени

Тема в разделе "Arduino & Shields", создана пользователем fess, 26 ноя 2014.

  1. fess

    fess Нерд

    Добрый день. Подскажите пожалуйста, как сделать автоматическое обновление страницы сгенерированной Ethernet Shild через определенный промежуток времени?
     
  2. Код (Text):
    <META HTTP-EQUIV="REFRESH" CONTENT="0;URL=http://192.168.0.1">
    0 - время в секундах.
    URL - адрес который будет обновлятся

    client.println("<meta http-equiv='refresh' content='0;url=http://192.168.0.1/>");
     
    artyom.clachin и fess нравится это.
  3. fess

    fess Нерд

    спасибо огромное
     
  4. fess

    fess Нерд

    а как еще можно организовать обновление получаемых данных без перезагрузки всей страницы?
    грубо говоря: нужно организовать получение данных с определенным периодом и одновременно с этим элементы управления (при перезагрузке страницы данные обновляются, но управлять уже не возможно)
     
  5. C использованием ajax
     
  6. fess

    fess Нерд

    понял, что это возможно, но как именно - не имею ни малейшего понятия. мы же работаем с html страницей?
     
  7. Код (Text):
    $("#result").load(
    "http://192.169.0.2/?sensor1=90&sensor2=115",
    {
    sensor1: "param1",
    sensor2: 2
    },
    function()
    {
    // А здесь получаем результаты и выводим в контейнер уже html страницу с параметрами
    }
    );
    Этот запрос на jquery, которую нужно подключать в client.print()
     
    fess нравится это.
  8. fess

    fess Нерд

    а можно как то расшифровать? например:
    sensor1=90 и sensor2=115 - это что? и как связано с sensor1: "param1", sensor2: 2
    и где указывается временной интервал?
     
    Последнее редактирование: 28 ноя 2014
  9. Это строка url которую нужно получать. Param это значение переменной sensor1. Тебе нужно запрос отправлять на ту же страницу и одновременно получать с нее данные. Если будет время я тебе скину ссылку на готовую html страницу. Посмотришь как сделано и переделаешь под себя.
     
  10. Я думаю, нужно подругому сделать. Создать два контейнера в html куда будет писаться инфа с ардуино и jquery запрос подгружать значения с определенным интервалом.
     
  11. fess

    fess Нерд

    Спасибо, чуть поясню задачу: на странице находятся управляющие элементы (включение/выключение светодиода) и данные от датчиков. Для примера взял с хабра скейтч от метеостанции

    Код (Text):
    // ========================Задаем необходимые библиотеки================================
    #include <SPI.h>
    #include <String.h>
    #include <Ethernet.h>
    #include "DHT.h"
    #include "Wire.h"
    #include "Adafruit_BMP085.h"
    // ====================================================================================
    // ========================Задаем данные сети==========================================
    byte mac[] = { 0xCA, 0xAF, 0x78, 0x1C, 0x13, 0x77 }; //mac - адрес ethernet shielda
    byte ip[] = { 172, 16, 30, 109 };        // ip адрес ethernet shielda
    byte subnet[] = { 255, 255, 255, 0 }; //маска подсети
    EthernetServer server(80); //порт сервера
    int ledPin = 4; // указываем что светодиод будет управляться через 4 Pin
    String readString = String(30); //string for fetching data from address
    boolean LEDON = false; //изначальный статус светодиода - выключен
    // ====================================================================================
    #define DHTPIN 3    // пин для датчика DHT22
    const unsigned char OSS = 0;  // Oversampling Setting
    // ====================================================================================
    // ========================ТИП ДАТЧИКА DHT=============================================
    //#define DHTTYPE DHT11  // DHT 11
    #define DHTTYPE DHT22  // DHT 22  (AM2302)
    //#define DHTTYPE DHT21  // DHT 21 (AM2301)
    // ====================================================================================
    DHT dht(DHTPIN, DHTTYPE);
    Adafruit_BMP085 bmp;
    // ========================СТАРТУЕМ===================================================
    // ========================Управляем св.диодом на 4-м пине============================
    void setup(){
      //запускаем Ethernet
      Ethernet.begin(mac, ip, subnet);
      //устанавливаем pin 4 на выход
      pinMode(ledPin, OUTPUT);
      //enable serial datada print
      Serial.begin(9600);
          Serial.println("Port Test!"); // Тестовые строки для отображения в мониторе порта
          Serial.println("GO!");// Тестовые строки для отображения в мониторе порта
      dht.begin();
      bmp.begin();
    }
    // ===================================================================================
    void loop(){
      // ========================ДАТЧИКИ==================================================
      float h = dht.readHumidity();
      float t = dht.readTemperature();
      float tdpa = bmp.readTemperature();
      float Pa0 = (bmp.readPressure());
      float Pa = (bmp.readPressure()/133.33);// переводим в мм.рт.ст.
      float Pa2 = (bmp.readPressure()/3386.582);// переводим в дм.рт.ст.
      if (isnan(t) || isnan(h)) {
        Serial.println("Failed to read from DHT");
      } else {
          Serial.print("H=: ");
        Serial.print(h);
          Serial.print(" %\t");
          Serial.print("Temp.=: ");
        Serial.print(t);
          Serial.println(" *C");
          Serial.print("Temp.dat.BMP = ");
        Serial.print(tdpa);
          Serial.println(" *C");
          Serial.print("Pressure = ");
        Serial.print(Pa);
          Serial.println(" mm.");  
          Serial.print("Pressure = ");
        Serial.print(Pa2);
          Serial.println(" in Hg");  
        // =============================================================================  
      // =============Создаем клиентское соединение====================================
      EthernetClient client = server.available();
      if (client) {
        while (client.connected()) {
        if (client.available()) {
          char c = client.read();
          //read char by char HTTP request
          if (readString.length() < 30) {
            //store characters to string
            readString.concat( c); }
            //output chars to serial port
            Serial.print( c);
            //if HTTP request has ended
            if (c == '\n') {
            //Проверяем включили ли светодиод?
            //Level=1 - включен
            //Level=0 - выключен
              if(readString.indexOf("Level=1") >=0) {
                //Включаем светодиод
                digitalWrite(ledPin, HIGH); // set the LED on
                LEDON = true;
              }else{
                //Выключаем светодиод
                digitalWrite(ledPin, LOW); // set the LED OFF
                LEDON = false;
              }  
      // =============Формируем HTML-страницу=================================================
              client.println("HTTP/1.1 200 OK");
              client.println("Content-Type: text/html");
              client.println();
              client.println("<head> ");
              client.println("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> ");
          //  client.println("<meta http-equiv='refresh' content='1'/>"); //Обновление страницы рвз в 1 с
              client.println("<title> :: Упр.Arduino:: V1.1</title>");
              client.println("</head> ");
              client.println("<body");
              client.println("<hr />");
              client.println("<h1> ::Упр.Arduino:: </h1>");
              if (LEDON){
                client.println("<form method=get name=LED><input type=radio name=Level value=1 CHECKED>Включить<input type=radio name=Level value=0>Выключить<input type=submit value=OK></form>");
                client.println("<font size=’5′>LED-статус: ");
                client.println("<font size=’5′>Вкл.");
              }else{
                client.println("<form method=get name=LED><input type=radio name=Level value=1>Включить<input type=radio name=Level value=0 CHECKED>Выключить<input type=submit value=OK></form>");
                client.println("<font size=’5′>LED-статус: ");
                client.println("<font size=’5′>Выкл");
              }
            //==============Вывод значений на web-страницу============================
               

                  client.println("<hr />");//линия=====================================
                client.println("Tемпература = ");    //Температура с DHT 22
                client.println(t);
                client.println(" *C");
                  client.println("<br> "); //перенос на след. строчку
                client.println("Влажность = ");    //Влажность с DHT 22
                client.println(h);
                client.println(" %\t");
                  client.println("<br> "); //перенос на след. строчку
                  client.println("<hr />");//линия=====================================
                client.println("Давление = ");    //давление с BMP 085
                client.println(Pa);
                client.println(" mm.рт.ст.");
                  client.println("<br> "); //перенос на след. строчку
                client.println("<hr />");  //линия=====================================
                client.println("Давление = ");    //давление с BMP 085
                client.println(Pa2);
                client.println(" in Hg");
                  client.println("<br> "); //перенос на след. строчку
                  client.println("<hr />");  //линия=====================================
                client.println("Tемпература внутреняя = ");//температура с BMP 085
                client.println(tdpa);
                client.println(" *C");
                  client.println("<br> "); //перенос на след. строчку
                  client.println("<hr />");  //линия=====================================
                //====================================================================
           
                client.println("</body></html>");
                //очищаем строку для следующего считывания    
                //==============Останавливаем web-client===============================
                readString="";
                client.stop();
                //====================================================================
              }
            }
          }
        }
    }
    }
    вот хотелось бы данные от датчиков запихнуть в отдельный div и его обновлять по таймауту, но при этом что бы была возможность управлять светодиодом (при перезагрузке всей страницы это не очень удобно)
     
  12. сделай три div, в одно контейнере и по jquery меняй InnerHtml.
     
  13. fess

    fess Нерд

    <div id=1> кнопки </div>
    <div id=2> скрипт </div>
    <div id=3> показания датчиков</div>
    или не так?
     
  14. Да так делай
     
  15. fess

    fess Нерд

    все-таки нужен пример ((
     
  16. Дружище, сейчас не могу тебе отписать как и чего. Ближе к выходным можно с тобой попробовать сделать конечное устройство...
     
  17. fess

    fess Нерд

    Спасибо