Fórum témák

» Több friss téma
Lapozás: OK   57 / 57
(#) 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 Csü, 9:23 /
 
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 Pé, 21:51 / 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 (») Szo, 10:11 /
 
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: Szo, 10:13
(#) cpt.zoltan.simon válasza sanyisay hozzászólására (») Szo, 13:01 /
 
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: Szo, 13:09
(#) sanyisay válasza cpt.zoltan.simon hozzászólására (») Szo, 16:50 /
 
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 (») Hé, 14:30 /
 
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.
Következő: »»   57 / 57
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu