Hi,
I do some counting and try to transmit those values every minute to my server. When I call the transmitting function directly everything is fine. When I try to call the same function (MinutenTimer) by Timer then the connection (http) fails with ErrorCode -1.
What might be wrong? Thank you for your ideas. Here is the full sketch:
#include <ArduinoOTA.h>
#include <Wire.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266HTTPClient.h>
#include <Ticker.h>
#ifndef STASSID
#define STASSID "###########"
#define STAPSK "###########"
#endif
char wiFiHostname[ ] = "esp18_stromzaehler";
const char* ssid = STASSID;
const char* password = STAPSK;
const char* serverName1 = "##########";
int led=D4;
Ticker Timer;
unsigned long zaehler[4];
unsigned long bouncetime;
unsigned long lastbouncetime[4];
ICACHE_RAM_ATTR void interruptRoutine1() {bouncetime=millis();if(bouncetime-lastbouncetime[0] > 100) {zaehler[0]++; lastbouncetime[0]=bouncetime;}}
ICACHE_RAM_ATTR void interruptRoutine2() {bouncetime=millis();if(bouncetime-lastbouncetime[1] > 100) {zaehler[1]++; lastbouncetime[1]=bouncetime;}}
ICACHE_RAM_ATTR void interruptRoutine3() {bouncetime=millis();if(bouncetime-lastbouncetime[2] > 100) {zaehler[2]++; lastbouncetime[2]=bouncetime;}}
ICACHE_RAM_ATTR void interruptRoutine4() {bouncetime=millis();if(bouncetime-lastbouncetime[3] > 100) {zaehler[3]++; lastbouncetime[3]=bouncetime;}}
void MinutenTimer()
{
WiFiClient client;
HTTPClient http;
http.setTimeout(15000);
http.begin(client, serverName1);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
String httpRequestData = "z1=" + String(zaehler[0]);
httpRequestData += "&z2=" + String(zaehler[1]);
httpRequestData += "&z3=" + String(zaehler[2]);
httpRequestData += "&z4=" + String(zaehler[3]);
zaehler[0]=0;
zaehler[1]=0;
zaehler[2]=0;
zaehler[3]=0;
Serial.print("Data: ");
Serial.print(httpRequestData);
int httpResponseCode = http.POST(httpRequestData);
if (httpResponseCode>0) {
Serial.print(" HTTP Response code: ");
Serial.println(httpResponseCode);
}
else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
}
http.end();
}
void setup() {
lastbouncetime[0]=0;
lastbouncetime[1]=0;
lastbouncetime[2]=0;
lastbouncetime[3]=0;
pinMode(D1, INPUT_PULLUP);
pinMode(D2, INPUT_PULLUP);
pinMode(D6, INPUT_PULLUP);
pinMode(D7, INPUT_PULLUP);
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.setPhyMode(WIFI_PHY_MODE_11B);
WiFi.begin(ssid, password);
wifi_station_set_hostname(wiFiHostname);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
digitalWrite(led, !digitalRead(led));
}
digitalWrite(led, LOW);
ArduinoOTA.setHostname(wiFiHostname);
ArduinoOTA.setPassword(wiFiHostname);
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP addresse: ");
Serial.println(WiFi.localIP());
ArduinoOTA.begin();
ArduinoOTA.handle();
Timer.attach(60, MinutenTimer);
attachInterrupt(D1, interruptRoutine1, FALLING);
attachInterrupt(D2, interruptRoutine2, FALLING);
attachInterrupt(D6, interruptRoutine3, FALLING);
attachInterrupt(D7, interruptRoutine4, FALLING);
}
void loop() {
}