Skocz do zawartości

Cykliczne resetowanie się ESP01-S


Pomocna odpowiedź

Napisano (edytowany)

Cześć. Od jakiegoś czasu bawię się ESP01-S, które zakupiłem na aliexpress. Jego zadaniem jest odczytywanie temperatury z dwóch czujników DS18b20 i odsyłanie w formacie JSON gdy RaspberryPi puści GET. Wszystko działa poprawnie, ale ESP potrafi się co jakiś zresetować i być niedostępne przez kilka sekund przez co RPi nie może otrzymać danych. Czy może być to spowodowane przez problem z RAM'em? ESP jest podłączone w następujący sposób: VCC-3.3v, GND-GND, Ch_PD-3.3v, GPIO0-Termometry, GPIO1-Wewnętrzy LED. Tak prezentuje się kod:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#ifndef STASSID
#define WifiSsid "SSID"
#define WifiPassword "WifiPassword"
#endif

#define LED_PIN 1

#define ThermometerInputPin 0

OneWire ThermometerCommunication(ThermometerInputPin);
DallasTemperature Thermometers(&ThermometerCommunication);
ESP8266WebServer WaterTankApi(80);

void BlinkGetLed(int delayBetweenChangeLedState)
{
  digitalWrite(LED_PIN, LOW);  // On
  delay(delayBetweenChangeLedState);
  digitalWrite(LED_PIN, HIGH);  //Off
}

String GetWaterTemperatureJson() {
  Thermometers.requestTemperatures();
  return "{\"rear\":" + String(Thermometers.getTempCByIndex(1), 2) + ",\"front\":" + String(Thermometers.getTempCByIndex(0), 2) + "}";
}

void HandleGetWaterTemperatureRequest()
{
  WaterTankApi.send(200, "text/plain", GetWaterTemperatureJson());
  BlinkGetLed(100);
}

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

  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, HIGH);  //Off

  WiFi.mode(WIFI_STA);
  WiFi.begin(WifiSsid, WifiPassword);
  Serial.println("");

  Thermometers.begin();

  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(WifiSsid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  Serial.print("WiFi RSSI: ");
  Serial.print(WiFi.RSSI());
  Serial.println(" dBi");

  WaterTankApi.on("/", HandleGetWaterTemperatureRequest);

  WaterTankApi.begin();

  Serial.println("HTTP WaterTankApi started");
}

void loop(void)
{
  WaterTankApi.handleClient();
}

Dodam, że mam też drugie, takie samo esp z podobnym kodem. Różnica jest taka, że jedno GPIO jest używane tylko HIGH, LOW (sterowanie przekaźnikiem) i potrafi się tak samo zachować.

Czy może być to spowodowane przez Serial?

Czy to nie jest zbyt duże zadanie dla tego esp? Czy powinienem użyć jakiegoś innego?

Mam nadzieję, że nie zapomniałem czegoś umieścić w poście. POZDRO!

Edytowano przez karolkarolski25
(edytowany)

Nie ukrywam, że nie mogę sprawdzić co wypisuje, bo nie jest podłączone do kompa, tylko jest na takiej podstawce. IMG_20211030_132756.thumb.jpg.b0f827d236cce8140c708eabbf70a705.jpg  Jeżeli chodzi o zasilanie, to jest zasilacz 12v 1A, a samo esp bierze zasilanko z takiej rzeczy. IMG_20211030_132955.thumb.jpg.d1a3a9a2eaccc0421cfc8b32caa1241c.jpg

 

Edytowano przez karolkarolski25

@karolkarolski25 spróbuj wlutować kondensatory blisko linii zasilania ESP jak @ethanak  radzi, np/ elektrolityczny 100uF i ceramiczny 100nF. Miałem podobny problem jak zaprojektowałem układ zasilania do ESP, który miał za mocno ograniczoną wydajność - często pojawiał Brownout i układ się resetował.

  • 3 miesiące później...

- sprawdziłem ten twój program na terminalu rs.

- bootloader , debugger oraz sam program zachowują się poprawnie.

- testowałem około 2 godzin, restartu nie było.

- ciekawe czy juz problem namierzyłeś.

ESP01S-http.jpg

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...