ESP8266 данные датчиков новой строкой.

Nub12345
Offline
Зарегистрирован: 24.04.2017
webString=" Temperature: "+String(sensors.getTempCByIndex(0))+" C      "+String(h,DEC)+":"+String(m,DEC)+":"+String(s,DEC)+"   ";  
    server.send(200, "text/plain", webString);   

 

Nub12345
Offline
Зарегистрирован: 24.04.2017

Подскадите плиз, сейчас пользуюсь вот этой функцией, но нужно, чтобы на страничке хтмл значения накапливались и каждые 10 минут строчкой ниже появлялся новый замер, как это реализовать?

Nub12345
Offline
Зарегистрирован: 24.04.2017

Нашел вот этот оператор, вроде как он может решить проблему, но не догоняю как им пользоваться endSendWithNewline(true);  

Logik
Offline
Зарегистрирован: 05.08.2014

Nub12345 пишет:

Подскадите плиз, сейчас пользуюсь вот этой функцией, но нужно, чтобы на страничке хтмл значения накапливались и каждые 10 минут строчкой ниже появлялся новый замер, как это реализовать?

Варианты.

1. История замеров на ESP. Завести файл в  ESP, сохранять замеры и выдавать всю нужную историю по запросам страницы. Но нужна память под все нужные данные, нужно их както и когдато удалять.

2. История  у клиента. Через JS и DOM запрашивать и накапливать. Но тогда сразу после открытия страницы истории не будет, она будет накапливатся только пока открыта страница.

3. История на стороне. Заводим спец сервер, на нем например БД, ESP туда складует клиент выбирает. Но нужен сервер.

4. Комбинации вышележащего.

ИМХО Вы не осилите задачу.

Nub12345
Offline
Зарегистрирован: 24.04.2017

 Спасибо большое за ответ, первый вариант выглядит привлекательным, не понял в чем сложность памяти?
Если я правильно понял, то данные можно записать через EEPROM , а потом по запросу страницы все выгрести? (мои раздумки)
Может где-то есть похожий пример, где можно попытаться ctrl+c , ctrl+v....
Еще подумка, может попробовать складывать данные на sd , а потом просто отключать ее и забирать данные....

Logik
Offline
Зарегистрирован: 05.08.2014

Еще по п.3 Можна поискать шаровой онлайн сервер предоставляющий соответствующий сервис, Но тогда нужен онлайн и вера в то что сервер и в будущем будет работать и на шару .

Logik
Offline
Зарегистрирован: 05.08.2014

Сложность в Вашем умении. По уровню владения терминами, поиску примеров и пр. - оно не достаточно.

Nub12345
Offline
Зарегистрирован: 24.04.2017

грызу гранит, крошки летят, пытаюсь съесть слона в один присест,
сейчас передо мной стоит данная задача и мне необходимо ее решить...
подскажи, куда будет проще копать и может все таки где-то видел похожие проекты?

Nub12345
Offline
Зарегистрирован: 24.04.2017

Проблема в том, что у меня нет доступа к интернету....задача следующая....установить датчик в труднодоступное место, прийти, подключиться по вайфай и снять данные....это я осилис, но могу снять данные только обновлением страницы в режиме онлайн, а как реализовать, чтобы через 10 минут он новой строчкой выкинул данные на страницу.....
вот в этом операторе endSendWithNewline(true);   описано что-то про новые строки....но пока не вкуриваю оно ли это...


#include <ESP8266WiFi.h>
#include <WiFiClient.h> 
#include <ESP8266WebServer.h>
const char *ssid = "ra";
const char *password = "88888888";
ESP8266WebServer server(80);
/*  http://192.168.4.1 in a web browser*/

#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
String webString="";     // String to display 
 
void setup(void)
{
  delay(1000);
  Serial.begin(115200);
  Serial.println();
  Serial.print("Configuring access point...");
  WiFi.softAP(ssid, password);
  IPAddress myIP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(myIP);
  server.on("/", handleRoot);
  server.begin();
  Serial.println("HTTP server started");
  sensors.begin(); 
}
 void loop() {
 server.handleClient();
  sensors.requestTemperatures(); // Send the command to get temperatures  
}

void handleRoot()
 {
 int time=millis()/1000;

int h =(((time/60)/60)%60);
if (h<0){h=0;}
int s =(time%60);
int m =((time/60)%60);
if (m<0){m=0;}
server.endSendWithNewline(true);  
webString=" Temperature: "+String(sensors.getTempCByIndex(0))+" C      "+String(h,DEC)+":"+String(m,DEC)+":"+String(s,DEC)+"   ";   // Arduino has a hard time with float to string
    server.send(200, "text/plain", webString);            // send to someones browser when asked
}

 

Logik
Offline
Зарегистрирован: 05.08.2014

Т.е. данные интересуют только те, которые будут после "прийти, подключиться по вайфай "? Тогда вариант п.2 самый подходящий.

Тогда либо изучать протокол HTTP -  оптимальній для Вас подход. Либо Websocket или Ajax - это продвинутые, без перерисовки всей страницы.

 endSendWithNewline(true);  не с той оперы )))

Logik
Offline
Зарегистрирован: 05.08.2014

Хотя если у Вас просто снять данные - работать через веб-технологию не обязательно. Можна самопальный протокол поверх TCP поцепить. Тогда правда надо еще приложение на ПК с его поддержкой, ну вместо браузера. Как видите везде сложно все.

Nub12345
Offline
Зарегистрирован: 24.04.2017

Спасибо за помощь!

Nub12345
Offline
Зарегистрирован: 24.04.2017

Единственное уточнить, на какие команды обратить внимание и изучить, чтобы реализовать идею

inspiritus
Offline
Зарегистрирован: 17.12.2012

У меня к модулю подключена CD карточка, на ней дописывается файл лога, который можно скачать по запросу.

Logik
Offline
Зарегистрирован: 05.08.2014

Для начала почитайте основы С/С++. Чтоб не путать команды, операторы и функции хотяб;) На форуме большая и всеобемлющая тема по ESP есть. Очень полезно. А дальше разбивать задачу на части, если например запись в файл - то гуглим и читаем как это делают на ESP и т.д.

Nub12345
Offline
Зарегистрирован: 24.04.2017

Если не сложно, можешь этот кусок кода показать, сейчас буду выбирать из 2 зол и, возможно, придется склониться к sd какрте, пока по ней больше рускоязычного материала обучающего нашел....

inspiritus
Offline
Зарегистрирован: 17.12.2012

Кнопка Download на вебморде выхывает обращение к другому порту, который слушает параллельноподнятый сервер, при наличии запроса к себе он начинаеь аплоадить файл с сд карты. В браузере выглядит как загрузка файла.

Nub12345
Offline
Зарегистрирован: 24.04.2017

ответ по смыслу похож на предыдущий "Учи матчасть!"))

Logik
Offline
Зарегистрирован: 05.08.2014
File dataFile = SD.open(“data.txt”, FILE_WRITE);
if (dataFile)
{
dataFile.println(dataString);
dataFile.close();
}

 

inspiritus
Offline
Зарегистрирован: 17.12.2012
//разные инклюды
#include <SimpleTimer.h>
/// код работает на процессах запущенных типапараллельно, испобзуется технология AJAX

EthernetServer server1(32000);

loop(){

//////////*всякий код

  logstring = String(rtc[4]) + "."+ String(rtc[5]) + "."+ String(rtc[6]) + "," + String(rtc[2]) + ":"+ String(rtc[1]) + ":"
  + String(rtc[0]) + "," + "2,17,"  +   String (product_vol) + "," +  String (product_ppm) + "," +  String (def_vak) + "," + String (potok);

//////////*всякий код

  EthernetClient client1 = server1.available();
  if (client1) {
    while (client1.connected()) {
      if (client1.available()) {
        char c = client1.read();
        if (readString.length() < 100) {
          readString += c;
        }
        if (c == '\n') {
          
 
 
    myFile = SD.open(filename);         
         client1.println(F("HTTP/1.1 200 OK"));
          client1.println("Content-Type: text/text");
          client1.println();
           byte cB[64];
           int cC=0;
    while (myFile.available())
       {
         cB[cC]=myFile.read();
         cC++;
       if(cC > 63)
        {
         client1.write(cB,64);
        cC=0;
        }
       }
   myFile.close();
   client1.println();
         delay(10);
          //stopping client
          client1.stop();}}}}   

//////////*всякий код

} // *********end loop



void task_log(){
   File dataFile = SD.open(filename, FILE_WRITE);
  if (dataFile) {
    dataFile.println(logstring);
    dataFile.close();
  }
  else {
    Serial.println("error opening file");
  }
   Serial.println(logstring); 
   t.setTimeout (interval_log, task_log);  
}



//кусок из html отвечающий за обращение к порту 8899 который внутрь сетки пронатен на 32000

	<table>
		<tr>
			<td width = 200px;><a href='http://77.37.208.83:8899/log2.csv' download><button>download log</button></a></td>
		</tr>
	</table>

// http://arduino.ru/forum/obshchii/udalennyi-web-server-v-ustroistve  // 9 пост много ссылок

 

Nub12345
Offline
Зарегистрирован: 24.04.2017

хм.....а как же вот этот вариант 

init {
webString = ""
}
loop{
  webString += " newline \r\n"
 server.send(200, "text/plain", webString)
}

 

На другом форуме посоветовали и работает!!!!
Единственное срабатывает пр и обновлении страницы....осталось автоматические обновление получается как-то прописать.

Nub12345
Offline
Зарегистрирован: 24.04.2017

Добавил пока расширение турборефреф и все само работает, косвенно задача решена, но только при условии наличия подключенного устройства.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Помогите корректно получить данные с сервера. ESP8266-12

Есть пример для 01 http://wikihandbk.com/wiki/ESP8266:Примеры/Как_запросить_курс_биткоина_при_помощи_ESP8266

И есть в примерах из библиотеки WIFI  - HTTP Request.

Как правильно допилить чтоб просто получить в порт данные? дальше я сам.

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>

const char* ssid = "Hugo";
const char* password = "11112222";

const char* host = "gladilov.org.ru";
const int httpsPort = 443;

// Use web browser to view and copy
// SHA1 fingerprint of the certificate
const char* fingerprint = "CF 05 98 89 CA FF 8E D8 5E 5C E0 C2 E4 F7 E6 C3 C7 50 DD 5C";

void setup() {
  Serial.begin(115200);
  Serial.println();
  Serial.print("connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  // Use WiFiClientSecure class to create TLS connection
  WiFiClientSecure client;
  Serial.print("connecting to ");
  Serial.println(host);
  if (!client.connect(host, httpsPort)) {
    Serial.println("connection failed");
    return;
  }

  if (client.verify(fingerprint, host)) {
    Serial.println("certificate matches");
  } else {
    Serial.println("certificate doesn't match");
  }

  String url = "/home/net/ntp/";
  Serial.print("requesting URL: ");
  Serial.println(url);

  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "User-Agent: \r\n" +
               "Connection: close\r\n\r\n");

  Serial.println("request sent");
  while (client.connected()) {
    String line = client.readStringUntil('\n');
    if (line == "\r") {
      Serial.println("headers received");
      break;
    }
  }
  String line = client.readStringUntil('\n');
  if (line.startsWith("{\"state\":\"success\"")) {
    Serial.println("esp8266/Arduino CI successfull!");
  } else {
    Serial.println("esp8266/Arduino CI has failed");
  }
  Serial.println("reply was:");
  Serial.println("==========");
  Serial.println(line);
  Serial.println("==========");
  Serial.println("closing connection");
}

void loop() {
}