» »

ESP8266 ESP-12E (NodeMCU 1.0)

ESP8266 ESP-12E (NodeMCU 1.0)

Oldi ::

Dobil sem tole in sem kar prijetno presenečen. Tule je opis zadeve in kako začeti. Placa za kodo in podatke je obilo.
En svoj projekt sem v enem dnevu prestavil iz Unota z W5100, LCD-jem in IR sprejemnikom na to zadevo in dela.

Zataknilo se je pri LCD modulu, ki naj bi deloval na 3V, standardni I2C LCD deluje. Imam enega ST7032i, ki je zelo širokokoten, deluje od 3,2V naprej z optimalnim (softversko nastavljivim, od napajanja odvisnim kontrastom), a ga ne morem oživeti, na Unotu lepo dela z original knjižnico.
Za ESP sem v driverju popravil tile dve vrstici
vrstica 32 zakomentiral //#include "avr/pgmspace.h"
Vrstica 91 dodal parametra Wire.begin(0, 2); //nastavi CDA in SCL na pina 3 in 4 na modulu oziroma GPIO0 in GPIO2
Ima kdo še kako idejo, morda bi bil pa čas za TFT ILI9341 http://www.nihamkin.com/2016/03/04/conn...
  • spremenil: Oldi ()

Oldi ::

Po defoltu se mi modul postavi tudi kot dostopna točka z SSID "DoitWiFi". Tega se rešiš z WiFi.mode(WIFI_STA);, komando sem dal pre WiFi.begin(..); Pred tem mi je včasih izpustil tudi po 20 UDP paketov zaporedoma (UDP paketi mi letijo v razmaku slabe 3s) po izklopu AP pa redko kdaj katerega izpusti. Z delujočim AP se mi velikokrat ni hotel povezati na moj router, imel sem občitek, da mora biti kake pol minute odkonenktan. Sedaj se prijavlja tudi če samo za sekundo prekinem napajanje. Poraba je padla in sedaj niha med 30 in 80mA

dc10 ::

Meni je pri senzorju BME280 pomagalo to, da sem ga dal na pina 6 (sda) in 5(scl), ter spremenil na Wire.begin(D6, D5);, ker (0,2) nikakor ni prepoznal, imam pa tudi Nodemcu V3..:D

lp

Oldi ::

Dela, od prve, res hvala. Signala sta na osciloskopu zelo lepa, v prejšnji konfiguraciji pa je bilo vidno, da se mešata 2 signala, tudi logična 1 ni bila na 3,3V, ampak okrog 4V.
Mimogrede, LCD modul ima pri napajanju 3,3V optimalni kontrast pri cca 60 od največ 63, se pravi lcd.setContrast(60);
Izgleda, da vsaj zadnja verzija Arduino IDE in plugina za ESP sprejme kot argumente za pine cifro X ali DX, če daš cifro X, je to DIOX, če daš DX je pa to pin na modulu.

Zgodovina sprememb…

  • spremenil: Oldi ()

dc10 ::

Glavno da ti dela...:D
Povej, si kaj testiral stabilnost nodemcu.... meni se odlično poveže in vse, potem pa čez nekaj minut tema, ni več dostopen, dokler ga ne resetiram...
Kateri firmware imaš na ESP8266 ESP-12E?

lp

Oldi ::

Zadevica mi pretežno dela kot sprejemnik UDP paketkov s podatki o temperaturah v hišni avtomatizaciji, ki jih izpisujem na LCD http://www.podsvojostreho.net/forum/vie...
Zadeva mi je v parih dneh zablokirala samo enkrat, ko sem z daljincem menjal IP iz katerega sprejema podatke. Je pa čudno, da včasih izpusti večino paketov, sploh pri slabem signalu, drugič pa sprejme praktično vse. Živim na vasi, WiFi kanal je prost, AP neobremenjen, RSSI mi kaže cca -65, pa gre včasih 90% paketov v maloro.
UDP prek WiFi-ja se mi zdi že v osnovi triki zadeva.
Do FWja še nisem prišel, kako to najhitreje pogledam in kaj in kako naj naložim?

Zgodovina sprememb…

  • spremenil: Oldi ()

          ::

Jaz imam kup teh modulov, uporabljam jih tudi z displeji. Ko pridem domov, lahko pogledam, katero knjižnico in model displeja uporabljam. Sam nameravam zadeve uporabiti kot sobne termometre, ki prikazujejo temperaturo in čas, temperaturo in vlago pa pošiljajo preko WiFija sistemu ogrevanja. Pri modulih sem naletel na težavo, da so se pri malo daljšem programu obešali. Če sem jih imel v Arduino IDEju priklopljene na seral monitor, se je celo izpisal nek exception. Firmwer imam tisti, ki se naloži iz Arduino IDEja.

Oldi ::

To glede exceptiona je pa uporabna informacija, na kateri bitni hitrosti si imel COMport. Meni nekaj izpisuje po restartu vendar ker je napačen bitrejt, se ne vidi kaj.
Moja ekvivalentna koda v Unotu obsega 75% fleša.
@kamikaze5 Kako komuniciraš z glavnim računalnikom, UDP ali pa imaš vzpostavljeno TCP povezavo. Jaz take info po UTP pošiljam po UDP (W5100 shield) in imam zelo dobre izkušne, z WiFijem pa še nimam dovolj izkušen.

dc10 ::

@Oldi - z neta sem potegnil program Esplorer, preko katerega lahko vidiš verzijo firmwarea, vendar mi v začetku to nikakor ni uspelo. Nato sem na netu našel firmware v 0.96, ki sem ga flešal v moj esp, od takrat naprej mi Esplorer pokaže verzijo firmwarea.... pa sedaj mi tudi že cca. 2 uri deluje zadeva brez kakšne prekinitve, sem sicer sedaj tudi dal napajanje na VIN pin (5V), mogoče je tudi to kaj pripomoglo, ker sem ga prej napajal kar preko USB vhoda z 5V 2A napajalnikom...

Aja, sem pozabil, sem pogledal debato na forumu podsvojostreho, super projekt, skupaj z uporabnikom FX6300b tudi razvijava podobno zadevo (programer je sicer on, jaz sem bolj slab v tem... ;-)), samo zaenkrat sva omejena samo na solarno ogrevanje sanitarne vode v bojlerju od toplotne črpalke...https://slo-tech.com/forum/t672559/p521...

lp

Zgodovina sprememb…

  • spremenilo: dc10 ()

          ::

Jaz na glavnem računalniku uporabljam GlassFish za strežnik, s katerim komuniciram preko JAX-WS (naprave, kjer teče SW v Javi) ali preko servleta (preproste naprave, ESP, Android, Arduino, ...). Servletu kar v URLju podam vse parametre, odziv pa vračam kot text/plain.

Oldi ::

Meni ESPlorer javi tole
Communication with MCU..Got answer! Communication with MCU established.
AutoDetect firmware...

Can't autodetect firmware, because proper answer not received (may be unknown firmware).
Please, reset module or continue.

Moj zadeva je stabilna tudi cel dan, zašteka pa, ko kaj delam z daljincem, pade v reset.

Dokler mi zadeva dela, nimam kakega posebnega veselja po menjavi FW-ja

Zgodovina sprememb…

  • spremenil: Oldi ()

          ::

Jaz sem svoje ESPje flashal iz Arduino IDEja (z naloženimi ustreznimi dodatki), in jih od tam tudi programiram.

Oldi ::

Kako flešaš v Arduino IDE, je to Tools - Burn Bootloader? Sem probal pritisnit brez modula in direkt štarta, brez izbire verzije.
Ko iščem po netu se ne znajdem, toliko enih verzij

          ::

jaz sem delal po tem postopku.

FX6300B ::

to kar je linkal kamikaze5 preverjeno deluje: :D programiraš isto ko arduino, s tem da lahko uporabljaš še neke dodatne knjižnice ki so že vključene notri..
May the force be with you!

          ::

Nekatere knjižnice delujejo že Arduinove, za precej ostalih pa se dobijo ustrezni ekvivalenti.

Še eno vprašanje, če mogoče kdo ve: pri enem projektu na Arduino Mega potrebujem 4 arraye, vsak po 478 floatov. Če jih definiram kot arraye, mi skupaj z nekaj ostalimi (nujno potrebnimi) globalnimi spremenljivkami to porabi skoraj ves spomin za spremenljivke. IDE javlja, da je programski spomin malo zaseden. Ali kdo ve, kaj bi bilo, če bi namesto arraya naredil dinamično povezan seznam?

FX6300B ::

zakaj kakšen projekt pa to delaš, ker 4 x 478 floatov je ogromno

imaš kakšno možnost da jih shraniš raje v eeprom?
May the force be with you!

Zgodovina sprememb…

  • spremenil: FX6300B ()

          ::

Na displayu s 480 stolpci rišem graf štirih temperatur. Graf sem si zamislil kot v task managerju, kjer imaš zadnje vrednosti na skrajni desni, pretekle vrednosti pa se pomikajo proti levi.

Ravno sedaj mi je prišlo na pamet, da ne bom več shranjeval vseh temperatur (4xfloat) ampak samo vrednosti (lokacija pixla), ki jih moram izrisati (4*byte). Tako se bo količina podatkov, ki jih moram pomniti, zmanjšala na četrtino (1 float zasede 4 byte).

Eeprom najbrž ni primeren za take zadeve, saj imam refresh rate 30 sekund.

Zgodovina sprememb…

FX6300B ::

če imaš refresh na vsake 30s potem raje ne , ker ima določeno št zapisov potem pa crkne, drugače graf nujno rabiš ravno na displayu, lahko narediš tudi preko thinkspeaka pa imaš potem na internetu...
May the force be with you!

          ::

Graf potrbujem na sami napravi, ki jo krmilim. Saj ideja s shranjevanjem bytov (konkretna y pozicija na grafu) mi bo prinesla 4-krat manj podatkov.

damo1023 ::

Temperature ne shranjuj v float, ampak v char oz. integer (tu lahko shranjuješ temperatura*10 oz. *100 in imaš še eno ali dve decimalke. Jaz nikdar ne shranjujem floatov.

Oldi ::

Če zapisuješ v EEPROM vsak podatek v naslednjo lokacijo (z izpisom na display se pa pomikaš po EEPROMU), pride vsaka lokacija na vrsto vsake 4 ure, kar je 2000 na leto. Ko kaj izklapljaš podatki ostanejo in je graf vedno cel. Sam sicer to delam na 6 minut in gre brez problema, če po vpisu lokacije delaš kaj drugega kot vpisuješ novo lokacijo, ti ne kuri procesnega časa.

Še vedno ne vem, kako v Arduino IDE zamenjati FW na modulu, okolje sem vzpostavil po prvi metodi.

Oldi ::

Ali je tole res?
Amir Avni Mod Joe o 8 months ago
The Arduino IDE Compiles the code into a NEW binary firmware using the official ESP8266 SDK and then flash it to the ESP8266.
It has nothing to do with the nodeMCU. The NodeMCU is one single firmware which supports script language and file-system. With the nodeMCU you never really compile anything after flashing the firmware once.
If you had the nodeMCU firmware on the ESP8266 and then you used the Arduino IDE, the new code you wrote will REPLACE the nodemcu firmware

Vedno manj razumem. Čemu je potem na modulu FLASH tipka, če Arduino IDE lahko prefleša modul brez nje?

Zgodovina sprememb…

  • spremenil: Oldi ()

Oldi ::

Ali je komu ratalo kontrolirano uporabljati wdt, modul ga ima v OS in če se arduino koda zašteka, naj bi resetiral.
Meni pade v reset, če uporabljam IRremote, vendar se WiFi po tem nikoli ne skonekta, enako je po naložitvi novega SWja. Rešitev je ESP.restart(); evo del mojega setupa
  uint8_t n = 0;
  lcd.setCursor(0, 1);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    n++;
    if (n == 10)
      ESP.restart();
    lcd.print(".");   
    Serial.print(".");
  }

Po ESP.restart(); se mi vedno poveže

          ::

Oldi je izjavil:

Ali je tole res?
Amir Avni Mod Joe o 8 months ago
The Arduino IDE Compiles the code into a NEW binary firmware using the official ESP8266 SDK and then flash it to the ESP8266.
It has nothing to do with the nodeMCU. The NodeMCU is one single firmware which supports script language and file-system. With the nodeMCU you never really compile anything after flashing the firmware once.
If you had the nodeMCU firmware on the ESP8266 and then you used the Arduino IDE, the new code you wrote will REPLACE the nodemcu firmware

Vedno manj razumem. Čemu je potem na modulu FLASH tipka, če Arduino IDE lahko prefleša modul brez nje?


Ja, jaz sem zadevo razumel tako, da če ESP programiraš iz Arduino IDE-ja, potem tvoja koda prepiše tisti nodeMCU.

          ::

damo1023 je izjavil:

Temperature ne shranjuj v float, ampak v char oz. integer (tu lahko shranjuješ temperatura*10 oz. *100 in imaš še eno ali dve decimalke. Jaz nikdar ne shranjujem floatov.


Zadevo sem rešil tako, da temperature shranjujem v byte. Shranim pa y koordinato pixla. Višino grafa sem prilagodil na 256 pixlov. Display jih ima 320, preostanek sem uporabil za prikaz ostalih informacij.
Se vidi, da sem na programiranje krmilnikov presedlal iz višjenivojskih jezikov, kjer take optimizacije niso potrebne :-).

FX6300B ::

          je izjavil:

Oldi je izjavil:

Ali je tole res?
Amir Avni Mod Joe o 8 months ago
The Arduino IDE Compiles the code into a NEW binary firmware using the official ESP8266 SDK and then flash it to the ESP8266.
It has nothing to do with the nodeMCU. The NodeMCU is one single firmware which supports script language and file-system. With the nodeMCU you never really compile anything after flashing the firmware once.
If you had the nodeMCU firmware on the ESP8266 and then you used the Arduino IDE, the new code you wrote will REPLACE the nodemcu firmware

Vedno manj razumem. Čemu je potem na modulu FLASH tipka, če Arduino IDE lahko prefleša modul brez nje?


Ja, jaz sem zadevo razumel tako, da če ESP programiraš iz Arduino IDE-ja, potem tvoja koda prepiše tisti nodeMCU.


saj dejansko ga , če hočeš potem spet nodemcu uporabljat moraš spet flashati nodemcu firmware..
May the force be with you!

          ::

Ja, najbrž, ampak meni nodemcu sploh ni bil všeč. Se pa nekaj gram z ESP Easy, to pa je program, napisan za Arduini IDE (torej tudi prepiše originalni firmver), ki pa ga nato konfiguriraš preko weba. Pozna kar nekaj periferije.

Oldi ::

Pa sem le našel rešitev za krahiranje modulčka ob vsaki cca tretji komandi daljinca
Problem: https://github.com/esp8266/Arduino/issu...
Delujoča knjižnica: https://github.com/alexmoz2016/IRremote...
Ima pa 5 dni stara verzija te knjižnice še vedno isto napako. Težko je to razumeti.

Glede povezovanja na AP se mi po nalaganju SWja še vedno obeša, kljub ESP.restart();

Oldi ::

Kateri modulček bi bil optimalen za krmiljenje LED luči, napajanje bi bilo 3,3V, nekaj več o ideji tule

dc10 ::

Jaz imam na nodemcu v3 esp8266-12E povezan BME280 senzor in sem dodal v setup tisti del kode, ki si jo objavil in mi je sedaj delal brez prekinitve 2 dni in pol, danes zjutraj ob 08.36 pa se je očitno spet "obesil", ker mi več ne pošilja podatkov na thingspeak.... ampak, če ga pingam, mi kaže, da je prisoten na omrežju, tudi na routerju ga vidim, tako da mi sedaj ni jasno, kaj to pomeni...

lp

Oldi ::

Si probal tole https://github.com/esp8266/Arduino/issu...

Glede modulčkov se pa ogrevam za ESP201 http://blog.squix.org/2015/02/esp8266-e...
Zunanja antena bi v kaki dozi pokriti s kovinskim reflektorjem prav prišla

Zgodovina sprememb…

  • spremenil: Oldi ()

Oldi ::

Glede obešanja bi bil po moje edino zveličaven hardverski WDT, ki bi ga hranil s potrditvijo sprejema podatka s strani strežnika (centralne enote, kamor podatki letijo). Ko podatka pol minute ni, se naredi reset, ki se samodejno ponavlja tudi če modul ne zaživi.
Poleg ESP.restart() sicer obstaja tudi ESP.reset(), ki pa naj ne bi bil tako zanesljiv, kot restart.
Žal po fleširanju nobeden od njih ne pomaga, meni se praktično nikoli ne poveže, vedno moram izklopiti napajanje ali pritisniti Reset tipko

dc10 ::

A misliš da bi to pomagalo? Če prav razumem kodo, se bo esp resetiral vsakih 30 sekund, verjetno se lahko tudi nastavi poljuben čas...
Pri meni je zanimivo to, da je esp online, povezan na moje omrežje, lahko ga pingam in deluje wifi, tudi na routerju ga vidim, samo ne pošilja podatkov na thingpeak.... imam tudi web server, ki se seveda tudi ne odziva, odkler ga ne izklopim iz elektrike oz. naredim reset s tipko.:|

Oldi ::

Nisi me razumel, vsakič, ko pride potrditev sprejema podatka s strani strežnika (centralne enote, kamor podatki letijo), se hardverski WDT resetira in do reseta ne prihaja. Šele če 30s ni bilo potrditve, pride do reseta in 30s začne teči od nule. Recimo tale ki je 5€ ali pa en CMOS 40106 in ene 10 diskretnih komponent.

dc10 ::

Aha, sedaj mi je jasno ja.

lp

Oldi ::

dc10 je izjavil:

Jaz imam na nodemcu v3 esp8266-12E povezan BME280 senzor in sem dodal v setup tisti del kode, ki si jo objavil in mi je sedaj delal brez prekinitve 2 dni in pol, danes zjutraj ob 08.36 pa se je očitno spet "obesil", ker mi več ne pošilja podatkov na thingspeak.... ampak, če ga pingam, mi kaže, da je prisoten na omrežju, tudi na routerju ga vidim, tako da mi sedaj ni jasno, kaj to pomeni...


Mene je bilo strah, da se bo TCP/IP seja (povezava server strežnik) rušila, zato sem šel na UDP, imam pa vse žično in dela u nulo. Pri WiFi se pa včasih izgubi tudi več kot 95% paketov.

TCP/IP uporabljam samo ko ročno nekaj nastavljam.

Zgodovina sprememb…

  • spremenil: Oldi ()

Oldi ::

@dc10 Meni UDP read z izpisom na LCD dela že 7 dni brez restarta. Ti imaš verjetno TCP sejo, ki naj bi se rada rušila.
Ali imaš kake izkušnje s temle
Glede modulčkov se pa ogrevam za ESP201 http://blog.squix.org/2015/02/esp8266-e...
Zunanja antena bi v kaki dozi pokriti s kovinskim reflektorjem prav prišla

dc10 ::

Glede esp201 nimam izkušenj...

Sam pa sedaj ugotavljam, da mi v bistvu moj nodemcu v3 normalno pošilja podatke na thingspeak, samo webserver se vsake tolko cajta nekaj zaj... potem pa čez nekaj ur spet normalno dela... tako da je verjeto kaj v zvezi z webserverjem krivo, da mi zašteka.:|

Kaj pa ESP32, ta bi naj bil zelo obetaven, ima še BT4.2, samo je še malo predrag...:)

Oldi ::

Za moje potrebe, je 8266 zadosti, pa še preveč zelena platforma je na Arduino IDE.

Ali si razmišljal o pošiljanju podatkov prek UDP paketov. Na telefončku lahko vedno spremljaš, kaj se dogaja, ziher je kaka aplikacija, ki bo rezultate prikazovala na custom način. Z avtorjem Arduino Total Control-a sva nekoliko na vezi in dela na UDP, TCP različico pa precej uporabljam.

dc10 ::

Ne nisem še razmišljal o UDP prenosu, je verjetno potrebno kodo za esp8266 prilagodit ali kako?

Oldi ::

A sem pozabil povedati, da delam z UDP broadcastom, moduli vsakih par sek. bruhajo reporte merjenj, kdor jih želi sprejeti pa posluša na izbranem portu. Uporabljam 2 porta, enega za reporte merjenj, drugega za log zapise. Skratka nobene seje, konektanja.... in prek UTPja se mi še nikoli ni nič zaštekalo. Z ESP zaenkrat samo poslušam reporte meritev selektivno po IPjih. Meni je to super rešitev.

dc10 ::

Ja, to je pa zelo zanimivo...maš mogoče kak link do kakšnega primera...

lp

Oldi ::

V knjižnici Ethernet za W5100 in tudi ESP8266 imaš primer UDPSendReceiveString.ino ki vse pove. Lahko ti pa pošljem kak moj sw s funkcijami, ki poenostavijo zadeve.

Zgodovina sprememb…

  • spremenil: Oldi ()

Oldi ::

//deklaracije
IPAddress broadcastIP(255, 255, 255, 255);
EthernetUDP Udp;
//funkciji
void UDPReport(char *str){  //char tekst[80]){

        Udp.beginPacket(broadcastIP, UDP_ReportPort);
        Udp.write(str);
        Udp.endPacket();
}

void UDPLogWrite(String tekst){
  if (JeUDPlog){
    Udp.beginPacket(broadcastIP, UDP_LogPort);
    char charBuf[80];
    tekst.toCharArray(charBuf,80);
    Udp.write(charBuf);
    Udp.endPacket();
  }
}

//v setupu pa
Ethernet.begin(mac, ip);
  server.begin(); //tole je gotovo potrebno za TCP
  Udp.begin(UDP_ReportPort); //Inicializira UDP brez tega ne dela UDP Send. Port (UDP_ReportPort) je vazen za monitorUDP, na tem portu poslusa druge Arduinote in kaj porabi

//koda za poslat dnevni graf s podatki iz EEPROMA na 6 minut ena vrednost
if (secPoMin6 > 0){ //Vsakih 6 minut poslje grafe
      //if (ura8bit == 199){  //Enkrat dnevno poslje grafe. secPoMin6 se spreminja vsakih 6 minut, da se vpisujejo grafi, ob polnoci pa se ta spremenljivka izkoristi za posiljanje grafov vsako sekundo
      Udp.beginPacket(broadcastIP, UDP_LogPort);
      Udp.write("#K");
      Udp.write(secPoMin6); //tole dvoje je header
      uint16_t EEStart = EE_GRAFI + 240*(secPoMin6-1);
      for (uint8_t n=0; n < 240; n++){
        Udp.write(char(EEPROM.read(EEStart+n)));
      }
      Udp.endPacket();
      secPoMin6++;
    }

Zgodovina sprememb…

  • spremenil: Oldi ()

dc10 ::

Ja hvala, bom malo pogledal...
lp


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Domači projekt

Oddelek: Elektrotehnika in elektronika
426635 (3396) poweroff
»

kako logirat delovanje recimo peči ?

Oddelek: Elektrotehnika in elektronika
8908 (628) #000000
»

Arduino Mega + esp8266

Oddelek: Elektrotehnika in elektronika
143489 (3248) FX6300B
»

Nakup WiFi senzorja vlažnosti.

Oddelek: Kaj kupiti
162762 (1941)          
»

Arduino na baterije 16850

Oddelek: Elektrotehnika in elektronika
111953 (1607)          

Več podobnih tem