ESP8266 senza pagina Web


9

Posso inviare dati a un ESP8266 senza creare un server Web?

Accedo ai pin GPIO di ESP8266 tramite un server web. Ora voglio creare un'app Android per questo. Quindi desidero inviare dati all'8266 senza creare un server Web: è possibile?


Usando un'app Android, saresti sulla stessa rete?
Rohan,

Risposte:


8

Sì, è possibile inviare dati a un ESP8266 senza utilizzare un server Web, ma è possibile utilizzarne uno o utilizzare qualcosa di funzionalmente correlato a uno.

Un ESP8266 è un dispositivo informatico abbastanza generico con una radio WiFi e uno stack di rete, quindi puoi implementare qualsiasi protocollo ragionevole che ti interessa descrivere nel codice.

Tuttavia, è diventato abbastanza popolare implementare protocolli che assomigliano e si comportano in modo molto simile alle pagine Web in miniatura destinate al consumo umano.

cioè, invece che il tuo client si connette e fa qualcosa di simile

GET /index.html HTTP/1.1

potrebbe dire

GET /gpio/15/value HTTP/1.1

Dove l'URL si riferisce non a un documento specifico, ma ad alcuni dati sul dispositivo a cui si desidera accedere. Si possono fare cose simili per POST, PATCH, DELETEecc richieste.

A meno che tu non stia costruendo una pagina per il consumo umano in genere i dati che scambi non sarebbero pagine HTML. Spesso invece potrebbe essere qualcosa come JSON. Quindi per esempio

GET /gpio/15/value HTTP/1.1

potrebbe innescare una risposta come

{"gpio": 15, "direction": "in", "value": 0}

Allo stesso modo, puoi creare un endpoint in cui il tuo client potrebbe impostare un GPIO dicendo

POST /gpio/15 HTTP/1.1
{"direction": "out", "value": 1}

È in una certa misura una domanda semantica o specifica per l'implementazione se il programma che risponde a tali query è un "web server" - potrebbe essere un server web che esegue varie attività di supporto per gestire dati e gpios (proprio come un server che serve pagine potrebbe dinamicamente generare parte del loro contenuto dalle query del database), oppure potrebbe essere un programma dedicato che gestisce sia i dati che sa parlare HTTP.

E ovviamente usare HTTP per scambiare payload JSON è solo uno dei molti modi di fare le cose - è solo uno dei più popolari attualmente che riutilizza molti concetti simili a quelli di un server web e può in qualche modo persino consentire l'uso di un browser web per i test.


Vale anche la pena ricordare che un tale schema tende a funzionare meglio a livello locale, quando il telefono e l'ESP8266 sono client della stessa rete WiFi domestica. Se il telefono non è "a casa" o lo è, ma è solo su una rete mobile, consentirgli di raggiungere l'ESP8266 significherebbe consentire richieste esterne nella rete domestica, preferibilmente qualcosa da evitare. In tal caso, è abbastanza popolare utilizzare un protocollo in cui sia il dispositivo ESP8266 che il telefono raggiungono indipendentemente un server di inoltro esterno, che passa i messaggi tra di loro. MQTT è un esempio di uno schema spesso utilizzato per un sistema con un'architettura basata su relay server.


Inoltre, sono curioso di implementare DELETEun porto ;-)
Arjan,

1
Su molti sistemi Linux devi "esportare" un GPIO prima di poterlo usare con l'interfaccia / sys / class / gpio. Non so se riesco a "non esportare" uno dei miei pensieri, ma concettualmente potrebbe corrispondere a un ELIMINA :-)
Chris Stratton,

2

Sì, puoi scrivere un server TCP personalizzato . Oppure, per un peso più leggero, utilizzare un server UDP .

In entrambi i casi, arriva a definire il tuo protocollo applicativo su TCP / UDP e fai in modo che l'applicazione lo invii. E risparmi sull'overhead di HTTP. (HTTP può avere circa 1000 byte di overhead per messaggio!)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.