Wemos D1 não corre o código quando liga

Boas, sou novo aqui no forum e preciso de ajuda.

Tenho uma máquina que produz umas peças, eu leio a passagem de peças com uma fibra óptica que envia o sinal a um amplificador de fibra e envia um sinal a 24VDC sempre que detecta uma peça.

Depois tenho um WEMOS D1 que para se manter ligado está alimentado por uma fonte de 24VDC para 5VDC no pino Vin pois não tenho uma tomada no local.

O sinal da fibra é enviado para um relé de 1 contacto que ativa sempre que recebe 24VDC. Quando o contacto fecha, o Wemos recebe o seu próprio sinal de 3,3V, quando está aberto, recebe 0V do GND

Sempre que recebe o sinal o Wemos envia um código via método POST do HTTP.

Tudo isto funciona muito bem, o problema é o seguinte, a máquina é desligada ao fim-de-semana e ao fim do dia. Quando se volta a ligar, o wemos não envia nada, acredito que nem esteja a correr o código.

No inicio eu não tinha colocado a função Reconnect() e o que notei foi que quando chegava lá com o PC, carregava no reset do wemos e ele dizia "connected" no setup mas depois quando chegava à mesma verificação no loop, dava código de erro 6 (acho que é disconnected) e nunca enviava por muito que carregasse no reset. Tinha de voltar a injetar o código para voltar a funcionar.

Agora com a função reconnect() só tenho precisado de carregar no reset para corrigir, contudo, gostava que funcionasse sem ter de fazer reset todos os dias. O meu código está em baixo.

Desde já obrigado

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
//#include <HTTPClient.h>

// Replace with your network credentials
const char* ssid = "dummy";
const char* password = "pass";

String contador ="430";
int previous_val=0;
int soma=0;
byte mac[6]; // the MAC address of your Wifi shield

void reconnect() {
Serial.print("Reconnecting");
IPAddress ip(xxxx.xxxx.xxxx.xxxx); // IP do ESP8266
IPAddress gateway(yyyy.yyyy.yyyy.yyyy); //IP do gateway
IPAddress subnet(255,255,255,0); //mascara da rede
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected!");
}

void setup () {
Serial.begin(115200);

WiFi.begin(ssid, password);

pinMode(D5, INPUT);

//network configuration//

IPAddress ip(xxxx.xxxx.xxxx.xxxx); // IP ESP8266
IPAddress gateway(yyyy.yyyy.yyyy.yyyy); //IP do gateway
IPAddress subnet(255,255,255,0); //mascara da rede
WiFi.config(ip, gateway, subnet); //configuração

while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print("Connecting..");
}
Serial.println("Connected");

WiFi.macAddress(mac);
Serial.print("MAC: ");
Serial.print(mac[5],HEX);
Serial.print(":");
Serial.print(mac[4],HEX);
Serial.print(":");
Serial.print(mac[3],HEX);
Serial.print(":");
Serial.print(mac[2],HEX);
Serial.print(":");
Serial.print(mac[1],HEX);
Serial.print(":");
Serial.println(mac[0],HEX);

}

void loop() {

int sensorVal = digitalRead(D5);
//print out the value of the pushbutton
//Serial.println(sensorVal);
delay(50);
if(sensorVal!=previous_val){
Serial.println(sensorVal);
if(sensorVal){
HTTPClient http;

if (WiFi.status() == WL_CONNECTED) { //Check WiFi connection status
http.begin("http://2222.2222.2222.2222:8080/api/machineinjopen/"+contador); //API de Destino para o pedido HTTP
http.addHeader("Content-Type", "text/plain"); //Specify content-type header
int httpResponseCode = http.POST(contador); //Send the actual POST request and store response code

if(httpResponseCode>0){
String response = http.getString(); //Get the response to the request should be 201
Serial.println(httpResponseCode); //Print return code
Serial.println(response); //Print request answer
}
else{
Serial.print("Error on sending POST: ");
Serial.println(httpResponseCode);
}
http.end(); //Free resources
}
else{
Serial.print("Error in WiFi connection ERROR CODE: ");
Serial.println(WiFi.status());
Serial.println(".....");
reconnect();
}
delay(100);
}
}
previous_val =sensorVal; //last value to compare
}

Boas,
Não entendi o erro agora ocorre todos os dias ou só ao fim de semana quando desliga a maquina ao fim de semana?

Boas, obrigado pela resposta. Bem isto tem acontecido sempre que chego de manhã e é colocada a máquina a trabalhar, reparo que não recebo os valores. Mas se fizer reset ele começa a enviar.

Outra coisa que testei antes de sair do trabalho hoje, foi desligar a máquina e voltar a ligar e ele continua a enviar os valores sem problema.

Esta máquina fica a trabalhar até às 00h e depois é desligada e só é ligada às 8h outra vez e no fim de semana fica desligada o tempo todo.

Amanhã quando chegar vou voltar a ver se continua a enviar quando ligar de novo a máquina.

Não sei se o problema são pausas prolongadas e se for esse caso, como posso resolver.

Não sei se ficou perceptível, mas o arduino também desliga com a máquina e liga com ela também uma vez que a fonte do arduino está ligada à da máquina.

Ok, o que eu faria para despistar isso:
Mudar a fonte de alimentação para algo que nao usa-se esses 24V da maquina.Provavelmente esses 24 funcionam bem para alimentar o PLC , mas como nao sei como é feita essa regulaçao de 24V para 5 isolava essa questão (riple, ruido ...).
O Wemos sobrevive se desligar o AP? Isto é o ponto de acesso está sempre ligado?
O programa que desenvolveste "sobrevive" caso tente comunicar e o ap esteja desligado?
Já que tens isso a mandar uma variavel por post e talvez a armazenar numa BD, porque nao enviares um heartbeat também para depois na BD saberes a que horas ou quando é que ele parou efectivamente?
Podes colocar uma variável unsigned long a incrementar e a enviar esse heartbeat para o teu server de x em x segundos independente da contagem.
Assim amanha terás dados para analisar.
Podes programar também um watchdog dentro do Wemos que caso o timer nao seja resetado internamente pela normal execução do programa, reseta o micro-controlador, um auto-reboot ...

Boas, obrigado.

O problema é que a máquina não tem uma tomada monofásica ali. Tem a calha DIN e tem umas fontes de 24VDC eu arranjei uma de 24VDC para 5VDC para ligar o wemos. de facto fui medir e a fonte estava a 4.9V dei um ajuste e coloquei no máximo dela que é 5.7V poderia não ser suficiente os 4.9V talvez, vou ver se amanhã continua a enviar.

Porque ontem desliguei a máquina 2x e quando ela voltava a ligar, o wemos enviava sinal para a api sem problema, então deixei estar. Mas hoje quando cheguei, já não estava a enviar outra vez. Eu até já coloquei o wemos em OTA para não ter de ir lá mas nem me aparecia o ESP nas portas disponiveis agora de manhã.

O código morrer dúvido porque no setup se não tiver ligação ele fica a tentar estabelecer ligação e depois no loop se perder a ligação, volta a tentar fazer reconnect. Acho que até só precisava de fazer ESP.restart mas fiz uma função com as configurações todas outra vez para forçar.

Talvez um condensador à saída da fonte para limpar algum possível ruído?

Talvez um condensador à saída da fonte para limpar algum possível ruído?

Tenta com um de 100nF e outro de 100uF por exemplo.Tenta colocar o de 100nF o mais perto possível do microcontrolador e testa.