Hirdetés
- Tudjuk, de nem tesszük: a magyarok többsége nem törődik adatai védelmével
- Mesébe illő csodakábelt tervezett a GeForce-ok leégése ellen a Segotep?
- Irodát kért, de gyárat kapott Elon Musk a Samsungtól
- Nyílt forráskódú lett a legegyszerűbben használható AI tartalomgeneráló
- Hazavághatja a MicroSD memóriakártyák piacát a Biwin-féle Mini SSD
- SSD kibeszélő
- Steam Deck
- Rogyásig pakolható a Cooler Master Cosmos szériás csúcsháza
- Milyen billentyűzetet vegyek?
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Azonnali alaplapos kérdések órája
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- TCL LCD és LED TV-k
- Milyen scannert vegyek?
- Házimozi haladó szinten
-
PROHARDVER!
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
tvamos
nagyúr
Hello!
Most ilyen battery shieldet használok, Wemos D1 mini pro-val. Van ennél valami jobb ESP-s megoldás? Nem tetszik, hogy két USB van, az egyikről tölt, de nem látja a gép a Wemos-t, a másikon megy a kommunikáció, de nem megy a töltés. -
Janos250
őstag
Olyan ESP32-t vegyél, amin van USB port. A maiak 99 %-a olyan.
Semmi nem kell hozzá, csak USB kábel.
A WS2812-höz való csatlakoztatáshoz én ilyesmi kábeleket használok:
link
Táphoz ilyet, de persze bármi jó:
link
meg ilyet:
link
Meg ez is jól jön:
link
Ha komolyabban akarsz majd a későbbiekben az Arduinoval foglalkozni, akkor egy ilyen is nagyon jól jön:
link
Egy ilyen is nagyon hasznos alkatrészek teszteléséhez:
link
Itt jobban látszik néhány példa azokból, amiket, tud. Nem csak tarnsistor tester, hanem szinte mindent, aminek nincs háromnál több lába. Bedugod, és megkeresi saját maga, hogy mi az, kirajzolja a bekötését, kiméri a paramétereit.
linkMilyen oldalt javasolok? Hát ez egy nehéz kérdés. Az Arduino rendszer a C++ nyelvet ismeri, a szabad fordítóval fordít. Az Arduino annyival több mint a sima C++, hogy bizonyos függvények minden kontroller típushoz kötelezően definiálva vannak, ebből adódik, hogy a specialitásokat nem használó programok bármely Arduino kompatibilis lapon ugyanúgy futnak.
Na, ennyi olvasnivalót mára.
-
válasz
Janos250
#7845
üzenetére
Köszönöm a segítségeteket.
Kb 20 perc alatt több infót tudtam és értettem meg, mint amit az elmúlt 2-3 napban esténként próbáltam összeszedni.A javaslatnak megfelelően akkor ESP32 és WS2812 kombót fogom kipróbálni.
Ahogy néztem az ESP32 az ESP8266 modernebb változata. Ha jól gondolom, akkor az ESP8266-ra építtet alkalmazások működnek ESP32-vel is.ESP32-vel viszonylag kevés ledes projektet láttam.
Az ESP32-höz kell velemi spéci kábel, vagy programozó áramkör, vagy csak rádugom USB-re és feltolom rá az elkészült programot?Milyen oldalt javasoltok, az alapok megismeréséhez?
-
Teasüti
nagyúr
Uno + ESP8266 felállásban nem tudok segíteni, de a többiek erről úgy 3,6 másodperc alatt fognak lebeszélni.
Az ESP is egy mikrokontroller, amit ugyanazon a nyelven, ugyanabban az Arduino IDE-ben lehet programozni.
Csak fejlettebb (lásd wifi).Az, hogy milyen szalag kell neked, azt te döntöd el. Vannak érvek mindkettő mellett és ellen is.
Az egyszerű megoldás az analóg szalag mind programozás, mind üzemeltetés (és megbízhatóság*) szempontjából. És olcsó is.Digitális szalag az drágább, bonyolultabb programozni, viszont egyszerűbb bekötni és mehet ugyanarról a tápról, mint a vezérlő. (Persze a tápot méretezni kell, és érdemes berakni a vezérlő elé egy diódát, hogy ha gépre kötöd, akkor a szalag véletlenül se tudja meghúzni az usb portot.)
Az egysávos adatbusszal rendelkezőknek megvan az a hátránya, hogy ha az egyik pixel vezérlőhibás lesz, akkor az utána következő pixelek is szemetelnek.
A szalagok gyártási minősége elég nagy szórást mutat. Simán előfordulhat, hogy egy 5 méteres szalagon az első bekapcsolásra lesznek hibás pixelek, vagy rövid időn belül megy tönkre egy-egy. Persze ha szerencsés vagy, akkor hosszú ideig nincs rá gond.*Egy pixel ha tönkremegy - vagy egy színkomponense -, nincs hatással a többire.
-
válasz
Teasüti
#7832
üzenetére
ÁÁÁ, köszi, igen, ezt benéztem. Bocsi.
ESP8266 - ez a wifi modul, futtat egy http szervert a színbeállításokhoz
Arduino Uno - ő vezérli a ledeket:
- a szín beállításokat az ESP8266 kapja
- fényerőt nyomogombokkal állítomSzalagonként 3 db IRL540N (mert ezt találtam a hestore.hu-n) pedig a ledeket hajtja.
A ledszalag pedig WS2812. Ha jól értelmeztem, akkor ezt led chipenként lehet címezni, nekem biztos hogy kell ez?1 led szaleg megy az asztal aljára, 1 az asztallap széléhez a fal mellé vagy a monitor mögé, 1 pedig asztali lámpa és headset tartó (plexiből hajtogatott izébigyó) megvilágítása lesz. (bár ha nagyon belejövök csinálok egy infinity mirror kreációt is egy negyedik szalagból, ugyanerről az arduino-ról)
Egyébként csak azért akarok Arduino-t mert látszólag nagyon népszerű most és sok leírás van hozzá. Az ESP32-ről nem tudom még micsoda.
A v-tac céget ajánlotta nekem a kollégám. Ezt néztem ki náluk, de a kép szerinte nem jó a leírás meg nem tartalmazza, hogy milyen a cucc:
[link] -
Teasüti
nagyúr
Csak egy gyors kérdés:
ESP32 dev board-on a 3V3 láb az a fesz. stab. IC bemenete (egyes helyeken Vin-ként hivatkoznak rá), vagy itt a stabilizált 3.3V jelenik meg? Le tudok venni innen 3.3V-ot, vagy ne erőlködjek? Szenzorhoz kéne, de 5V-os tápom van csak.
Nem aktuális. -
Janos250
őstag
Még egy kis kiegészítés:
"Van esetleg Arduino-hoz szimulátor?"
Nem tudom, lehet, hogy van, de az a lábak, prifériák kezelését biztosan nem tudja azokon a kontrollereken, amiket ma használunk.
"Elvileg van annyi analóg pin a cuccon, hogy akár egy negyedik szalagot is tudjak vezérelni."
Attól függ, milyet használsz. STM32-n, ESP32-n jóval több is, ha mindenképpen analóg megoldást keresel. WS2812-re digitális pin meg aztán végképp.
"Teszek majd MOSFETeket a szalagok meghajtásához, bár elvileg el kellene bírnia a kb 50cm-es darabokat."
Szerintem FET nélkül nem fogja elbírni az analóg ledet. -
Janos250
őstag
Az én kommentem:
Színenként és szalagonként kell egy-egy FET, tehát összességében egy tucat. Ehhez kell valami panel, doboz, miegymás.
A fényerőt vagy úgy állítod, hogy szaggatod a jelet (PWM), vagy a FET részleges nyitásával fűtesz.
Az okosotthon témában sok androidos vezérlő megoldás van rengeteg dologra, egy része egész szép, de én ezeket nem használom/tam. Én szeretek saját WiFi/html megoldást használni.
Ahogy én csinálnám:
WS2812 RGB led, 810 Ft/m, 30 led/m. Én pár hete még 600-ért vettem, szépen múködnek, elég gyorsan be is érkezett.
link
Külön madzag van a tápnak, és külön a vezérlésnek. Kódok küldésével adjuk meg, hogy melyik szín milyen erővel világítson. Ami kódot egyszer kiküldtünk, az a táp kikapcsolásáig él, nem kell frissítgetni, csak amikor változtatni akarunk.
A vezérléshez használt madzag 3.3V-al is hibamentesen működik. Tápnak 5V kell, de kevesebbel is elmegy. A tévedésből rákötött 9V-ot egyszer régebben még elviselte, de a mostanában véletlenül ráadott 12-t már rossz néven vette.
A neten vannak rá programok, Teasüti gyakorlatban alkalmazza őket. Én nem ezeket használtam, mert túlbonyolítottnak találtam, én saját magam írtam rá egyszerűbbeket, ESP32-re (én mostanában mindenre az ESP32-t használom, mert olcsó. 2 ezer Ft alatti összegért gyors, 2 magos, sok szolgáltatással felvértezett kontrollert kapunk)
A több led használata a legegyszerűbben úgy oldható meg, hogy a pin számot váltogatod, mert minden megoldásban úgyis van egy változó, ami a GPIO számot definiálja.
Előnye, hogy ha a későbbiekben variálgatni akarod (pl. folyamatosan , akár pixelenként változó szín, fényerő), nem kell hozzá semmi hardver módosítás, csupán szoftver, arra meg azt írtad, ismered a C-t.
Van persze, az a távirányítóval vezérelhető led szalag is, valahogy bizonyára azt is lehet valahogy Arduinoról vezérelni, de annak az ára is közel van a WS2812-höz.Még utólag: ha wifi is van a tervek között, akkor kizárólag ESP8266, vagy ESP32 a mai világban. A net tele van régi, ma már elavultnak számító, drága, bonyolult megoldásokkal régebbi kontrollerekre, de - szerintem - nem érdemes energiát pazarolni rájuk. A korszerűbb olcsóbb, és egyszerűbb.
-
-
Janos250
őstag
" Mondjuk lehet, hogy erre magában az ESP is elég"
Így igaz, és úgy egyszerűbb.
"első körben Arduinoval együtt képzeltem el."
Na, úgy már bonyolultabb!
Ahhoz, hogy az AT parancsokat fogadja az esp, kell fusson rajta valami program. Úgy tudom, gyárilag van rajta valami ilyesmi, de ha valaki már töltött fel rá valami mást...
Én az AT parancsokat soha nem próbáltam, mert csak az esp-re rakni a programot egyszerűbb.
Én a másik oldaláról fognám meg. Az esp-re program, ami figyel, és küldi a POST,GET-et, és soros porton küldi az UNO-ra, amit mindenképpen az UNO-n akarnék. -
Hello,
Sehol nem találok egyértelmű megoldást erre.
Van egy ESP8266-om, amit Arduinoval szeretnék összehozni, de
- soroson direktbe kötve PC-re nagyjbából közli, hogy ő mi
- Arduinoval összekötve már nem annyira (random karekterek jönnek, baudot persze jól állítottam be, amennyivel direktben ment az usb-soros átalakítóval, annyira - 115200)
- nem találok hozzá libraryt... mármint olyat nem, amivel az Arduinoról tudnék wifit használni, nem magában az ESP-t - létezik?Wifi kliensnek kellene, kb. annyival, hogy ha érzékel egy kapcsolót zárva, akkor küldjön egy GET vagy POST kérést. Mondjuk lehet, hogy erre magában az ESP is elég, de első körben Arduinoval együtt képzeltem el.
Köszi minden tippet

-
Janos250
őstag
Na, ez érdekes!

Azt nem mondanám, hogy tökéletesen megértettem, de mindenesetre ennyi pénzért (900 Ft) az NRF51 ami egy Cortex M0 mag + BT, az azért elég jó!
A MicroBittel nekem egyetlen bajom van: az ára. 4-5 ezer Ft.
Ennyi pénzért már az Orange pi sokkal többet tud.
Ez az NRF51 viszont érdekes lehet az okos otthon/miegymás témában.
Előnye mindenesetre, hogy ARM. A Cortexekből én az STM32 szériából használtam, amik szintén igen jók, de nekem a WiFi nagyon hiányzik belőlük.
Az ESP32 nem menő, csak olcsó. -
Janos250
őstag
válasz
Teasüti
#7805
üzenetére
"Hogy mi? Ezt most látom először.
Akkor ezért nem működik egy csomó RTOS parancs?
Itt is vmi jogosultsági rendszer van? Meg kell szerezni a root jogot, vagy mi a szösz?"
Csak a WDT regiszter írásához kell a jelszó, de azt a rendszer elvileg csinálja.
Tehát a hardver WDT etetése a leírás szerint így működik:#define TIMG_WDT_WKEY_VALUE 0x50D83AA1 // ez a "jelszó"
TIMERG0.wdt_wprotect=TIMG_WDT_WKEY_VALUE;
TIMERG0.wdt_feed=1;
TIMERG0.wdt_wprotect=0;Az esp_task_wdt_feed() meg az esp_task_wdt.h ban van, kifejtve meg a libesp32.a-ban, vagyis nem tudjuk, hogyan működik.
"Ezt a scheduler-t a mai napig nem értem."
Én sem!
Néztem régebben szkóppal: 1 millisec-enként szakít meg - ha nem fut a magon tőlem semmi - akkor kb 3 microsecre. Valamit az alatt a 3 alatt csinál, de nem tudom mit. A millist biztosan növelgeti szoftverből -
Teasüti
nagyúr
válasz
Janos250
#7784
üzenetére
A gazdi az, aki tudja a jelszót, ami valami 32 bites szám.
Hogy mi? Ezt most látom először.
Akkor ezért nem működik egy csomó RTOS parancs?
Itt is vmi jogosultsági rendszer van? Meg kell szerezni a root jogot, vagy mi a szösz?
Igen, a delay() alatt tud futni másik task, így nem hal éhen szegény kutyus, mert a scheduler eteti
Ezt a scheduler-t a mai napig nem értem. Elvileg úgy kéne működnie, hogy fix időszeletek szerint osztja el a cpu időt. Ha nem is adja át a token-t a task, az ideje lejártával kényszerítve kéne indulnia a következőnek.
Ehhez képest meg simán reset-el a wdt. Pff...
Persze a prioritás eredményezheti azt, hogy újra ugyanaz a task indul el. De a scheduler ettől még meg kellene, hogy szakítsa. ...És ilyen formán etetnie a wdt-t.igazából én sem teljesen értem, hogy miért nem futhatnak a többiek is, hiszen a loop prioritása is 1, meg Te is ugyanezt a prioritást adtad, de valahogy mégis megfogja a többit.
Amúgy azt lehet tudni, hogy 0-20 közt a magasabb vagy az alacsonyabb érték a nagyobb a prioritás?
Egyetlen egy youtube tutorial-ban találtam eddig utalást rá, de már régen volt.Az esp_task_wdt_feed() -et és az esp_task_wdt_delete() -et hiába teszed be, mert az csak arra a taskra hatásos, amibe betetted.
Jó tudni. Ezek szerint a wdt is egy task kell legyen. Hardveresen nem lehet figyelni a dinamikusan meghívott task-ok garmadáját. -
.DLL
veterán
Sziasztok!
Megjött Kínából a 900 Ft-os NRF51 modul, és egy kis átalakítással Drag&Drop programotható egy BBC Micro:Bit (# Microbit, Micro-bit, Micro bit) segítségével!

[video]
(Egy kis teszt progi ami gombnyomásra rádión (Nordic Gazell protocol) küld egy OK-t a vevő oldal pedig erre hármat villant.)A lényeg, ha Microbit-szerkesztőben írt programokat szeretnénk használni a kis modulon, akkor a második kvarcot el kell távolítani, mert az a 'Button B' bemenetre csatlakozik, ezen kívül az Accelerometer és a Magnetometer helyén üresen maradt interrupt bemeneteket a biztonság kedvéért lezártam 1-1 ellenállással, de nyilván ezeket a funkciókat ne is hívjuk meg.
Az eredeti Microbit-en az SWD port ki van vezetve két teszt pontra, ebből az SWDIO-ra menő vezeréket (nrf51822 chip 23-as lábához) meg kell szakítani, ezek után összeköthető a cél modul SWD pontjaival, és az interfész chip simán ráírja a bedobott hex fájlt.

Igazából csak érdekességként akartam ezt megosztani, tudom egy ESP32 sokkal menőbb, de talán valakinek ez is jól jöhet. (nekem, pl. bőven elég és egyszerűbb :D )
Egyébként van leírás a neten, hogy hogyan lehet ezt a modult Raspberry Pi segítségével programozni, ha valakinek már az adott, akkor ez is hasznos leírás. -
Janos250
őstag
Tudok olyan helyet, ahol nagyjából akkoriban törölték még a Neptunból is (oktatási adminisztrációs program) azt a választható tárgyat, aminek keretében PIC-kel olvastak egyszerűbb szenzorokat, vezéreltek mintaként ledeket, lámpákat, szervo és léptető motorokat.
"Erre csak a villamosmérnököknek van szüksége", mondták. Ma, ha egy mérésnél a készülék fűtését telefonról (ESP8266) vezérlik, és ott olvassák le az adatokat, arra, mint értelmetlen hibbant, különcködő ötletre tekintenek az intézménynél. Érdekes, hogy leginkább a tanítottak éreznek rá ennek az ízére. -
Janos250
őstag
válasz
Panhard
#7783
üzenetére
Tippek:
Gyanítom, hogy nem a várakozó task okozza a galibát, hanem valami másik, aki közben "nem jut szóhoz"
1. Próbáld meg a prioritást variálni, hogy amíg a függvényed fut, mások is szóhoz jussanak
2. tegyél be pl. vTaskDelay(20)-at, mert akkor is futhat más task is
3. ha végképp nem megy, akkor én kilépnék a taskból, majd újra be.A freeRTOS valahogy taskonként kezeli a WDT-t, ezt nem tudom hogy csinálja, de megoldja. A WDT-t lehetne közvetlen írással nullázni, de nem tudom, felborít-e valami mást a freeRTOS-ban
Egyébként az ESP32 kutyusa hardver szinten "idomítva van, hogy csak a gazditól fogadjon el kaját".
A gazdi az, aki tudja a jelszót, ami valami 32 bites szám. -
Panhard
tag
Sziasztok!
Tudtok abban segíteni, ki lehet-e kapcsolni ESP32-ben a task watchdog-ot? Vagy növelni az idejét? Van egy függvényem, ami egy webszerveren lévő php fájl válaszát várja és ez valamikor több mint 5mp, ilyenkor "Task watchdog got triggered." hibaüzenetet kapom.
Próbáltam az sdkconfig fájlban módosítani az értéket 5mp-ről magasabbra, (CONFIG_TASK_WDT_TIMEOUT_S=20) és próbáltam kikapcsolni is, (CONFIG_TASK_WDT=) de ez nem volt hatással rá. Ugyanúgy 5mp után aktiválódik.
Ha az arduino probramban beincludolom a "esp_task_wdt.h" fájlt, és használom az abban lévő függvényeket, esp_task_wdt_feed() , esp_task_wdt_delete(), azok sincsenek hatással rá. Tudtok valami megoldást? Előre is köszönöm. -
Janos250
őstag
válasz
Teasüti
#7779
üzenetére
Egy kis kiegészítés az ESP32 soros portjaihoz:
Van UART0, UART1,UART2
Mindháromnak van RXD,TXD,CTS,RTS, de DSR és DTR csak az UART0-nak. Én eddig még csak az RXD,TXD-t használtam.
Az ESP periféria kezelése kétféleképp történik:
1. "GPIO matrix":
Ezzel bármelyik periféria kapcsolható bármelyik lábhoz, egy un. GPIO matrixon keresztül. Ezt úgy kell elképzelni, mint pl. a klaviatúra mátrixát.
Tehát a mátrixnak vannak sorai, ami a perifériák jelei. Vannak oszlopai, ami a 34 láb ("GPIO pad"), amik sajnos nem folytonos számozásúak: (0-19, 21-23, 25-27, 32-39).
Ha a megfelelő jel és a láb (pad) kereszteződésébe teszel egy pöttyöt, akkor a jel és a láb hardveresen össze lesz kapcsolva.
2. "IO_MUX":
Ezzel 5 gyors jel (Ethernet, SDIO, SPI, JTAG, UART) közvetlenül (bypass) kapcsolható a lábakhoz, de itt előre definiált, hogy melyik jel melyik lábhoz kapcsolódik.
Ez gyors, mert elkerüli (bypass) a GPIO matrixot.Mi következik nekünk ebből az UARTokra vonatkozóan?
Ha az UARTok példányosításánal nem adunk meg lábat, akkor a gyors bypass szerinti láb rendelődik hozzá az alábbiak szerint:
U0TXD -> GPIO1
U0RXD -> GPIO3U1TXD -> GPI010
U1RXD -> GPIO9U2TXD -> GPI017
U2RXD -> GPI016
Ezzel a következő a bajunk:
A mai lapokon az ESP-WROOM-32 fémházas hibrid áramkör van (ne is vegyen senki meg olyat, amin nem ez van), tartalmazza többek között az ESP32-t és plusz memóriát.
Ennek a plusz memóriának a címzéséhez használja többek között a GPIO9-et, és a GPIO10-et.
Ezért az UART1 soros portot más lábakra kell rakni, a másik kettő meg maradhat a hardveres kiosztáson.
Ezért kell megadni a soros1-hez a felhasználni kívánt lábakat:
pl: Serial1.begin(57600, SERIAL_8N1, Serial1_RXPIN, Serial1_TXPIN) ; -
Teasüti
nagyúr
ESP32-n az USB a TX0 és RX0 portokra van kötve, vagy natív usb-ként kapcsolódik?
Másképp, használhatom a soros portot vagy az kell a számítógépes kapcsolathoz? -
Tankblock
aktív tag
válasz
Janos250
#7769
üzenetére
Hello,
Eagle-ben terveztem, most KiCad re szeretnék átnyergelni. Anno 5 Usd rendeltem 10 db 50x50 [mm] nyákot kifúrva, furatgalvanizálva, fekete színben fehér silk el. Másik gépemen kellene megnéznem, de ha jól rémlik talán a seedstudio volt. Átfutási idő 3-4 hét volt.
Mivel középsuli óta nem csináltam ilyet, nekem nagy élmény volt a tervezés. Vagy 4x áltam neki hogy beleférjek mindennel rendesen a méretezésbe, meg csináltam saját esp12 alkatrészt eagle ben... Ha lesz annyi feles időm szeretném Kicadet is kitanulni.
-
Janos250
őstag
válasz
Tankblock
#7763
üzenetére
Az RGB-s óra nekem is tetszik, de én ESP32-vel akarom megcsinálni.
Passzióból csináltam néhány féle módon az ESP32-re RGB led meghajtókat.
RMT-vel is párféleképpen, meg anélkül is, mert elég gyors a proci, ha mindkét core-t használjuk, simán szoftverből is megy, RMT nélkül is. -
Tankblock
aktív tag
válasz
Janos250
#7761
üzenetére
Hello,
Én most szívtam ESP8266 Arduino val feltettem 2.4.0 simát és nem ment pl NTPClient.....
2.4.0-rc2 már működik.....
Moindjuk a NTPClient 2.5.0 verziója is bugosnak bizonyult
megoldást a Github Issue olvasása adta mind 2 esetben...Van 60 RGBs óra projectem és írtam hozzá új animációt, utána meg nem akart menni az sem ami addig ment.
Szóval azt tanultam, újra és újra, (mint a német kollégáktól is) ami működik ahhoz NE nyúljak....
-
Janos250
őstag
Na, most üt meg a guta

Régebben többször használtam Sonoff basicet, semmi gond nem volt velük, símán mentek.
Már egy ideje nem foglalkoztam velük, most az ESP32-vel élvezkedek.
Jött egy kolléga, hogy tegyek fel neki a sonoffjára egy programot. Semmiség, mondom.
Felment, OK. De semmi életjel. Nem indul el, se wifi, se led, semmi. Serial monitorra azt írja, hogy busy. Fene a gusztusát. Próbáltam nem az USB-soros konverter tápjával, hanem erősebb táppal. Semmi. Másik sonoff. Semmi. Másik gép. Semmi. Az újhold a gond, vagy mi a fene lehet vele, gőzöm nincs. Pedig hány embernek dícsértem. Több embernek tanítottam meg a használatát. Most meg én képtelen vagyok használni.
-
helltp
aktív tag
válasz
Tankblock
#7751
üzenetére
és (#7752) Teasüti:
Nekem is úgy tűnik, hogy használhatjuk a speciális GPIO pineket is akármire, feltéve hogy a bootolás alatt biztosítani tudjuk a megfelelő jelszinteket. (Fentebb linkeltem a doksi megfelelő részét.) Így, hogy most gyakorlatilag egy dióda katódja van a boot alatt logikai magasat kívánó pinekre kötve, csak az mcu felé folyhat az áram (felhúzóellenálláson keresztül pl.) és így boot alatt magasan van a láb, és megfelelően bootol a cucc.
szerk.: ESP32 nincs épp kéznél, és így pont elég a GPIO szám a 8266-on is.
-
Teasüti
nagyúr
válasz
Tankblock
#7753
üzenetére
Jah bocs. Épp csak említetted, nem voltam alapos.

Nem értem hogy jön ide a reset. Nekem arra a funkcióra eddig éles használatban soha nem volt szükségem. Boot nálam bekapcsoláskor van. Amúgy meg a bootstrap lábakkal ESP32-nél nem tudsz reset-elni, arra az EN való.
Boot alatt nem kell buzerálni a gépet és elvileg mindennek mennie kell. -
Teasüti
nagyúr
válasz
Tankblock
#7751
üzenetére
Miért ne lehetne használni ezeket? Csak oda kell figyelni az alapértelmezett jelszintjükre boot alatt.
Nálam pl. az IO2 bemenetként funkcionál, ami alapállásban magas impedanciájú (nyitott áramkör, pl nyomógomb húzza földre) és így oda húzza a kontroller ahova akarja. Persze boot alatt nem nyomogatom.
IO15 nálam egy tranyó bázisára kapcsolódik, tökmindegy hova húzza, max felkapcsolja az adott áramkört arra az egy másodpercre.
IO12 meg egy MPU-6050 interrupt pin-re van kötve, nos ez meg elvileg semmit nem csinál, amíg fel nem ébresztik az I2C csatornán a modult. Bár nem tudom ez a port alapból lebeg-e a modulon, ezt még ki kell nyomoznom.)
IO0 meg egy kimenet lesz hasonlóan egy tranyóval, mindegy milyen szintet vesz fel boot-kor.
És ezzel lefoglalva az összes elérhető IO port az ESP32-n.
Kivéve persze a flash portjai, nem is értem azok miért vannak kivezetve.Szerintem nem kell félni ezektől, elég csak egy kis körültekintés.
A "leghülyebiztosabb", ha egy NO kapcsolóval bemenetként használjuk őket. -
Tankblock
aktív tag
hmm az nem biztps h jó lesz, mert a bootloadernek erről fogalma sincs....
És szeretne egy csomó mindent kitolni a UART on.....
Elvileg a GPIO2 csak HIGH lehet BOOTkor. SPI indításkor v a UART letöltéskor is. Ha a GPIO15 fent van akkor elméletileg nem nézi, hogy hol van, mert akkor SD kártyáról szeretne bootolni.
Ezt a lábat se használnám biztosan semmire sem.Ha jól emlékszem akkor a GPIO 0,2 lehet I2C re használni,
GPIO 4,5 12,13,14 szinte akármire és nincs több használható GPIO láb.Max mások megmondják h tévedtem.GPIO16 inkább a deepSleepre használandó, de én soha sem használtam még semmire sem.
Ha ennél több láb kell akkor GPIO extende IC kell. vagy másik uController --> ESP32
-
helltp
aktív tag
-
choco01
addikt
-
helltp
aktív tag
Sziasztok!
Boot problémám van az ESP8266 alapú Wemos D1 mini-vel. Ha a D4(GPIO2)csatlakoztatva van az áramkörhöz, akkor nem bootol rendesen, a beépített led folyamatsan világít, reset gombra nem reagál. Kicsit kerestem, és a D3(GPIO0) D4(GPIO2) 10k-val fel van húzva 3,3V-ra, a D8(GPIO15) földre van húzva 10k-val, annak ellenére, hogy ez az eszközön már alapból meg van csinálva.. Ha először kap tápot a d1 mini, és utána helyezem az áramkörbe, akkor rendesen működik. Valakinek valami tipp, hgy mit lehet ezzel kezdeni?
-
Janos250
őstag
válasz
choco01
#7719
üzenetére
Tapasztalatom szerint nincs felhasználás szempontjából lényegi különbség a különböző ESP32 panelek között, kivétel, ha nagyon régi.
ESP-WROOM-32 legyen rajta. Ez ugyanaz, ami korábban az ESP32S. USB szintén legyen rajta, amiről programozni is, tápolni is lehet. A többi szerintem mindegy.
Én ezekből használok/tam párat.
link -
Tankblock
aktív tag
válasz
choco01
#7722
üzenetére
Hello,
ESP32 van egy csomó Analog input, a kérdés, hogy hogyan is szeretnéd használni. Nem kell hozzá multiplexer szerintem.
Ha egyszerűen csak digitális GPIO pint akarsz használni akkor az 5 [V] TTL logika szerintem itt még egy egyszerű elleállás osztóval is megoldható.
milyen táppal lesz meghajtva ha egyszerű akksi akkor javaslom olvass utána a FET eknek és a deep sleep témának, különben gyorsan tud meríteni az aksit....,
ja és akkor belinkelt mellé kell még venni töltő áramkört is....
-
Tankblock
aktív tag
válasz
choco01
#7719
üzenetére
Hello,
Leírásban ott a válasz:
AO analog output can be connected to the microcontroller AD port to detect the size of the drops in the above rainfall. --> Analóg csatornán ad valamekkora arányos jelet
DO TTL digital outputs can also be connected to the microcontroller detects whether there is rain.
--> digitális, komparátorral ad szint felett 1 est.Az ESP32 3V3 működik ez meg 5V. bár azt írja h megy 3-5V között...
Operating voltage: 3.3V-5V
Voltage: 5Vén használák valami voltage level shiftert ha 5 V kellene használni.
-
Teasüti
nagyúr
Üdv!
Képben van itt vki az Arduino Android IDE-vel? Fel tudok tölteni vele PC-n fordított binárist? Kell telepítenem hozzá az alaplapot? Ha igen, akkor ESP32-re próbált már vki Android-ról feltölteni?
Köszi! -
vargalex
félisten
válasz
ratkaics
#7625
üzenetére
Hasonló elképzeléssel valósítottam meg a low power ESP8266 alapú hőmérőt. A cél a minél alacsonyabb fogyasztás volt. Az eszköz (jelenleg 2 példányt raktam le a lakásban) egyetlen Li-Ion celláról működik, ami így 42 nap folyamatos működés után 3.8 V-on áll. A pencenkénti hőmérést figyelembe véve azt gondolom, hogy eddig elégedett lehetek. Természetesen mindenképpen beszámolok, hogy meddig bírta (az ESP8266 miatt kb. 3V-ig hagyhatom merülni).
A kódot itt találod. A DS18B20 kiolvasása egyszerűen cserélhető bármilyen másik szenzorra. -
válasz
Janos250
#7620
üzenetére
Köszi. Igazából csak tesztelni akartam az ESP-t és mivel eddig semmi tapasztalatom nem volt vele, ezért próbáltam kideríteni. Fő célom hogy képbe kerüljek a programozásával kapcsolatban meg legyen egy kicsi rálátásom. Bizonyos esetekben megoldható a driver írás, csak ha bonyolultabb szenzort akarunk működésre bírni ott nem biztos hogy neki akarunk állni sajátot írni.
-
Sziasztok!
Megjött az ESP32. Próbáltam a "simplewifiserver" példát. 2 verzió is van az arduino ide-ben. Egyikbe van valami "wifi firmware", másik a githubon lévő, amiben nincs. Az utóbbit tudja csak lefordítani, ugyanis nem találja a wifi firmware változót.
Az utóbbi kódot rátöltve a mikrovezérlőre nem nagyon megy a dolog. Valami miatt nem tud csatlakozni szerintem a routerre, pedig megadtam SSID-t és jelszót is. Van valami trükk?
Ezt írja ki a serial monitor:
Connecting to Manhattan
Brownout detector was triggered
ets Jun 8 2016 00:22:57
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode: DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:956
load:0x40078000,len:0
load:0x40078000,len:13076
entry 0x40078ad0 -
itg
tag
válasz
Janos250
#7607
üzenetére
igen, kb. idáig jutottam én is. csak az összes mintapélda a fenti (ezek szerint hibás/régebbi) módszerrel kérdezi le és azt hittem én vagyok a láma.
én egyébként a ESP8266WiFi.h -t hívom meg, de ha ezt megcsinálom, valószínűleg átalakítom push-ra a scriptet és akkor nem fog állandóan a wifi-n lógni.köszi a segítséget!
-
itg
tag
válasz
Tankblock
#7601
üzenetére
Üdv.
Köszi a választ!
Még akkor éjszaka pont ezt tettem és kiderült a turpiszság.
loop-ba raktam a wifi reconnect-et és valamilyen oknál fogva minden alkalommal újra csatlakozott a routerhez, ami az egyiket megfektette, a másik viszont bírta.Viszont ha csak a setup részbe rakom a wifi kapcsolódást, router újraindulás esetén nem csatlakozik újra az eszköz.
Az egyik eszköz: Wemos D1 mini, a másik D1 mini ESP-12.
(elméletileg egyformák) -
Janos250
őstag
Én legolcsóbbnak ezt találtam:
link
Egy a lényeg: ESP-WROOM32 (tehát az a fém tokos hibrid valami) legyen rajta. Amire azt írják, hogy ESP32S, ma már az is ugyanaz. Nézd meg a kinagyított fényképét.
A neten ajánlják azt is, amin van oldalt egy fehér tápcsati, de itt korábban valaki azt írta, hogy a + és - fordítva van bekötve, tehát figyelni kell.Bizony a kínai vásárláshoz türelem kell

-
Tankblock
aktív tag
Hello,
Most inább mutatnék egy példát arra amikor megy ez WebSockettal is.
Ez nekem anni 1 ESP-01 futott és 1x 3 eszközről lehetett csatlakozni (ennyit próbáltam).
Az eventek láthatóak szinte azonnal a többin böngészőben is.
[link]Amúgy a példádban a
server.send(200, "text/html", webPage);a wepPage helyett kellene valami másik string.... -
brickm
őstag
Sziasztok!
Sikerült végre feléleszteni az ESP-01-et arduino IDE alól is.
ott tartok a dologgal, hogy, itt a kódom, de ebbe hiába teszem be az if- else sorokat, a html lapon nem változik az input értéke. Annyit kifilóztam, hogy azért, mert a setupba került, és a loopban kéne tenni, de a loopba téve lesem generálja a html lapot, mivel az a setupban generálódik. Na itt akadtam el, hogy akkor hogyan tovább?
A kód aljára tettem az input kiolvasást, kommentbe#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
MDNSResponder mdns;
// Replace with your network credentials
const char* ssid = "TP-LINK_B791B8";
const char* password = "passw0rd_000";
ESP8266WebServer server(80);
String webPage = "";
int gpio0_pin = 0;
int gpio2_pin = 2;
int dsc_state = 0;
void setup(void){
webPage += "<h1>DSC PC 1616 WebPage</h1><p>GPIO_0 <a href=\"socket1On\"><button>Arming</button></a> <a href=\"socket1Off\"><button>Disarming</button></a></p>";
// webPage += "<p>GPIO_2 <a href=\"socket2On\"><button>ON</button></a> <a href=\"socket2Off\"><button>OFF</button></a></p>";
//
// preparing GPIOs
pinMode(gpio0_pin, OUTPUT);
digitalWrite(gpio0_pin, LOW);
pinMode(gpio2_pin, INPUT);
digitalWrite(gpio2_pin, LOW);
delay(1000);
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if (mdns.begin("esp8266", WiFi.localIP())) {
Serial.println("MDNS responder started");
}
server.on("/", [](){
server.send(200, "text/html", webPage);
});
server.on("/socket1On", [](){
server.send(200, "text/html", webPage);
digitalWrite(gpio0_pin, HIGH);
delay(1000);
});
server.on("/socket1Off", [](){
server.send(200, "text/html", webPage);
digitalWrite(gpio0_pin, LOW);
delay(1000);
});
server.on("/socket2On", [](){
server.send(200, "text/html", webPage);
digitalWrite(gpio2_pin, HIGH);
delay(1000);
});
server.on("/socket2Off", [](){
server.send(200, "text/html", webPage);
digitalWrite(gpio2_pin, LOW);
delay(1000);
});
server.begin();
Serial.println("HTTP server started");
}
void loop(void){
server.handleClient();
}
//Ez az input mező kiírásához:
//dsc_state = digitalRead(gpio2_pin);
//if (dsc_state == HIGH){
// webPage += "<h2>Input is HIGH</h2>";
//}
//else {
// webPage += "<h2>Input is LOW</h2>";
//} -
Janos250
őstag
válasz
távcsőves
#7550
üzenetére
Szubjektív vélemény:
"1 hete használok STM32DUINO"
Jó is az! Előnye, hogy ARM. Annak ellenére, hogy az ESP32 dokumentációja is egyre bővül, az STM32-vel még nem veheti fel a versenyt részletesség és pricizitás terén. Az F103-at én is használtam, szerettem. Viszont mire az F4 boardjaim megérkeztek, addigra már az ESP32 támogatása is olyan szintre jutott, hogy az STM-ek a fiókba kerültek.
Az ESP32 előnye:
szintén sok memória, rengeteg periféria, 240 Mhz órajel kettő maggal, és mindkét mag jól használható. Ez némi párhuzamos programozási technikákat is lehetővé tesz. Az arduino környezetbe illesztése mostmár szinte tökéletes. A freeRTOS op. rendszer fut rajta, arra van ráillesztve az arduino héj, de elérhető az op. rendszer - majdnem minden - saját függvénye is. Nagy előnye a beépített WiFi és BT. Van benne olyan spéci lehetőség is, mint pl. az RMT. Az UNO-ra megírt programok gyakorlatilag változtatás nélkül futnak rajta. A GPIO lábak low/high állítására külön regiszterek is vannak, nem kell a lábak állapotát beolvasni, majd úgy módosítani közvetlen regiszter használat esetén se. Előny még az ára: 1600 Ft körül már kapható.
Hátránya:
Nem ARM. Ha az ember a C++ -nál lentebb akar menni, azaz a regisztereket közvetlenül akarja elérni, még akad dokumentációs hiányosság. Bármelyik periféria bármelyik lábhoz kapcsolható, ez gyakran előny, de néha bonyolítja a dolgunkat. A regiszterek kezelése jó, de mivel 32-nél több GPIO van, ezért a GPIO-hoz kapcsolódó regiszterek 2 x 32 controll regiszterhez tartoznak. Nem minden GPIO használható szabadon, de ezek nem a 32-n túliak. Egyik-másik funkció leírása még vagy nincs meg, vagy gyér.Összefoglalva:
Én az ESP32 mellett vagyok. Ha valaki csak C++ -szinten (tehát csak "arduino" módon) használja, akkor a felsorolt hátrányait nem érzi, előnyeit viszont igen.
A regiszterek közvetlen kezelése nem szükséges normál esetben, de nekem jó játék. -
távcsőves
senior tag
válasz
Tomi8822
#7539
üzenetére
Nem fordul le IDE-ben vagy mi a baj vele? Valamit azért írhatnál. Most ezt a sok linkelt könyvtárat nem töltöm le, ha nincs meg nekem, milyen lap amit használsz, kicsit bővebben kellene szerintem.
(Én sem vagyok profi, sőt azért keveredtem ide, mert programozás technikai kérdésem lenne. (Saját kódom működik, de valószínű van elegánsabb/hatékonyabb módja is egy bizonyos funkciónak. Csak az én dinnye fejem nem érti a megoldást.) Épp visszaolvasgattok, hátha más is feltette már a kérdést. Meg mindjárt nézem azt is, Wemos D1 mini vagy ESP8266 esetleg ESP32 legyen amit megrendelek.
Nem tudom ugyanis elsőre mi az ajánlott. Eddig csak AVR boardjaim voltak, 1 hete használok STM32DUINO-t, és hát a kakaó , ami benne van, megtetszett nagyon. ) -
Janos250
őstag
válasz
Teasüti
#7546
üzenetére
"Ezt olvastad?" Mostmár igen
Kösz.
Egyébként a helyzet az, hogy mivel itt vannak már az olcsó, gyors, viszonylag sok memóriával rendelkező kontrollerek, én egyszerűen nem akarok már AVR-el foglalkozni. Annak idején számos rutint sok munkával megcsináltam Z80-ra, és elöntött a hú milyen jó érzése. Viszont pár év múlva jöttek a jobb procik, és a sok munka egyszerűen hamuvá vált. Ennek tapasztalatai alapján nem nagyon akarom már nyakatekert megoldásokkal kissé feljebb tornászni a proci teljesítményét, inkább használok jobbat. Most pl. ESP32-t, mint rajtam kívül még sokan mások.A leírt időzítéses dolgok viszont tanulságosak, érdemes elolvasni!
Azt, hogy az 1 bitet meddig szabad magasan tartani, ki fogom próbálni, mert ez érdekes. Mivel nekem semmi konkrét célom nincs ezekkel a ledekkel, csak játszom velük, így azokat a dolgokat próbálom ki, ami számomra érdekes, szórakoztató.

Más:
Mondjátok, Ti honnan a csudából tudjátok egy kínai led szalagról, hogy az most éppen melyik típus? Ráírva semmi info nincs erről, a kis kínai meg felsorolja majdnem az összes típust, hogy keresésnél minél többen megtalálják.
Én egyszerűen játszottam az időzítésekkel, hogy mi válik be legjobban, de fogalmam sincs, hogy éppen melyik típus van a kezemben. -
Kérdezek mást. Az alaplapot úgy látom felismerte, ha meg eltűnik akkor újra be kell írni a http://arduino.esp8266.com/stable/package_esp8266com_index.json címet a beállításoknál, erre jutottam.
Adott a wemos d1 r2, és szeretném vele használni a dht-11 hő és páratartalom mérőt. Ennek a példaprogramját használom, de a wemosra nem lehet feltölteni, mert hibát ír:
warning: espcomm_sync failed
error: espcomm_open failed
error: espcomm_upload_mem failed
error: espcomm_upload_mem failed
A teszt előtte hiba nélkül lefut. Ugyanez a program működik sima uno-val és az esp32-vel is! Arra gondolok, hogy ezzel a szerencsétlen wemos-szal nem tud valamiért kommunukálni a cucc. 15-ös pint használnám. -
válasz
Victoryus
#7540
üzenetére
Nos, csak nem boldogulok. Letöltöttem az előző hsz-ban említett drivert az alaplap kezelővel. Ott is volt, hogy esp8266, fel is tettem a led villogtató programot. Nem villog, ha konkrét pint adtok meg, akkor se. De utána eltünt maga az eszköz a választhatóak közül, és az alaplap kezelőben sincs ott. Ezt megelőzően annyit írt az arduino, hogy frissítéseket talált. Most ilyenkor mi van?
Windows eszközkezelő látja (usb serial ch340 com3) -
Megint kérnék egy kis segítséget. Megjött a wemos d1 r2. (RobotDyn wifi d1 r2 esp8266 dev board 32m) Erre szeretném a led villogtató programot feltenni, de nem sikerül. Azt írja az arduino, hogy "A fatal error occurred: Timed out waiting for packet header" Esp32 dev modulnak tettem be. Vagy ez nem az? Én azt rendeltem.
Találtam megoldást, esp8266 leírás -
Janos250
őstag
Na, akkor én a következőt mondanám:
Portable verzió!
Letöltöd az arduino rendszert, kicsomagolod egy külön könyvtárba, pl C:\arduinoPortable. Lehetőleg ne a dokumentumokba, mert akkor túl hosszú lesz a path, amit nem fog szeretni. (
) MIELŐTT ELŐSZÖR ELINDÍTOD, csinálsz egy portable könyvtárat. Most már elindíthatod az arduino.exe-t. Ebbe töltöd le az ESP8266-ot a szokásos módon. A portable verzió nem akad össze a fenn lévő másik verzióval/verziókkal. -
brickm
őstag
Halo,
Valakinek van valami ötlete, hogy az arduino program miért nem compile-olja le az esp-s programokat?
Ha kiválasztom a generic esp8266 panelt a compile megáll 3\4-ednél. Kipróbáltam 3 verziót.Ha vissza állok megára, azt megcisnálja bele is írja a megába.
-
brickm
őstag
Halo.
Esp8266 nodmcu firmware. A gpio állapotát hogy lehet megjeleníteni html lapon egyszerűen. Amit találtam neten és egyszerű, arduinos, nálam a lua script van feltöltve. -
Tankblock
aktív tag
Sziasztok, remélem tudtok segíteni.
Van egy problémám amire nem tudok rájönni://
// Mod: Add a double knock to send extra message to the MQTT
//
//
//
#include <FS.h> //this needs to be first, or it all crashes and burns...
#include <ESP8266WiFi.h> //https://github.com/esp8266/Arduino
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <PubSubClient.h>
//GPIO Pin definitions
#define WiFiLED 13
#define TouchLED 12 //Also operates Relay coil
#define TouchInput 0
//Only output info to serial if this is HIGH
#define fDebug true
//Set our inital states and values
boolean ledState = false;
boolean lastButtonState = false;
boolean buttonState = false;
// Removed because of the new concept implemented
//unsigned long lastDebounceTime = 0; // the last time the output pin was toggled
//unsigned long debounceDelay = 50; // the debounce time; increase if the output flickers
// Button timing variables
unsigned long debounce = 20; // ms debounce period to prevent flickering when pressing or releasing the button
unsigned long DCgap = 250; // max ms between clicks for a double click event
unsigned long holdTime = 1000; // ms hold period: how long to wait for press+hold event
unsigned long longHoldTime = 3000; // ms long hold period: how long to wait for press+hold event
unsigned long currentTime = 0;
// Button variables
boolean buttonVal = HIGH; // value read from button
boolean buttonLast = HIGH; // buffered value of the button's previous state
boolean DCwaiting = false; // whether we're waiting for a double click (down)
boolean DConUp = false; // whether to register a double click on next release, or whether to wait and click
boolean singleOK = true; // whether it's OK to do a single click
unsigned long downTime = 0; // time the button was pressed down
unsigned long upTime = 0; // time the button was released
boolean ignoreUp = false; // whether to ignore the button release because the click+hold was triggered
boolean waitForUp = false; // when held, whether to wait for the up event
boolean holdEventPast = false; // whether or not the hold event happened already
boolean longHoldEventPast = false;// whether or not the long hold event happened already
#define MQTT_VERSION MQTT_VERSION_3_1_1
const PROGMEM uint16_t MQTT_SERVER_PORT = 1883;
const PROGMEM char* MQTT_CLIENT_ID = "Enterance Room Light Switch";
const PROGMEM char* MQTT_USER = "mqtt_user";
const PROGMEM char* MQTT_PASSWORD = "mqtt_psw";
const char* MQTT_LIGHT_STATE_TOPIC = "enterance/lightswitch/status";
const char* MQTT_LIGHT_COMMAND_TOPIC = "enterance/lightswitch/switch";
const char* MQTT_LIGHT_SPECIAL_TOPIC = "enterance/lightswitch/special";
const char* LIGHT_ON = "ON";
const char* LIGHT_OFF = "OFF";
const char* CLICK = "CLICK";
const char* LONGPRESS = "LONGPRESS";
//Create our objects for MQTT and define our IP Address class
WiFiClient espClient;
PubSubClient client(espClient);
IPAddress MQTT_SERVER_IP(192, 168, 1, 140);
void setup() {
#if defined(fDebug)
Serial.begin(115200); Serial.println(); Serial.println(); Serial.println();
#endif
//Setup our GPIO pins for input/output as needed
pinMode(WiFiLED, OUTPUT);
pinMode(TouchLED, OUTPUT);
pinMode(TouchInput, INPUT);
//Turn those LEDS's off :)
digitalWrite(WiFiLED, HIGH);
digitalWrite(TouchLED, ledState);
//Instantiate the WifManager library
WiFiManager wifiManager;
//Set a host name
wifi_station_set_hostname("sonoffTouch");
//Un remark this if your want to clear the saved connection settings.
//wifiManager.resetSettings();
#if defined(fDebug)
wifiManager.setDebugOutput(true);
#endif
//If autoconnection fails, go into AP mode so the user can configure the WiFi connection to the local WLan
if (!wifiManager.autoConnect("TaTaTatooouchMe")) {
delay(3000);
ESP.reset();
} else {
//WiFi LED is on when low
digitalWrite(WiFiLED, LOW);
//get our MQTT servers address
//WiFi.hostByName("your_mgtt.server.co.uk", MQTT_SERVER_IP);
yield();
//Establish conenction to MQTT server
client.setServer(MQTT_SERVER_IP , MQTT_SERVER_PORT);
client.setCallback(callback);
//Phew, have a bit of a breather to give everything a chance to settle down
delay(1000);
}
}
// function called to publish the state of the light (on/off)
void publishLightState() {
#if defined(fDebug)
Serial.println("PublishLightState Called");
Serial.print("Light State: ");
Serial.println(ledState);
#endif
if (ledState == HIGH) {
#if defined(fDebug)
Serial.print("Light state high ");
Serial.println(ledState);
#endif
client.publish(MQTT_LIGHT_STATE_TOPIC, LIGHT_ON, true);
} else {
#if defined(fDebug)
Serial.print("Light state low ");
Serial.println(ledState);
#endif
client.publish(MQTT_LIGHT_STATE_TOPIC, LIGHT_OFF, true);
}
}
void publishClickState() {
#if defined(fDebug)
Serial.print("Click event ");
#endif
client.publish(MQTT_LIGHT_SPECIAL_TOPIC, CLICK, true);
}
void publishLongPushState() {
#if defined(fDebug)
Serial.print("Long push event ");
#endif
client.publish(MQTT_LIGHT_SPECIAL_TOPIC, LONGPRESS, true);
}
// function called to turn on/off the light
void setLightState() {
//Set our light state, ie turn the touch LED on/off which is the same GPIO pin as the relay.
digitalWrite(TouchLED, ledState);
}
// function called when a MQTT message arrived
void callback(char* p_topic, byte* p_payload, unsigned int p_length) {
// concat the payload into a string
#if defined(fDebug)
Serial.println("Callback...");
#endif
String payload;
for (uint8_t i = 0; i < p_length; i++) {
payload.concat((char)p_payload[i]);
}
#if defined(fDebug)
Serial.print("Payload: ");
Serial.println(payload);
#endif
// handle message topic
if (String(MQTT_LIGHT_COMMAND_TOPIC).equals(p_topic)) {
// test if the payload is equal to "ON" or "OFF"
if (payload.equals(String(LIGHT_ON))) {
if (ledState != true) {
ledState = true;
setLightState();
publishLightState();
}
} else if (payload.equals(String(LIGHT_OFF))) {
ledState = false;
setLightState();
yield();
publishLightState();
}
}
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
#if defined(fDebug)
Serial.print("INFO: Attempting MQTT connection...");
#endif
// Attempt to connect
if (client.connect(MQTT_CLIENT_ID, MQTT_USER, MQTT_PASSWORD)) {
#if defined(fDebug)
Serial.println("INFO: connected");
#endif
yield();
// Once connected, publish an announcement...
publishLightState();
// ... and resubscribe
client.subscribe(MQTT_LIGHT_COMMAND_TOPIC);
} else {
#if defined(fDebug)
Serial.print("ERROR: failed, rc=");
Serial.print(client.state());
Serial.println("DEBUG: try again in 5 seconds");
#endif
// Wait 5 seconds before retrying
for (int i = 0; i < 500; i++) {
if ( checkButton() == 1) {
ledState = !ledState;
setLightState();
delay(10);
}
}
}
}
}
void loop() {
if (!client.connected()) {
#if defined(fDebug)
Serial.println("Reconnect");
#endif
reconnect();
}
//Get the current button state
// int reading = digitalRead(TouchInput);
// //De-bounce the button
// if (reading != lastButtonState){
// lastDebounceTime = millis();
// }
// if ((millis() - lastDebounceTime) > debounceDelay) {
// // whatever the reading is at, it's been there for longer
// // than the debounce delay, so take it as the actual current state:
//
// // if the button state has changed:
// if (reading != buttonState) {
// buttonState = reading;
//
// // only toggle the LED if the new button state is HIGH
// if (buttonState == HIGH) {
// ledState = !ledState;
// }
// // set the LED:
// setLightState();
// publishLightState();
// }
// }
// // save the reading. Next time through the loop,
// // it'll be the lastButtonState:
// lastButtonState = reading;
// delay(64);
int b = checkButton();
yield();
if (b == 1) {
ledState = !ledState;
setLightState();
publishLightState();
}
if (b == 2) {
publishClickState();
}
if (b == 3) {
// Not Used
}
if (b == 4) {
publishLongPushState();
}
yield();
client.loop();
yield();
}
int checkButton() {
int event = 0;
buttonVal = digitalRead(TouchInput);
currentTime = millis();
// Button pressed down
if (buttonVal == LOW && buttonLast == HIGH && (currentTime - upTime) > debounce)
{
downTime = currentTime;
ignoreUp = false;
waitForUp = false;
singleOK = true;
holdEventPast = false;
longHoldEventPast = false;
if ((currentTime - upTime) < DCgap && DConUp == false && DCwaiting == true) DConUp = true;
else DConUp = false;
DCwaiting = false;
}
// Button released
else if (buttonVal == HIGH && buttonLast == LOW && (currentTime - downTime) > debounce)
{
if (not ignoreUp)
{
upTime = currentTime;
if (DConUp == false) DCwaiting = true;
else
{
event = 2;
DConUp = false;
DCwaiting = false;
singleOK = false;
}
}
}
// Test for normal click event: DCgap expired
if ( buttonVal == HIGH && (currentTime - upTime) >= DCgap && DCwaiting == true && DConUp == false && singleOK == true && event != 2)
{
event = 1;
DCwaiting = false;
}
// Test for hold
if (buttonVal == LOW && (currentTime - downTime) >= holdTime) {
// Trigger "normal" hold
if (not holdEventPast)
{
event = 3;
waitForUp = true;
ignoreUp = true;
DConUp = false;
DCwaiting = false;
//downTime = millis();
holdEventPast = true;
}
// Trigger "long" hold
if ((currentTime - downTime) >= longHoldTime)
{
if (not longHoldEventPast)
{
event = 4;
longHoldEventPast = true;
}
}
}
buttonLast = buttonVal;
return event;
}Ez egy SONOFF Touch kódja. Ha a checkButtont használom a loopba lévő kikommentezett rész helyett akkor random kifagy stack overflow ra hivatkozik. Mit rontottam el?
-
brickm
őstag
Sziasztok!
Az a helyzet, hogy tegnap még feltudtam csatolni a wifire az ESP8266-01-et. Most viszont majdnem minden programra ír ki valami errort.
Pl:-- print ap list
function listap(t)
for k,v in pairs(t) do
print(k.." : "..v)
end
end
wifi.sta.getap(listap)erre dobja:
> -- print ap list
function listap(t)
for k,v in pairs(t) do
print(k..> " : "..v)
end
end
wifi.sta.getap(listap)
stdin:1: unexpected symbol near '" : "'
>Azt figyeltem meg, hogy valami karakterkódolási baj lehet néha, mert pl a wifi SSID-met is felbontja pl TP>>LINK_B= stb, természetesen a >> nincs benne, ő teszi bele. Esetleg valakinek valami ötlete?
-
Teasüti
nagyúr
válasz
ngabor2
#7476
üzenetére
Ha megnézed a relé adatlapját, azon rajta lesz milyen áram kell a tekercs stabil behúzásához.
Songle esetén pl. az 5V-oshoz 3,7V kell minimum. De Songle-ből van 3V-os is.
Viszont ezekhez az alacsony feszültségűekhez rendre 70 és 120 mA áram kell, szóval sehogy se ajánlott közvetlen az ESP lábára kötni őket. Tranzisztorral kell meghajtani és védődiódát kell berakni! -
brickm
őstag
Most így áll a dolog.
ESP8266 flasher-rel rátettem a nodemcu_integer_0.9.5_20150318.bin -t
most 9600-as baudrate-tel elérem, comporton és ezt írja:NodeMCU 0.9.5 build 20150318 powered by Lua 5.1.4
lua: cannot open init.lua
>
----------------------------
No files found.
----------------------------
>
Total : 549941 bytes
Used : 0 bytes
Remain: 549941 bytesEz most jó így? Innen hogyan tovább?
-
brickm
őstag
Sziasztok!
Esp8266 01-es modulommal bajlódok épp.
A problémám az lenne, hogy nem tudok rá ilyen .lua fájlokat feltölteni. Minden errorra áll ki.
Manuálisan fel tudtam csatolni a hálózatra,ESPlore segítségével.
Mi a pontos menete pl egy egyszerű GPIO on\off weblapnak?
-
Janos250
őstag
válasz
ngabor2
#7476
üzenetére
"Okozhat-e gondot" Tegyél be egy diódát!
"5V-os relét a 3.3 V-os jelszint kapcsolja-e"
Reléje válogatja, de mindenképp illesztő használata a korrekt.
"egy ilyen modul"
Na, olyan nem :-) (nézd meg, mit linkeltél!)
Az órákig járás nem probléma. Nekem kb egy hónapja megy egy ESP32 szerver kiakadás nélkül. Egy WiFi routerhez kapcsolódik, azon keresztül tudom a "világból" elérni. -
ngabor2
nagyúr
Adott egy Arduino és rákötve az egyik out-ra állított digital pin-re (pl. 3) egy 5V-os relé. Működik is gond nélkül. Okozhat-e gondot, ha erre a lábra (és a relére) direktben rákapcsolom az 5V-ot? Mert akkor "hardveresen" be tudnám programozni egyetlen plusz vezetékkel egy lámpa kézi bekapcsolását, nem kellene az egész programomat átbuherálni.
Amúgy hamarosan ESP32-re tervezem költöztetni, ott majd megpróbálom neten keresztül vezérelhetővé tenni. Kérdés, hogy az 5V-os relét a 3.3 V-os jelszint kapcsolja-e. Ha nem, akkor egy ilyen modul megoldhatja a gondomat? Ha jól sejtem, itt nem lesz gond a kommunikáció sebességével, hisz csak "kitart" egy jelszintet. Viszont azt órákig kellene tartani, nem tudom, hogy ezek alkalmasak-e arra.
-
vargalex
félisten
válasz
fpeter84
#7454
üzenetére
Én is gondolkodtam a deep-sleep-el megvalósított energiatakarékos hőmérő megoldasomnál, hogy a DS18B20-nak valamelyik GPIO-ról adok VCC-t, de egyrészt egyébként is minimális a fogyasztása, másrészt időm nem volt még utánaolvasni/tesztelni, hogy mennyivel kellene előbb feszt adni neki, hogy a mért érték kinyerhető legyen belőle. Ez utóbbi idő bármekkora is, sokat vesztenék azzal, hogy ezalatt nem deep sleep-ben van az ESP8266. Így én ennél a projektnél elvetettem.
Persze, ha nem a minél alacsonyabb fogyasztás a cél akkor abszolút korrekt megoldásnak érzem én is, ha az esp8266 által biztosított áramerősség elegendő. -
fpeter84
senior tag
ez valahol hasonló, mint amikor a marketingosztály azt adja parancsba az autóknál hogy márpedig 30-50e km-es olajcsereperiódus kell, a mérnökök meg fogják a fejüket hogyha rajtuk múlna akkor még a 15e-et is inkább csökkentenék... én inkább a mérnököknek hiszek - lehet pesszimisták, és lehet tényleg bírja a többet is valameddig - de mint ahogy az általad linkelt oldalon is említik:
The ESP32 does actually have an internal snapback circuit that protects it from overvoltage; in theory you should be able to feed it a fair amount of volts more. However it stresses the pad silicon (due to increased electron tunneling, iirc) and the long term effects aren't known so it's not in the datasheet.
-
-
fpeter84
senior tag
Fizikailag lehet bírja egy darabig, esetleg nem jön ki belőle az éltető füst azonnal, de a specifikációik szerint nem, tehát nem terveznék vele:
ESP8266 - 23. oldal 5.1. Electrical Characteristics - a tápfesz és a VIH is max 3.6V lehet
Az ESP32 picit összetetteb rendszer, itt a lábak a mux-tól függően kaphatják a VIO-t a maggal közös VDD3P3_CPU ágról valamint a VDD_SDIO 1.8-3.3V ágáról is, a táp pedig a 42dik oldal 5.1 Absolute Maximum Ratings szerint max 3.6V lehet
-
ngabor2
nagyúr
válasz
Teasüti
#7406
üzenetére
Mivel (még) nincs topikgazda, ezért biztos, hogy nem lesz kirúgás
Viszont az ötlet jó, amennyiben érez valaki elég lelki erőt és időt erre a feladatra. Sőt, téma összefoglalót is lehetne gyártani, de ehhez én már régóta kicsi vagyok.gyapo11: kicsit kiegészítve jó lesz, köszi

vargalex: van lehetőség kulcsszavak megadására, most már pl. az ESP-32-re, vagy az mcu-ra is megtalálja a topikot. -
-
válasz
Janos250
#7412
üzenetére
Úgy értettem, ha kell +5 V. Eddigiekben amivel találkoztam fejlesztői kártyán volt 5 V ami jól jött egyes szenzorok esetében. Most hirtelen csak egy szervo motor jut eszembe ahol kellene, esetleg hőmérséklet szenzorok között is akad vagy bizonyos IC-k igényelhetnek 5 V-ot.
Ha jól olvastam az ESP panelen nincs meg az 5 V kimenet.
-
Ti hogy oldjátok meg az 5V-ot ESP esetén? Illetve tudtok mozgásérzékelőt ajánlani ami éjszakai közel 0 fény mellett is működik, esetleg nagy hőmérsékleti tartományban (-40 - +85°C).
-
modeller
aktív tag
válasz
Janos250
#7408
üzenetére
Szivesen vennék egy arduino-s példát hogy lehet akár a legtriviálisabb dolgot is a másik magon futtatni.
Simán lehet, hogy valamit elnézek, kb 1 hónapja láttam először esp32-t
Azért érdekelne, mert kimondottan fogyasztás-kritikus, elemről (reményeim szerint) akár 1 évig is működő dolgokat próbálok csinálni és ahhoz nagyon jó volna a co-processzort beüzemelni. De asm szintig nem vagyok hajlandó elmenni, IDF-ezni is csak ha muszáj.
-
ngabor2
nagyúr
Szolgálati közlemény!
Úgy tapasztalom, hogy a topik egyre gyakrabban kezd elkanyarodni a címtől, ami nem probléma, inkább a technikai fejlődést követi. Ezért új címjavaslatokat várnék, mire lehetne átnevezni, hogy a kereső megtalálja, ha valaki a témában keres. Az Arduino az mindenképp benne maradna, de kiegészíteném az ESP8266/ESP12/ESP32 résszel. De milyen összefoglaló, könnyen idevezető nevet lehetne adni ezeknek?
Várom és köszönöm a címjavaslatokat.
-
vargalex
félisten
válasz
fecske13
#7382
üzenetére
Szia!
Szóval, a kód:
#include <ESP8266WiFi.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <ESP8266HTTPClient.h>
#include <time.h>
#define TEMPERATURE_PRECISION 11
#define REPORT_INTERVAL 60 // in sec
#define INTERVAL_CORRECTION 1.01 //1.06001
//AP definitions
#define FIRST_SSID "SSID1"
#define FIRST_PASSWORD "PASS1"
#define SECOND_SSID "SSID2"
#define SECOND_PASSWORD "PASS2"
#define UPDATEURL "http://az.en.szerverem.hu/updatesensor.php"
#define ONEWIRE_GPIO 2
#define VCC_ADJUST 1.0
#define MAXRTCDATACOUNT 50
#define MINPOSTCOUNT 10
#define NTPSERVER "time.kfki.hu"
ADC_MODE(ADC_VCC);
struct {
uint32 lastTime;
int cnt;
float temperatures[MAXRTCDATACOUNT];
float battery[MAXRTCDATACOUNT];
} rtcData;
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONEWIRE_GPIO);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
// device addresses
DeviceAddress DSAddress;
// device address in char array
static char DSAddressStr[18];
static char *hex = "0123456789ABCDEF";
int deviceCnt;
char *ap_ssid = NULL;
char *ap_password;
HTTPClient http;
boolean setSNTPTime(char *NTPServer) {
unsigned long entry=millis();
configTime(0,0,NTPServer);
while (millis()-entry<5000 && time(NULL)<3600) {
delay(500);
}
if (time(NULL)>100) return true;
else return false;
}
void scanWifi() {
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
Serial.println("Scanning for wireless networks");
// WiFi.scanNetworks will return the number of networks found
int n = WiFi.scanNetworks();
Serial.println("scan done");
if (n == 0)
Serial.println("no networks found");
else
{
Serial.print(n);
Serial.println(" networks found");
ap_ssid = NULL;
for (int i = 0; i < n; ++i)
{
// Print SSID and RSSI for each network found
Serial.print(i + 1);
Serial.print(": ");
Serial.print(WiFi.SSID(i));
Serial.print(" (");
Serial.print(WiFi.RSSI(i));
Serial.print(")");
Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? " " : "*");
if (WiFi.SSID(i) == FIRST_SSID) {
ap_ssid = FIRST_SSID;
ap_password = FIRST_PASSWORD;
}
if (WiFi.SSID(i) == SECOND_SSID) {
ap_ssid = SECOND_SSID;
ap_password = SECOND_PASSWORD;
}
}
}
if ( ap_ssid == NULL) {
Serial.println("Defined SSID-s not found. Resetting.");
ESP.restart();
}
Serial.println("");
}
void connect() {
// Connecting to Wifi.
Serial.println();
if (WiFi.SSID() == "") {
// Never connected, scanning for wireless networks
scanWifi();
WiFi.mode(WIFI_OFF);
WiFi.mode(WIFI_STA);
Serial.print("Connecting to ");
Serial.println(ap_ssid);
WiFi.begin(ap_ssid, ap_password);
}
else {
Serial.print("Connecting to ");
Serial.println(WiFi.SSID());
}
unsigned long wifiConnectStart = millis();
while (WiFi.status() != WL_CONNECTED) {
// Check to see if
if (WiFi.status() == WL_CONNECT_FAILED) {
Serial.println("Failed to connect to WiFi. Please verify credentials: ");
scanWifi();
WiFi.mode(WIFI_OFF);
WiFi.mode(WIFI_STA);
Serial.print("Connecting to ");
Serial.println(ap_ssid);
WiFi.begin(ap_ssid, ap_password);
ESP.restart();
}
delay(500);
Serial.print(".");
// Only try for 5 seconds.
if (millis() - wifiConnectStart > 15000) {
Serial.println("Failed to connect to WiFi");
scanWifi();
WiFi.mode(WIFI_OFF);
WiFi.mode(WIFI_STA);
Serial.print("Connecting to ");
Serial.println(ap_ssid);
WiFi.begin(ap_ssid, ap_password);
ESP.restart();
}
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
// function to return device address as a String
String deviceAddressToStr(DeviceAddress deviceAddress)
{
String ret = "";
for (uint8_t i = 0; i < 8; i++)
{
// zero pad the address if necessary
ret = ret + hex[DSAddress[i] / 16];
ret = ret + hex[DSAddress[i] & 15];
}
return ret;
}
// getting temperature from DS18B20 sensor
float getTemperature() {
float tempC = 150;
// Start up the library
sensors.begin();
if (!sensors.getAddress(DSAddress, 0)) {
Serial.println("Unable to find address for Device 0");
}
else {
// set the resolution
sensors.setResolution(DSAddress, TEMPERATURE_PRECISION);
sensors.requestTemperatures();
tempC = sensors.getTempC(DSAddress);
Serial.print("Temp C for device ");
Serial.print(deviceAddressToStr(DSAddress));
Serial.print(" ");
Serial.println(tempC, 4);
}
return tempC;
}
// POST data as JSON to the server
bool sendData(DeviceAddress dsAddress) {
bool ret;
int i;
String postStr = "{\"sensorAddress\": \"" + deviceAddressToStr(dsAddress) + "\", \"values\": [";
for (i=0; i<rtcData.cnt; i++) {
if (i>0) {
postStr += ",";
}
postStr += "{\"offset\":\"" + String(i-rtcData.cnt+1) + "\", \"temperature\":\"" + String(rtcData.temperatures[i], 3) + "\", \"voltage\":\"" + String(rtcData.battery[i]) +"\"}";
}
postStr += "]}";
if (http.begin(UPDATEURL)) {
Serial.print("Post string: ");
Serial.println(postStr);
http.addHeader("Content-Type", "application/json");
int httpCode = http.POST(postStr);
Serial.print("HTTP POST return code: ");
Serial.println(httpCode); //Print HTTP return code
if (httpCode>0) {
ret = true;
}
else {
Serial.print("[HTTP] POST... failed, error: ");
Serial.println(http.errorToString(httpCode).c_str());
ret = false;
}
http.end();
}
else {
ret = false;
}
return ret;
}
void setup() {
unsigned long startTime = 0;
Serial.begin(115200);
// Wait for serial to initialize.
while (!Serial) { }
Serial.println("");
Serial.println("Dallas Temperature Sensor Control and post data to server (deep sleep version with RTC memory)");
Serial.print("Reset reason: ");
Serial.println(ESP.getResetReason());
if (ESP.getResetReason() != "Deep-Sleep Wake") {
Serial.println("Non deep-sleep wake. Clearing RTC data storage.");
rtcData.cnt = 0;
rtcData.lastTime = 0;
ESP.rtcUserMemoryWrite(0, (uint32_t*) &rtcData, sizeof(rtcData));
scanWifi();
WiFi.mode(WIFI_OFF);
WiFi.mode(WIFI_STA);
Serial.print("Connecting to ");
Serial.println(ap_ssid);
WiFi.begin(ap_ssid, ap_password);
startTime = micros();
}
if (ESP.rtcUserMemoryRead(0, (uint32_t*) &rtcData, sizeof(rtcData))) {
float temp = getTemperature();
rtcData.cnt++;
rtcData.temperatures[rtcData.cnt-1] = temp;
rtcData.battery[rtcData.cnt-1] = ESP.getVcc() * VCC_ADJUST;
Serial.print("CNT: ");
Serial.println(rtcData.cnt);
if (rtcData.cnt>=MINPOSTCOUNT) {
connect();
Serial.print("Setting NTP time with server ");
Serial.print(NTPSERVER);
while (!setSNTPTime(NTPSERVER)) Serial.print(".");
Serial.println("");
uint32 seconds = time(NULL);
if (seconds != 0) {
Serial.print("seconds: ");
Serial.println(seconds);
Serial.print("rtcData.lastTime: ");
Serial.println(rtcData.lastTime);
uint32 waitSecs;
if (rtcData.lastTime == 0 || rtcData.lastTime+rtcData.cnt*REPORT_INTERVAL< seconds) {
waitSecs = 0;
}
else {
waitSecs = (rtcData.lastTime+rtcData.cnt*REPORT_INTERVAL) - seconds;
}
Serial.print("Waiting ");
Serial.print(waitSecs);
Serial.println(" seconds before posting data");
delay(1000*waitSecs);
seconds = time(NULL);
startTime = micros();
if (sendData(DSAddress)) {
Serial.print("sendData returned true, setting cnt to 0 and lastTime to ");
Serial.println(seconds);
rtcData.cnt=0;
rtcData.lastTime = seconds;
}
}
else {
Serial.println("time function returned 0");
}
}
ESP.rtcUserMemoryWrite(0, (uint32_t*) &rtcData, sizeof(rtcData));
}
else {
Serial.println("RTC Memory read failed");
}
Serial.print("startTime: ");
Serial.print(startTime);
Serial.println(" microseconds");
Serial.print("Entering to deep sleep for ");
if (rtcData.cnt+1<MINPOSTCOUNT) {
Serial.print((REPORT_INTERVAL*1000*1000-(micros()-startTime))*INTERVAL_CORRECTION);
Serial.print(" microseconds and waking up with ");
Serial.println("wifi disabled");
ESP.deepSleep((REPORT_INTERVAL*1000*1000-(micros()-startTime))*INTERVAL_CORRECTION, WAKE_RF_DISABLED);
}
else {
Serial.print(((REPORT_INTERVAL-10)*1000*1000-(micros()-startTime))*INTERVAL_CORRECTION);
Serial.print(" microseconds and waking up with ");
Serial.println("wifi on");
ESP.deepSleep(((REPORT_INTERVAL-10)*1000*1000-(micros()-startTime))*INTERVAL_CORRECTION, WAKE_RF_DEFAULT); //WAKE_NO_RFCAL);
}
}
void loop() {
// put your main code here, to run repeatedly:
}A lényege: kb. percenként méri a hőmérsékletet és a VCC-t, ezeket tárolja RTC User memóriába. A MINPOSTCOUNT-ban meghatározott ébresztés valamivel korábban történik, hogy NTP-n időt szinkronizáljon, így a POST pontosan 10 percenként tud megtörténni (sajnos a deep sleep időmérése valamiért nem túl pontos). A szervernek JSON-ban küldi az adatokat (sensor address, majd a hőmérséklet/feszültség és offset (aktuális időpillanathoz képest időeltolás percben).
2 SSID-t és hozzá tartozó jelszavakat definiáltam, mivel 2 helyszínen szeretnék ledobni ilyen szenzorokat. Így a wifi scan-ból tudja majd a kód, hogy melyik látható a 2 közül és ahhoz csatlakozik.
A percenkénti méréshez wifi bekapcsolása nélkül ébresztem az ESP8266-ot, így kisebb a fogyasztása és néhány ms alatt végez is a méréssel, tárolással. Minden 10. mérésnél (vagy ha valamiért nem tudta POST-olni az adatokat, akkor minden következő mérésnél) wifi bekapcsolásával ébred a korábban említett rövidebb sleep után, csatlakozik a wifi-hez, NTP-n szinkronizál, POST-ol és elrakja RTC memóriába a POST idejét. A következő POST-kor ehhez képest történik a várakozás.Képet most nem készítettem az eszközről, de nekem az ESP8266-ok (ESP-12F) nálam ilyen boardra vannak felforrasztva. Ennek a hátoldalán ott a hely az LDO-nak (ahogy írtam, HT7333-at használok). Az LDO-t beforrasztva az előlapon található középső 0 ohm-os ellenállást le kell forrasztani. Így a board VCC lábára kötött feszültség az LDO-n keresztül jut el az ESP8266-ig, azaz annak VCC-jén már 3.3V fog megjelenni. Ennek megfelelően az ESP VCC lábát kötöttem össze a CH_PD-vel (mert ugye az alaplap VCC-jéről a Li-Ion cella feszültségét kapná, ami induláskor kb. 4,2 V). Az ESP VCC lábáról kapja a feszültséget a DS18B20 is, valamint az ESP VCC és GND lába közé a stabil tápellátás érdekében egy 1000 uF-os kondit tettem. A DS18B20 GND lába GND-re, a DATA lába a GPIO2-re van kötve (ez utóbbit konstansként definiáltam a proggiban). Ennyi a bekötés, nincs semmi varázslat.
Azóta is stabilan megy mindkét példány. Mindenképpen beszámolok, hogy 1 cellával meddig bírja az eszköz. -
válasz
Janos250
#7392
üzenetére
Régebben nem volt szerintem akkora gond még. Mikor kezdtem az MSP430-as Texas Instruments mikrovezérlőkkel, akkor egyszerűbb volt a portok BIT szinten történő beállítása, legalább is az ESP32-es kóddal összehasonlítva. Persze ott nem is volt lehetőség minden portot mindenféle módban használni.
Ahogy rugalmasabbá válik a programozás (portkezelést mint példa), mellette meg úgy bonyolodik is. Viszont Arduino kerek segítenek megtalálni az egyensúlyt. Egymást kiegészítve jönnek fel párhuzamosan. MSP430 mikor elkezdett terjedni, még nem csak BIT szinten lehetett programozni, ma meg már Arduino keretek között is lehet. Fejlődik ez a terület is, ami nekünk csak jó.
Új hozzászólás Aktív témák
- Fortnite - Battle Royale & Save the World (PC, XO, PS4, Switch, Mobil)
- SSD kibeszélő
- Steam Deck
- Rogyásig pakolható a Cooler Master Cosmos szériás csúcsháza
- Futás, futópályák
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Milyen billentyűzetet vegyek?
- Forza sorozat (Horizon/Motorsport)
- The Game Awards 2025 - Az összes bejelentés egy helyen!
- Nyaralás topik
- További aktív témák...
- Keresünk iPhone 16/16e/16 Plus/16 Pro/16 Pro Max
- ÁRGARANCIA!Épített KomPhone i5 12400F 16/32/64GB RAM RTX 5060 Ti 8GB GAMER PC termékbeszámítással
- Samsung Galaxy A13 / 4/128GB / Kártyafüggetlen / 12Hó Garancia / Repedt Kijelző
- GYÖNYÖRŰ iPhone 14 128GB Starlight -1 ÉV GARANCIA -Kártyafüggetlen, MS3677
- HIBÁTLAN iPhone 14 Pro 128GB Gold-1 ÉV GARANCIA - Kártyafüggetlen, MS4096
Állásajánlatok
Cég: BroadBit Hungary Kft.
Város: Budakeszi
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest














Nem tudom ugyanis elsőre mi az ajánlott. Eddig csak AVR boardjaim voltak, 1 hete használok STM32DUINO-t, és hát a kakaó , ami benne van, megtetszett nagyon. )
) MIELŐTT ELŐSZÖR ELINDÍTOD, csinálsz egy portable könyvtárat. Most már elindíthatod az arduino.exe-t. Ebbe töltöd le az ESP8266-ot a szokásos módon. A portable verzió nem akad össze a fenn lévő másik verzióval/verziókkal.
ekkold

