ESP8266: Criando um web-service
Continuando a série de posts sobre a placa ESP8266 iniciada com a apresentação do módulo nesse post pelo Arthur iremos mostrar como usar a ESP8266 como um Web-Service. Como dito no post anterior usaremos a IDE de programação do Arduino para a criação do servidor. Esse tutorial cobrirá somente a criação de um servidor com web-service para a a ESP8266. Sendo que a ESP8266 poderia ser acoplada a um Arduino, por exemplo, para a leitura de sensores cujo dados seriam enviados através do web-service. Mais informações sobre JSON e seu uso em web-services podem ser obtidos nesse post.
Inicializando o servidor no ESP8266
Como primeiro passo iremos incluir a biblioteca da ESP8266 e fazer as definições básicas da rede que ela criará e do servidor que funcionará na mesma.
[sourcecode language=”c” wraplines=”false” collapse=”false”]
#include "ESP8266WiFi.h";
// Definição da rede que a ESP8266 criará
const char* ssid = "Nome-da-rede" ;
const char* password = "senha-da-rede" ;
// Definição da porta do web-service
WiFiServer server(80) ;
[/sourcecode]
Como podemos ver no trecho de código acima a ESP8266 criará a rede de nome Nome-da-rede e senha senha-da-rede além de definir que o servidor escutará a porta 80. A próxima etapa é a conexão de rede e a inicialização do servidor após o estabelecimento de conexão. O trecho de código a seguir define a velocidade de transmissão da porta serial que pode ser usada para receber os dados a serem comunicados através da ESP8266 além de estabelecer a conexão com os dados definidos no trecho anterior. Ficando a inicialização do servidor condicionada à conexão ser estabelecida durante a espera ocupada.
[sourcecode language=”c” wraplines=”false” collapse=”false”]
void setup() {
Serial.begin(115200);
delay(10);
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED) {
delay(500);
}
// Inicia o servidor
server.begin();
}
[/sourcecode]
Criando o Web-Service
Depois da definição básica do servidor iremos definir o funcionamento do web-service. O nosso servidor verifica se tem algum cliente conectado, caso positivo ele dá prosseguimento na execução do web-service, caso contrário ele retorna ao loop sem executar o web-service. Esse execução é feita pelo trecho a seguir contida no método loop().
[sourcecode language=”c” wraplines=”false” collapse=”false”]
WiFiClient client = server.available();
if (!client) {
delay(100);
return;
}
[/sourcecode]
Ainda no método loop() é feita a leitura da requisição feita pelo cliente conectado. Após a leitura é feita a remoção da requisição como podemos ver no trecho a seguir.
[sourcecode language=”c” wraplines=”false” collapse=”false”]
String req = client.readStringUntil(’\r’);
client.flush();
[/sourcecode]
Seguindo no método loop() temos a criação da resposta do JSON em si. Inicialmente definimos o cabeçalho do arquivo e em seguida preenchemos o arquivo de resposta. Nesse ponto seria onde colocaremos os dados a serem obtidos através do web-service. Como esse tutorial aborda somente a parte do web-service faremos o mesmo retornar { ‘webservice’ : ‘ok’ }.
[sourcecode language=”c” wraplines=”false” collapse=”false”]
// Cria do cabeçalho JSON
String s = "HTTP /1.1 200 OK\r\n" ;
s += "Content -Type: application/json;charset=utf -8\r\n\r\n" ;
// Preenchimento do JSON
s += "{" ;
s += "’webservice’: ’ok’" ;
s += "}" ;
// Envia da resposta ao cliente
client.print(s);
delay(1);
[/sourcecode]
Finalizamos o método loop() com o envio do JSON ao cliente. O cliente irá ser desconectado quando o cliente for destruído para recomeçar a execução do loop.
Finalizando
Neste post vimos somente como criar o web-service para a placa ESP8266. Do jeito que foi feito o web-service não oferece informação realmente útil ao usuário, porém esse web-service é a base para fazer um sistema capaz de fornecer as informações de sensores acoplados ao sistema.
Tem esse codigo no github amigo?