Input webpagina naar C variable

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • chaoscontrol
  • Registratie: Juli 2005
  • Laatst online: 11-10 15:24
Laat ik beginnen met dat ik geen developer ben en geen idee heb waar ik dit precies moest posten. Dus indien nodig even de juiste kant op schuppen. :)

Ik heb een esp8266 microcontroller welke ik met de Arduino ide programmeer. Hier loopt een klein programmaatje welke een bepaalde variable print naar een display. Er draait een hele simpele telnet server op de microcontroller welke de binnengekomen data in de variable plaatst. Dat werkt op zich goed maar het is een redelijk omslachtige manier van doen.

Ik had dus bedacht om een webserver op de microcontroller te draaien en deze een pagina te laten serveren met een input veld die weer de variable vult. Hier loop ik tegen het probleem aan;

Ik dacht slim te zijn door een simpele html pagina met wat javascript te laden om er achter te komen dat die de variable enkel clientside opslaan. :+

Nu zie ik door de bomen het bos even niet meer, wie kan mij de goede richting insturen? :)

Inventaris - Koop mijn meuk!

Alle reacties


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 11-10 14:49
Een "webserver", (dwz een server die HTTP praat) gebruikt enkel een andere manier van dataoverdracht dan een telnet server.
Je zou dus die webserver een "service" kunnen laten hosten (je weet wel, REST and all that) die op een bepaalde url/verb combinatie de variabele de waarde geeft die de HTTP/REST client doorgeeft.

In de praktijk zal er zoiets gebeuren:
client --> uC
code:
1
2
3
POST http://microcontroller/service
Content-Type: text/plain
12345


uC-->client
code:
1
200 OK


Jij zult dus ipv het telnet verhaal het HTTP verhaal moeten parsen en verwerken en ook een antwoord sturen.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 19:53

Ventieldopje

I'm not your pal, mate!

Een REST client kan maar dan moet je wel een scripting taal gaan draaien als PHP of NodeJS. Als het om zo iets simpels gaat kun je imho beter aan de slag met CGI en heb je voldoende aan een minimale installatie, mits je CGI scripts kan draaien die in C geschreven zijn. Voor zo ver ik weet is een arduino daar niet echt geschikt voor en zijn voor dat soort taken (web interfaces) bordjes als de Raspberry beter. Dan kun je inderdaad makkelijk een REST API schrijven met bijv. PHP en het Silex framework bijvoorbeeld, of met NodeJS.

Als het je puur gaat om een frontend, waarom dan niet een PHP scriptje schrijven dat een formulier weergeeft en de input daarvan (dmv. een POST request) doorsluist via telnet. Je kan het dan zelfs zo maken dat je kan kiezen d.m.v. een select field naar welke arduino het heen zou moeten als je zo ver wil gaan. Mogelijkheden zat maar ik denk dat de webserver op de arduino draaien niet de juiste keus is.

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • chaoscontrol
  • Registratie: Juli 2005
  • Laatst online: 11-10 15:24
Ik gebruik een esp8266, geen arduino. Deze zou dit makkelijk moeten kunnen draaien. Ik weet alleen niet of er cgi libraries zijn die compatible zijn met de arduino ide, dat ga ik even uitzoeken. :) Het is ook belangrijk dat het een stand-alone systeem is, het mag dus niet afhankelijk zijn van andere webservers/data inputs.

De telnet server is ook niet belangrijk, deze kan wat mij betreft vervangen worden met de nieuwe oplossing, tenzij de telnet server daar onderdeel van moet zijn.

Het liefst heb ik een simpele manier om binnen mijn code een webpagina te serveren via de lokale webserver waarvan ik de input weer kan doorgeven aan de rest van de code (buiten de webpagina die op de lokale webserver draait). In feite is de esp dan een webserver voor de input en een microcontroller voor de output, binnen dezelfde code/sketch. :) Snappen jullie het nog? :+

Inventaris - Koop mijn meuk!


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 19:53

Ventieldopje

I'm not your pal, mate!

Hij is toch ook niet afhankelijk dan? Zoiets heet gewoon een frontend. Net als dat je een frontend schrijft die de input omzet en met een API communiceert.

Webserver/app/whatever dus op plek A. Telnet server op je microcontroller. Wat je dan ook voor frontend kiest, de code er achter kan je controller aansturen via telnet. Abstractie :)

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 11-10 14:49
Ventieldopje schreef op donderdag 14 juli 2016 @ 01:05:
Een REST client kan maar dan moet je wel een scripting taal gaan draaien als PHP of NodeJS.
Whut? Je controller vangt de HTTP requests direct op en parsed deze, waarom moet je daarvoor scripting taal 'draaien'? Is C niet goed genoeg denk je?

Je vervangt de telnet server voor een HTTP server, das alles.

[ Voor 8% gewijzigd door farlane op 14-07-2016 10:03 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 19:53

Ventieldopje

I'm not your pal, mate!

farlane schreef op donderdag 14 juli 2016 @ 10:01:
[...]

Whut? Je controller vangt de HTTP requests direct op en parsed deze, waarom moet je daarvoor scripting taal 'draaien'? Is C niet goed genoeg denk je?
Jawel, er van uitgaande dat je C kan draaien al denk ik als je een REST API gaat schrijven het makkelijker te onderhouden/beheren/schrijven is in een moderne script taal.

Voor iets simpels als de TS omschrijft heb je imho geen REST API nodig en kun je het vrij simpel inderdaad met CGI en C doen.

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 11-10 14:49
Ventieldopje schreef op donderdag 14 juli 2016 @ 10:04:
[...]
Voor iets simpels als de TS omschrijft heb je imho geen REST API nodig en kun je het vrij simpel inderdaad met CGI en C doen.
CGI op een embedded ding als de esp is lastiger(understatement) dan direct de requests af te handelen in het proces van de webserver zelf. Een esp draait geen operating systeem voor zover ik weet.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 19:53

Ventieldopje

I'm not your pal, mate!

farlane schreef op donderdag 14 juli 2016 @ 11:00:
[...]

CGI op een embedded ding als de esp is lastiger(understatement) dan direct de requests af te handelen in het proces van de webserver zelf. Een esp draait geen operating systeem voor zover ik weet.
Ach ja, je hebt natuurlijk gewoon direct toegang tot de webserver. Dan kun je er inderdaad direct tegen aan ouwehoeren in plaats van via een omweg als CGI / script taal.

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • chaoscontrol
  • Registratie: Juli 2005
  • Laatst online: 11-10 15:24
Maar hoe dan? :+ (Als in, kunnen jullie iets specifieker zijn, deze termen Googlen lastig!)

[ Voor 70% gewijzigd door chaoscontrol op 14-07-2016 11:20 ]

Inventaris - Koop mijn meuk!


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 11-10 17:53

Janoz

Moderator Devschuur®

!litemod

Dat is helemaal afhankelijk van hoe je nu die webserver in je sketch opgenomen hebt en wat daarvan de mogelijkheden zijn.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 11-10 14:49
chaoscontrol schreef op donderdag 14 juli 2016 @ 11:20:
Maar hoe dan? :+ (Als in, kunnen jullie iets specifieker zijn, deze termen Googlen lastig!)
Volgens mij heb ik het al aardig voorgekauwd. Zoek naar het telnet gedeelte in de huidige code en vervang dat door een webserver. ( Dat klinkt heel geweldig maar je hoeft in feite alleen maar strings te parsen/versturen om dat voor elkaar te krijgen )

[ Voor 28% gewijzigd door farlane op 14-07-2016 17:33 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • chaoscontrol
  • Registratie: Juli 2005
  • Laatst online: 11-10 15:24
Janoz schreef op donderdag 14 juli 2016 @ 11:33:
Dat is helemaal afhankelijk van hoe je nu die webserver in je sketch opgenomen hebt en wat daarvan de mogelijkheden zijn.
Webserver is een groot woord. Ik start een server op poort 80 en heb in een client.println mijn html pagina staan.
farlane schreef op donderdag 14 juli 2016 @ 17:30:
[...]

Volgens mij heb ik het al aardig voorgekauwd. Zoek naar het telnet gedeelte in de huidige code en vervang dat door een webserver. ( Dat klinkt heel geweldig maar je hoeft in feite alleen maar strings te parsen/versturen om dat voor elkaar te krijgen )
Waar dan?
Ik zag je edit niet. :) Maar dan nog snap ik niet wat je bedoeld, ik heb nu toch al een webserver draaien, ik zoek alleen een manier om data tussen de webpagina (die die webserver host) en de rest van mijn sketch te krijgen.

[ Voor 13% gewijzigd door chaoscontrol op 14-07-2016 17:39 ]

Inventaris - Koop mijn meuk!


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 11-10 14:49
Als je al een webserver op die esp hebt draaien moet je die hacken om bij de HTTP request strings te komen. Of misschien is er al wel een manier om hier iets mee te kunnen doen binnen die webserver, mbv callbacks oid. Check de code/docs van die webserver zou ik zeggen.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • Rmg
  • Registratie: November 2003
  • Laatst online: 21:29

Rmg

je heb het over sketch en esp8266 dus ik neem aan dat je het over ArduinoEsp hebt en ook die webserver gebruikt

Hiermee moet het lukken
https://github.com/esp8266/Arduino/issues/1321

Acties:
  • 0 Henk 'm!

  • epic007
  • Registratie: Februari 2004
  • Laatst online: 07-10 10:46
Een en full REST api heb je niet nodig. Je zult je een beetje moeten verdiepen in het http protocol.

Een browser zal eerst een GET Request doen om de pagina op te halen ( dit gedeelte heb je al ). De html pagina zal iets van een <form> element moeten bevatten. Zodra het form gesubmit wordt doet de browser een POST Request met daarin de variabelen van je form.
Die zal je op de een of andere manier eruit moeten halen.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 11-10 17:53

Janoz

Moderator Devschuur®

!litemod

chaoscontrol schreef op donderdag 14 juli 2016 @ 17:37:
[...]


Webserver is een groot woord. Ik start een server op poort 80 en heb in een client.println mijn html pagina staan.
Dan lijkt het me relatief simpel. Geef bij een GET gewoon daadwerkelijk die pagina terug, en bij een POST pak je de content van de body van het request en stop je dat in je variable (je kunt waarschijnlijk gewoon de laatste regel van het request nemen). Verschil tussen GET en POST is simpel te bepalen aangezien dat het eerste woord van het request is :).

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 11-10 14:49
epic007 schreef op donderdag 14 juli 2016 @ 22:12:
Een en full REST api heb je niet nodig. Je zult je een beetje moeten verdiepen in het http protocol.
Het voorbeeld dat ik gaf om een waarde met een POST verb te laten zetten is een "REST API" en zo simpel als wat : basic HTTP met een specifieke URL en body.

Jouw voorbeeld met HTML (waarom zou je dat doen?) en een form is onnodig complex en vergt veel meer parsing.

[ Voor 13% gewijzigd door farlane op 14-07-2016 23:09 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • chaoscontrol
  • Registratie: Juli 2005
  • Laatst online: 11-10 15:24
epic007 schreef op donderdag 14 juli 2016 @ 22:12:
Een en full REST api heb je niet nodig. Je zult je een beetje moeten verdiepen in het http protocol.

Een browser zal eerst een GET Request doen om de pagina op te halen ( dit gedeelte heb je al ). De html pagina zal iets van een <form> element moeten bevatten. Zodra het form gesubmit wordt doet de browser een POST Request met daarin de variabelen van je form.
Die zal je op de een of andere manier eruit moeten halen.
Dit is inderdaad hoe ik het nu probeer aan te pakken. :) En ben al een eind, kan via een get en put request de waarde nu opvragen en veranderen. Hier moet ik nu nog een simpele webpagina omheen maken met een textveld welke met de ingevoerde waarde de put request doet, maar dat lijkt mij het probleem niet meer. Ben er alleen voor vandaag even klaar mee. Zal morgen hopelijk de uiteindelijke code posten. :)

Iedereen alvast bedankt voor het meedenken!

Inventaris - Koop mijn meuk!

Pagina: 1