Fórum témák

» Több friss téma
Lapozás: OK   57 / 137
(#) vargham válasza cpt.zoltan.simon hozzászólására (») Feb 11, 2018 /
 
Idézet:
„Arduino alatt pointer”

Ami sima C, illetve C++ néhány plusz könyvtárral megbolondítva.

A char típusú változóban egyetlen karaktert tárolhatsz, ami kevés az SSID és a password számára. Ezért kell egy memóriaterület, ahol egymás után eltárolod a kívánt karaktereket. Szokás ezt tömbnek is nevezni.

Az alábbi két deklaráció egymással egyenértékű:
const char* ssid = "V188";
const char ssid[] = "V188";
Bármelyiket is használod, hivatkozhatsz a tömb egy elemére ebben formában: ssid[x].
A hozzászólás módosítva: Feb 11, 2018
(#) cpt.zoltan.simon válasza vargham hozzászólására (») Feb 11, 2018 /
 
Oké. De amit én csinálok:
Van egy String, egy file beolvasás eredménye. A string neve "s".
Az adatok úgy néznek ki benne hogy:

wifissid:Teszthalozat
wifipass:jelszo
...... és még sok minden más

változó (wifissid) elválasztva kettőspontal majd az értéke (Teszthalozat) végén ENTER

Egy funkcióhívással megmondom mit keresek. Mondjuk wifissid.
Ezt a witch nevű változóban tárolom.
Megkeressük a witch tartalmának pozícióját (wifissid) az "s" stringben. Hozzáadok +1-et a kettőspont miatt. Ez a "from" változó innen kezdődik az amit ki akarok szedni a szövegből, ami a to-ig tart (ENTERT keresek "from"-tól)

Nos akkor a what-ba bepattintom a szöveget from-tól to-ig. EDDIG TÖKÉLETES.

És innen érdekes: Ezt az adatot (mondjuk keressük a szövegben a wifissid nevét) a wifissid nevű változóba kellene bepattintani, ami egyébként globális változó.

Tehát a witch-et valahogy mutató pointerként hozzá kéne "társítani" az értékét tartalmazó változóhoz (wifissid) hogy a what (hálózat neve) oda kerüljön ahová kell.

Tehát ha a wifissid-t keresem a kikukázott szöveg a wifissid globális változóba kerüljön, de ha mondjuk a wifipass-t keresem akkor az meg abba. Mindezt úgy hogy a egy funkció hívás legyen:

  1. SearchValue ("s", "wifissid)


Melynek eredményeként a wifissid változómban benne az érték a s nevű string-ből.

001.jpg
    
(#) vargham válasza cpt.zoltan.simon hozzászólására (») Feb 11, 2018 /
 
1. Kódot rajk be, ne képmentést.
2. A string C++ cucc, sok helyet foglal. Általában mikrokontrolleren inkább char tömböt használnak.
3. Ezt nem értem: "Tehát a witch-et valahogy mutató pointerként hozzá kéne "társítani" az értékét tartalmazó változóhoz (wifissid) hogy a what (hálózat neve) oda kerüljön ahová kell."
(#) rolandgw válasza cpt.zoltan.simon hozzászólására (») Feb 11, 2018 /
 
Csak egy ötlet: strcpy, memcpy az értékadás helyett?
(#) cpt.zoltan.simon válasza vargham hozzászólására (») Feb 11, 2018 /
 
Szia!

Alakul közben. A kóddal az a baj, hogy szétesik itt.
Arról van szó, ha megadom hogy witch = wifissid akkor a szövegbe keresse meg azt hogy "wifissid:" és ami utána van azt tegye bele a wifissid változóba.

Tehát ha a stringben az van hogy wifissid:Teszt (és éppen erre vagyok kíváncsi)
akkor

  1. String wifissid = "Teszt"


legyen a hatás.

Erről az oldalról tájékozódom most:
Pointer-Arduino
(#) cpt.zoltan.simon válasza rolandgw hozzászólására (») Feb 11, 2018 /
 
Az a rész már rendben van. Most már csak azon dolgozok, hogy egy használható függvény legyen belőle. És ehhez kell a pointer.
(#) cpt.zoltan.simon válasza vargham hozzászólására (») Feb 11, 2018 /
 
Ez a mostani kísérleti kódom

  1. pwitch = &witch;
  2. witch = "wifissid";
  3. Serial.print("witch változó direktben: "); Serial.println(witch); //(wifissid)          
  4. *pwitch = "Blablabla"; //witch=wifissid -> witch(*pwitch) = Blablabla
  5. Serial.print("witch változó indirektben: "; Serial.println(*pwitch); //Blablabla
(#) cpt.zoltan.simon hozzászólása Feb 11, 2018 /
 
Itt a vége kb:

  1. //Witch parameter we search:
  2. String witch, *pwitch = &witch;
  3. //Where sould we store it:
  4. String where, *pwhere = &where;
  5.  
  6.   witch = "wifissid";             //Értékadás tesztből
  7.   pwhere = &wifissid;            
  8.  
  9. int from      = (s.indexOf(':',   s.indexOf(*pwitch)) + 1);        //+1 mert az elválasztó karakter
  10. int to        = (s.indexOf('\n',  s.indexOf(*pwitch)) - 1);        //LC + CR miatt
  11.       *pwhere = s.substring(from, to);
  12.  
  13. //Bent a helyén?
  14. Serial.print("Érték a helyén: "); Serial.print("\t"); Serial.print("wifissid"); Serial.print("\t"); Serial.println(wifissid);


MOst már csak át kell pakolni. Sajnos még mindig az van, hogy a kért paramétert meg kell adnom String-ként, és az ugyan olyan nevű változót (célt) mint pointer-t, de ezt majd még kikalapálom valahogy.
(#) cpt.zoltan.simon hozzászólása Feb 11, 2018 /
 
Sziasztok!
Köszönöm a segítséget, és a tanácsot mindenkinek.
Sajnos csak képként tudom az eredményt bepakolni ide, mert a kódban az ENTER keresése \n itt a weblapon összekuszálja a kódot és teljesen szétesik.

Végül úgy döntöttem, hogy érték visszaadós-ra csinálom meg. Így a MINEK az értékét keresem részhez nem kell pointer. Ám kiegészítettem azzal, hogy melyik string-ben keresünk amihez már az adott string mutatója szükséges.
A végső eredmény a képen, ha valakinek szüksége van rá vagy ötletet ad annak örülök, értelmesebb teljesebb formában látható lesz majd a WifiManager-Extra nevű tervezett cikkben.
(#) gerleimarci válasza cpt.zoltan.simon hozzászólására (») Feb 12, 2018 /
 
Én is azt hittem, hogy összekuszálja, de csak az előnézet olyan.
(#) cpt.zoltan.simon hozzászólása Feb 15, 2018 /
 
Sziasztok!

Finishébe érkezek az (én csak úgy hívom hogy WifiManager Extra) nevű projectemnek.
Abban kérném a segítségeteket, hogy adjatok ötleteket milyen paramétereket fűzzek még bele a project-be. Ami most van

Wifihez:
WifiSSID, WifiPassword, IP, Mask, Gateway

MQTT brokerhez:

Broker address
Broker port
Broker login
Broker password
topic prefix: Ezt azért tettem bele mert pl az Adafruit esetében egy feed elé be kell pakolni azt hogy: {username}/feeds/

Milyen ötletetek lenne, mi az amit még meg kellene, lehetne adni egy üres termék esetén felkészülve az user kódra?
(#) cpt.zoltan.simon hozzászólása Feb 16, 2018 / 1
 
Wifimanager-extra

Sziasztok!
Meséltem róla, készül egy váz amivel nem kell hardcode-olni felhasználó specifikus adatokat úgymint wifissid, wifipass, és MQTT. Ez azért jó, mert ha változtatsz mondjuk a wifi jelszón, akkor nem kell kiszerelned a lakásban az összes kapcsolót és konnektort rákötni a laptopra újra programozásért.

A lényege hogy a filerendszerben található setup.txt fileből kiszedi az adatokat és létrehoz globális változókat. Ezeket felhasználva kapcsolódik wifire, majd kapcsolódik MQTT szerverhez és elküld egy teszt üzenetet. Ha mindez sikerül akkor rendben vagyunk. Ha nem, akárhol akad el, AP-ra vált, a 192.168.2.1 címet begépelve bejön egy weblap ahol meg lehet adni az inithez szükséges adatokat.

Kérnélek titeket akinek van ideje, nézze át, tesztelje, véleményezze. SPIFFS-t használ, tehát az első használat előtt a data könyvtárat (benne a main.html) fel kell tölteni az ESP file rendszerére.
Ez most még egy komplett progi, később fogom majd egy függvényhívássá formálni.
Mindenféle ötletet szívesen veszek. Ha pedig ki lett kupálva teljesen, esetleg még feljavítva egyéb ötletekkel akkor a cikket is megírom hozzá.
(#) sanyisay válasza cpt.zoltan.simon hozzászólására (») Feb 17, 2018 /
 
Nem kell kiszerelni a beépített ESP egységeket újraprogramozáskor, a lefordított Arduino kódot is fel tudod tölteni Wifin keresztül ESP-re, ez az OTA frissítés.
Már linkeltem ezt az oldlalt. Bővebben: Link
Itt 4 féle OTA lehetőséget írnak le, én Weboldalról történő feltöltést használom. "/update" Weboldalon kiválasztod a .bin fájlt és megnyomod a feltöltés gombot.

Ennyi az egész kód ami kell hozzá ESP8266WebServer-nél.
B
  1. #include <ESP8266WiFi.h>
  2. #include <ESP8266WebServer.h>
  3. #include <ESP8266HTTPUpdateServer.h>
  4.  
  5. #define STA_SSID "***********"
  6. #define STA_PASS  "**************"
  7.  
  8. ESP8266WebServer httpServer(80);
  9. ESP8266HTTPUpdateServer httpUpdater;
  10.  
  11. void setup(void) {
  12.  
  13.         Serial.begin(115200);
  14.         Serial.println();
  15.  
  16.         WiFi.mode(WIFI_STA);
  17.         WiFi.begin(STA_SSID, STA_PASS);
  18.         if (WiFi.waitForConnectResult() != WL_CONNECTED) {
  19.                 delay(500);
  20.         }
  21.  
  22.         Serial.println(WiFi.localIP());
  23.  
  24.         httpUpdater.setup(&httpServer);
  25.         httpServer.begin();
  26.  
  27. }
  28.  
  29. void loop(void) {
  30.         httpServer.handleClient();
  31. }


Ez pedig a leírása
A hozzászólás módosítva: Feb 17, 2018
(#) cpt.zoltan.simon válasza sanyisay hozzászólására (») Feb 17, 2018 /
 
Igen. Ez igaz. Viszont én szerettem volna egy kicsit "kereskedelmibb" pofát kölcsönözni neki.
Ami a terveim közt szerepel, hogy legyen neki egy user szintű hozzáférése ahol csak a wifi-vel lehet játszani, esetleg user-expert-ben IP címekkel, meg legyen egy fejlesztői ahol aztán belekalapálhatsz mindent.

A terv amiért ez készült, hogy minden egyes 63mm-es konnektor aljzatba, és villanykapcsoló helyére pakolok egy ESP-t. A villanykapcsoló helyén pl TFT kijelző amely amellett hogy villanykapcsoló, még szobatermosztát is.
Viszont ha cserélem a wifikódot (mi mást ugye), akkor ne kelljen Arduinóval szüttyögni. A feleségemnek nem is menne. + egy user-nél ne legyen forráskód nem igaz?

A kiszerelés nélküli firmware update egy másik jó dolog, köszi, de jó ötlet!
A hozzászólás módosítva: Feb 17, 2018
(#) sanyisay válasza cpt.zoltan.simon hozzászólására (») Feb 17, 2018 /
 
igen az ota lehetőséget nem is a projektedhez írtam, inkább csak fenn akadt a szemem az usb-n keresztüli frissítésen.

Még egy ötlet:
ESP meglévő villanykapcsolóba pakolása macerás lehet mert legtöbbször csak a fázis megy oda és kellene a nulla is. Legalább is amiket én láttam kész esp kapcsoló egységeket azoknál így volt. Mondjuk a Sonoff terméke. Viszont vannak egész pofás kinézetű 433Mhz es kapcsolók amik működnek a régi kapcsoló helyére beszerelve is. Azokat meg lehet vezérelni ESP-vel 433 RF modul segítségével. ITT pont erről ötletelgettünk.
(#) cpt.zoltan.simon válasza sanyisay hozzászólására (») Feb 19, 2018 /
 
Igen. Tapasztaltam én is.
Két megoldás van.
1: Kapcsolók alatt szokott lenni az ajtó mellett konnektor. Abba felülről jón az áldás, tehát ami hiányzik fel lehet vezetni.
2: Fentről kell új kábelt behúzni. Ami szerintem manapság nem lehet gond, mert ha csak egy szálat húztak oda akkor eleve elcseszték, ha pedig MTK vezetéket... Nos én azt se preferálom.
(#) choco01 hozzászólása Feb 24, 2018 /
 
Hali.

Adott egy ESP12E, és egy BME280 szenzor.

Sikerült minden adatot kiolvasni, viszont a légnyomás adat nem pontos.

Szerintetek lehet ezt valahogy kalibrálni?Mert mondjuk egy időjárás állomásban első használatkor kalibrálom a tengerszintfeletti magasságomra, esetleg egy pontos értékre, és onnantól jó, itt viszont nem tudom hogyan lehet ezt megcsinálni.

Előre is köszi!
A hozzászólás módosítva: Feb 24, 2018
(#) Panhard válasza choco01 hozzászólására (») Feb 24, 2018 /
 
Szia. Mennyire nem pontos? Én is használok ilyen szenzorokat, szerintem elég pontos, bár nem tudom mennyire, nincs viszonyítási alapom.
Ennél is be lehet állítani a tengerszint feletti légnyomást:
  1. #define SEALEVELPRESSURE_HPA (1013.25)

de lehet hogy azt a magasság kiszámításánál használja csak:
  1. Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
A hozzászólás módosítva: Feb 24, 2018
(#) icserny válasza choco01 hozzászólására (») Feb 24, 2018 /
 
A légnyomást - a mérési hely magasságának ismeretében - át kell számolni a tengerszintre. Bővebben: Link

Közelítő formula:
P0 = Pm /( 1 - magasság/44330)^5.255

ahol Pm az általunk mért, P0 pedig a tengerszintre átszámított légnyomás, [Pa]-ban megadva
a magasságot pedig [m]-ben adjuk meg

Még durvább közelítés:
Lakóhelyemen egyszerűen 1440 Pa-t hozzáadok a mért értékekhez.
A hozzászólás módosítva: Feb 24, 2018
(#) andyka hozzászólása Feb 25, 2018 /
 
A BME280 szenszor nektek mukodik folyamatosan? Nalam maghatarozatlan (mikor tobb, mikor kevesebb) ido utan mintha elvesztene a szenzort az ESP, megszakad a kapcsolat es nem olvas belole erteket, I2C kapcsolat alatt.
A hozzászólás módosítva: Feb 25, 2018
(#) vargham válasza andyka hozzászólására (») Feb 25, 2018 /
 
Nekem tökéletesen működik. STM32 MCU-val használom.
(#) Bakman válasza andyka hozzászólására (») Feb 25, 2018 /
 
PIC mikrokontrollerrel is tökéletes, 15 másodpercenként kérem el az adatot.
(#) choco01 hozzászólása Feb 25, 2018 /
 
Na sikerült úgy kalibrálnom hogy 13hPa-t hozzáadok az értékhez és igy tizedpontosságu lett a meteorológiai állomásommal!A magasságot a nyomásbol számolja úgyhogy nem túl pontos..

DHT22-vel tesztelem, dht páratartalomban talán pontosabb, hőmérsékletben ugyan annyik az értékek.Viszont a DHT gyakran elszáll és nem ad jelet..

A másik bajom hogy néha lefagy és nem érem el akkor újra kell indítani, van hogy 1 van hogy 12 óra után..

A szervert ha nem 80as portra hanem bármi másra írom nem érem el az adott portokon, az miért lehet?


Köszi mindenkinek!
(#) kitartás válasza andyka hozzászólására (») Feb 25, 2018 /
 
Nekem esp12f és megy (kb 20cm dróton).
(#) Kera_Will válasza andyka hozzászólására (») Feb 26, 2018 /
 
Azt nem mered elárulni milyen fizikai kivitelben készült el az I2C büszke?
Akkor közelebb lennénk a problémához.
(#) andyka válasza Kera_Will hozzászólására (») Feb 26, 2018 /
 
Itt van. Kép.
Megy-megy aztán egyszer csak "nan" az érték. Még nem bírt ki 24 órát egy futtába.
csak hőmérőként használtam
A hozzászólás módosítva: Feb 26, 2018
(#) röntgen válasza andyka hozzászólására (») Feb 26, 2018 /
 
Szia. Ha nem vezeték kontakt probléma, akkor a BME leforrasztását nézném meg. Egy kis flux és rámelegítenék.
(#) andyka válasza röntgen hozzászólására (») Feb 26, 2018 /
 
Lenyegebe mindkettot megprobalhatom.
(#) Kera_Will válasza andyka hozzászólására (») Feb 26, 2018 /
 
Köszi de ebből nem derült ki a lényeg ... A 2 panel között hány km drót van ?!
(#) neogeo2 hozzászólása Feb 27, 2018 /
 
Sziasztok!
Egy ESP-12E modullal és egy DHT11 szenzorral küzdök. Arduino Ticker.h hibával kapcsolatosan szeretném tanácsotokat kérni. Biztos én csinálok valamit rosszul, de sajnos nem jövök rá mi a hiba.
A kód ez:
  1. #include <SimpleDHT.h>
  2. #include <Ticker.h>
  3.  
  4. int pinDHT11 = 2;
  5. byte temperature = 0;
  6. byte humidity = 0;
  7. int DHTerr = 0;
  8. SimpleDHT11 dht11;
  9. Ticker ReadDHTTicker;
  10.  
  11. void ReadDHTSensor(){
  12.   DHTerr = SimpleDHTErrSuccess;
  13.   if ((DHTerr = dht11.read(pinDHT11, &temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
  14.     Serial.print("Read DHT11 failed, err=");
  15.     Serial.println(DHTerr);
  16.   } else {
  17.     Serial.print("Temperature: ");
  18.     Serial.print((int)temperature);
  19.   }
  20. }
  21.  
  22. void setup(){
  23.   Serial.begin(115200);
  24.   ReadDHTTicker.attach(1.5, ReadDHTSensor);
  25. }
  26.  
  27. void loop() {
  28. //  ReadDHTSensor();
  29.   Serial.print(".");
  30.   delay(2000);
  31. }


A terminálban pedig a következő jelenik meg:
  1. .Read DHT11 failed, err=101
  2.  
  3. Exception (9):
  4. epc1=0x40100f69 epc2=0x00000000 epc3=0x00000000 excvaddr=0xffffffff depc=0x00000000
  5.  
  6. ctx: sys
  7. sp: 3ffffd00 end: 3fffffb0 offset: 01a0
  8.  
  9. >>>stack>>>
  10. 3ffffea0:  00000000 3fff0254 ffffffcc 00000000  
  11. 3ffffeb0:  40218173 3fff026c 0000001d ffffffff  
  12. 3ffffec0:  40000f58 00000000 00000020 00000000  
  13. 3ffffed0:  00000000 00310303 00640100 00000048  
  14. 3ffffee0:  3ffeaff8 00000096 3ffeb010 3ffeafec  
  15. 3ffffef0:  00000000 3ffeaff8 3ffeb003 3ffeb02f  
  16. 3fffff00:  00000000 00000000 3ffeb019 3ffeb069  
  17. 3fffff10:  3ffeb035 3ffeb051 00000000 00000000  
  18. 3fffff20:  00000000 00000000 0000002c 00000000  
  19. 3fffff30:  3fff0614 40217b92 3ffed500 3fff0254  
  20. 3fffff40:  00000000 3ffee3c0 3ffed500 3ffeafd4  
  21. 3fffff50:  3ffeafd4 000000be 00000000 0000002c  
  22. 3fffff60:  00000000 3ffeafde 4023108f 3ffed500  
  23. 3fffff70:  3ffeafc8 3fffdcc0 3ffe9b98 3ffe9b98  
  24. 3fffff80:  00000080 3ffed500 00000000 3fffdcb0  
  25. 3fffff90:  4023096f 3fffdab0 00000000 402250fb  
  26. 3fffffa0:  3ffe9b98 40000f49 3fffdab0 40000f49  
  27. <<<stack<<<
  28.  
  29.  ets Jan  8 2013,rst cause:2, boot mode:(1,6)
  30.  
  31.  
  32.  ets Jan  8 2013,rst cause:4, boot mode:(1,6)
  33.  
  34. wdt reset


Ha a mainban hívom meg a ReadDHTSensor(); függvényt (most kikommentezve), akkor szépen írja az eredményt, Tickerből ez nem jó. Mit rontok el?
Köszönöm a tippeket!
Következő: »»   57 / 137
Bejelentkezés

Belépés

Hirdetés
XDT.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