Go Down

Topic: Progetto sonde centrale termica (Read 2065 times) previous topic - next topic

md_corporation

e se non ho capito male questa operazione viene fatta in questo modo:

Code: [Select]


//definisco la funzione:
String readString = String (100);

//leggo l'intera stringa client
char c = client.read();

//questa dovrebbe essere l'interrogazione della parte di stringa che mi interessa se non sbaglio..
if (readString.lenght() < 100 )

{

//salvo i caratteri nella stringa
readString.append(c);

}




Cosa ne dite?

md_corporation

OK, ma prova anche a guardare le librerie indicate ... magari ti risparmi un sacco di fatica ;)

Guglielmo
Te parli dell'idea di svilupparlo in ambiente Linux ?

Se intendi questo ... ti dico che preferisco andare avanti per la strada nella quale mi trovo perchè ho già acquistato tutto ... e non mi va di spendere altri soldi gettando nell'immondizia i componenti attuali ..

elpapais

Non si tratta di buttare niente...
si tratta di guardare metodi alternativi usando librerie sia per visualizzare che ricevere dati....
Non si sta parlando di hardware si sta parlando di programmazione e conoscenze.

Usare string e' concettualmente sbagliato si usano matrici char in modo da poter identificare i caratteri singolarmente anche in funzione alle sequenze d'escape inviate dal protocollo tcpi
la strada che percorri second me è fondamentalmente sbagliata... ma libero di percorrerla.
Io mi fermerei un attimo magari leggendo qualcosa e trovando alcuni esempi (e ce ne sono una valangata)

Buon lavoro
www.infoportal.it support at infoportal.it

md_corporation

Questo post mi ha illuminato:


Code: [Select]
if(c == readString.indexOf("led1=0")) {
else if(c == readString.indexOf("led1=1")) {
 else if(c == readString.indexOf("led2=0")){
else if(c == readString.indexOf("led2=1")){

Queste condizioni non saranno mai vere, stai confrontando c che è un char contenente un solo carattere con una funzione che restituisce
-1 se la stringa cercata non esiste
(pos n) se la stringa cercata esiste

leggo un carattere alla volta proveniente dal client
Code: [Select]
char c = client.read();

appendo ogni carattere c in una var stringa che si chiama readString
Code: [Select]
readString.concat(c);

se trovo in char c il simbolo "a capo" chiudi la stringa
Code: [Select]
if (c == '\n'

readString è la stringa che devi analizzare non la variab char c, questa contiene il messaggio completo dove potrai trovare LED1....

Riguarda meglio gli esempi non troverai un controllo sulla variabile C per trovare il messaggio completo e riguarda bene cosa fa la funzione indexOf()
ciao


gpb01

Te parli dell'idea di svilupparlo in ambiente Linux ?
NO, se avessi dato un'occhiata ai link che ti abbiamo meso avresti letto che sono WebServer che girano sulla tua configurazione e che sono in grado di gestire più pagine anche depositate su SD.

Guglielmo
Search is Your friend ... or I am Your enemy !

elpapais

una cosa del genere ti andrebbe bene?


oppure con un paio di questi?

www.infoportal.it support at infoportal.it

md_corporation

una cosa del genere ti andrebbe bene?


oppure con un paio di questi?


Gli ultimi indicatori che hai postato sono identici a gli indicatori che uso in Konnex domotica... uguali uguali...

A me a dire il vero basta esclusivamente il valore puro in una pagina pulita .... FINE...
tutta la grafica dietro la costruisco con il cervello Homelynk schneider dove ho la possibilità di creare dei riquadri dove linko alle suddette pagine dove mi ritrovo le temperatura che arduino rileva....

elpapais

quindi una cosa come la pagina solo con i valori andrebbe bene?
www.infoportal.it support at infoportal.it

md_corporation

#38
Sep 16, 2016, 02:56 pm Last Edit: Sep 16, 2016, 03:02 pm by md_corporation
esattamente ... ma il valore di 1 sola sonda...

Es:

192.168.1.8/sonda1
visualizza pagina con solo il valore di sonda1

192.168.1.8/sonda2
visualizza pagina con solo il valore di sonda2

ecc...


Ora son riuscito con:

Code: [Select]


char c = client.read();

if (readString.lenght() < 100) {
readString += c;
}

Serial.print(c);



Vedo a seriale tutte le info ... comprese le istruzioni dopo l'indirizzo IP digitare a url... viene chiamato "referer"....
Quindi credo che andando a cercare la riga dove comincia con "referer" posso ricavare la stringa scritta ad url...

elpapais

Code: [Select]

/*--------------------------------------------------------------
  Program:      eth_websrv_SD_Ajax_gauge

  Description:  Arduino web server web page displays Arduino
                analog value on a dial gauge.
                The web page is stored on the SD card.
                Ajax is used to update the analog value on the
                web page.
 
  Hardware:     Arduino Uno and official Arduino Ethernet
                shield. Should work with other Arduinos and
                compatible Ethernet shields.
                2Gb micro SD card formatted FAT16.
                Potentiometer interfaced to A2 analog input.
               
  Software:     Developed using Arduino 1.0.5 software
                Should be compatible with Arduino 1.0 +
                SD card contains web page called index.htm
 
  References:   - WebServer example by David A. Mellis and
                  modified by Tom Igoe
                - SD card examples by David A. Mellis and
                  Tom Igoe
                - Ethernet library documentation:
                  http://arduino.cc/en/Reference/Ethernet
                - SD Card library documentation:
                  http://arduino.cc/en/Reference/SD
                - Gauge from:
                  https://github.com/Mikhus/canv-gauge

  Date:         27 March 2013
  Modified:     19 June 2013
 
  Author:       W.A. Smith, http://startingelectronics.org
--------------------------------------------------------------*/

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

// size of buffer used to capture HTTP requests
#define REQ_BUF_SZ   50

// MAC address from Ethernet shield sticker under board
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 20); // IP address, may need to change depending on network
EthernetServer server(80);  // create a server at port 80
File webFile;               // the web page file on the SD card
char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated string
char req_index = 0;              // index into HTTP_req buffer

void setup()
{
    // disable Ethernet chip
    pinMode(10, OUTPUT);
    digitalWrite(10, HIGH);

    Serial.begin(9600);       // for debugging
   
    // initialize SD card
    Serial.println("Initializing SD card...");
    if (!SD.begin(4)) {
        Serial.println("ERROR - SD card initialization failed!");
        return;    // init failed
    }
    Serial.println("SUCCESS - SD card initialized.");
    // check for index.htm file
    if (!SD.exists("index.htm")) {
        Serial.println("ERROR - Can't find index.htm file!");
        return;  // can't find index file
    }
    Serial.println("SUCCESS - Found index.htm file.");
   
    Ethernet.begin(mac, ip);  // initialize Ethernet device
    server.begin();           // start to listen for clients
}

void loop()
{
    EthernetClient client = server.available();  // try to get client

    if (client) {  // got client?
        boolean currentLineIsBlank = true;
        while (client.connected()) {
            if (client.available()) {   // client data available to read
                char c = client.read(); // read 1 byte (character) from client
                // buffer first part of HTTP request in HTTP_req array (string)
                // leave last element in array as 0 to null terminate string (REQ_BUF_SZ - 1)
                if (req_index < (REQ_BUF_SZ - 1)) {
                    HTTP_req[req_index] = c;          // save HTTP request character
                    req_index++;
                }
                // last line of client request is blank and ends with \n
                // respond to client only after last line received
                if (c == '\n' && currentLineIsBlank) {
                    // send a standard http response header
                    client.println("HTTP/1.1 200 OK");
                    // remainder of header follows below, depending on if
                    // web page or XML page is requested
                    // Ajax request - send XML file
                    if (StrContains(HTTP_req, "ajax_inputs")) {
                        // send rest of HTTP header
                        client.println("Content-Type: text/xml");
                        client.println("Connection: keep-alive");
                        client.println();
                        // send XML file containing input states
                        XML_response(client);
                    }
                    else {  // web page request
                        // send rest of HTTP header
                        client.println("Content-Type: text/html");
                        client.println("Connection: keep-alive");
                        client.println();
                        // send web page
                        webFile = SD.open("index.htm");        // open web page file
                        if (webFile) {
                            while(webFile.available()) {
                                client.write(webFile.read()); // send web page to client
                            }
                            webFile.close();
                        }
                    }
                    // display received HTTP request on serial port
                    Serial.print(HTTP_req);
                    // reset buffer index and all buffer elements to 0
                    req_index = 0;
                    StrClear(HTTP_req, REQ_BUF_SZ);
                    break;
                }
                // every line of text received from the client ends with \r\n
                if (c == '\n') {
                    // last character on line of received text
                    // starting new line with next character read
                    currentLineIsBlank = true;
                }
                else if (c != '\r') {
                    // a text character was received from client
                    currentLineIsBlank = false;
                }
            } // end if (client.available())
        } // end while (client.connected())
        delay(1);      // give the web browser time to receive the data
        client.stop(); // close the connection
    } // end if (client)
}

// send the XML file containing analog value
void XML_response(EthernetClient cl)
{
    int analog_val;
   
    cl.print("<?xml version = \"1.0\" ?>");
    cl.print("<inputs>");
    // read analog pin A2
    analog_val = analogRead(2);
    cl.print("<analog>");
    cl.print(analog_val);
    cl.print("</analog>");
    cl.print("</inputs>");
}

// sets every element of str to 0 (clears array)
void StrClear(char *str, char length)
{
    for (int i = 0; i < length; i++) {
        str[i] = 0;
    }
}

// searches for the string sfind in the string str
// returns 1 if string found
// returns 0 if string not found
char StrContains(char *str, char *sfind)
{
    char found = 0;
    char index = 0;
    char len;

    len = strlen(str);
   
    if (strlen(sfind) > len) {
        return 0;
    }
    while (index < len) {
        if (str[index] == sfind[found]) {
            found++;
            if (strlen(sfind) == found) {
                return 1;
            }
        }
        else {
            found = 0;
        }
        index++;
    }

    return 0;
}


Tratto da:
https://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-gauge/
della serie 15 post fa...
www.infoportal.it support at infoportal.it

md_corporation

..... ti ringraziono mi ci vorrà un pò a capirlo ... ma se dici che è quello che fa per me ... vedo di concentrarmi :)....

Ci sono molte istruzioni inerenti alla scrittura su SD che a me non serve ... tribolo un pò a centrare il codice che mi serve ... ma ce la farò :P

elpapais

..... ti ringraziono mi ci vorrà un pò a capirlo ... ma se dici che è quello che fa per me ... vedo di concentrarmi :)....

Ci sono molte istruzioni inerenti alla scrittura su SD che a me non serve ... tribolo un pò a centrare il codice che mi serve ... ma ce la farò :P
quello che fa per te è studiare un po di piu e magari dar piu considerazione a chi ti da aiuto... ribadisco che ho postato quello 17 post fa...
www.infoportal.it support at infoportal.it

md_corporation

#42
Sep 21, 2016, 01:38 pm Last Edit: Sep 21, 2016, 01:44 pm by md_corporation
Fatto:

Code: [Select]
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SPI.h>
#include <Ethernet.h>

#define ONE_WIRE_BUS_1 2
#define ONE_WIRE_BUS_2 3
#define ONE_WIRE_BUS_3 4
#define ONE_WIRE_BUS_4 5
#define ONE_WIRE_BUS_5 6

OneWire oneWire_1(ONE_WIRE_BUS_1);
OneWire oneWire_2(ONE_WIRE_BUS_2);
OneWire oneWire_3(ONE_WIRE_BUS_3);
OneWire oneWire_4(ONE_WIRE_BUS_4);
OneWire oneWire_5(ONE_WIRE_BUS_5);

DallasTemperature sensor_sonda_1(&oneWire_1);
DallasTemperature sensor_sonda_2(&oneWire_2);
DallasTemperature sensor_sonda_3(&oneWire_3);
DallasTemperature sensor_sonda_4(&oneWire_4);
DallasTemperature sensor_sonda_5(&oneWire_5);

//impostazioni di rete:::::::::::::::::::::::::::::::::::::::::::::::::
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 8);
EthernetServer server(80);
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

void setup() {

  delay(1000);
  Serial.begin(9600);

  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  Ethernet.begin(mac, ip);
  server.begin();

  Serial.println("Misuro la temperatura con sensore DS18B20");
  Serial.println("continuo la misurazione");
  delay(1000);
  sensor_sonda_1.begin();
  sensor_sonda_2.begin();
  sensor_sonda_3.begin();
  sensor_sonda_4.begin();
  sensor_sonda_5.begin();
}

void loop()
{

  Serial.println();

  //richiedo temperature_________________
  sensor_sonda_1.requestTemperatures();
  sensor_sonda_2.requestTemperatures();
  sensor_sonda_3.requestTemperatures();
  sensor_sonda_4.requestTemperatures();
  sensor_sonda_5.requestTemperatures();

  //scrivo temperatura sonda 1 seriale___
  Serial.print("Temperatura = ");
  Serial.print(sensor_sonda_1.getTempCByIndex(0));
  Serial.println(" gradi C");

  //scrivo temperatura sonda 2 seriale___
  Serial.print("Temperatura = ");
  Serial.print(sensor_sonda_2.getTempCByIndex(0));
  Serial.println(" gradi C");

  //scrivo temperatura sonda 3 seriale___
  Serial.print("Temperatura = ");
  Serial.print(sensor_sonda_3.getTempCByIndex(0));
  Serial.println(" gradi C");

  //scrivo temperatura sonda 4 seriale___
  Serial.print("Temperatura = ");
  Serial.print(sensor_sonda_4.getTempCByIndex(0));
  Serial.println(" gradi C");

  //scrivo temperatura sonda 5 seriale___
  Serial.print("Temperatura = ");
  Serial.print(sensor_sonda_5.getTempCByIndex(0));
  Serial.println(" gradi C");

  EthernetClient client = server.available();

  if (client) {
    boolean currentLineIsBlank = true;
    String postText = "";
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();

        if (postText.length() < 10) {
          postText += c;
        }

        if (c == '\n' && currentLineIsBlank) {

          //creo la pagina WEB_______________________
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close"); // Dopo la risposta la connessione si interrompe
          client.println("Refresh: 5");
          client.println();
          client.println("<meta charset=UTF-8>"); // serve per inserire i caretteri speciali
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          break;
        }

        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }

    //in base alla richiesta da URL rispondo con la sonda associata_______________

    if (postText.indexOf("1") > 0) {
      client.println(sensor_sonda_1.getTempCByIndex(0));
      client.print(" Gradi");
    }

    if (postText.indexOf("2") > 0) {
      client.println(sensor_sonda_2.getTempCByIndex(0));
      client.print(" Gradi");
    }

    if (postText.indexOf("3") > 0) {
      client.println(sensor_sonda_3.getTempCByIndex(0));
      client.print(" Gradi");
    }

    if (postText.indexOf("4") > 0) {
      client.println(sensor_sonda_4.getTempCByIndex(0));
      client.print(" Gradi");
    }

    if (postText.indexOf("5") > 0) {
      client.println(sensor_sonda_5.getTempCByIndex(0));
      client.print(" Gradi");
    }

    client.stop();
    Serial.println("client disconnected");
    Ethernet.maintain();
  }

}

Go Up