ESP8266 sem página da Web

9

Posso enviar dados para um ESP8266 sem criar um servidor web?

Estou acessando os pinos GPIO do ESP8266 através de um servidor web. Agora eu quero fazer um aplicativo Android para isso. Então, eu quero enviar dados para o 8266 sem criar um servidor web - isso é possível?

SHILADITYA DEY
fonte
Ao usar um aplicativo Android, você estaria na mesma rede?
Rohan

Respostas:

8

Sim, você pode enviar dados para um ESP8266 sem usar um servidor da Web, mas você pode querer usar um ou usar algo funcionalmente relacionado a um.

Um ESP8266 é um dispositivo de computação de uso geral com um rádio WiFi e uma pilha de rede; portanto, você pode implementar praticamente qualquer protocolo razoável que queira descrever no código.

No entanto, tornou-se bastante popular a implementação de protocolos que se parecem muito com páginas da Web em miniatura destinadas ao consumo humano.

ou seja, em vez de seu cliente se conectar e fazer algo como

GET /index.html HTTP/1.1

pode dizer

GET /gpio/15/value HTTP/1.1

Onde o URL não se refere a um documento específico, mas a alguns dados no dispositivo que você deseja acessar. Você pode fazer coisas semelhantes para POST, PATCH, DELETEetc solicitações.

A menos que você esteja criando uma página para consumo humano, normalmente os dados que você troca não seriam páginas HTML. Muitas vezes, pode ser algo como JSON. Então por exemplo

GET /gpio/15/value HTTP/1.1

pode desencadear uma resposta como

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

Da mesma forma, você pode criar um terminal em que seu cliente possa definir um GPIO dizendo

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

Até certo ponto, é uma pergunta semântica ou de implementação específica se o programa que responde a essas perguntas é um "servidor da web" - pode ser um servidor da web que executa várias tarefas auxiliares para lidar com os dados e gpios (da mesma forma que um servidor que serve páginas pode dinamicamente gerar parte de seu conteúdo a partir de consultas ao banco de dados) ou pode ser um programa dedicado que lida com os dados e sabe falar HTTP.

E, é claro, o uso do HTTP para trocar cargas JSON é apenas uma das muitas maneiras de fazer as coisas - é popular atualmente, que reutiliza muitos conceitos do tipo servidor da web e pode até permitir o uso de um navegador da web para teste.


Também é importante lembrar que esse esquema tende a funcionar melhor localmente, quando o telefone e o ESP8266 são clientes da mesma rede Wi-Fi doméstica. Se o telefone não estiver "em casa" ou estiver, mas estiver apenas em uma rede móvel, permitir que ele alcance o ESP8266 significaria permitir solicitações externas à rede doméstica, algo preferencialmente evitado. Nesse caso, é bastante popular usar um protocolo em que o dispositivo ESP8266 e o ​​telefone alcancem independentemente um servidor de retransmissão externo, que transmite mensagens entre eles. O MQTT é um exemplo de um esquema frequentemente usado para um sistema com uma arquitetura baseada em servidor de retransmissão.

Chris Stratton
fonte
Além disso, eu sou curioso sobre a implementação DELETEde uma porta ;-)
Arjan
11
Em muitos sistemas Linux, você precisa "exportar" um GPIO antes de poder usá-lo com a interface / sys / class / gpio. Eu não sei fora do topo da minha cabeça se você pode "unexport" um, mas conceitualmente que poderia coincidir com um DELETE :-)
Chris Stratton
2

Sim, você pode escrever um servidor TCP personalizado . Ou, para um peso menor, use um servidor UDP .

De qualquer forma, defina seu próprio protocolo de aplicativo sobre o TCP / UDP e solicite que o aplicativo o envie. E você economiza na sobrecarga do HTTP. (O HTTP pode ter cerca de 1000 bytes de sobrecarga por mensagem!)

BraveNewCurrency
fonte