data zenden

Software vragen voor ESP chip familie
Berichten: 7
Geregistreerd: 14 Mei 2013, 20:41

data zenden

Berichtdoor eenander » 12 Jan 2017, 21:39

Ik kom op het internet te veel uitleg tegen hoe het kan maar niet waarom iets moet. :D
Momenteel probeer ik dat data die de ESP8266 leest, te verzenden naar mijn website. Op die manier kan ik wereldwijd zien wat er in de tuin gebeurt.
Nu heb ik het idee dat ik behoorlijk goed op weg ben maar de data komt nog niet binnen op de site.
Probleem geeft dat ik niet precies kan uitzoeken wat ik moet versturen en hoe. Veel voorbeelden geven meteen aan hoe je met een shield of met een librari het op die en die methode moet doen maar niet waarom.
ik heb contact met mijn Wifi maar ik heb geen idee waarom ik iets moet invullen bij HOST?
Ook client.print("GET /map/invoerpagina.php?" + data); klopt dit? Kan ik op http://www.site.nl/map/invoerpagina.php? nu data invoeren?
Waar is die client.println("User-Agent: Arduino"); voor nodig en moet ik dat veranderen?

Alvast bedankt voor de hulp.

Peter

cpp code
#include <ESP8266WiFi.h>
#include "SoftwareSerial.h"
// contact account
const char* ssid = "wifiid";
const char* pass = "wifiwachtwoord";
const int port = 80;
const char * server = "192.168.0.1"; // ip or dns
const char * subnet = "255,255,255,0)";
const char * host = "waarhetheenmoet";
const char * serverip = "serverip";

int name[5];
String waarde[5];
String regel[10];
int x;
String $zenddata;
String $content;
int $datalengte;
WiFiClient client;

void setup()
{
// IOpoorten input
pinMode(15,INPUT);//slot
pinMode(14,INPUT);//deur dicht
pinMode(13,INPUT);//beweging(pir)
pinMode(12,INPUT);//licht donker
pinMode(A0,INPUT);//temperatuur

Serial.begin(115200);
delay(10);
Serial.println("");
Serial.println("");
Serial.println("Probeer te verbinden met het WiFi netwerk...");
Serial.print("SSID: ");
Serial.println(ssid);
Serial.print("pass: ");
Serial.println(pass);

//ga aanmelden ;
WiFi.begin(ssid, pass);
int x=0;
while(WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
x++;
if (x>500)
{x=0;Serial.println(".");Serial.println("Kan geen verbinding maken.");}
}
Serial.println("Verbonden met wifi");
Serial.println("IP addres:..");
Serial.println(WiFi.localIP());

}
void loop()
{
if (client.connect(server, 80))
{
Serial.print("Verbinden met server...");
Serial.println(serverip);
if (client.connect(serverip,80)) { // If connected, set variable connected to "true" and
Serial.println("connected!!");
String data;
data+="";
data+="temp=";
data+=analogRead(A0);
data+="&&";
data+="slot=";
data+=digitalRead(15);
data+="&&";
data+="beweging=";
data+=digitalRead(13);
Serial.println("Sending to Server: ");
Serial.println();
client.print("GET /map/invoerpagina.php?" + data);
Serial.print("GET /map/invoerpagina.php"+ data);
client.println(" HTTP/1.1");
Serial.println(" HTTP/1.1");
client.println("Host: http://localhost/PhpProject1"&#41;;
Serial.println("Host: http://localhost/PhpProject1"&#41;;
client.println("User-Agent: Arduino");
Serial.println("User-Agent: Arduino");
client.print("Content-Length: ");
Serial.print("Content-Length: ");
client.println(data.length());
Serial.println(data.length());
client.println("Accept: text/html");
Serial.println("Accept: text/html");
client.println("Connection: close");
Serial.println("Connection: close");

client.println();
Serial.println();

if (client.available()) {
char c = client.read();
Serial.print(c);
}
delay(10000);// om de 10 seconden
}
else {
Serial.println("Cannot connect to Server"); // else block if the server connection fails (debugging)
}
}
else {
delay(500); //
while (client.connected() && client.available()) { // When connected and availabe:
char c = client.read(); // read the answer of the server and
Serial.print(c); // print it to serial port
}
//
Serial.println(); //
client.stop(); // Stop the connection and set connected = false; // "connected" to false
}
}

Advertisement

Gebruikers-avatar
Berichten: 4643
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: data zenden

Berichtdoor nicoverduin » 13 Jan 2017, 19:03

Je redenering klopt niet helemaal. Er zijn verschillende mogelijkheden om dit op te lossen:
a) De ESP verstuurt de data naar een server ergens op het internet. Dat zou betekenen dat je een URL of IP adres moet hebben waar een programma (server applicatie) draait om de data in op te slaan in bijv. een database. Maar dan ben je er nog niet. Je hebt ook nog een Web applicatie nodig om de data uit de database server te halen en mooi te tonen op een beeldscherm of Smartphone oid.
b) De ESP acteert zelf als server. Dan kun je binnenshuis (hetzelfde netwerk) naar de ESP gaan met een browser die wat data toont. De beperkingen in deze zijn dat de ESP niet zoveel ruimte heeft om allerlei fancy paginas op te slaan. Wil je echter van buiten het huiselijke netwerk deze server willen bereiken dan moet er een aanpassing worden gemaakt op de router. Nu staan (als het goed is) de "poorten" dicht in de firewall om te voorkomen dat anderen ongewenst toegang krijgen met jouw prive netwerk. Er moeten dus poorten worden opengezet zodat je van buitenaf bij de ESP server kan. Daarnaast heb je het IP nummer nodig van de verbinding tussen jouw router en de provider. Vrijwel altijd kunnen die veranderen door de provider (ander IP nummer). Daar zijn oplossingen voor maar is niet altijd even gemakkelijk te regelen
c) Er zijn opties om een VPN verbinding te maken waardoor het veel moeilijker wordt om op jouw privé netwerk te komen. Een Raspberry 1B is al voldoende om dat te ondersteunen. Dan krijg je een beveiligde verbinding met jouw thuisnetwerk en dus ook de ESP server.

Jouw huidige code probeert naar een externe server te gaan die er niet is. Dus dat gaat weinig doen.
Ik zou eerst eens beginnen met een ESP8266 server en te kijken of je via een browser de data kan zien. Daarna krijg je de uitdaging om de router open te gooien of een VPN aan te leggen. Begrijp wel dat jouw kennis voor dit soort dingen verre van toereikend zijn om dit op te lossen gezien je vraagstelling.
Docent Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 7
Geregistreerd: 14 Mei 2013, 20:41

Re: data zenden

Berichtdoor eenander » 14 Jan 2017, 10:38

Nico,
Hartelijk dank voor je reactie.
Ik heb op mijn home server een site die kijkt of er ingelogd is, door wie om welke tijd en wat er verstuurd is. Met de ESP8266 wil ik een soort weer station maken die vanuit de tuin draadloos informatie doorstuurt naar die site.

Ik heb heel veel voorbeelden bekeken hoe ik de data met de ESP8266 moet versturen. Eerst de voorbeeld data bij de Arduino sketchen en daarna op internet. Ik weet het een en ander van internet, html, en php. Ook weet ik hoe ik met ESP8266 en Arduino aan de gang kan. Probleem is dat ik niet precies kan achterhalen hoe het HTML protocol in details werkt. (of ik stel de verkeerde vragen bij Google)

De ESP8266 maakt verbinding met mijn router via WiFi. Via serial monitor geeft hij aan verbinding te maken met mijn home pagina en het versturen zou moeten werken via :

const char * host = "192.168.10.3";
const char * serverip = "192.168.10.3";
const char * serverpath = "/botje/tuin/voerin.php?";

String data;
data+=serverpath;
data+="temp=";
data+=analogRead(A0);

client.print("GET ");
Serial.print("GET ");
client.print(serverpath);
Serial.print(serverpath);
client.println("HTTP/1.1");
Serial.println("HTTP/1.1");

client.print("Host:");
Serial.print("Host:");
client.println(host);
Serial.println(host);

Serial.println("Content-Type: application/x-www-form-urlencoded");
client.println("Content-Type: application/x-www-form-urlencoded");
client.print("Content-Length:");
Serial.print("Content-Length:");

client.println( data.length());
Serial.println( data.length());

client.println();
Serial.println();
client.println(data);
Serial.println(data);

client.println("Connection: close");
Serial.println("Connection: close");

maar dat gebeurt dus niet. Nu zoek ik dus waar ik de fout in ga.

Gebruikers-avatar
Berichten: 4643
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: data zenden

Berichtdoor nicoverduin » 14 Jan 2017, 11:01

Moet er niet een lege regel achter content type?

@edit: voorbeeld van een client
Code: Alles selecteren
// Make a HTTP request:
    client.println("GET /search?q=arduino HTTP/1.1");
    client.println("Host: http://www.google.com");
    client.println("Connection: close");
    client.println();

Daarachter moet dan je data komen of je geeft het mee in de GET lijkt mij
Docent Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 7
Geregistreerd: 14 Mei 2013, 20:41

Re: data zenden

Berichtdoor eenander » 17 Jan 2017, 17:35

Na heel veel uitproberen:

// lees karakter
Serial.println("Verbonden!!");
char c = client.read();
Serial.println(c);

// zend naar server
Serial.print("Zend naar server: ");
Serial.println(host);
//
client.println("POST /paginawaarhetheenmoet HTTP/1.1");
Serial.println("POST /paginawaarhetheenmoet HTTP/1.1");

client.println("Host: sitewaarhetheenmoet.php");// op deze wijze werkte het wel
Serial.print("Host: ");
Serial.println(serverip);

client.println("User-Agent: arduino-ethernet");
Serial.println("User-Agent: arduino-ethernet");

client.println("Connection: close");
Serial.println("Connection: close");

Serial.println("Content-Type: application/x-www-form-urlencoded");
client.println("Content-Type: application/x-www-form-urlencoded");

client.print("Content-Length:");
Serial.print("Content-Length:");
client.println( data.length());
Serial.println( data.length());

client.println();
Serial.println();

client.println(data);
Serial.println(data);

if (client.available())
{
char c = client.read();
Serial.println(c);
}
delay(20000);// om de 20 seconden

Dit werkt en geeft om de 20 sec een bericht aan mijn server

Gebruikers-avatar
Berichten: 4643
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: data zenden

Berichtdoor nicoverduin » 17 Jan 2017, 17:39

Er is recent een uitgebreid topic geweest om data naar de server te sturen in zowel GET of POST.

zie: viewtopic.php?f=5&t=2169
Docent Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar ESP Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast