Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Co to za wersja ESP8266 (ESP8266MOD)?

shel82 05 Jan 2020 19:18 5424 20
  • #1
    shel82
    Level 18  
    Witam, pytanie dokładnie jak w temacie, a dokładniej chodzi mi o to jaki to model wersji układu - ESP12E czy F czy S lub Q, etc?

    Układ opisany jako ESP8266MOD, zwróćcie uwagę, że brakuje napisu AI-Thinker.
    Posiłkując się opisami na stronie producenta domniemam raczej, że to klon, ale już sam nie wiem
    https://www.esp8266.com/wiki/doku.php?id=esp8266-module-family#esp-12

    Problem w tym, że nie wszystkie programy prawidłowo mi ta płytka obsługuje, np. sztandarowy "blink" działa ok, a inne nie i wyrzuca błędem:

    12:34:32.637 -> ets Jan 8 2013,rst cause:2, boot mode:(3,6)
    12:34:32.637 ->
    12:34:32.637 -> load 0x4010f000, len 1392, room 16
    12:34:32.637 -> tail 0
    12:34:32.637 -> chksum 0xd0
    12:34:32.637 -> csum 0xd0
    12:34:32.637 -> v3d128e5c
    12:34:32.637 -> ~ld
  • #2
    Gienek
    Level 37  
    To jest klon WeMos D1 mini - 4MB
  • #3
    shel82
    Level 18  
    Gienek wrote:
    To jest klon WeMos D1 mini - 4MB


    Ok, pytanie więc jaki firmware i od czego tam wgrać?
  • Helpful post
    #4
    Gienek
    Level 37  
    Zależy co chcesz budować na tym module.
    Przykładowo do sterowania wyświetlaczem kolorowym:
    Code:
    The WeMos D1 mini module included in this kit has an embedded 4MB SPI flash memory. 3MB of that will be reserved to host a SPIFFS file system. If you select the correct board in the IDE the flash mode and flash size settings should get auto-configured. Verify the settings are as follows:
    
    in Tools > Flash Size select "4M (3M SPIFFS)"
    The application might fail to transfer or fail to start if the flash options are not configured properly. Make sure the menu under Tools looks like this:

    Co to za wersja ESP8266 (ESP8266MOD)?
  • #5
    shel82
    Level 18  
    Próbuję uruchomić program dla czujnika pyłu (GP2Y1010AU0F), ale problem w tym że na rożnych płytkach wybieranych z menadżera cały czas mam błąd:
    Code:

    12:34:32.637 -> ets Jan 8 2013,rst cause:2, boot mode:(3,6)
    12:34:32.637 ->
    12:34:32.637 -> load 0x4010f000, len 1392, room 16
    12:34:32.637 -> tail 0
    12:34:32.637 -> chksum 0xd0
    12:34:32.637 -> csum 0xd0
    12:34:32.637 -> v3d128e5c
    12:34:32.637 -> ~ld

    domiemmam, że jest to problem FW, bo na innych działa ok?

    Code:

    #define MIN_VOLTAGE     600 // mv - próg dolnego zakresu napięcia dla braku pyłu
    #define VREF           5000 // mv - napięcie referencyjne komparatora
    #define PIN_LED           16 // numer pinu ILED (dla Wemos pin16 (GPIO16) - D0), a było 8 dla Arduino Uno
    #define PIN_ANALOG        8 // numer pinu AOUT (było 3)
    #define MAX_ITERS        10 // liczba pomiarow do sredniej
     
    int ADC_VALUE; // odczytana wartosc A0
    int ITER; // numer pomiaru
    float VOLTAGE; // wartosc napiecia
    float DUST; // wynik
    float AVG_DUST; // sredni wynik
     
    void setup(void)
    {
      //analogReference(INTERNAL);
     
      Serial.begin(9600);
     
      pinMode(PIN_LED, OUTPUT);
      digitalWrite(PIN_LED, LOW);
    }
     
    float computeDust()
    {
      // Blyskamy IR, czekamy 280ms, odczytujemy napiecie ADC
      digitalWrite(PIN_LED, HIGH);
      delayMicroseconds(280);
      ADC_VALUE = analogRead(PIN_ANALOG);
      digitalWrite(PIN_LED, LOW);
     
      // Przeliczamy na mV. Calosc mnozymy przez 11, poniewaz w module
      // zastosowano dzielinik napiecia 1k/10k
      VOLTAGE = (VREF / 1024.0) * ADC_VALUE;
     
      // Obliczamy zanieczyszczenie jesli zmierzone napiecie ponad prog
     
      if (VOLTAGE > MIN_VOLTAGE)
      {
        return (VOLTAGE - MIN_VOLTAGE) * 0.2;
      }
     
      return 0;
    }
     
    void loop(void)
    {
       AVG_DUST = 0;
       ITER = 0;
     
       while (ITER < MAX_ITERS)
       {
         DUST = computeDust();
         // Do sredniej liczmy tylko prawidlowe pomiary
         if (DUST > 0)
         {
           AVG_DUST += DUST;
           ITER++;
           delay(50);
         }     
       }
       
       AVG_DUST /= MAX_ITERS;
       
       Serial.print("D = ");
       Serial.print(AVG_DUST);
       Serial.println(" ug/m3");   
     
       delay(500);
    }


    i jeszcze ustawienia board:
    Co to za wersja ESP8266 (ESP8266MOD)?
  • #6
    khoam
    Level 41  
    shel82 wrote:
    Problem w tym, że nie wszystkie programy prawidłowo mi ta płytka obsługuje, np. sztandarowy "blink" działa ok, a inne nie i wyrzuca błędem:

    Problem może wynikać ze zbyt dużej prędkości przy ładowaniu programu do ESP (niektóre egzemplarze tak mają albo masz kiepskiej jakości kabel USB) i błędach we Flash. Zmniejsz prędkość z 921600 na niższą. Pozostałe parametry płytki ustaw zgodnie z postem #4.
  • #7
    shel82
    Level 18  
    khoam wrote:

    Problem może wynikać ze zbyt dużej prędkości przy ładowaniu programu do ESP (niektóre egzemplarze tak mają albo masz kiepskiej jakości kabel USB) i błędach we Flash. Zmniejsz prędkość z 921600 na niższą. Pozostałe parametry płytki ustaw zgodnie z postem #4.


    Chyba to nie to - też tak myślałem...
    Zmniejszyłem prędkość transmisji, ale obecne Arduino IDE v1.8.10 posiada inne ustawienia płytki:
    Co to za wersja ESP8266 (ESP8266MOD)?

    Sprawdziłem kilkanaście innych ustawień i dalej mam ten sam błąd:
    Code:
    load 0x4010f000, len 1392, room 16 
    
    tail 0
    chksum 0xd0
    csum 0xd0
    v3d128e5c
    ~ld
  • #8
    khoam
    Level 41  
    Ustaw "Erase Flash: All Flash Contents" oraz "Exceptions: Disabled" i spróbuj załadować program.
  • #9
    Gienek
    Level 37  
    Mnie się wydaje, że źle ustawiasz Flash Size. W moim poście (po angielsku) było o tym wspomniane. Tłumacząc to na polski:
    "....wybierz „4M (3M SPIFFS). Aplikacja może nie zostać przesłana lub nie uruchomi się, jeśli opcje flash nie zostaną poprawnie skonfigurowane...."
    Dlatego powinieneś u siebie ustawić opcję "4MB(FS:3MB OTA:~512kB)"
  • #10
    shel82
    Level 18  
    Pozmieniałem zgodnie z waszymi sugestiami na:
    Co to za wersja ESP8266 (ESP8266MOD)?

    i dalej problem występuje:
    Code:
    load 0x4010f000, len 1392, room 16 
    
    tail 0
    chksum 0xd0
    csum 0xd0
    v3d128e5c
    ~ld


    Wydaje mi się, że jest to problem z pamięcią samego ESP8266 lub też firmware, ale pytanie z #postu - co mu wgrać?
  • #11
    khoam
    Level 41  
    Miało być ""Exceptions: Disabled", na obrazku jest "Exceptions: Enabled" .
  • #12
    shel82
    Level 18  
    khoam wrote:
    Miało być ""Exceptions: Disabled", na obrazku jest "Exceptions: Enabled" .


    Próbowałem również z "Exceptions: Disabled" - efekt ten sam.
    Nie ten prt.sc. wkleiłem ;)
    Co to za wersja ESP8266 (ESP8266MOD)?
  • #13
    khoam
    Level 41  
    W takiej sytuacji spróbowałbym jeszcze wgrać firmware AT do tego ESP i sprawdził, czy działa. W moje stopce jest link do postu, który zawiera informacje o firmware AT oraz jest załączony program do wgrywania firmware (Flash Download Tool).
  • #14
    shel82
    Level 18  
    khoam wrote:
    W takiej sytuacji spróbowałbym jeszcze wgrać firmware AT do tego ESP i sprawdził, czy działa. W moje stopce jest link do postu, który zawiera informacje o firmware AT oraz jest załączony program do wgrywania firmware (Flash Download Tool).


    Wgrałem "AT_V1.1_on_ESP8266_NONOS_SDK_V1.5.4_official_espressif" - niby wszystko dział, normalnie odpowiada na komendy AT:
    Code:
    ready
    
    AT


    OK
    AT+GMR

    AT version:1.1.0.0(May 11 2016 18:09:56)
    SDK version:1.5.4(baaeaebb)
    compile time:May 20 2016 15:06:44
    OK


    Code:
     ets Jan  8 2013,rst cause:2, boot mode:(3,7)
    

    load 0x40100000, len 1856, room 16
    tail 0
    chksum 0x63
    load 0x3ffe8000, len 776, room 8
    tail 0
    chksum 0x02
    load 0x3ffe8310, len 552, room 8
    tail 0
    chksum 0x79
    csum 0x79

    2nd boot version : 1.5
      SPI Speed      : 40MHz
      SPI Mode       : DIO
      SPI Flash Size & Map: 32Mbit(512KB+512KB)
    jump to run user1 @ 1000

    ⸮⸮s⸮$⸮l⸮ ⸮$`⸮⸮{⸮l⸮l⸮ d`⸮⸮s⸮$ ⸮
    Ai-Thinker Technology Co. Ltd.

    ready


    Wgram "Blink" - działa, wgram program z post #5 - nie działa??
  • #15
    khoam
    Level 41  
    Jak podłączyłeś LED do GPIO 16 w tym module?
    Code: c
    Log in, to see the code
  • #16
    shel82
    Level 18  
    khoam wrote:
    Jak podłączyłeś LED do GPIO 16 w tym module?
    Code: c
    Log in, to see the code


    Tak:
    Co to za wersja ESP8266 (ESP8266MOD)?
  • #17
    khoam
    Level 41  
    Czy inne moduły ESP poprawnie działały z programem z postu #5 i w tej konfiguracji, jak powyżej?
  • #18
    shel82
    Level 18  
    khoam wrote:
    Czy inne moduły ESP poprawnie działały z programem z postu #5 i w tej konfiguracji, jak powyżej?


    Tak, ale kompilowane były pod starszą wersją Arduino IDE (także na innym PC) i tu chyba jest problem pogrzebany...

    Napisałem na piechotę inny kod i on działa:
    Code:
    int pin_pomiarowy = 0;
    
    int zasialnieLED = 4;

    float pomiar=0;
    float napiecie=0;
    float pyl=0;

    void setup(){
      Serial.begin(9600);
      pinMode(zasialnieLED, OUTPUT);
    }

    void loop(){
      digitalWrite(zasialnieLED,LOW);
      pomiar=analogRead(280);
      delayMicroseconds(40);
      digitalWrite(zasialnieLED,HIGH);
      delayMicroseconds(9680);
      napiecie=pomiar*(5.0/1024.0);
      pyl=170*napiecie-0.1;
      Serial.print("pyl = ");
      Serial.print(pyl);
      Serial.println(" ug/m3");
      delay(1000);
    }
  • #20
    crbjsfso
    Level 7  
    shel82 wrote:

    Code: c
    Log in, to see the code



    Właśnie walczę z tym samym kodem. Wykorzystałeś prawdopodobnie kod z tej strony, który jest stworzony dla Arduino i przede wszystkim tam są inne PINy i inny dzielnik napięcia, który jak widzę został całkowicie usunięty z Twojego kodu. Dla WEMOS D1 mini dzielnik napięcia jest zbudowany z rezystora 220k i 100k, więcej możesz przeczytać na tej stronie w sekcji "Wejścia analogowe". Dla PIN_LED bezpiecznie jest użyć: GPIO 4 (D2), 5 (D1), 12 (D6),13 (D7),14 (D5), jeśli nie planujesz używać w przyszłości na przykład MISO czy MOSI, ponieważ programujesz przez Arduino IDE:

    PIN WEMOSFUNKCJAPIN ESP-8266
    D2IO, SDAGPIO4
    D1IO, SCLGPIO5
    D6IO, MISOGPIO12
    D7IO, MOSIGPIO13
    D5IO, SCKGPIO14

    No i dobrać odpowiedni miernik napięcia, w moim przypadku poniższy kod działa w miarę prawidłowo, czyli generuje jakieś wyniki, ale jak zmienię dzielnik napięcia 3.2, czyli taki jaki wydaje mi się że powinien być dla WEMOS D1 mini to monitor portu szeregowego również sypie błędami. Nie korzystam z D1 i D2 ponieważ chcę podpiąć pod nie wyświetlacz oled i czujnik temperatury, ciśnienia i wilgotności.
    Code: c
    Log in, to see the code
    Wydaje mi się, że problem leży w samym kodzie.
  • #21
    pasiu76
    Level 2  
    Witm.
    U mnie na tym układzie mam web serwer i program sie wgrywa, ale nie mogę zmienic nazwy sieci - zostaje nazwa z kostki :D