Stack overflow na NodeMCU – Mikrokontroléry – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Stack overflow na NodeMCU – Mikrokontroléry – Fórum – Programujte.comStack overflow na NodeMCU – Mikrokontroléry – Fórum – Programujte.com

 

Martin
~ Anonymní uživatel
1602 příspěvků
25. 3. 2018   #1
-
0
-

Ahoj, tvorím projekt s NodeMCU v3 Lolin a programujem klasicky cez ArduinoIDE. Mám problém so stack overflow. Vytvoril som 2 totožné projekty, pričom jeden ide a druhý hlási stack overflow a dosku v nekonečnej slučke reštartuje. V provom projekte mám len iné moduly. V druhom projekte mám DHT22 (vlhkosť a teplota) a BMP280 (atmo. tlak a teplota).

Najprv som skúšal výpis na serial monitor, je to ok. Problém je keď pridám knžinicu ESP8266wifi a WificlientSecure (pre https spojenia). Problém je vždy keď kód príde k slučke loop. Setup sa vykoná, teda všetky senzory sa inicializujú a aj na wifi sa doska napojí a potom príde stack overflow, doska sa reštartuje a všetko sa opakuje. Nejaký tip, kde môže byť problém? Ten kód je veľmi jednoducho napísaný. Používam digitálny pin (D4) na údaj z DHT22 a I2C zbernicu (piny D1 a D2). Program nie je pamäťovo náročný a neviem, kde mám hľadať chybu. ďakujem vám pekne za pomoc/postrehy.

Kód, ktorý do dosky nahrávam: 
 

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h> //KNIZNICA pre HTTPS spojenia
#include "Adafruit_BMP280.h"         //bmp280 kniznica s upravou na 0x76 adresu
#include "DHT.h"
#define DHTPIN 2     // what digital pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
Adafruit_BMP280 bmp; //inicializacia BMP senzora
const char * ssid = "moj-xxxxxxxx-2929"; //meno wifi siete
const char * password = "xxxx"; //Heslo na wifi siet
const char * host = "sadsda.xxx.sk"; //bez https a www
const int httpsPort = 443; //https port zabezpeceny prenos
const char * fingerprint = "‎13 9f 87 1d b1 85 be e6 bd 73 c1 8d 04 63 58 99 f0 32 43 92"; //odtlacok HTTPS certifikatu v SHA1 formate
void setup() {          
  bmp.begin();        //start snimaca BMP
      dht.begin();              
  Serial.begin(9600);    //SPUSTENIE SERIOVEJ LINKY --UART-- NA CITACIU RYCHLOST 9600
  while (!Serial) {
    ;                                        
  }
 
 WiFi.begin(ssid, password); //pripoj sa na wifi siet s heslom
  while (WiFi.status() != WL_CONNECTED) { //pokial sa nepripojime na wifi opakuj pripajanie a spustaj funkcie pre ovladanie v offline rezime
    delay(500);
    Serial.println(".");
  }
  Serial.println("");
  Serial.println("WiFi pripojene"); //uspesne pripojenie na wifi siet
  Serial.println("IP adresa: ");
  Serial.println(WiFi.localIP()); // pridelena IP adresa pre dosku
 
}
 
void loop() {                                      //ZACIATOK SLUCKY
  delay(5000);
 if (WiFi.status() != WL_CONNECTED) {
odoslat_data();  
    WiFi.begin(ssid, password);
  } else {
    odoslat_data(); 
  }
  }
  
void odoslat_data(){
   WiFiClientSecure client;
  if (client.verify(fingerprint, host)) {} else {}
  if (client.connect(host, httpsPort)) {
    String teplota1 = String(dht.readTemperature());
    String teplota2 = String(bmp.readTemperature());
    String vlhkost = String(dht.readHumidity());
    String tlak = String((bmp.readPressure() / 100) + 103,855);
 
    String url = "/podstranky/system/nodemcu/zapishodnoty.php?teplota1=" + teplota1 + "&teplota2=" + teplota2 + "&vlhkost=" + vlhkost + "&tlak=" + tlak; //--------------------------------------------------------------------------------DOPLN LINK
    client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "User-Agent: NodeMCU\r\n" + "Connection: close\r\n\r\n");
    Serial.println("Odoslane teploty do db:");
     Serial.println("Atmosfericky tlak: ");           //SERIOVY VYPIS TEXT O TLAKU VZDUCHU
    Serial.println((bmp.readPressure() / 100) + 103,855); //SERIOVY VYPIS STAVU RELATIVNEHO TLAKU 30,... je konstanta pre nadmorsku vysku, ktora sa prirata k teplote. (Použite pri nadmorskej do 1000m nadmorska vyska/8,3 tuto hodnotu napiste namiesto 30,...)
    Serial.println("Teplota: "); 
    Serial.println(bmp.readTemperature());
    Serial.println("Vlhkost: "); 
    Serial.println(dht.readHumidity());
        Serial.println("Teplota DHT: "); 
    Serial.println(dht.readTemperature());    
  } else if (!client.connect(host, httpsPort)) {
    Serial.println("Neuspesne pripojenie pre odoslanie teplot do DB - offline rezim aktivny");
  }
  }

Chybová hláška (serial monitor):

WiFi pripojene
IP adresa: 
192.168.2.24
 
Exception (0):
epc1=0x30303030 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000
 
ctx: cont 
sp: 3fff0df0 end: 3fff1040 offset: 01a0
 
>>>stack>>>
3fff0f90:  31333032 30303532 30303030 30303030  
3fff0fa0:  30303030 30303030 30303030 30303030  
3fff0fb0:  30303030 30303030 30303030 3fff0000  
3fff0fc0:  3fffdad0 0000000c 3ffeff5c 40204fe9  
3fff0fd0:  40105ec0 002c07f7 3ffefe98 00000000  
3fff0fe0:  3fff5584 0000005f 0000005c 3fff556c  
3fff0ff0:  0000000f 00000005 3fff5554 0000000f  
3fff1000:  00000005 3fff20c4 0000000f 00000005  
3fff1010:  3fffdad0 00000000 3ffefdd0 4020277c  
3fff1020:  feefeffe 00000000 3fff0010 4020596c  
3fff1030:  feefeffe feefeffe 3fff0020 40100718  
<<<stack<<<

Ďakujem za pomoc. Problém bude zrejme v DHT22, pretože v druhom projekte, kde nie je problém používam BMP280 taktiež a dallas DS18B20 senzory.. Neviem ale ako sa dopátrať k príčine.

Nahlásit jako SPAM
IP: 195.28.150.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý