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
}