<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[M5 Core Timer Interrupt doesnt work well.]]></title><description><![CDATA[<p dir="auto">This sketch works well as long as the PC is connected to the M5. The (Zahl) interrupt count up after every minute.<br />
When I leave the website, the counter stands and doesn't count anymore.</p>
<p dir="auto">I haven't found the cause yet.<br />
Somebody help me. Trying to solve the problem since days</p>
<p dir="auto">here is the sketch:</p>
<hr />
<p dir="auto">#include &lt;M5Stack.h&gt;<br />
#include &lt;WiFi.h&gt;<br />
#include &lt;WiFiUDP.h&gt;<br />
#include &lt;NTPClient.h&gt;<br />
#include &lt;Adafruit_Sensor.h&gt;<br />
#include &lt;Adafruit_BME280.h&gt;</p>
<p dir="auto">#define SEALEVELPRESSURE_HPA (1013.25)</p>
<p dir="auto">int druck = 1013;<br />
bool flag = false;<br />
int Zahl = 0;<br />
int tdruck;<br />
const char* ssid = "xxxxxxxxx";<br />
const char* password = "yyyyyyyyyyy";<br />
unsigned long delayTime;<br />
float h, t, p;<br />
char temperatureCString[6];<br />
char humidityString[6];<br />
char pressureString[7];<br />
String progno;</p>
<p dir="auto">hw_timer_t * timer = NULL;<br />
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;</p>
<p dir="auto">WiFiUDP ntpUDP;  //Zeitserver<br />
NTPClient timeClient(ntpUDP,"<a href="http://de.pool.ntp.org" target="_blank" rel="noopener noreferrer nofollow ugc">de.pool.ntp.org</a>",7200,60000);<br />
//NTPClient timeClient(ntpUDP);</p>
<p dir="auto">Adafruit_BME280 bme;<br />
WiFiServer server(80);<br />
//-----------------------------------------Ab hier keine Netzwerkverbindungen und kein serial.print aufrufen-------------------------------------<br />
void ICACHE_RAM_ATTR getWeather() {<br />
h = bme.readHumidity();<br />
t = bme.readTemperature();<br />
p = bme.readPressure()/100.0;<br />
t = t - 2.3;<br />
p = p + 3.3;<br />
tdruck = int(p);<br />
dtostrf(t, 5, 1, temperatureCString);<br />
dtostrf(h, 5, 1, humidityString);<br />
dtostrf(p, 6, 1, pressureString);<br />
//stunde = timeClient.getHours();<br />
//delay(100);  //Ursprünglich 100</p>
<pre><code>if(!flag){
if (tdruck == druck){
   progno = "Konstant";
}
else if (tdruck &gt; druck ){
  progno = "Steigend   ";
}
else { 
  progno = "Fallend";
 }
</code></pre>
<p dir="auto">druck = tdruck;<br />
flag = true;<br />
Zahl++;<br />
dis();</p>
<p dir="auto">}<br />
}<br />
//----------------------------------------In merker sowenig Anweisungen wie möglich--------------------------------------------------------------<br />
void ICACHE_RAM_ATTR merker(){<br />
flag = false;<br />
getWeather;<br />
}<br />
//-------------------------------------------------------------------------------------------------------------------------------------------------<br />
void dis(){<br />
M5.Lcd.clear();<br />
M5.Lcd.setTextColor(GREEN);<br />
M5.Lcd.setCursor(0, 0);<br />
M5.Lcd.setTextSize(2);<br />
M5.Lcd.println(progno);<br />
M5.Lcd.println();<br />
M5.Lcd.print(pressureString);<br />
M5.Lcd.print(" hPa ");<br />
M5.Lcd.println(Zahl);<br />
M5.Lcd.print(humidityString);<br />
M5.Lcd.println(" % rel. Luftfeuchte");<br />
M5.Lcd.print(temperatureCString);<br />
M5.Lcd.print(" \x60""Celsius" );              // "\x60<br />
}</p>
<p dir="auto">//-----------------------------------------Hilfsfunktionen---------------------------------------------------------------------------------------<br />
void Say(char x[]){<br />
Serial.println(x);<br />
}</p>
<p dir="auto">void Say(float x){<br />
Serial.println(x);<br />
}</p>
<p dir="auto">void Say(char x){<br />
Serial.println(x);<br />
}</p>
<p dir="auto">void Say(int x){<br />
Serial.println(x);<br />
}<br />
//--------------------------------------------------------------------------------------------------------------------------------------------------</p>
<p dir="auto">void setup() {<br />
M5.begin();<br />
timer = timerBegin(1, 80, true);  // timer 0, MWDT clock period = 12.5 ns * TIMGn_Tx_WDT_CLK_PRESCALE -&gt; 12.5 ns * 80 -&gt; 1000 ns = 1 us, countUp<br />
timerAttachInterrupt(timer, &amp;merker, true); // edge (not level) triggered<br />
timerAlarmWrite(timer, 1000000 * 60, true); // 1000000 * 1 us = 1 s, autoreload true<br />
timerAlarmEnable(timer); // enable</p>
<p dir="auto">IPAddress ip(192, 168, 0, 5);<br />
IPAddress gateway(192, 168, 0, 1);<br />
IPAddress subnet(255, 255, 255, 0);<br />
IPAddress dns(192, 168, 0, 1);<br />
//IPAddress pdns(8,8,4,4); option</p>
<p dir="auto">WiFi.config(ip,gateway,subnet,dns);//  WiFi.config(ip,gateway,subnet,dns,pdns);</p>
<p dir="auto">Serial.println(F("BME280 test"));<br />
bool status;<br />
status = bme.begin(0x76);</p>
<p dir="auto">// Connect to WiFi network<br />
Serial.println();<br />
Serial.println();<br />
Serial.print("Connecting to ");<br />
Serial.println(ssid);</p>
<p dir="auto">WiFi.mode(WIFI_STA);</p>
<p dir="auto">WiFi.begin(ssid, password);</p>
<p dir="auto">while (WiFi.status() != WL_CONNECTED) {<br />
delay(500);<br />
Serial.print(".");<br />
}<br />
Serial.println("");<br />
Serial.println("WiFi connected");</p>
<p dir="auto">// Start the server<br />
server.begin();<br />
Serial.println("Server started");<br />
delay(10);</p>
<p dir="auto">// Print the IP address<br />
Serial.println(WiFi.localIP());</p>
<p dir="auto">timeClient.begin(); // Zeitserver<br />
timeClient.update();<br />
Serial.println(timeClient.getFormattedTime());<br />
}</p>
<p dir="auto">void loop() {<br />
WiFiClient client = server.available();<br />
if (client) {<br />
Serial.println("New client");<br />
// delay(1000);<br />
// bolean to locate when the http request ends<br />
boolean blank_line = true;<br />
while (client.connected()) {<br />
if (client.available()) {<br />
char c = client.read();<br />
if (c == '\n' &amp;&amp; blank_line) {<br />
timeClient.update();     //Zeitserver<br />
getWeather();<br />
client.println("HTTP/1.1 200 OK");<br />
client.println("Content-Type: text/html");<br />
client.println("Connection: close");<br />
client.println();<br />
// your actual web page that displays temperature<br />
client.println("&lt;!DOCTYPE HTML&gt;");<br />
client.println("&lt;html&gt;");<br />
client.println("&lt;head&gt;&lt;META HTTP-EQUIV="refresh" CONTENT="15"&gt;&lt;/head&gt;");<br />
client.println("&lt;body&gt;&lt;h1&gt;        Zimmertemperatur&lt;/h1&gt;");<br />
client.println("&lt;table border=10 bordercolor=#4844EC width= 40% cellpadding=10&gt;&lt;tbody&gt;&lt;tr bgcolor=#CCFFFF&gt;&lt;td&gt;");<br />
client.println("&lt;h3&gt;Zeit ");<br />
client.print(timeClient.getFormattedTime());<br />
client.println("&lt;h3&gt;");<br />
client.println("&lt;h3&gt;Temperatur  =  ");<br />
client.println(temperatureCString);<br />
client.println("°C&lt;/h3&gt;&lt;h3&gt;Luftfeuchte  = ");<br />
client.println(humidityString);<br />
client.println("%&lt;/h3&gt;");<br />
client.println("&lt;h3&gt;Luftdruck     = ");<br />
client.println(pressureString);<br />
client.println("hPa&lt;h3&gt;");<br />
client.println("&lt;h3&gt;Tendenz  &amp;nbsp     = ");<br />
client.println(progno);<br />
client.println(Zahl);<br />
client.println("&lt;/h3&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;");<br />
break;<br />
}<br />
if (c == '\n') {<br />
// when starts reading a new line<br />
blank_line = true;<br />
}<br />
else if (c != '\r') {<br />
// when finds a character on the current line<br />
blank_line = false;<br />
}<br />
}<br />
}<br />
// closing the client connection<br />
delay(3);<br />
client.stop();<br />
// digitalWrite(14, LOW);<br />
Serial.println("Client disconnected.");<br />
dis();<br />
<a href="//M5.update" target="_blank" rel="noopener noreferrer nofollow ugc">//M5.update</a>();<br />
}</p>
<p dir="auto">}</p>
]]></description><link>https://community.m5stack.com/topic/1023/m5-core-timer-interrupt-doesnt-work-well</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Apr 2026 21:31:50 GMT</lastBuildDate><atom:link href="https://community.m5stack.com/topic/1023.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 22 May 2019 17:24:57 GMT</pubDate><ttl>60</ttl></channel></rss>