• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Wyswietlacz TFT na ESP i deepSleep
#1
Hej, mam mały problem z moim kodem. Mianowicie wszystko jest OK do czasu aż nie wprowadzę go w DeepSleepa po którym nie chce się już wybudzić Sad
Płytka to NodeMCU V3, D0 i RST połączone oczywiście. Po wybudzeniu się nie działa zarówno wyświetlacz (czarny) jak i nadawanie w ESPnow.

Kod:
//TFT
#include          <Adafruit_GFX.h>
#include          <Adafruit_ST7735.h>
#include          <SPI.h>
#define TFT_CS    5
#define TFT_RST  15
#define TFT_DC    2
#define TFT_SCLK  0
#define TFT_MOSI  4
Adafruit_ST7735  tft  =  Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);

//Sleep
#define uS_TO_S_FACTOR 1000000
#define TIME_TO_SLEEP  10        /* Czas snu) */

#include <ESP8266WiFi.h>
#include <espnow.h>
uint8_t broadcastAddress[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
typedef struct struct_message {
  char a[32];
  int b;
  float c;
  String d;
  bool e;
} struct_message;

struct_message myData;

#include          "bitmapy.h"

byte              rysowanie = 0;

//Timer
#include <Timers.h>
Timer REFRESH_COMMUNICATION;
Timer USYPIANIE;




void setup() {
    WiFi.mode(WIFI_STA);
    esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
    esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
   
    REFRESH_COMMUNICATION.begin(SECS(2));
    USYPIANIE.begin(SECS(20));
   
    tft.initR(INITR_BLACKTAB);
    tft.fillScreen(ST7735_BLACK);
}

void loop() {
 
  if (rysowanie == 0){

    tft.setTextSize(1);
    tft.setTextColor(ST7735_RED, ST7735_BLACK);
   
    tft.setCursor(10, 70);
    tft.println("15 / 03 / 2020");
   
    tft.setCursor(36, 86);
    tft.println("16:45");

    tft.setTextColor(ST7735_RED, ST7735_BLACK);
    tft.drawBitmap(16, 34, LOGO1, 96, 18, ST7735_RED);
    tft.drawBitmap(0, 0, LOGO2, 128, 48, ST7735_WHITE);
    tft.drawBitmap(0, 136, LOGO3, 128, 24, ST7735_RED);
    tft.drawBitmap(0, 0, LOGO5, 31, 16, ST7735_YELLOW);
    tft.drawBitmap(112, 0, LOGO5, 15, 14, ST7735_YELLOW);
 
    tft.drawBitmap(0, 102, LOGO6, 53, 22, ST7735_RED);
    tft.drawBitmap(54, 102, LOGO7, 74, 22, ST7735_ORANGE);
    analogWrite(14, 350);
    rysowanie++;
  }

if (REFRESH_COMMUNICATION.available()){
  strcpy(myData.a, "Help !!");
  myData.b = random(1,20);
  myData.c = 1.2;
  myData.d = "Hello";
  myData.e = false;

  esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
  REFRESH_COMMUNICATION.restart();
 
}

if (USYPIANIE.available()){
 
  ESP.deepSleep(TIME_TO_SLEEP * uS_TO_S_FACTOR);
}
}

Po wybudzeniu się jedyna informacja którą dostaje w porcie szeregowym to:
Kod:
ets Jan  8 2013,rst cause:5, boot mode:(3,2)

ets_main.c
 
Odpowiedź
#2
Niektóre płytki WEMOS miały jakieś "lewe" chipy ESP12F, które nie umiały się wybudzać ze względu na kształt generowanego sygnału. Miałem taką jedną płytkę na kilkadziesiąt kupionych w Chinach. Może akurat masz pecha i trafił Ci się taki w NodeMCU. Poza tym lepiej użyć diody do połączenia z RST do GPIO16 , gdy chcesz wcisnąć RST paluchem robisz zwarcie RST do GND, a gdy jest połączony drutem z GPIO16 to również tego pinu, na który może być wystawiony stan wysoki.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
Czyli podłączam dowolną diodę krzemową w kierunku przewodzenia skierowaną do GPIO16 jak dobrze zrozumiałem ?
Paluchem restartu nie robię Smile
 
Odpowiedź
#4
Dioda (zalecana schottky) niestety raczej nie pomoże na brak wybudzenia, o ile to taki przypadek. Ma być w kierunku GPIO16. Przy okazji nie trzeba rozpinać zwory między RST a GPIO16 na czas programowania, więc nie tylko o reset paluchem chodzi. Chyba taki sam komunikat wysyła ESP gdy próbuje się wybudzić, ale nie jest w stanie zresetować układu. Może tylko coś Ci nie łączy. Wpisz w Google "esp8266 wake up not working", kiedyś widziałem oscylogramy, że GPIO16 nie jest w stanie zbić sygnału na taki okres, jaki wymagany jest do resetu i ktoś się żalił, że dostał taką partię ESP12F czy S https://github.com/esp8266/Arduino/issues/6007.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#5
Do zamknięcia, drugie ESP chodzi spać grzecznie więc to wina układu jak wspomniałeś Smile
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości