Angular e Chart JS com arduino

Bom dia.

Se puderem, agradeço uma ajuda.

Estou estudando o mundo Iot, usando um projeto de monitoramento de temperatura, que peguei na internet, utilisando a NodeMCU. E estou com problemas para atualizar as informações na página no meu PC, onde uso HML5/CCS3 com Angular JS e ChartJs do google.

No loop do Arduino eu gravo na flash as temperaturas em cada período de tempo, por exemplo:
No Arduíno consigo obter a temperatura atual e as últimas temperaturas registradas pelo serial.println(...).
Temperatura no momento - 14º C
Últimos minutos:
12:02:00 - 16º C
12:03:00 - 17º C
12:04:00 - 16º C
12:05:00 - 15º C
12:06:00 - 14º C

Na minha página, eu espero receber, a cada 10 segundos, a temperatura atual, sem acionar um botão.
Além de também atualizar um gráfico com informações das temperaturas dos últimos 5 minutos que estão gravadas na memória flash.

Que estás à espera que alguém te diga? Não colocaste nada acerca da configuração ou o código que estás a correr.

Me desculpe a demora.
Troquei o cenário, mas o problema continua.

No arduíno tenho a sequencia dos seguintes códigos:
void MontaJson()
{
json = “”;
json += “[{”;
json += "“hoje”: “;
json += “”” + String(day()) + “/” + String(month()) + “/” + String(year()) + “”, ";
json += "“hora”: “;
json += “”” + String(hour()) + “:” + String(minute()) + “:” + String(second()) + “”, ";
json += ““ciclo”: “;
json += “”” + String(timeCicle) + " horas” + “”, ";

calculoConsumo(acMin, 1);
json += "“AcumMin”: ";
json += qtdeConsumo;
json += ", ";
json += "“Unit1”: “;
json += “”” + UnitConsumo + “”, ";
.
.
.
json += “}]”;
.
.
.
}

Na string “json” obtenho a seguinte estrutura, que funciona quando simulo na na página, copiando esta mesma estrutura:

[{ “hoje”: “03/11/2017”, “hora”: “16:35:06”,
“ciclo”: “40.58 horas”,
“AcumMin”: 0, “Unit1”: “WH” ,
“AcumHora”: 287, “Unit2”: “WH” ,
“AcumDia”: 0, “Unit3”: “WH” ,
“AcumMes”: 287, “Unit4”: “WH” ,
“Projetado”: 5, “Unit5”: “KWH” ,
“UltimaHora”: 0, “Unit6”: "WH (15) ",
“UltimoDia”: 0, “Unit7”: "KWH (1) ",
“UltimoMes”: 0, “Unit8”: "KWH (10) "
}]

Anteriormente a página era montada inteiramente no arduíno e acessada pelo IP do dispositivo, sem problemas.

Após a montagem da string Json, faço o seguinte:

//==============================================
// Envia informações montadas na estrutura Json
//==============================================
void EnviaJson()
{

WiFiClient client = server.available();
if (!client) {
return;
}
while(!client.available()){
delay(1);
}

client.println(“HTTP/1.1 200 OK”);
client.println(“Content-Type: application/json”);
client.println(“Connection: close”);
// this is the CORS header. Yery important. Google CORS.
client.println(“Access-Control-Allow-Origin: *”);
client.println();

client.print(json);

// g…
delay(1);
client.flush();
// close the connection:
client.stop();
}

Ná página:

. . .
.
.
.

Consumo em tempo real

  • Em: {{d.hoje}} às {{d.hora}}
  • Ciclo: {{d.ciclo}} - Delay de 10 sedundos
  • Acum. Min: {{d.AcumMin}} {{d.Unit1}}
  • Acum. Hora: {{d.AcumHora}} {{d.Unit2}}
  • Acum dia: {{d.AcumDia}} {{d.Unit3}}
  • Acum. Mês: {{d.AcumMes}} {{d.Unit4}}
  • Projetado: {{d.Projetado}} {{d.Unit5}}
  • Última Hora: {{d.UltimaHora}} {{d.Unit6}}
  • Último Dia: {{d.UltimoDia}} {{d.Unit7}}
  • Último Mês: {{d.UltimoMes}} {{d.Unit8}}

<header

No link abaixo, o resultado quando colo a estrutura na na própria página …

Caro amigo, porque você não coloca um refresh automático na sua página web, no próprio exemplo de webserve do arduino tem isso :

client.println("Connection: close"); Só fechar a conexão e embaixo colocar o refresh com o tempo que você quer!
client.println("Refresh: 5");  // refresh the page automatically every 5 sec

Eu tenho um código dentro do Arduíno(dispositivo), que me abre uma página no Browser pelo IP do dispositivo via wifi, só para teste.
Agora preciso que o Arduíno, em seu loop, apenas transfira as informações para a aplicação. Para isso estou tentando usar a estrutura json, com o AngularJs do outro lado.

Me guiei por um exemplo que peguei aqui, mas as informações não chegam na aplicação, com ou sem o refresh.
O exemplo pode ser visto em: https://playground.arduino.cc/Code/WebServerJson

PS.: Biblioteca atual e as que já tentei.
//#include <ESP8266WebServer.h>
//#include <WiFiManager.h> //https://github.com/tzapu/WiFiManager
#include <ESP8266WiFi.h> // https://github.com/esp8266/Arduino
//#include <Ethernet.h>

Você está usando o ESP8266 como módulo principal ou ele está recebendo as as leituras do Arduino e depois as repassando para você obter via browser?

Uma dica seria também substituir sua linha:

client.println("HTTP/1.1 200 OK");
client.println("Content-Type: application/json");
client.println("Connection: close");
// this is the CORS header. Yery important. Google CORS.
client.println("Access-Control-Allow-Origin: *");
 client.println();

Por isso:

client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connnection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html><body>HELLO</body></html>");

Veja se seu módulo carrega isso na tela de seu navegador. Ai se tudo correr bem, você poderia montar um simples json na linha que contém a estrutura html e enviar para o outro lado (navegador) e com console.log ver o que aparece.

Eu ainda não olhei os detalhes de sua função void MontaJson(). Mas de ante mão, você poderia fazer o seguinte:
em $scope.acumuladores = response.data; você poderia adicionar um console e verificar via browser o que te retorna. Ficaria assim:

$scope.acumuladores = response.data;
console.log("recebido: " + .$scope.acumuladores);

Isso deve mostrar ao menos recebidos: [object Object] no console. Com isso, você já terá seu objeto recebido. Basta fazer certo no lado html.

Quando for testar, você vai precisar dar F12 (para firefox ou chrome) e verificar no “console” o que aparece. Lembrando, eu não sei como estão as coisas por completo ai, pois você só postou uma mínima parte.

Adicionalmente à minha resposta anterior:
Use sua página web assim:

<!DOCTYPE html>
<html  ng-app="readArduinoApp">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<script type="text/javascript">

  var app = angular.module("readArduinoApp", []);
      app.controller("ReadArduinoController", function($scope) 
      {
         $scope.acumuladores =    [{        
                              "hoje": "2/11/2017",
                              "hora": "16:35:6", 
                             "ciclo": "40.58 horas", 
                           "AcumMin": 0, 
                             "Unit1": "WH", 
                          "AcumHora": 287, 
                             "Unit2": "WH",
                           "AcumDia": 0, 
                             "Unit3": "WH",
                           "AcumMes": 287, 
                             "Unit4": "WH",
                         "Projetado": 5, 
                             "Unit5": "KWH",
                        "UltimaHora": 0, 
                             "Unit6": "WH(15)",
                         "UltimoDia": 0, 
                             "Unit7": "KWH (1)", 
                         "UltimoMes": 0,
                             "Unit8":    "KWH (10) "
               }]
      });
      
</script>
<body>
<div>
  <h1>Controle de gastos</h1>

</div>

<div ng-controller="ReadArduinoController">
    <h2>Consumo em tempo real</h2>
           </header>
           <p>
                <h3>   
                   <ul ng-repeat="d in acumuladores">
                      <li>         Em: {{d.hoje}} às     {{d.hora}}      </li>
                       <li>      Ciclo: {{d.ciclo}} - Delay de 10 sedundos </li> 

                      <li>  Acum. Min: {{d.AcumMin}}     {{d.Unit1}}      </li>
                      <li> Acum. Hora: {{d.AcumHora}}    {{d.Unit2}}    </li>
                      <li>   Acum dia: {{d.AcumDia}}       {{d.Unit3}}      </li>
                      <li>  Acum. Mês: {{d.AcumMes}}       {{d.Unit4}}    </li>
                      <li>  Projetado: {{d.Projetado}}    {{d.Unit5}}    </li>
                      <li>Última Hora: {{d.UltimaHora}}    {{d.Unit6}}    </li>
                      <li> Último Dia: {{d.UltimoDia}}    {{d.Unit7}}    </li>
                      <li> Último Mês: {{d.UltimoMes}}    {{d.Unit8}}      </li>
                   </ul>
                </h3>            
           </p>      
</div>
</body>
</html>

Deve estar usando IDE do Arduino com o pacote do ESP8266, correto?
Em exemplos, busque por WifiWebServer e veja o exemplo completo. Vai perceber como os dados são enviados para “o outro lado”.
Lembre-se, o exemplo WifiWebserver não envia JSON por padrão, você deve adaptá-lo para sua necessidade, mas isso é fácil pois o ESP apenas vai enviar um texto, então construa seu JSON de exemplo, bem curto e envie. Do outro lado veja o que recebe com console.log, como mostrado acima.

Opa.
Já avancei aqui pessoal.
Dei uma limpada no código. Joguei a Ethernet fora e só uso a ESP8266WiFi.h.

Não mexi no envio do Jason e, e no Browser, digitando o IP do Diispositiovo, já aparecem os dados na estrutura do Json.

Agora não é mais no Arduino.

Vou fuçar mais aqui para ver se resolvo.

O script para tratar o json está assim na página, mas não está carregando as informações:

A página que está com erro, mas a estrutura tá chegando lá, conforme o link abaixo.

Gibbasun:
A página que está com erro, mas a estrutura tá chegando lá, conforme o link abaixo.

Qual o erro?

Poste os códigos usando TAGS </>.

Teste isso para exibição no navegador.

<!DOCTYPE html>
<html  ng-app="readArduinoApp">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<script type="text/javascript">

   var app = angular.module('readArduinoApp', []);
      app.controller("ReadArduinoController", function ($http, $scope) {
          $http.get('http://192.168.1.101:80').then(function (response) {
              $scope.acumuladores = response.data;
          });
      });
      
</script>
<body>
<div>
  <h1>Controle de gastos</h1>

</div>

<div ng-controller="ReadArduinoController">
    <h2>Consumo em tempo real</h2>
           </header>
           <p>
                <h3>   
                   <ul ng-repeat="d in acumuladores">
                      <li>         Em: {{d.hoje}} às     {{d.hora}}      </li>
                       <li>      Ciclo: {{d.ciclo}} - Delay de 10 sedundos </li> 

                      <li>  Acum. Min: {{d.AcumMin}}     {{d.Unit1}}      </li>
                      <li> Acum. Hora: {{d.AcumHora}}    {{d.Unit2}}    </li>
                      <li>   Acum dia: {{d.AcumDia}}       {{d.Unit3}}      </li>
                      <li>  Acum. Mês: {{d.AcumMes}}       {{d.Unit4}}    </li>
                      <li>  Projetado: {{d.Projetado}}    {{d.Unit5}}    </li>
                      <li>Última Hora: {{d.UltimaHora}}    {{d.Unit6}}    </li>
                      <li> Último Dia: {{d.UltimoDia}}    {{d.Unit7}}    </li>
                      <li> Último Mês: {{d.UltimoMes}}    {{d.Unit8}}      </li>
                   </ul>
                </h3>            
           </p>      
</div>
</body>
</html>

Substitua o meu IP que está no código, pelo seu IP que foi fornecido ao ESP quando ele se conectou ao roteador. IP:80

Valeu pela força Jeff.
Vamos lá. estamos assim …

A página em html está assim:

<!DOCTYPE html>
<html ng-app="readArduinoApp" lang="pt-br">
<head>
    <meta charset="utf-8"/>
    <meta content="width=device-width, initial-scale=1, maximum-scale=1" name="viewport">
    <title>Monitoramento de energia elétrica</title>

   <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> 
   <!--  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script> -->
    <!-- <script src="myscripts/obterjson.js"></script> -->
   <!-- <script src="myscripts/grf-ao-vivo.js"></script> -->
    <link href="mycss/energy.css" rel="stylesheet"/>
    <script type="text/javascript">
			var readArduinoApp = angular.module('readArduinoApp', []);
			readArduinoApp.controller("ReadArduinoController", function ($http, $scope)  {
	 		   		$http.get('http://192.168.0.14').then(function (response) {
				    	$scope.acumuladores = new array;
				        $scope.acumuladores = response.data;
						console.log("recebido: " + $scope.acumuladores);
			})
	 		   	.catch(function(response) {
				  	console.error('Erro ao obter estrutura JSon:', response.status, response.data);
				}).finally(function() {
					console.log("Json carregado com sucesso");
				});
			}); 	
	</script> 
       ...
       ... 
       ... 
      <article ng-controller="ReadArduinoController">
	        <header>
	            <h2>Consumo em tempo real</h2>
	        </header>
	        <p>
		       	<h3>	
		       		<ul ng-repeat="d in acumuladores">
		       		<ul>	
			       		<li>         Em: {{d.hoje}} às  	{{d.hora}}		</li>
 			       		<li>      Ciclo: {{d.ciclo}} - Delay de 10 segundos </li> 

			       		<li>  Acum. Min: {{d.AcumMin}}  	{{d.Unit1}}		</li>
			       		<li> Acum. Hora: {{d.AcumHora}} 	{{d.Unit2}} 	</li>
			       		<li>   Acum dia: {{d.AcumDia}} 		{{d.Unit3}}		</li>
			       		<li>  Acum. Mês: {{d.AcumMes}} 		{{d.Unit4}} 	</li>
			       		<li>  Projetado: {{d.Projetado}} 	{{d.Unit5}} 	</li>
			       		<li>Última Hora: {{d.UltimaHora}} 	{{d.Unit6}} 	</li>
			       		<li> Último Dia: {{d.UltimoDia}} 	{{d.Unit7}} 	</li>
			       		<li> Último Mês: {{d.UltimoMes}} 	{{d.Unit8}}		</li>
		       		</ul>
		       	</h3>			   
	        </p>
	    </article>
No arduíno: 
//-----------------
// Bibliotecas
//------------------
#include <SPI.h>
#include <ESP8266WiFi.h>              // https://github.com/esp8266/Arduino
#include <WiFiUdp.h>
#include <Wire.h>
#include <Adafruit_ADS1015.h>         // https://github.com/adafruit/Adafruit_ADS1X15
#include <NTPClient.h>
#include <TimeLib.h>
#include <EEPROM.h>

 //==================================================================
// Prepara informações para atender requisão do Cliente/Servidor
//==================================================================
void MontaJson()
{
       json = "";
       json +=                 "[{";
       json +=                          "\"hoje\": "; 
       json +=                                      "\"" + String(day()) + "/" +  String(month())  + "/" +   String(year())   + "\", "; 
       json +=                          "\"hora\": "; 
       json +=                                      "\"" +  String(hour()) + ":" + String(minute()) +  ":" + String(second()) + "\", ";
       json +=                         "\"ciclo\": "; 
       json +=                                      "\"" +  String(timeCicle) + " horas"                                      + "\", ";
       
       calculoConsumo(acMin, 1);
       json +=                       "\"AcumMin\": "; 
       json +=                                      qtdeConsumo;
       json +=                                  ", ";
       json +=                         "\"Unit1\": ";
       json +=                                      "\"" + UnitConsumo + "\", ";

       calculoConsumo(acHour, 1);
       json +=                      "\"AcumHora\": "; 
       json +=                                      qtdeConsumo;
       json +=                                  ", ";
       json +=                         "\"Unit2\": ";
       json +=                                      "\"" + UnitConsumo + "\", ";

       calculoConsumo(acDay, 1);
       json +=                       "\"AcumDia\": "; 
       json +=                                      qtdeConsumo;
       json +=                                  ", ";
       json +=                         "\"Unit3\": ";
       json +=                                      "\"" + UnitConsumo + "\", ";

       calculoConsumo(acMonth, 2);
       json +=                       "\"AcumMes\": ";
       json +=                                      qtdeConsumo;
       json +=                                  ", ";       
       json +=                         "\"Unit4\": ";
       json +=                                      "\"" + UnitConsumo + "\", ";

       calculoConsumo(projKWH, 2); 
       json +=                     "\"Projetado\": ";
       json +=                                      qtdeConsumo;
       json +=                                  ", ";
       json +=                         "\"Unit5\": ";
       json +=                                      "\"" + UnitConsumo + "\", ";

       if (hora == 0) hora = 23;
       json +=                    "\"UltimaHora\": ";
       json +=                                      int(recHour[hora-1]);
       json +=                                  ", ";     
       json +=                         "\"Unit6\": ";
       json +=                                      "\" WH (" + String(hora-1) + ") \", ";
      
       json +=                     "\"UltimoDia\": ";
       if (dia == 1) {
          //calculoConsumo(recDay[LDM], 2);
          json +=                                  int(recDay[LDM]);
          json +=                               ", ";          
          json +=                      "\"Unit7\": ";
          json +=                                  "\"KWH (" + String(LDM)  + ") \", ";
       }
       else {
          json +=                                  int(recDay[mes-1]);
          json +=                               ", ";  
          json +=                      "\"Unit7\": ";          
          json +=                                  "\"KWH (" + String(dia-1) + ") \", ";       
       }
       json +=                     "\"UltimoMes\": ";
       json +=                                      recMonth[mes-1];
       json +=                                  ", ",       
       json +=                         "\"Unit8\": ";
       json +=                                      "\"KWH (" + String(mes-1) + ") \"";
       json +=                 "}]";
}

//==============================================
// Envia informações montadas na estrutura Json
//==============================================
void EnviaJson() 
  {
        WiFiClient client = server.available();
        if (!client) {
          return;
        }    
        while(!client.available()){
           delay(1);
        }
      
      if (client) {  

          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: application/json");
          client.println("Connection: close");
          client.println("Refresh: 5");
          // this is the CORS header. Yery important. Google CORS.
          client.println("Access-Control-Allow-Origin: *");
          client.println();

          client.print(json);
                    // pequeno delay
          delay(1);
          client.flush();
          // Fechar conexão
          client.stop();
      }    
  }

Como já dito antes.
A estrutura abre no browser digitando o IP do dispositivo: https://image.prntscr.com/image/uICrE2_IRFqSBW2faOwr6A.png

Um amigo conseguiu resolver com o PHP, logo o Arduíno não é o problema. Mas o meu desafio é usar o Angular mesmo.

Penso, então, que o assunto foge ao propósito deste fórum.
Volto a postar com os códigos completos quando tiver a solução.

Nos anexos há imagens retiradas do debug do Browser.

Anexos:
Aqui uma imagem do debug do browser.

Eu testei com a página que forneci e com o código básico Webserver e rodou. Acho que você está tentando muitas coisas ao mesmo tempo e não compreende que testes são feitos em etapas, às vezes em pequenos passos.

Sim, os testes são feitos por etapas.
Usei o que me sugeriu, mas não funcionou.
Estou tentando ver onde está o meu erro, pois funcionou com o PHP.

Já já a coisa funciona e volto aqui ...

Boas pessoal,

Em fim consegui fazer esse negócio funcionar porém não está bom.
Mesmo depois de velho é bom ouvir quem sabe.
Valeu Jeff, por me lembrar como testar as coisas!!!
Como o grande Jack já fazia e com o conselho do Jeff, fui por partes. Reduzi o escopo e cheguei ao cenário de hoje.

Em anexo os 2 arquivos dos meus testes.
Solução simples, apenas para mostrar a leitura de 2 informações do Arduíno na página: A leitura atual e leitura anterior, manipulados por um contador interno no dispositivo.

Estou usando apenas a biblioteca ESP8266WiFI.h, mas vou ver com a ESP8266WebServer e a WiFiManager.
Usei o dispositivo na conexão USB e também na minha rede Wifi, com os mesmos resultados.

Problemas:
O REFRESH, na estrutura do cabeçalho JSON, não funciona. Fico dando F5 e já estou partindo para o uso de sockets.
O refresh só funciona quando se digita o IP do dispositivo no Broweer. Aí sim, é aberta uma página com o texto referente a estrutura do Json, montada na string de mesmo nome no Arduíno.

O CLIENT.FLUSH, NÂO “Espera até que todos os caracteres de saída no buffer tenham sido enviados”, conforme o link . Arduino - ClientFlush. No caso, se comportou como um comando assíncrono, com as informações na página sendo atualizadas apenas a partir da 3ª iteração do looping.

Usei uma gambiarra no código, para só atualizar a leitura anterior (contadorAnterior no código) quando a string de requisição for alterada.

O CLIENT.STOP, realmente funciona, porém, como o processo do envio das informações não deve ter chegado ao fim, por conta de acreditar no Sr. CLIENT.FLUSH, nada acontece. Por isso o Client.Stop está comentado no código.

Vou experimentar outras bibliotecas e fuçar mais por aqui para ver se melhoro esse negócio.
Abraços a todos e estou aberto a novas sugestões.

PS.:
Na imagem do link abaixo, poderão observar o problema que estou atribuindo ao CLient.Flush. No no caso, só a última ocorrência vai para a página. E se colocar o Client.Stop, nada acontece.

WebServer_ESP8266Wi.ino (3.53 KB)

index.txt (1.74 KB)

Bom dia pessoal.
Em fim, cheguei a uma solução que me agradou muito e estou satisfeito.
Obrigado pela ajuda e estou a disposição para compartilhar o pouco que venho aprendendo neste mundo IoT.

Com relação a página e o código do dispositivo anexados anteriormente, foram feitas as seguintes alterações, e com sucesso.

Na página: Angular e html:

<!DOCTYPE html>
<html  ng-app="readArduinoApp">
<head>
    <meta charset="utf-8"/>
    <meta content="width=device-width, initial-scale=1, maximum-scale=1" name="viewport">
    <title>Solicitar informações do Arduíno</title>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> 
    <link href="mycss/energy.css" rel="stylesheet"/>
    <script type="text/javascript">
			var app = angular.module('readArduinoApp', []); 
			app.controller('ReadArduinoController', function($scope, $http, $interval) {
				
                              [b]// atualiza as informações a cada 5 segundos, com requisições ao Arduíno.[/b]
                                this.interval = $interval(function() 
				{
					$http.get('http://zzz.zzz.zz.z:pppp).then(function(response) {
					    $scope.acumuladores = response.data;
			    	});
				}, 5000); 
                                             [b] // Substitui a tentativa do "refresh = 5" tentado na montagem do cabeçalho do JSON  no 
                                              //  Arduínio, que não funcionou.[/b]
			});
	</script>		
</head>

...

	    <article>
	        <header align="center">
	            <h2 aling="left">Consumo em tempo real</h2>
	        </header> 
			<div align="center" ng-controller="ReadArduinoController">  
				<table aling="left" ng-repeat="d in acumuladores">
				      <tr><td>WBSERVER:       </td><td>{{webservice}}	</td></tr>
		       		      <tr><td>Leitura anterior:   </td><td>{{d.contadoranterior}}	</td></tr>
		       		      <tr><td>Leitura atual:       </td><td>{{d.contador}} </td></tr>
				</table>
			</div>	
	    </article>

No Arduíno:

// Biblioteca utilizada
#include <ESP8266WiFi.h>

void setup(){

  //  Configurações conforme o código anexado anteriormente ... 

}

void  loop () {
      ...
      ...
    //Verifica se há cliente conectado e envia requisição
    //===================================================
      EnviaRequisicao(); 
    //=================================================== 
   ...
   ... 

}

void EnviaRequisicao()
{
    WiFiClient client = server.available();
    // Verifica se há client (web browser) conectado
    if (client)
    {
        Serial.println("\n[Client conectado]");
        while (client.connected())
        {
         
          if (client.available())
          { 
            Serial.println("\n[Cliente disponível]");

            // Lê cada linha do cabeçalho, enviadas pela requisição do Browser do Client
            req = client.readStringUntil('\r');
            Serial.println ("Requisição = " + req + " tamanho = " + String(req.length()) + " Posição 0 = " +  req[0] + "\r");
            
            [b]// Verifica se acabou a leitura do cabeçalho da requisição. Se acabou, está na hora de enviar o JSON[/b]
            if (req.length() == 1) //  && req[0] == '\n')
            {
              //Serial.println ("Leitura da Requisição Finalizada = " + req + "\r");
              client.println(MontarJson());
              Serial.println(json);
              delay(1); // Calma!Tem que esperar mais um pouquinho
              contadorAnterior = contador;
              break; 
            }
          }
        }
        client.flush();
        delay(1); 
        client.stop();
        Serial.println("[Client disonnected]"); 
    }    
    else
        Serial.println("[Não houve requisiçãp]");
}