Vraag


Acties:
  • 0 Henk 'm!

  • ldiy
  • Registratie: December 2016
  • Laatst online: 15-08 22:40
Ik wil via een webpagina op de arduino een tekst laten tonen op een lcd .
nu dacht ik dit via GET te doen dus zo http://192.168.1.200/?data=blabla maar hoe krijg ik nu de data blabla. want met volgende code kan ik via GET bv een ledlamp aan zetten
C: arduino sketch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <EtherCard.h>

#define STATIC 1  // set to 1 to disable DHCP (adjust myip/gwip values below)

#if STATIC
// ethernet interface ip address
static byte myip[] = { 192,168,1,200 };
// gateway ip address
static byte gwip[] = { 192,168,1,1 };
#endif

// ethernet mac address - must be unique on your network
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

byte Ethernet::buffer[500]; // tcp/ip send and receive buffer

const char page[] PROGMEM =
"control a led"
"stuur led aan"
;

void setup(){
  Serial.begin(9600);
  
  if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) 
    Serial.println( "Failed to access Ethernet controller");
#if STATIC
  ether.staticSetup(myip, gwip);
#else
  if (!ether.dhcpSetup())
    Serial.println("DHCP failed");
#endif

  ether.printIp("IP:  ", ether.myip);
  ether.printIp("GW:  ", ether.gwip);  
  ether.printIp("DNS: ", ether.dnsip);  
}

void loop(){
  word len = ether.packetReceive();
  word pos = ether.packetLoop(len);
  
  if(strstr((char *)Ethernet::buffer + pos, "GET /?led=on") != 0) {
      Serial.println("Received ON command");
      digitalWrite(9, HIGH);
    }
  // wait for an incoming TCP packet, but ignore its contents
 if (ether.packetLoop(ether.packetReceive())) {
    memcpy_P(ether.tcpOffset(), page, sizeof page);
    ether.httpServerReply(sizeof page - 1);
  }
  
}
 


en als ik dit in de plaats zet van het stukje code waar ik de led mee aan laat gaan
C: arduino sketch
43
 Serial.println (((char *) Ethernet::buffer + pos));

dan krijg ik alle client info te zien(browser naam,etc) maar ook de get info
hardware:
-arduino uno
-enc28j60
software:
-ethercard.h
-arduino ide

de vraag is dus hoe ik de Get data krijg, mischien dat er een specifieke functie voor is?.
als ik met google zoek krijg ik vaak alleen maar resulaten met get request naar een andere server.

als meer informatie nodig is laat dan maar weten :)

https://www.youtube.com/channel/UCiHhuyYXyckkbeMgtu3Pr-w

Beste antwoord (via ldiy op 18-01-2017 20:02)


  • BasilFX
  • Registratie: Mei 2004
  • Laatst online: 11-09 08:28

BasilFX

BasilFX

Ik heb niet direct een oplossing voor je, maar dat gedeelte dat je wilt parsen heet een query string.

Als ik vervolgens op Google zoek, dan zijn er meerderen die deze vraag hebben. Dit antwoord lijkt een werkende parser te hebben.

Houd er rekening mee dat een Arduino maar een beperkte hoeveelheid geheugen heeft. Als je dus een parser schrijft/aanpast, zorg dan dat je geen buffer-problemen krijgt door te lange query strings.

Als het altijd die ene variabele is, dan zou ik het als volgt aanpakken (niet volledig volgens de standaard, maar het zal wel werken):
  1. Zoek naar de key en onthoud de index
  2. Lees string in vanaf index + lengte van key + 1 (voor het is-teken)
  3. Lees door tot je het einde hebt bereikt, een ampersand-teken leest, of N tekens hebt gelezen.

[ Voor 23% gewijzigd door BasilFX op 15-01-2017 11:13 ]

http://www.basilfx.net

Alle reacties


Acties:
  • 0 Henk 'm!

  • ldiy
  • Registratie: December 2016
  • Laatst online: 15-08 22:40
iemand een idee :?

https://www.youtube.com/channel/UCiHhuyYXyckkbeMgtu3Pr-w


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • BasilFX
  • Registratie: Mei 2004
  • Laatst online: 11-09 08:28

BasilFX

BasilFX

Ik heb niet direct een oplossing voor je, maar dat gedeelte dat je wilt parsen heet een query string.

Als ik vervolgens op Google zoek, dan zijn er meerderen die deze vraag hebben. Dit antwoord lijkt een werkende parser te hebben.

Houd er rekening mee dat een Arduino maar een beperkte hoeveelheid geheugen heeft. Als je dus een parser schrijft/aanpast, zorg dan dat je geen buffer-problemen krijgt door te lange query strings.

Als het altijd die ene variabele is, dan zou ik het als volgt aanpakken (niet volledig volgens de standaard, maar het zal wel werken):
  1. Zoek naar de key en onthoud de index
  2. Lees string in vanaf index + lengte van key + 1 (voor het is-teken)
  3. Lees door tot je het einde hebt bereikt, een ampersand-teken leest, of N tekens hebt gelezen.

[ Voor 23% gewijzigd door BasilFX op 15-01-2017 11:13 ]

http://www.basilfx.net


Acties:
  • 0 Henk 'm!

  • ldiy
  • Registratie: December 2016
  • Laatst online: 15-08 22:40
BasilFX schreef op zondag 15 januari 2017 @ 11:10:
Ik heb niet direct een oplossing voor je, maar dat gedeelte dat je wilt parsen heet een query string.

Als ik vervolgens op Google zoek, dan zijn er meerderen die deze vraag hebben. Dit antwoord lijkt een werkende parser te hebben.

Houd er rekening mee dat een Arduino maar een beperkte hoeveelheid geheugen heeft. Als je dus een parser schrijft/aanpast, zorg dan dat je geen buffer-problemen krijgt door te lange query strings.

Als het altijd die ene variabele is, dan zou ik het als volgt aanpakken (niet volledig volgens de standaard, maar het zal wel werken):
  1. Zoek naar de key en onthoud de index
  2. Lees string in vanaf index + lengte van key + 1 (voor het is-teken)
  3. Lees door tot je het einde hebt bereikt, een ampersand-teken leest, of N tekens hebt gelezen.
tnx, hier kan ik wat mee _/-\o_

[ Voor 24% gewijzigd door ldiy op 16-01-2017 17:07 ]

https://www.youtube.com/channel/UCiHhuyYXyckkbeMgtu3Pr-w


Acties:
  • 0 Henk 'm!

  • ldiy
  • Registratie: December 2016
  • Laatst online: 15-08 22:40
heb je een voorbeeldje van hoe je zo'n parser maakt?

iemand nog ideeen of aanvullingen want ik krijg veelal resultaten met het ethernetschiel (ethernet.h), er zijn maar weinig resultaten te vinden voor de enc28j60 (ethercard.h).
of zit er in een andere bibliotheek (compatiable met de enc28j60) een functie hiervoor?

https://www.youtube.com/channel/UCiHhuyYXyckkbeMgtu3Pr-w