Fórum témák

» Több friss téma
Lapozás: OK   81 / 137
(#) gsc73 hozzászólása Feb 5, 2019 /
 
Sziasztok!

Nagyon köszönöm a tanácsokat, így már el tudok indulni. Nekem sem volt "komfortos" a relé, így optocsatolóval már okés lesz. Építeni nem fogok (az régebben volt), mostanában inkább"félkész" modulokból építkezem.

Üdv: G.
(#) Firefighter1 hozzászólása Feb 5, 2019 /
 
Szegény ember vízzel főz, még szegényebb meg EasyCoding-al programozik!

Folyamatábrás programozóban (igaz hogy NodeMCU ra van optimalizálva a modul de csak a PIN-eket írom át) így néz ki egy "programom"
Biztos hogy tele van sallangal, meg valószínűleg formailag sem olyan mint amilyennek kéne lennie, de működik!

Ez egy "gombot" azaz egy bemenetet figyel, ( tanács alapján a láb tápfeszre fel van húzva, így azt figyeli mikor lesz alacsony amikor a gomb meg van nyomva
és olyankor MQTT szerverre küld egy üzenetet jelen esetben egy "1" vagy egy "0"

  1. #include <ESP8266WiFi.h>
  2.  
  3. #include <PubSubClient.h>
  4.  
  5. int  i;
  6. int  a;
  7. int  b;
  8. WiFiClient espClient;
  9. PubSubClient client(espClient);
  10.  
  11. void reconnectmqttserver() {
  12. while (!client.connected()) {
  13. Serial.print("Attempting MQTT connection...");
  14. String clientId = "ESP8266Client-";
  15.  clientId += String(random(0xffff), HEX);
  16. if (client.connect(clientId.c_str())) {
  17. Serial.println("connected");
  18. } else {
  19. Serial.print("failed, rc=");
  20. Serial.print(client.state());
  21. Serial.println(" try again in 5 seconds");
  22. delay(5000);
  23. }
  24. }
  25. }
  26.  
  27. char msgmqtt[50];
  28. void callback(char* topic, byte* payload, unsigned int length) {
  29.   String MQTT_DATA = "";
  30.   for (int i=0;i<length;i++) {
  31.    MQTT_DATA += (char)payload[i];}
  32.  
  33. }
  34.  
  35. void setup()
  36. {
  37.   i = 0;
  38. a = 0;
  39. b = 0;
  40. Serial.begin(9600);
  41. pinMode(0, INPUT);
  42.   WiFi.disconnect();
  43.   delay(3000);
  44.   Serial.println("START");
  45.    WiFi.begin("MyNET","MyPassword");
  46.   while ((!(WiFi.status() == WL_CONNECTED))){
  47.     delay(300);
  48.     Serial.print("..");
  49.  
  50.   }
  51.   Serial.println("Connected");
  52.  
  53. }
  54.  
  55.  
  56. void loop()
  57. {
  58.  
  59.     client.setServer("192.168.1.13", 1883);
  60.     client.setCallback(callback);
  61.     if (!client.connected()) {
  62.     reconnectmqttserver();
  63.     }
  64.     client.loop();
  65.     if (digitalRead(0) == 0) {
  66.       a = 1;
  67.  
  68.     }
  69.     if (a == 1) {
  70.       if (b == 0) {
  71.         i = 1;
  72.         snprintf (msgmqtt, 50, "%d ",i);
  73.         client.publish("TOPIC", msgmqtt);
  74.         a = 0;
  75.         b = 1;
  76.  
  77.       }
  78.  
  79.     }
  80.     if (a == 1) {
  81.       if (b == 1) {
  82.         i = 0;
  83.         snprintf (msgmqtt, 50, "%d ",i);
  84.         client.publish("TOPIC", msgmqtt);
  85.         a = 0;
  86.         b = 0;
  87.  
  88.       }
  89.  
  90.     }
  91.     delay(500);
  92.  
  93. }


még azt kéne elérjem hogy a két GPIO láb kimenet legyen és RX-en és TX-en figyelje a "gombot"
a pergésmentesítést most nagyon alpári módon egy fél másodperces késleltetéssel a ciklus végén oldottam meg.
Legjobb lenne az lenne ha egy megszakítást tudnék tenni bele ami az rx-tx lábakat figyel.. vagy a GPIO0-2 lábakat és akkor RX-TX a kimenet

gomb1.PNG
    
(#) Gránátalma válasza Firefighter1 hozzászólására (») Feb 6, 2019 /
 
Ha az RX-TX-et akarod használni GPIO-nak szerintem a serial.begint kapd ki, vagy ifdefine-old meg.

A prellmentesítésre nem a fél másodperces delay a megoldás szerintem, hahenm az, ha dupla IF függvényt alkalmazol, egymásba írva, egyet a lenyomásra, majd egyet a visszatérésre, így elégséges kb 20-50ms delay is és TELJESEN prell mentes lesz a gombnyomás.

Szerk.: gyors átfutottam a kódot, a változók használata így nem annyira célszerű. Ekkora programnál nincs különösebben jelentősége, de ha komolyabb programot írsz és nem csak a program memória számít, hanem a RAM is, akkor ez felejtős.
A hozzászólás módosítva: Feb 6, 2019
(#) andyka hozzászólása Feb 6, 2019 /
 
Hello,
A prellmentesítésre -> Bővebben: Link, kitünő
(#) Firefighter1 hozzászólása Feb 6, 2019 /
 
Arra hol találok útmutatót hogy az RX és TX re hányas lábként hivatkozhatok!
Mert mindenhol csak a csatolt képet találom de az fals...
A hozzászólás módosítva: Feb 6, 2019
(#) Firefighter1 válasza Gránátalma hozzászólására (») Feb 6, 2019 /
 
Szia!
Idézet:
„Ha az RX-TX-et akarod használni GPIO-nak szerintem a serial.begint kapd ki”

Ezzel konfigurálom hogy sorosportkent menjen a tx rx nem pedig I/O.
A "prellmentesítést" még körbejárom.... néztem azt a könyvtárat is.... lehet hogy egy duplatripla nyakatekert IF el fogom megoldani!
És igen abba is igazad van hogy a válltozók ilyen jellegű használata "pazarlás"

De a komolyabb programoktól én még messze vagyok mint Makó Jeruzsálemtől.... odáig pedig hosszú az út! Addigra csak meg tudom "jól" tanulni!

Jelen pillanatban a legtöbb dolog amit tervezek egy ESP be paszirozni, az egy hő/pára mérés, meg 1 relé egy gomb vagy hő/pára meg 2 relé...
(#) Gránátalma válasza Firefighter1 hozzászólására (») Feb 6, 2019 /
 
Igen, de ha serialként használod, nem fogod IO-ként használni, ezért kell levenni róla, de ha "dinamikusan" akarod kapcsolgatni program ujraírás nélkül, maximum ujraindítás útján, akkor ifdefine- al tudod ki-bekapcsolgatni.

A prellmentesítéshez felesleges pocsékolni a program memóriát egy library-vel.(persze ezesetben elfér....)
Elég, ha If-be figyeled a gomb lenyomását, ezen belül meg figyeled egy másikkal a felengedést. Nem tud billegni az állapot, ha vár a program az állapotváltozásra.

Tudom, itt épp elfér a sok globál változó, ezért írtam, hogy ha esetleg a későbbiekben...

Szerk.: kifelejtettem, TX a GPIO1, RX a GPIO3.
A hozzászólás módosítva: Feb 6, 2019
(#) Firefighter1 válasza Gránátalma hozzászólására (») Feb 7, 2019 /
 
Igazság szerint eddig csak azért használtam hogy a programbeli hibákat tudjam kontrolálni.... minden "eseménynél"irattattam vele sorosporton a PC -re így láttam hogy hol a hiba!
Ugyhogy nem kell de az a plussz 2 láb jól jön!

És ha GPIO1 és GPIO3 akkor a pinmodnál pedig egyes és hármasikként "hivatkozok" rá?
(#) Gránátalma válasza Firefighter1 hozzászólására (») Feb 7, 2019 /
 
Igen.
Ha van szkópod, vagy logikai analizátorod, dugd rá erre a két lábra és nézd meg, pl egy beindításnál mit produkál, ugyanis míg a SETUP funkciód nem végzi el, addig a TX tutira beszélgetni fog.
A hozzászólás módosítva: Feb 7, 2019
(#) Firefighter1 válasza Gránátalma hozzászólására (») Feb 7, 2019 /
 
Akkor Rx/TX et jobb ha gombnak konfigurálom az én esetemben, mert ha relé lenne akkor lehet hogy addig rángatná.

Nagyon köszönöm, sokat segítettél!
Most emésztem egy kicsit a dolgokat aztán hétvégén valamit megalkotok
(#) Gránátalma válasza Firefighter1 hozzászólására (») Feb 7, 2019 /
 
Nem lehet, hanem tuti, hogy rángatná. Gombként nem okoz problémát, így van. Szivesen.
A hozzászólás módosítva: Feb 7, 2019
(#) Firefighter1 válasza Gránátalma hozzászólására (») Feb 9, 2019 /
 
Perllmentesitésre így jó?

  1. int  gomb;
  2. void setup()
  3. {
  4.   gomb = 0;
  5. pinMode(3, INPUT);
  6.  
  7. }
  8.  
  9.  
  10. void loop()
  11. {
  12.  
  13.     if (digitalRead(3) == 1) {
  14.       while ((digitalRead(3) == 0)){
  15.         delay(25);
  16.  
  17.       }
  18.       gomb = 1;
  19.  
  20.     }
  21.  
  22. }

Itt most semmi más nincs a kódba csak a gombfigyelés.

Az if-el belép ha a gomb lenyomódik, és elvileg utána azt vizsgálja hogy a gomb váltott e alacsonyra, ha nem akkor vár 25 milliszekundumot és megint megnézi, ha alacsony, akkor kilép az ismétlésből, a gombhoz rendelt segédváltozó értékét átállítja 1-re és fut tovább...

Legalábbis ezt szerettem volna elérni, és Folyamatábrásan nekem elvileg jól is néz ki, mert ezt a kódrészletet ebből a blockábrából fordította.
A hozzászólás módosítva: Feb 9, 2019
(#) Bakman válasza Firefighter1 hozzászólására (») Feb 10, 2019 /
 
A deklarálásnak nem a Setup részben kellene lennie? Így minden egyes körben megtörténik a változó létrehozása.
(#) proba válasza Firefighter1 hozzászólására (») Feb 10, 2019 /
 
Ha nem túl hosszú a programom, szivesebben alkalmazok számlálót prell mentesítésre.
Egy számláló minden loop ciklus lefutásnál nő egyet. ( ez ha jól szervezed többé kevésbé állandó idő) Minden gombnyomás/felengedés nullázza. Ha elér egy bizonyos értéket, akkor a gomb érvényessé válik, tárolható, és prellmentes. Így nem kell a programodnak azzal tölteni az időt hogy a gombra vár.
(#) Kovidivi válasza proba hozzászólására (») Feb 10, 2019 /
 
Hogyan különbözteted meg, hogy gombnyomás, vagy gomb elengedés történt? Beolvasod a szám mellé a gomb állapotát is?
(#) Firefighter1 válasza Bakman hozzászólására (») Feb 10, 2019 /
 
Az nem oda kerül, csak véletlenűl benne maradt,
Ezt a kis részletet csak "kiemeltem" az egészből, hogy meg tudjam kérdezni, a gomb része igy jó e..??

Hosszúnak éppen nem hosszú, de van:
2 gomb állapot figyelés
egy net csatlakozás
egy MQTT csatlakozás
2 mqtt topic hallgatás / írás
2 kimenet...
kicsit rendbe szedem, aztán felteszem ide.
Meg még össze kell fésülnöm, mert eddig csak külön külön probáltam a részegységeket, egy egész programként még nem..
(#) Gránátalma válasza Firefighter1 hozzászólására (») Feb 10, 2019 /
 
Jónak jó, de én a gombot fordítva használnám. Felhúznám tápra ellenállással, majd a gomb lenyomásával tenném le testre. Így amikor nincs használva nem lebegne.
A hozzászólás módosítva: Feb 10, 2019
(#) proba válasza Kovidivi hozzászólására (») Feb 10, 2019 /
 
A gomb állapotváltozásának figyeléséhez eleve tárolva van, így az utolsó tárolt állapot, a gomb aktuális értéke. ( hiszen ha változott volna a számláló törlődött volna. ) Ha meg akkor újra kiolvasom, már nem garantált a tárolt állapottal egyezés. Amire figyelni kell a számláló kezelés, hajlamos túlcsordulni, és újra az előírt értéket elérni.....Így viszont könnyű a hosszú és rövid gombnyomást is megkülömböztetni.
A hozzászólás módosítva: Feb 10, 2019
(#) kiborg hozzászólása Feb 11, 2019 /
 
Sziasztok!
LoLin NodeMCU-t használok, amin ESP12E modul van. Ennek hivatalosan GPIO 0-16 kivezetése van. Viszont előre deklarálva van pár és alapértelmezettként csak 11 GPIO használható fel. Hogyan tudnám megoldani, hogy a maradékot is sima GPIO-ként tudjam használni Arduino keretrendszeren.
Magyarul szeretném felülírni az alapértelmezett port felhasználási módot.
(#) Attila86 hozzászólása Feb 24, 2019 /
 
Próbálok egy ESP8266-al softAP+station módban játszani (AT parancsokkal). Az
  1. AT+CIPSTART=0,"TCP","futar.bkk.hu",80

parancsra station módban nagyon helyesen
  1. 0,CONNECT

választ ad az az ESP8266, és utána AT+CIPSEND paranccsal tudok beszélgetni a szerverrel.
Ha viszont ugyan ezt softAP+station módban követem el, akkor az AP+CIPSTART-ra ez a válasz:
  1. DNS Fail
  2. ERROR

Miért?
A hozzászólás módosítva: Feb 24, 2019
(#) Bakman válasza Attila86 hozzászólására (») Feb 24, 2019 /
 
Mindkét változatban "softAP+station" módot írsz.
(#) Attila86 válasza Bakman hozzászólására (») Feb 24, 2019 /
 
Öhhmm... ezt nem értem. De a lényeg: station módban csatlakozik, softAP+station módban pedig nem.
A hozzászólás módosítva: Feb 24, 2019
(#) Bakman válasza Attila86 hozzászólására (») Feb 24, 2019 /
 
Ok, már látom, kicsit összefolytak a sorok. Nem érdekes.

  1. AT+CIPMUX=1

Parancs volt már?
A hozzászólás módosítva: Feb 24, 2019
(#) Attila86 válasza Bakman hozzászólására (») Feb 24, 2019 /
 
Volt, de egyszerre úgyis csak egy eszközzel fog beszélgetni az ESP.
(#) Bakman válasza Attila86 hozzászólására (») Feb 24, 2019 /
 
Az internt szerint ez egy bug a Firmware-ben. Frissítés segíthet de közben előhozhat egyéb hibákat is... 22-es csapdája.
(#) nns hozzászólása Márc 15, 2019 /
 
Üdv Mindenkinek!
Több ESP8266-ot használok beépítve, OTA-n változtattam a programon amikor szükséges volt, egy win7-es PC-ről. Gépcsere után, win10, újabb Arduino IDE, az OTA nem működik.
Idézet:
„[ERROR]: Bad Answer: ERR: ERROR[4]: Not Enough Space”
hibát hoz.
A program mérete nem változott.
Valaki találkozott ilyen hibával, vagy van ötlete mi okozhatja?
(#) Skori válasza Firefighter1 hozzászólására (») Márc 15, 2019 / 2
 
Prellmentesítés:
Nemrég megmértem egy csomó féle gombot és kapcsolót, hogy mennyi ideig tart a prellegés. A legtöbb gomb esetében 1ms-nél rövidebb idő alatt lejátszódott a prellegés, néhány kivételes esetben eltartott 2...3ms-ig.
Ez alapján ha kiolvasom a gombot, és változott az állapota az utolsó olvasás óta, akkor megjegyzem az időt (millis() függvény), amikor újból kiolvasom (akkor megnézem a jelenlegi és a tárolt időpont különbségét) és ha legalább 3...10 ms óta nem változott, akkor elfogadom az új értéket... Ehhez nem kell késleltetés, nem lassítja annyira a programot, és teljesen megbízható módszer a gyakorlatban.
(#) Firefighter1 válasza Skori hozzászólására (») Márc 16, 2019 /
 
Szia!
Köszönöm a tippet...
Ezen már énis gondolkodtam már csak még a megvalósításán gondolkodtam! Eddig én ugy oldottam meg hogy a gomb olvasás után 75 ms késleltetés... de nem is jo... meg sok is... meg... meg...
De ez tetszik.
(#) Bell válasza Skori hozzászólására (») Márc 17, 2019 / 1
 
Én nem időt mérek, hanem néhány ms késleltetés után egymást követően beolvasott x darab várt értéket.
(#) Firefighter1 hozzászólása Ápr 4, 2019 /
 
Sziasztok!

Egy NodeMCU val szeretnék egy 12 voltos akksit figyelni.

Jol tudom hogy az ESP ADC-je 0 és 1 volt között fogad?
Ezt a leírást találtam, ez alapján egyszerűen a 2 ellenállás értékével lehet beállítani a tartományt hogy 0 és 1 V közé essen.

A kép alapján használható ez a verzió? vagy valami "elegánsabb-biztonságosabb" módszer?

Egy ilyen kódrészletet csatoltak mellé

  1. ESP8266 Internal ADC ProgrammingArduino
  2. /*
  3.  * ADC reading in ESP8266
  4.  * circuits4you.com
  5.  */
  6.  
  7. void setup() {
  8.   Serial.begin(9600);  //Initialize serial
  9. }
  10.  
  11. void loop() {
  12.   int sensor;                 //Define variable to read ADC data
  13.   sensor = analogRead(A0);    //Read ADC
  14.   Serial.print("ADC Value:"); //Print Message
  15.   Serial.println(sensor);     //Print ADC value
  16.   delay(500);                 //Have some delay to make it visible
  17. }


kiolvasásra.


A feszültségfigyelést szeretném úgy alakítani hogy kb 9,5v-15,2v közé essen egy tizedes pontosság elegendő.
A hozzászólás módosítva: Ápr 4, 2019
Következő: »»   81 / 137
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem