Impossibilidade de envio de muitos dados para serial (via esp) e cartão microSD
O obejtivo
Meu objetivo é hackear o sistema de aquisição de dados da emm (exceto envio de dados apra o servidor) para usar em outra pesquisa na qual serão usados 7 DHTs e 1 LDR. As alterações feitas no hardware estão detalhadas aqui: http://cta.if.ufrgs.br/issues/481#note-10 . As alterações feitas no meteorolog estão aqui http://cta.if.ufrgs.br/issues/481#O-que-eu-fiz . As alterações feitas no esplogger estão aqui http://cta.if.ufrgs.br/issues/481#Esplogger . Vou descrever abaixo as alterações no espelogger por achar pertinente a este problema:
No arquivo meteorolog.cpp da pasta espelogger alterei as linhas 317-324, onde alterei o nome da variável "sensor_name" e do argumento dentro de "root_sensors". Além disso, adicionei esse código 6 vezes, trocando o nome do "sensor_name" e do argumetno de "root_sensors" (cada DHT recebeu o nome de uma letra, de A a G, e suas variaveis e apelidos também, por isso "ta" é a temperatura do DHT A, "tb" é a temperatura do DHT B, etc).
else if (sensor_name == "ta") {
root_sensors["DHT22_TEMP_A"] = value;
}
else if (sensor_name == "aha") {
root_sensors["DHT22_AH_A"] = value;
}
Os firmwares alterados estão aqui http://cta.if.ufrgs.br/attachments/4595/Firmware_esplogger_meteorolog.zip Mais detalhes na tarefa: http://cta.if.ufrgs.br/issues/481
O Problema
Grandes quantidades de dados (mais de 100 bytes) não estão sendo corretamente enviados para a serial (via espe) nem para o cartão microSD.
A partir da décima variável incluida (contando dt) (mais de 100bytes) no comando "meteorolog" ou "arduino read" enviado via esp, a resposta do esp começa a ser errada (até a nona a resposta é correta). Ao invés de responder o valor da variável, o valor da variável anterior é substituída por " " (espaço vazio). Exemplo:
[DEBUG] Sending command 'read,dt,l,ta,tb,tc,td,te,tf,tg' to Arduino. [INFO] Sucessfully updated 'LOGGER.CONF' (SPIFFS) [DEBUG] Reading arduino serial response.. [INFO] Recieved: '2018-1-15 16:10:36,94.330406,26.500000,26.600000,26.700001,26.299999,26.900000,26.299999,26.799999' (119 bytes) [DEBUG] --- JSON created --- {} [INFO] Attemping upload to server.. [HTTP] POST...
[DEBUG] Response: [INFO] 122 bytes written at 'DATALOG.TXT'
A resposta foi a esperada, mas ao adicionar mais 1 variável:
[DEBUG] Sending command 'read,dt,l,ta,tb,tc,td,te,tf,tg,aha' to Arduino. [INFO] Sucessfully updated 'LOGGER.CONF' (SPIFFS) [DEBUG] Reading arduino serial response.. [INFO] Recieved: '2018-1-15 16:10:36,94.330406,26.500000,26.600000,26.700001,26.299999,26.900000,26.299999,,' (119 bytes) [DEBUG] --- JSON created --- {} [INFO] Attemping upload to server.. [HTTP] POST...
[DEBUG] Response: [INFO] 122 bytes written at 'DATALOG.TXT'
No exemplo abaixo isto não fica claro, mas nos testes seguintes os valores passavam a ser substituídos por " " regressivamente. A resposta quando todos as 16 variáveis são chamadas é:
Note que o envio do pedido da medida "ahc" foi corretamente recebido, mas a resposta foi " ". A adição de cada nova variável faz com que o valor da variável anterior seja substituído por " ". E assim por diante a cada nova variável adicionada até que todas são comidas ([INFO] Recieved: '2018-1-15 16:10:36,94.330406,,,,,,,,). Um efeito similar ocorre se chamar as medidas "ah" primeiro e as "t" depois.
A resposta para cada DHT separadamente foi correta.
O que eu tentei fazer
Edições:
- Na linha 1833 do ArduinoJson.h troquei "256" por "1024"
- Na linha 290 do meteorolog.cpp, alterei o tamanho do StaticJsonBuffer, de 500 para 1000. ** Fiz o mesmo nas linhas 201, 233, 261, 290, 403. ** Tentei alterar para 2000 e para 5000, só na linha 290, depois em todas
A resposta permaneceu a mesma em todos os casos (sim, eu lembrei de fazer upload dos novos firmwares).