aiutami pablo ti prego.....sto in alto mare!!!!
mi ci vuole un po'
questo è lo sketch pronto per ricevere qualsiasi dato da client
#include <pins_arduino.h>
#include <SPI.h>
#include <Ethernet.h>
#include <Flash.h>
#include <SD.h>
#include <TinyWebServer.h>
//****************VALUES YOU CHANGE*************/
//byte ip[] = { 192, 168, 0, 12 };// Don't forget to modify the IP to an available one on your home network
byte ip[] = { 192, 168, 2, 177 };// Don't forget to modify the IP to an available one on your home network
//*********************************************/
static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
TinyWebServer::PathHandler handlers[] = {
{"/", TinyWebServer::GET, &index_handler},
{"/RICEVI", TinyWebServer::POST, &riceve_handler},
{"/" "*", TinyWebServer::GET, &file_handler},
{NULL},
};
const char* headers[] = {"Content-Length",NULL};
TinyWebServer web = TinyWebServer(handlers, headers);
boolean has_filesystem = true;
Sd2Card card;
SdVolume volume;
SdFile root;
SdFile file;
//_________________________________________________________________________________________________________________________________________________________________________
boolean riceve_handler(TinyWebServer& web_server)
{
web_server.send_error_code(200);
web_server.send_content_type("text/plain");
web_server.end_headers();
Client& client = web_server.get_client();
if (client.available())
{
String readString;
int16_t c;
while ((c = client.read())>0)
{
readString += (char)c;
}
Serial.println (readString);
//------------------------------------
//qui elabori la stringa in arrivo
//-----------------------------------
readString=""; //svuota la stringa del client.read
}
client.stop();
}
//_________________________________________________________________________________________________________________________________________________________________________
void send_file_name(TinyWebServer& web_server, const char* filename) {
//Serial.print ("1");
if (!filename) {
web_server.send_error_code(404);
web_server << F("Could not parse URL");
} else {
TinyWebServer::MimeType mime_type
= TinyWebServer::get_mime_type_from_filename(filename);
web_server.send_error_code(200);
web_server.send_content_type(mime_type);
web_server.end_headers();
if (file.open(&root, filename, O_READ)) {
Serial << F("Read file ");
Serial.println(filename);
web_server.send_file(file);
file.close();
} else {
web_server << F("Could not find file: ") << filename << "\n";
}
}
}
//__________________________________________________________________________________________________________________________________________________________________________
boolean file_handler(TinyWebServer& web_server) {
//Serial.print ("2");
char* filename = TinyWebServer::get_file_from_path(web_server.get_path());
send_file_name(web_server, filename);
free(filename);
return true;
}
//__________________________________________________________________________________________________________________________________________________________________________
boolean index_handler(TinyWebServer& web_server) {
//Serial.print ("3");
send_file_name(web_server, "SETUP.HTM");
return true;
}
//_________________________________________________________________________________________________________________________________________________________________________
void setup() {
Serial.begin(9600);
//Serial << F("Free RAM: ") << FreeRam() << "\n";
pinMode(SS_PIN, OUTPUT); // set the SS pin as an output
digitalWrite(SS_PIN, HIGH); // and ensure SS is high
pinMode(10, OUTPUT); // Set the CS pin as an output
digitalWrite(10, HIGH); // Turn off the W5100 chip! (wait for configuration)
pinMode(4, OUTPUT); // Set the SDcard CS pin as an output
digitalWrite(4, HIGH); // Turn off the SD card! (wait for configuration)
// initialize the SD card.
Serial.println("Setting up SD card...");
// pass over the speed and Chip select for the SD card
if (!card.init(SPI_FULL_SPEED, 4)) {
Serial.println("card failed");
has_filesystem = false;
}
// initialize a FAT volume.
if (!volume.init(&card)) {
Serial.println("vol.init failed!");
has_filesystem = false;
}
if (!root.openRoot(&volume)) {
Serial.println("openRoot failed");
has_filesystem = false;
}
// Initialize the Ethernet.
Serial.println("Setting up the Ethernet card...");
Ethernet.begin(mac, ip);
// Start the web server.
Serial.println("Web server starting...");
web.begin();
Serial.println("Ready to accept HTTP requests.");
}
//_________________________________________________________________________________________________________________________________________________________________________
void loop() {
if (has_filesystem) {
web.process();
}
}
ora devo vedere l'html
Sei il numero 1 pablo!!!!
pablo scusa ma c'è un limite di 16 caratteri??? perchè dal tuo esempio faccio la stessa cosa per gli altri dati, ma non mi funziona!!! se invece mando solo ip e sub, mi funziona!!!
Non ho messo limiti puoi mandarne anche 8000, sarà arduino che stabilirà un limite prima di saturare la ram, ma 16 mi sembrano un po' pochi, forse ne mandi troppi ... ti sembra che arduino si inchiodi? come scrivi l'invio?
quando Mi hai mandato l'esempio ho modificato l'html per mandare tutti i dati ad arduino....ma non mi funzionava, allora ho pensato che ci fosse un limite e sono andato a ritroso fino a 17 caratteri.....ma 17 non me li manda....solo 16 funziona, cioè come l'esempio che tu mi hai mandato....puoi provare anche tu ad aggiungere un carattere e poi mi fai sapere se è un mio problema o no?? grazie mille
E' molto strano perchè l'altro esempio in cui mi hai mandato il link, gli dava un limite di 30 caratteri!!! a me fa il contrario!!!
A si quello del 2011 si limita a 30, era un esempio questo no non ha limiti, le variabili string sono dannose se usate male a causa della poca ram, ma 200,250byte dovresti averli liberi, comunque si può ovviare a questo, ora provo
Nono li manda più di 16
mi ero dimenticato di ricaricare la pagina htm sul browser una volta fatte le modifiche
stringa dato
dato=
ip_1+"."+ip_2+"."+ip_3+"."+ip_4+"#"+
sm_1+"."+sm_2+"."+sm_3+"."+sm_4+"#"+
ip_1+"."+ip_2+"."+ip_3+"."+ip_4+"#"+
sm_1+"."+sm_2+"."+sm_3+"."+sm_4+"#"+
ip_1+"."+ip_2+"."+ip_3+"."+ip_4+"#"+
sm_1+"."+sm_2+"."+sm_3+"."+sm_4+"#"+
ip_1+"."+ip_2+"."+ip_3+"."+ip_4+"#"+
sm_1+"."+sm_2+"."+sm_3+"."+sm_4+"#"+
ip_1+"."+ip_2+"."+ip_3+"."+ip_4+"#"+
sm_1+"."+sm_2+"."+sm_3+"."+sm_4+"#"+
ip_1+"."+ip_2+"."+ip_3+"."+ip_4+"#"+
sm_1+"."+sm_2+"."+sm_3+"."+sm_4+"#"+
ip_1+"."+ip_2+"."+ip_3+"."+ip_4+"#"+
sm_1+"."+sm_2+"."+sm_3+"."+sm_4+"#"+
ip_1+"."+ip_2+"."+ip_3+"."+ip_4+"#"+
sm_1+"."+sm_2+"."+sm_3+"."+sm_4+"#";
Serial print
Setting up SD card...
Setting up the Ethernet card...
Web server starting...
Ready to accept HTTP requests.
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
fai una modifica allo sketch
Siccome c'è il '#' che separa i pezzi che ti servono facciamo si che quando il char c incontri il cancelletto svuoti la stringa readString
potresti usare anche "\n"
boolean riceve_handler(TinyWebServer& web_server)
{
web_server.send_error_code(200);
web_server.send_content_type("text/plain");
web_server.end_headers();
Client& client = web_server.get_client();
if (client.available())
{
String readString;
int16_t c;
while ((c = client.read())>0)
{
readString += (char)c;
if(c=='#'){
Serial.println (readString); //debug
//------------------------------------
//qui elabori la stringa in arrivo
//-----------------------------------
//svuoto la stringa dopo aver incontrato # ... in questo modo la massima lunghezza di readString
//sara di 255.255.255.255# quindi 16 char, si evita di crashare arduino a causa di un eventuale
//saturazione della ram
readString="";
}
}
readString=""; //svuota la stringa del client.read
}
client.stop();
}
Ottimizzazione delle stringhe inviate
dato=
"IP="+ip_1+"."+ip_2+"."+ip_3+"."+ip_4+"#"+
"SUBNET="+sm_1+"."+sm_2+"."+sm_3+"."+sm_4+"#";
serialprint
IP=255.255.255.255#
SUBNET=255.255.255.255#
Devi ricordarti di ricaricare la pag 192.168.0.12/ ogni volta che fai una modifica sull' html per renderle effettive e importante le stringhe che mandi dalla pag web devono terminare con '#'
Forse ho sbagliato qualcosa nell'html in quanto ancora non mi va pablo....
ti invio il file html
setup.htm (6.12 KB)
forse devo mettere id.....invece mi è rimasto name....provo!!!!
sausim:
forse devo mettere id.....invece mi è rimasto name....provo!!!!
e si ci va id
, dovresti usare la console degli errori
Firefox > Strumenti > Sviluppo Web > Console degli Errori, se qualcosa non va nel js della tua pagina ti viene segnalata la linea contenente l'errore
ciao
infatti
Data e ora: 22/03/2013 10:39:57
Errore: TypeError: document.getElementById(...) is null
File sorgente: http://192.168.2.177/
Riga: 71
per gli elementi TYPE="CHECKBOX" non puoi prendere i Value, non ti dice se è "checked"
allego htm corretto
uscita con valori di input inseriti a casaccio ![]()
IP=255.0.10.50#
SUBMASK=40.15.55.211#
ADDR=74.122.214.23#
PRIMDNS=45.141.219.248#
SECDNS=123.231.19.22#
INCOMC=1#
REMWEB=1#
REMMOB=1#
setup.htm (6.37 KB)
pablo mi serve il tuo aiuto...
ho creato una libreria, quando la richiamo lo schetch mi dà quest'errore: error:
‘EEPROM_TCP_IP’ does not name a type
Da che dipende???
Ho provato a fare ricerche su internet e mi sembra che viene fuori quando ci sono variabili utilizzate ma non ancora dichiarate...
Boh non mi sembra che sia il mio caso
se hai bisogno del codice dimmi
Ciao
Ti allego i file della classe, almeno è meglio per te.
Quando poi nello scheck la richiamo scrivo questo:
#include <EEPROM_TCP_IP.h>
......
.....
EEPROM_TCP_IP eeprom_tcp_ip;
richiamo la funzione:
eeprom_tcp_ip.tcpSetup(ArrayTCPIP);
Ma mi genera quest'errore:
PIQ:30: error: ‘EEPROM_TCP_IP’ does not name a type
PIQ.cpp: In function ‘boolean riceve_handler(TinyWebServer&)’:
PIQ:87: error: ‘eeprom_tcp_ip’ was not declared in this scope
EEPROM_TCP_IP.cpp (5.63 KB)
EEPROM_TCP_IP.h (306 Bytes)
keywords.txt (94 Bytes)
Ho provato a commentare le stringhe riguardanti lo skech lasciando solo l'include della libreria e cioè:
#include <EEPROM_TCP_IP.h>
...
...
//EEPROM_TCP_IP eeprom_tcp_ip;
....
....
//eeprom_tcp_ip.tcpSetup(ArrayTCPIP);
mi viene fuori i seguenti errori quindi penso che non trovi la libreria:
Documenti/arduino-1.0.1/libraries/EEPROM_TCP_IP/EEPROM_TCP_IP.cpp:38: error: ‘EEPROM_TCP_IP’ is not a class or namespace
Documenti/arduino-1.0.1/libraries/EEPROM_TCP_IP/EEPROM_TCP_IP.cpp: In function ‘void loadDefaultAdress()’:
Documenti/arduino-1.0.1/libraries/EEPROM_TCP_IP/EEPROM_TCP_IP.cpp:40: error: ‘writeEEPROMOctet’ was not declared in this scope
Documenti/arduino-1.0.1/libraries/EEPROM_TCP_IP/EEPROM_TCP_IP.cpp: In function ‘void writeEEPROMOctet(int, int*)’:
Documenti/arduino-1.0.1/libraries/EEPROM_TCP_IP/EEPROM_TCP_IP.cpp:54: error: ‘EEPROM’ was not declared in this scope
Documenti/arduino-1.0.1/libraries/EEPROM_TCP_IP/EEPROM_TCP_IP.cpp: At global scope:
Documenti/arduino-1.0.1/libraries/EEPROM_TCP_IP/EEPROM_TCP_IP.cpp:60: error: ‘EEPROM_TCP_IP’ is not a class or namespace
Documenti/arduino-1.0.1/libraries/EEPROM_TCP_IP/EEPROM_TCP_IP.cpp:137: error: ‘EEPROM_TCP_IP’ is not a class or namespace
Documenti/arduino-1.0.1/libraries/EEPROM_TCP_IP/EEPROM_TCP_IP.cpp: In function ‘void addressInitialize()’:
Documenti/arduino-1.0.1/libraries/EEPROM_TCP_IP/EEPROM_TCP_IP.cpp:140: error: ‘EEPROM’ was not declared in this scope
Documenti/arduino-1.0.1/libraries/EEPROM_TCP_IP/EEPROM_TCP_IP.cpp:146: error: ‘EEPROM’ was not declared in this scope
Documenti/arduino-1.0.1/libraries/EEPROM_TCP_IP/EEPROM_TCP_IP.cpp: At global scope:
Documenti/arduino-1.0.1/libraries/EEPROM_TCP_IP/EEPROM_TCP_IP.cpp:153: error: ‘EEPROM_TCP_IP’ is not a class or namespace
Documenti/arduino-1.0.1/libraries/EEPROM_TCP_IP/EEPROM_TCP_IP.cpp: In function ‘void addressSet()’:
Documenti/arduino-1.0.1/libraries/EEPROM_TCP_IP/EEPROM_TCP_IP.cpp:156: error: ‘EEPROM’ was not declared in this scope
Documenti/arduino-1.0.1/libraries/EEPROM_TCP_IP/EEPROM_TCP_IP.cpp:162: error: ‘EEPROM’ was not declared in this scope
Se non trovasse la libreria non ti scriverebbe
Documenti/arduino-1.0.1/libraries/EEPROM_TCP_IP/EEPROM_TCP_IP.cpp: 38 .....numero linea e tipo di errore
ti scriverebbe not found o not declared in this scope, leggi
‘EEPROM_TCP_IP’ is not a class or namespace non è una classe
Non posso mettermi di nuovo 2-3 ore a capire cosa vuoi fare e a scriverti programmi per di più doverlo fare secondo una tua logica,
Ti ho fornito lo sketch di lettura, il pezzo js, modifica oggetti del tuo html e non so a tutt'oggi se è servito o no.
Comunque non ha importanza, ma non capisco perchè hai voluto fare una libreria quando scrivere 20 byte su eeprom ci vogliono poche righe di codice.
ciao
Si è servito!!!
Grazie pablos.