- Mobil flották
- Yettel topik
- Egy szenzor, két zoomkamera: újraírta a Huawei a mobilfotózás történetét
- Bemutatkozott a Poco X7 és X7 Pro
- Xiaomi 11 Lite 5G NE (lisa)
- Samsung Galaxy A56 - megbízható középszerűség
- Samsung Galaxy S22 Ultra - na, kinél van toll?
- Google Pixel topik
- Samsung Galaxy A55 - új év, régi stratégia
- Milyen okostelefont vegyek?
-
Mobilarena
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
-
válasz
Brain75 #14998 üzenetére
Ja, hogy ja! Ez a fontos információ kimaradt, hogy az analóg és a gomb mindig együtt kapja az inputot. Ez esetben valóban weiss kolléga megoldása kapja a pontot.
Egy apró változtatást eszközölnék csak a kódján:const int kapcsolo = 7;
const int gomb = 9;
const int poti = A0;
void setup(){
pinMode(kapcsolo, INPUT_PULLUP);
pinMode(gomb, INPUT_PULLUP);
pinMode(poti, INPUT);
}
void loop(){
int poti_ertek = 0;
if(digitalRead(kapcsolo)){
poti_ertek = analogRead(poti);
}
else{
poti_ertek = digitalRead(gomb)?1023:0;
}Így a poti_ertek változóban mindig egy 0-1023 közti szám lesz, nem szükséges a kapcsoló állását később külön vizsgálni. A gombnál feltételeztem, hogy az alsó (kiengedett) állásban van megnyomva (poti_ertek=0).
-
válasz
Brain75 #14998 üzenetére
Fejből írom, de kb. erre gondoltam:
const int kapcsolo = 7;
const int gomb = 9;
const int poti = A0;
void setup(){
pinMode(kapcsolo, INPUT_PULLUP);
pinMode(gomb, INPUT_PULLUP);
pinMode(poti, INPUT);
}
void loop(){
bool gomb_lenyomva = false;
int poti_ertek = 0;
if(digitalRead(kapcsolo)){
poti_ertek = analogRead(poti);
}
else{
gomb_lenyomva = digitalRead(gomb);
}
} -
Brain75
senior tag
A kapcsolót is a kézifék kar nyomja meg és a potmétert is a kézifék kar mozgatja.
Pont az a lényeg hogy karral lehessen digitális vagy analóg.
Ezért gondoltam elsőre egy kapcsolóra ami kikapcsolja az egyik bemenetet.De amit weiss #14995 fórumtárs írt az jó lehet de sajnos túl van a mostani ismereteimen a program megírása.
-
válasz
Brain75 #14991 üzenetére
Szerintem értelmetlen ez a megszakító gomb, mert egyszerű logika elég lenne hozzá: a nyomógomb felülírja az analóg jelet. Ha a nyomógomb nincs lenyomva, az analóg jelet olvasod be, ha a nyomógomb le van nyomva, az analóg állásától függetlenül 100% állást küldesz. Így akár felváltva is lehet használni a kart és a gombot.
De ha mindenképpen ragaszkodsz hozzá, akkor olyan javaslatom van, amihez 1db analóg láb is elég: a potméter marad fixre bekötve. A VCC és az A0 közé pedig sorba kötve a nyomógomb és a kapcsoló, ami kiiktatja.
Működés: az A0-on az analóg jelet kell olvasni. A nyomógomb 5V-ra húzza az A0-t, a poti állásától függetlenül. A kapcsoló pedig ezt meg tudja akadályozni.
Nem jó, az analóg GND felőli állásában rövidzárlatot csináltamÉn az első megoldást csinálnám. Ha használnom kellene is inkább egy ilyen megoldást preferálnék, mint kapcsolgassam ide-oda. Kivéve, ha a megrendelőnek kifejezett kívánsága volt (de akkor meg lebeszélném róla
)
-
Brain75
senior tag
Na ez jó út mert akkor csak egy olyan kapcsoló kell ami benyomva marad .
Elvben tudom, hogy a feltétele a különöző portok olvasásának a kapcsoló állása és a kapcsoló állásnak függvényében vagy a digitális vagy az analóg portot olvassa be.
Na de ennek a megírásához sajnos még amatőr vagyok. -
-
-
Brain75
senior tag
Kéziféket gyártok PC-hez.
Alapjában véve analóg kézifék, de igény van arra hogy digitálisként tehát mintha lenyomnál egy gombot működjön.
Azt szeretném ha ez váltható lenne és egy kapcsolóval lehetne váltani a két funkció között.
Azért kellene nekem hogy ha analóg állásban van akkor a potméter adatát olvassa be és ha digitális állásban van akkor a fizikai kapcsoló állását, és ezzel emulálva egy gomb lenyomását érzékelné.
Ha szimplán csak bekötöm akkor mind a két adatot fogja egyszerre olvasni.
Ezt szeretném elkerülni azzal, hogy lekapcsolom magát a bemenetet a kapcsoló állásától függően. -
-
Brain75
senior tag
Mind a két olvasott értékre szükségem van de nem egyszerre.
A bekötés:A billenő kapcsoló egy ON-ON kapcsoló, tehát a középső lába a közös és a két oldal amit felváltva tud kapcsolni a középső közös lábbal.
Potméter analóg láb A0
Potméter GND láb Billenő kapcsoló egyik oldal.
Potméter VCC Arduino VCC port.Kapcsoló:
1-es láb Arduino 9-es port
2-es láb GND billenő kapcsoló másik oldalBillenő kapcsoló:
Középső közös láb Arduino Pro micro GND port
1-es oldal kapcsoló 2-es láb
2-es oldal Potméter GND láb.Tehát a GND van megszakítva.
Teljesen igazad van hogy az A0 megkapja a VCC-t és ezért megy 100%-ra.
Meg kellene szakítanom a VCC-t is vagy az A0 és a potméter közötti kapcsolatot is ahhoz hogy ne érzékeljen semmit.
Milyen kapcsoló alkalmas erre? -
-
válasz
Brain75 #14982 üzenetére
Szia! Nem értem a logikát.
A potméter egy feszültségosztó, a VCC és a GND közti 5V-ot osztja le, az A0 ezt a feszültséget méri. Ha megszakítod a GND-t, nincs mit osztani, az A0 megkapja a VCC-t.
Miért van szükség erre? Ha egyszerre csak egy bemenetre van szükséged, akkor olvasd csak az egyiket a programból. -
Brain75
senior tag
Sziasztok
Tud nekem valaki segíteni esetleg a következőben.
Arduino Pro Micro
Adott egy analóg jelet adó potméter amit az A0 VCC és GND portokra van kötve.
Adott egy kapcsoló ami a 9-es és a GND portokra van kötve.
A két bemenetet külön szeretném használni, ezért a földet szakítom meg a billenő kapcsolóval, és így szeretnék váltani az analóg és a digitális (kapcsoló) bement között, nem kell a kettőnek egyszerre működnie.
Joystick library-t használok hozzá.A probléma az hogy ha átkapcsolóm a billenő kapcsolót a digitális (kapcsoló) bemenetre akkor az analóg bemeneti jele felugrik 100%-ra.
Ha visszakapcsolom akkor visszamegy 0%-ra.Ha tud nekem valaki segíteni akkor elküldeném neki a sketch-et hátha abban van a hiba.
Előre is köszönöm a segítséget.
-
vargalex
félisten
-
Kaptam valakitől pár éve egy noname, UNO-hoz való TFT kijelző-shieldet, aminek egyetlen hibája, hogy az összes pin-t elfoglalja, így gyakorlatilag semmire nem lehet használni (vagy mega board kellett volna hozzá), aztán kiderült, hogy az egyik analóg pin mégis szabad, úgyhogy építettem belőle egy játék oszcilloszkópot. Gondoltam megosztom, hátha érdekel valakit.
Még a szoftver nincs teljesen kész, de már lehet vele játszani. -
válasz
Janos250 #14977 üzenetére
Az én routeremen egyedül csak a pi2-n futó openvpn szerver van kiengedve, képzelem azt is hányan próbálják kinyitni egy nap...gyapo11: egyszer volt egy hasonló kísérletem, kb. 8 éve, egy olcsó, alkatrésznek való netbook-ból torrent-klienst csináltam, XP alapokon. 2-3 nap múlva 200-nál is több vírust találtam rajta.
-
gyapo11
őstag
válasz
Janos250 #14977 üzenetére
Ezért mondták sok éve a fibernet szerelői, hogy xp-t simán a netre téve 10 perc lesz az élettartama. Én a 21-es portot irányítottam a gépemre a routerben és elindítottam az ftp server programot. Nemsokára pár másodpercenként próbált valaki belépni, persze sikertelenül, anonymous letiltva. Szóval oda kell figyelni, mert állandóan pásztáznak.
-
Janos250
őstag
Az egyik ESP32-n olyan WEB szerver van, ami a 80-as porton kommunikál, hosszú, hogy miért. Mivel itthon is próbáltam, a routeren a kintről jövő port 80-as lekéréseket ráirányítottam
az ESP32-re, és kb egy órát magára hagytam. (ebéd)
Meglepődve láttam, hogy ez alatt az idő alatt 22 alkalommal próbáltak belépni, 12 IP címről:
27 224 137 17
45 45 10 45
46 245 22 225
101 200 204 55 3x
118 89 65 15 3x
128 14 134 170
167 71 39 182 7x
180 252 124 7
184 105 139 68
194 50 14 21
200 107 89 157
205 185 122 102
Ezekkel az URL "toldalékokkal":
/_ignition/execute-solution kétszer
/boaform/admin/formLogin
/config/getuser?index=0 kétszer
/login
/manager/html
/TP/public/index.php
/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
/wp-login.php
admin/login.asp
Az IP címeket a http://geoiplookup.net/ -en megnézve, a legkülönbözőbb helyeken vannak. Főleg Ázsiában, de Amerikában, Németország, Oroszországban is. Még szerencse, hogy az ESP programja, ha számára értelmezhetetlen adatot kap, egyszerűen eldobja.
Ezek szerint az Arduinos megoldásoknál is bizony számítani kell arra, hogy megpróbálnak betörni, ezt le kell kezelni.
-
Janos250
őstag
Valaki kérte pár hónapja, hogy a string kezelésről az ESP32-n dologról írjak le neki pár dolgot.
Ami úgy hirtelenjében eszembe jutott, azt lefirkantottam. Terveztem, hogy majd egyszer rendbe teszem, de az elmaradt.
Én alapvetően lusta ember vagyok, és a lustaság - mint tudjuk - fél egészség, és az egészség manapság nagyon fontos
Ezért aztán így maradt, de felteszem, hátha valakit érdekel.
Ha éppen nincs jobb dolgod, belenézhetsz, ha érdekel.
Ne tessék morogni, hogy fésületlen, tudom. :-)
stringekről valami ESP32-n -
Janos250
őstag
törölve
-
gyapo11
őstag
válasz
RAiN91 #14972 üzenetére
Ha a nagy impedancia a probléma, akkor 20 mA-ben kellene gondlkodni, ami 3.3 V-on 165 Ω, tehát jóval kisebb, mint amiről beszélgettek. Vagyis a hosszú vezeték egyik végén a nyomógomb, a másik végén az esp, a D7 közelébe forrasztott 165-200 Ω-os ellenállás a pozitívra és esetleg párhuzamosan egy kondi, de szerintem 20 mA nagyságrendű jelet nem fog egy 4 m-es drót összeszedni, de ha mégis, akkor a kondi azt megeszi, ezzel kicsit lassítva a H szint megjelenését a bemeneten.
-
RAiN91
őstag
Köszi a válaszokat. Az ellenállás sajnos nem vált be, ugyan úgy érintésre érzékel. 1M Ohm-al próbáltam, az volt itthon. Kondit még megpróbálom.
-
válasz
RAiN91 #14969 üzenetére
Persze, meg lehet oldani amit írtál, de ez nem megoldás a problémára, legfeljebb a kapcsoló pergése ellen véd.
Ha most az a gond, hogy zárva van a héten minden hobbielektronika üzlet és nem tudsz venni ellenállást, azon könnyen lehet segíteni, csak írd be, melyik városban laksz, vki biztos ad neked egyet. -
RAiN91
őstag
És a másik megoldás, hogy ne impulzusra működjön a riasztás, hanem egy hosszab jelre? Pl. ha 5 másodpercig folyamatosan érzékel, akkor induljon a program. Ezt nem tudom, meg lehet-e írni egyszerűen?
Most ezt úgy adtam meg a programban, hogy ha érzékel egy impulzust, akkor 5 másodperc múlva megint nézze, és ha akkor is igaz a feltétel, akkor induljon a riasztás. Ez ugye két impulzusból áll, mert csak ennyire "értek" hozzá, és ha pont 5 másodperc múlva megint valami zavar van, akkor téves lesz a riasztás. Bár azért olyan sűrűn nem szokott tévesen zargatni, csak napi 2-3x.
-
válasz
RAiN91 #14967 üzenetére
Hát... Mivel a vezeték antennaként viselkedik, ilyen nagyon hosszú vezetéknél még alacsony értékű felhúzó ellenállás mellett is a levegőből összeszedett zaj nagyobb lehet, mint a küszöbérték az alacsony és a magas érték közt, így mindenképpen árnyékolt kábel kellene (pl. 1 erű fülhallgató kábel), de legjobb lenne minél közelebb vinni a NodeMCU-t a kapcsolóhoz. Az ellenállás értékét sem lehet akármeddig csökkenteni, mert nagyobb fogyasztás, melegedés lesz a végeredmény.
-
válasz
RAiN91 #14965 üzenetére
Igen, ezzel a belső, beépített felhúzó ellenállást kapcsolod be, amivel elvileg - rövid vezetékkel - hibátlanul kellene működnie. Azt viszont nehezen hiszem, hogy akkor is beriaszt, ha semmi sincs rádugva.
Próbáld ki, hogy a D7 és a 3,3V közé teszel egy 10k ellenállást, ha ez sem segít, mert nagyon hosszú a vezeték a NodeMCU és a kapcsoló közt, akkor próbáld ki 1000 Ohm-mal. Ha lehetőséged van, cseréld ki a kapcsoló vezetékét árnyékolt vezetékre. Bár azt nem írtad, hogy milyen hosszú ez a vezeték. -
RAiN91
őstag
Nem tudom mitől annyi, elég hülye vagyok sajnos az egészhez. A programban ezt adtam meg, gondolom ez definiálja, hogy annyi legyen:
digitalWrite(D7,HIGH);
Az a gond, ha a kapcsolót se kötöm rá, és még a vezetéket is leveszem D7-ről, még úgyis magától beriaszt. Így gondolom hiába raknám oda az ellenállást? MicroUSB 5V-ról működik, kb. 10 féle töltő van itthon különféle kábelekkel, az egyik kínai 1A-es és egy ezer éves 0.55A-essel viszonylag stabilabban működik, talán ettől is függhet?
-
RAiN91
őstag
Sziasztok
NodeMCU-t használok, egy SIM800L modullal, riasztóként. Egy nyomógomb működteti, ha a nyomógomb kinyílik (mert az ajtó nyomja meg, értelemszerűen ha kinyitom az ajtót, akkor a nyomógomb alap állapotba kerül), akkor felhívja a telefonom.A programban úgy van, ha D7 pin lehúz, akkor induljon a riasztás. D7 alap állapotban 3.3V, és GND-vel húzom le a kapcsolón keresztül. A probléma, hogy néha magától is beriaszt tévesen, mert annyira érzékeny a D7, ha hozzá nyúlok, akkor is már érzékel. Próbáltam úgy is, hogy alapból 0V állapota, és 3.3V-ra kapcsol, de ugyan ez a probléma akkor is.
Ellenállásokat nem használok, lehet ez a gond? Eléggé kínai az egész nekem, net alapján raktam össze innen-onnan, így nagyon nem is akarok bele menni, ha egyszerűen nem lehet megoldani, vagy programozástechnikailag vagy hardverileg.Esetleg ami eszembe jutott az az, ha pl. 5 másodpercen keresztül egyfolytában lehúzza D7-et, akkor riasszon csak, ne pedig impulzusra. Ezt hogyan tudnám megoldani a programban?
-
PBA
aktív tag
Igazság szerint itt arról van szó, hogy mondjuk van 5 ember az adott WIFI AP közelében, mindegyiknek van egy-egy ESP boardja mikrofonos fülessel, az ESP-k a WIFI-n keresztül csatlakoznak egy SIP szerver konferencia szobájához, és így mindenki hall mindenkit oda-vissza.
Próbálkoztam mobilos kliensekkel, nem igazán váltak be. Lefogyott, az app háttérbe került és leszakadt, és ezer egy probléma merült fel. A célom egy faék egyszerűségű és megbízható megoldás kialakítása, és szerintem ez az ESP-s cucc pont ez tudná:
kicsi a fogyasztása, elvileg megbízható, egyszerű a használata, és teljesen testre szabottan alakítható ki (olyan dobozba teszem, ami nekem a legjobb, olyan akkut teszek mellé, amilyen kapacitású kell, stb).
Már csak infót/embert kell találnom, hogy meg tudjam valósítani az elképzelést.
-
PBA
aktív tag
-
-
-
PBA
aktív tag
Köszönöm!
Természetesen szívesen leírom majd, hogy mire jutottam, ha sikerül kibogozni a szálakat. Az a baj, hogy ESP-vel nekem sincs tapasztalatom, a kis fogyasztás miatt tetszett meg a dolog, meg ezek egész jó kis "all-in-one" boardoknak tűnnek, első ránézésre simán össze lehetne kalapálni belőlük egy jó megoldást, persze ez még csak az elmélet... -
Semmi gond!
Ha mégis úgy alakul, a hardverapró állás rovatában tudsz ezzel kapcsolatban hirdetni, de az itt kapott segítséggel szerintem egyedül is menni fog!
Nem kell ezzel privátba menni, erre való a topik. Engem is érdekel ez a projekt, mindenképp írd be ide, hogy mire jutottál vele! Én személy szerint nem vagyok túlzottan otthon esp témakörben, de hál' istennek sok hozzáértő jár itt, valaki biztosan segít. -
PBA
aktív tag
Remélem nem ütközik fórumszabályzatba, íme pár link, amiket kinéztem a célra:
Ez még csak egy gyors keresés eredménye, de kiindulópontnak ezek szerintem jók lehetnek. A kis fogyasztás, a minden egyben megvalósítás, valamint az akkukezelés szimpatikus, "csak" egy mikrofonos fülest kell rádugni, és működhetne is a dolog - felhasználási szempontból. Persze addig el is kellne jutni.
-
-
PBA
aktív tag
Sziasztok,
remélem, jó helyen járok a kérdésemmel... ESP32 alapon szeretnék egy lebutított SIP klienst üzembe állítani. Azt látom, hogy a kínai webshopokban vannak olyan boardok, ami kvázi fel vannak erre készítve, azaz kezelnek akkut, van benne WIFI, füles ki- és mikrofon bemenet, stb.
Leegyszerűsítve a cél az, hogy az az ESP32 board bekapcs után automatikusan fellépjen egy meghatározott WIFI hálóra, és csatlakozzon egy SIP szerverhez. Így megvalósulna a kétirányú audio kommunikáció.
Nem vagyok otthon a fejlesztési részben, így ehhez keresnék valakit, aki tud ebben segíteni. Nyilván a fáradozását honorálnám. Előre is köszönöm és elnézést, ha nagyon off-topic a dolog. Privát üzenetben elérhető vagyok!
-
bear_
aktív tag
Megvan a probléma, a for ciklust rontottam el.
Viszont itt is a következő problémám:
Azt szeretném, ha nyomógomb megnyomására egyel magasabb értéket jelenítene meg a 7 szegmenses kijelző.
0 az alapállapot, és ha nyomva tartom akkor felugrik 1-re, ha elengedem akkor visszaugrik 0-ra. Gyanítom ez azért van mert végigfut a kód és nullázódik a mikrokontroller. Hogy lehet azt megoldani, hogy a változó megjegyezze az értéket?
kód:
while (1) {
int num=0;
if(HAL_GPIO_ReadPin(SW1_GPIO_Port, SW1_Pin)==0){
num++;
}
HAL_GPIO_WritePin(STCP_GPIO_Port, STCP_Pin, GPIO_PIN_RESET);
for(int i = 0; i <= 15; i++) {
HAL_GPIO_WritePin(SHCP_GPIO_Port, SHCP_Pin, GPIO_PIN_RESET);
if(digits[num][i] == 1) {
HAL_GPIO_WritePin(DS_GPIO_Port, DS_Pin, GPIO_PIN_SET);
}else {
HAL_GPIO_WritePin(DS_GPIO_Port, DS_Pin, GPIO_PIN_RESET);
}
HAL_GPIO_WritePin(SHCP_GPIO_Port, SHCP_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(SHCP_GPIO_Port, SHCP_Pin, GPIO_PIN_SET);
}
HAL_GPIO_WritePin(STCP_GPIO_Port, STCP_Pin, GPIO_PIN_SET);
}
}
-
Janos250
őstag
-
Janos250
őstag
válasz
Dißnäëß #14902 üzenetére
Marhaságot írtam neked!
Te a websocketot kérdezted, én meg a socketot írtam le.
A socket az valóban alacsony szintű, lehet használni, de elég macerás, szerintem nem nagyon érdemes erre az alacsony szintre lemenni.
A websocket viszont egész más. A neten külön kihangsúlyozzák, hogy semmi köze a sockethoz.
Ez egy protokoll, olyasmi, mint a http (http:// , ws://) a http fölött van, arra épül, erősen támaszkodik a javascriptre. Feladata, hogy aszinkron módon a kliens (pl. böngésző) amikor kedve szottyan, küldözgethessen adatot a szervernek, és viszont. Kidolgozott metódusai vannak a kapcsolódásra, küldésre, miegymásra, így kényelmesnek tűnik.
Eddig én nem ismertem, csak most, hogy Tankblock által küldött mintát próbálom megérteni (próbálom), és böngészem a netet, most látom, hogy mi ez.
-
Srácok (lányok?), ha az UNO AREF pinjére kötök egy 5V-nál kisebb referencia feszültséget, vagy a belső 1,1V-ot használom az analóg méréshez referenciaként, de az analóg pin-re annál nagyobb feszültség kerül, annak van valami anyagi kárral járó következménye? 🤔 Sehol sem találok erre utaló információt.
Azt olvastam a leírásokban, hogy ha külső feszültségforrást kapcsolok az AREF-re és nem állítom át mérés előtt a referenciaforrást, akkor rövidzárat csinálhatok a külső és a belső referencia között, ezt egy nagyobb ellenállással ki lehet védeni.
Szeretnék a program futása közben váltogatni a belső 5V, a belső 1,1V és a külső AREF között, amire a board 3,3V-ját kötném referenciának. -
Janos250
őstag
válasz
Tankblock #14937 üzenetére
Köszi!
A jelen problémát megoldottam a korábbi segítségetekkel, így felfogtam (nagyjából) a neten leírtakkal kiegészítve.
A programot majd átbogarászom, vannak benne érdekesnek tűnő részek.
A linken is vannak érdekes dolgok
Azt még nem tudom, hogy egy táblázatban:<td style="width: 20 ;background-color:red" >
annak a 20-nak hogyan adok ID-t, ott benn a mindenség közepén,
de ez most nem is sürgős, de majd ha ráérsz, a későbbiek miatt erre még kénék tanácsot.
Köszi! -
Tankblock
aktív tag
válasz
Janos250 #14905 üzenetére
Bocs, épp mindennel el vagyok foglalva csak fórumozni nincs időm...
Na szóval javascript ugye...
elemnek legyen id ja és akkor scriptből lehet a tulajdonságait módosítani. pl láthatóságot, bármit.lenti példában egy slide switch van
myonoffswitch
néven és loggol is az oldalra vissza."<!DOCTYPE html><meta charset=\"utf-8\" /><title>ESP8266 Test Server</title><style> .onoffswitch { position: relative\; width: 90px\; -webkit-user-select:none\; -moz-user-select:none\; -ms-user-select: none\; } .onoffswitch-checkbox {display: none\;} .onoffswitch-label {display: block\; overflow: hidden\; cursor: pointer\; border: 2px solid #8F8989\; border-radius: 20px\;} .onoffswitch-inner {display: block\; width: 200%\; margin-left: -100%\; transition: margin 0.3s ease-in 0s\;} .onoffswitch-inner:before, .onoffswitch-inner:after { display: block\; float: left\; width: 50%\; height: 30px\; padding: 0\; line-height: 30px\; font-size: 14px\; color: white\; font-family: Trebuchet, Arial, sans-serif\; font-weight: bold\; box-sizing: border-box\;} .onoffswitch-inner:before { content: \"ON\"\; padding-left: 10px\; background-color: #C21515\; color: #FFFFFF\; } .onoffswitch-inner:after { content: \"OFF\"\; padding-right: 10px\; background-color: #C21515\; color: #999999\; text-align: right\;} .onoffswitch-switch {display: block\; width: 18px\; margin: 6px\; background: #A1A1A1\; position: absolute\; top: 0\; bottom: 0\; right: 56px\; border: 2px solid #8F8989\; border-radius: 20px\; transition: all 0.3s ease-in 0s\; } .onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner {margin-left: 0\;} .onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch {right: 0px\; background-color: #CC262C\;}</style><script language=\"javascript\" type=\"text/javascript\"> var wsUri =\"ws://"; <ide az IP címe kell>
":81\"\; function init(){ output = document.getElementById(\"output\")\; testWebSocket()\;} function testWebSocket(){ websocket = new WebSocket(wsUri)\; websocket.onopen = function(evt) { onOpen(evt) }\; websocket.onclose = function(evt) { onClose(evt) }\; websocket.onmessage = function(evt) { onMessage(evt) }\; websocket.onerror = function(evt) { onError(evt) }\; } function onOpen(evt) {writeToScreen(\"CONNECTED\")\; doSend(\"CONNECTED\")\; document.getElementById(\"myonoffswitch\").disabled = true\;} function onClose(evt){ writeToScreen(\"DISCONNECTED\")\;} function onMessage(evt){ var received_msg = evt.data\; writeToScreen('<span style=\"color: blue\;\">RESPONSE:' + received_msg +'</span>')\; if(received_msg == \"Connected\"){document.getElementById(\"myonoffswitch\").disabled = false\; document.getElementById(\"myonoffswitch\").checked = false\; doSend(\"GS\")\;} if(received_msg.startsWith(\"GS\")){ var l_tempSwitchStatus = received_msg.split(\":\")\; writeToScreen(\"Medve \" + l_tempSwitchStatus[1])\; document.getElementById(\"myonoffswitch\").checked = (l_tempSwitchStatus[1] === 'true')\; document.getElementById(\"myonoffswitch\").disabled = false\;} } function onError(evt){writeToScreen('<span style=\"color: red\;\">ERROR:</span> ' + evt.data)\;} function doSend(message){writeToScreen(\"SENT:\" + message)\; websocket.send(message)\;} function writeToScreen(message){var pre = document.createElement(\"p\")\; pre.style.wordWrap = \"break-word\"\; pre.innerHTML = message\; output.appendChild(pre)\;} function checkedChanged(message){doSend('WS:'+document.getElementById(\"myonoffswitch\").checked)\;}window.addEventListener(\"load\", init, false)\; </script><h2>WebSocket Test</h2><div class=\"onoffswitch\"><input type=\"checkbox\" name=\"onoffswitch\" class=\"onoffswitch-checkbox\" id=\"myonoffswitch\" onchange=\"checkedChanged(this)\" checked ><label class=\"onoffswitch-label\" for=\"myonoffswitch\"><span class=\"onoffswitch-inner\"></span><span class=\"onoffswitch-switch\"></span></label></div><div id=\"output\"></div>";
Nem kell oldalt töltögetni számomra az idegesítő.esetleg a CNLohr csatornáját ajánlom [link] esp8266 on tol valami 700Hz el weblapot és FFT vel zenéből RBG ledszallagot színez.....
-
-
válasz
gyapo11 #14934 üzenetére
Hát ezért írtam, hogy külön fájlba kell tenni, külön a programkódtól, amit csak include-ol az ember, de nem szerkeszti az IDE-n belül.
Én nem várnám, hogy olvasható legyen, de LCD kijelzőkhöz, ahol lookup table-ökben vannak bitmap-ben a karakterek, tényleg praktikusabbak az 1byte-os karakterek.
Esp+webes kezelőfelületekhez igazából mindegy, hogy utf-8 vagy más. -
gyapo11
őstag
Azért oda kell figyelni, mert kipróbáltam pár szokásos kódolással, és az ékezetes karakterek nagyon érdekesen néznek ki az IDE-ben ami nem utf-8-cal van mentve. Próbáltam ansi1252, iso-8859-1 és windows 1252-t, egyik se jó, szóval úgy tűnik az IDE ragaszkodik az utf-8 megjelenítéshez. Ki kell próbálni, hogy a nem utf-8 ékezetes üzenetek pl. serial monitoron olvashatók-e.
-
gyapo11
őstag
-
válasz
ekkold #14928 üzenetére
Szerintem a kódolást maga az IDE, a szövegszerkesztő szintjén kezeli, ezért a legegyszerűbb az lenne, hogy ezeket a szövegeket egy külön .h fájlban tartanád, amit egy olyan külső szövegszerkesztővel írsz és szerkesztesz, ami tud iso8859-2 kódolással menteni. Fordításkor nem fogja átkódolni utf-8-ra, byte-to-byte fogja a lefordított kódba másolni a string-eket. Úgy emlékszem volt már ezzel saját tapasztalatom.
-
ekkold
Topikgazda
Több oka is van. Pl. a standard c string függvények (pl. strlen()) is jól működnének, egyszerűbb lenne a konverzió egyes kijelzőkhöz. Kevesebb helyet/memóriát foglalnának az ékezetet is tartalmazó szövegek, nem okozna gondot egyes programok más processzorra való átvitelénél, az eltérő bájt-sorrend kezelés, ilyesmik. Összefoglalva, nekem sok szempontból jobb lenne...
-
-
ekkold
Topikgazda
Sziasztok! Az arduino fejlesztőkörnyezetet át lehet állítani valahogyan, hogy ne utf8-ban tárolja az ékezetes karaktereket, hanem mondjuk használjon iso8859-et, vagy bármi olyat, ahol nem foglalnak két bájtot
az ékezetes betűk? -
Muszáj vagyok ezt belinkelni, annyira tetszik:
8bites mikrocomputer arduino alapokon.
Hátha valaki szeretne építeni valamit arduino-ból, de nincs ötlete. -
Janos250
őstag
válasz
Janos46 #14925 üzenetére
El, persze!
Porogramozni a legkönnyebben ilyennel tudod:
https://www.banggood.com/Geekcreit-FT232RL-FTDI-USB-To-TTL-Serial-Converter-Adapter-Module-Geekcreit-for-Arduino-products-that-work-with-official-Arduino-boards-p-917226.html
Ez állítható 3.3V-ra és 5 V egyeránt a jumperrel. -
Janos46
tag
Sziasztok!
Van egy kis meterológia állomásom NODEMCU-val (ESP8266). Kérdésem, hogy elkészítehetem-e ezt a WiFi ESP-12E chip ESP8266-el. Valamint ezt hogyan tudom programozni? A másikat könnyű a porton keresztül, ezen nincs.
Koszi a segítséget. -
Janos250
őstag
válasz
vargalex #14922 üzenetére
Az este még nekiálltam egy kicsit tanulmányozni a javasciptet és az AJAX-ot, mert úgy láttam, hogy ezt nem úszom meg.
Kezdem kapisgálni, mi az, amit írtál. Tényleg meg lehet azt csinálni, hogy amikor a csuszkát elengedem, egy táblázatot szőröstül-bőröstül
újratöltsek anélkül, hogy az egész lapot újra kellene töltenem, és így nem villog a töltésnél. (Majd egyszer, ha lesz időmleírom összefoglalva, hogyan is kell az ilyesmit csinálni)
Egyébként megnéztem, a FF-nek nem okoz gondot, ha az AJAX-ra nem válaszolok, hanem csak feldolgozom az általa küldött értéket. A gondot az okozta, hogy ha nem válaszoltam rá, de a lapot egyből újratöltöttem. Akkor nem pontosan tudta, mitévő legyen.
Köszönöm neked is, és mindenkinek a segítséget, így a probléma tényleg megoldva, most már elboldogulok vele.
-
vargalex
félisten
válasz
Janos250 #14916 üzenetére
A console.log csak a javascript console-ra (böngészőben F12-t nyomva a Console fül) ír logot.
Ajax hívásra válaszolni kell (azt hittem, hogy ez világos), hiszen azt szokás figyelni a callback függvényben (ugye aszinkron hívás). Összességében valami ilyen kellene:
var sliderValueForraloFutes = document.getElementById("csuszkaErteke").value;
var xhr = new XMLHttpRequest();
xhr.onreadystatechange=function()
{
if (xhr.readyState==4 && xhr.status==200) {
document.getElementById("folyamatosKiiras").innerHTML=xhr.responseText;
}
}
xhr.open("GET", "/?F="+sliderValueForraloFutes, true);
xhr.send();
Itt láthatod, hogy az onreadystatechange callback függvényben vizsgálhatod a visszatérési értéket, sőt én ott most direkt az ajax hívásban visszaadott responseText-et állíttotam be a folyamatosKiiras elem innerHTML-ének. -
Janos250
őstag
"Ezt nem intézi a lib?"
Nem, mert nem használok libet.
Azon a szinten használom, ahol aWiFiServer server(80);
után a
WiFiClient client = server.available();
a client gyakorlatilag soros vonalként használható.
char c = client.read();
utasítással lehet róla olvasni, és
client.println("akarmi");
utasítással meg írni, akárcsak a Serial soros vonal esetén.
Ez így nagyon kényelmes, mert nem kell azon filóznom, hogy a lib mit csinál.Viszont minden kérést nekem kell lekezelnem, és minden küldésről nekem kell gondoskodnom.
Ez így gyakorlatilag egy WiFi/soros bridge. -
-
-
Janos250
őstag
Ezzel a következő a gond:
Ha nem írom ezt be, akkor a csuszka elengedésekor a Firefox által elküldött kérés első sora ez:GET /?F=40 HTTP/1.1
ha pl. 40-re toltam a csuszkát.
Ez kényelmesen feldolgozható.
Ha beírom amit javasoltál, akkor 2 kérést küld egymás után a FF :
Az első kérés első sora ugyanaz a jó érték:GET /?F=40 HTTP/1.1
De jön pluszban egy második lekérés is, mégpedig a csuszka állítása előtti URL-el.
Tehát ha például előzőleg azt küldtem el, hogyGET /?f=+10 HTTP/1.1
akkor másodikként ezt is megismétli, ami teljesen rossz, mert adott esetben pl. még pluszban megnöveli 10-el.
Ha beírom:location.replace("/?F="+sliderValueForraloFutes);
sort, akkor jó lesz, csak egyszer küldi, és a jót.
Még azt kell kisakkozni, hogy akkor az előtte lévővar sliderValueForraloFutes = document.getElementById("csuszkaErteke").value;
console.log(sliderValueForraloFutes);
var xhr = new XMLHttpRequest();
xhr.open("GET", "/?F="+sliderValueForraloFutes, true);
xhr.send();
-ből mi hagyható el. Csak kisakkozni tudom, mert az utolsó három sort érteni vélem, gondolom, az kihagyható.
Viszont aconsole.log(sliderValueForraloFutes);
sorról fogalmam sincs, az mire jó, kell-e, vagy sem.
Majd próbálgatom. -
válasz
Janos250 #14913 üzenetére
Itt valami olyan van, hogy ezek aszinkron műveletek. Meg kell várni, hogy a send-re megjöjjön a response. Ezt próbáld meg send után berakni.
xhr.onreadystatechange = function(){
if(XMLHttpRequest.DONE === this.readyState){
if(200 <= this.status &&
299 >= this.status){
location.reload();
}
}
} -
válasz
Janos250 #14913 üzenetére
Leírnád pontosan még egyszer, hogy mi az elvárt működés onnantól, hogy betöltődött a weblap?
Addig világos, hogy van rajta egy csúszka, amit ha állítasz, egy értéket küld az esp felé. Innentől nem világos, hogy a csúszka mozgatása után minek kellene frissülni és milyen okból.
Ugyanazon a weboldalon máshol is megjelenik ez az érték? Vagy másik böngészőben kellene látszódni a változásnak? -
Janos250
őstag
válasz
vargalex #14909 üzenetére
Na ez lenne a másik kérdésem, hogy ha beírom ezt a sort, akkor az ajax miért nem küldi el? Mert nem küldi el. Számomra ez érthetetlen.
Mellesleg a netet bogarászva találtam olyan utalást, hogy valahogy a # karakter használatával el lehet azt érni, hogy a lapnak csak egy részét frissítse, de semmi konkrétumot nem találtam arra, hogy ezt a WEB lapon milyen script utasítással lehet elérni, és hogy akkor a szerver mit válaszoljon rá. Jelenleg ugyan számomra nem létkérdés, mert az egész html szöveg 6 kbyte, de a kíváncsiság!
Én azt hiszem, egyre többen fognak Arduino alapon netes vezérléseket csinálni, de semmi megfelelően összeszedett tutorialt nem találtam, ahol egyben le lennének írva a legfontosabbak.
-
Janos250
őstag
válasz
Janos250 #14907 üzenetére
Közben megoldódott
Ha azxhr.send();
után beírom:location.replace("/?F="+sliderValueForraloFutes);
akkor azt csinálja, amit szeretnék.
Gondolom, az xhr.send(); így ki is hagyható, de ezzel most nincs időm foglalkozni, majd holnap kipróbálom.
Köszi mindenkinek a rávezetéseket. -
Janos250
őstag
Helló!
Köszi, most jutottam oda, hogy kipróbáljam:
Nekem eredetileg ez van:oninput="document.getElementById('folyamatosKiiras').innerHTML = this.value"
Te ezt javasolod:document.getElementById("folyamatosKiiras").innerHTML = sliderValueForraloFutes;
Bár nekem, laikusnak eléggé hasonlónak tűnik a kettő, de kipróbáltam. Változást nem okozott. :-( -
Janos250
őstag
válasz
Tankblock #14900 üzenetére
A WEB lap szerkezete is változik a beérkezett válasz szerint.
Mondhatnám, hogy másik lapot kell küldeni egy bizonyos érték alatt/felett.
Vagy egy egyszerűbbik:<tr>
<td style="width: 40%;background-color:red" > </td>
<td style="width: 60%" > </td>
</tr>
Itt a 40 a 14863-ban szereplő value érték, a 60 pedig a 100-value.
Hiába mondod nekem, hogy oldjam meg javascipttel, ha egyszer nem tudom. Szájbarágósan, mint a hülyegyereknek: konkrétan milyen javascript utasítást írjak hova, hogy ez változzon a lap újratöltése nélkül?A socket dolgot nem értem: ha összekészítem a socket csomagot, mit kell beletennem, hogy:
- elküldve, a böngésző ezt fogadja is anélkül, hogy kérte volna
- és csak az adott részt változtassa meg
Mindezt úgy, hogy a böngésző nem kéri az adatot. -
Janos250
őstag
válasz
Dißnäëß #14902 üzenetére
A websocket a fizikai és a http (vagy egyéb) között van. Persze ez elég nagyjábóli megközelítés. A neten a kommunikáció IP alapon történik, viszont például ugyanazon a gépen egyszerre több program is használhatja a netet, pl. több böngésző is lehet újra megnyitva.
Ezért nem elég, hogy egy szerver csak a cél IP címét adja meg, meg kell hozzá adni még egy 2 bájtos egyedi azonosítót is, hogy a válasznál lehessen tudni, hogy melyik alkalmazásnak kell továbbítani az üzenetet. Ez a plusz 2 bájt a port. Amikor egy böngésző elküld egy kérést egy szervernek, akkor küld hozzá egy port számot is, amit a küldő gép határoz meg úgy, hogy olyat választ, amit ugyanazon a gépen másik alkalmazás éppen nem használ. Ezt az IP+port együttest, mint socketot kezeli egy egység. Tehát pl. ESP32-n: Ha WEB szervert használsz, az kapcsolatot tart egy alacsonyabb szinttel, ami olyan elérést ad, mintha pl. soros port lenne. Lehet rá írni, lehet róla olvasni. Ez a szint egy socketban adja tovább a kérést egy alacsonyabb szintnek. Ez a nem profi rendszereknél gyakran az lwIP szabad felhasználású egység. Ez aztán összerakja a továbbítandó csomagot (legalábbis egy részét), és beteszi egy memória részbe. Utána szól a hardvert legalacsonyabb szinten kezelő résznek, hogy ott van ebben a tárolóban egy csomag. Az fogja, átmásolja a hardver
saját tároló területére, és utasítja a hardvert, hogy küldje el.
Ebben a csomagban már benne van, hogy a választ melyik socket (IP+portot kezelő egység) részére kell visszaküldeni. A hardver még ehhez a saját MAC címét hozzáadva, egy adott MAC címre küldi, amit az ARP nevezetű rész határoz meg. Ezt úgy teszi, hogy egy mindenki számára szóló üzenetben kérdezi az összes, ugyanazon a madzagon lévő gépet, hogy ez az IP cím kié. Ha senkié, akkor a routernek küldi. A user által használt legalacsonyabb szint a socket szokott lenni, azaz megadott szisztéma szerint összekészítesz egy csomagot, és azt adod át neki. ESP32-n én nem használom, mert a serializált szint kezelése sokkal egyszerűbb, de gyakorlatilag ez socket szintű programozás, csak megúszom a csomag összekészítésének a melóját. -
Dißnäëß
nagyúr
válasz
Tankblock #14900 üzenetére
Sziasztok, bocsánat az off-ért, hátha mégsem az teljesen.. kezdő fejlesztést tanulóként felkaptam a fejem a websocket-ekre, mert most indul nálam is pont ez a tananyag: konyhanyelven elmondva, mi ez ? TCP/UDP alapú valami ? Vagy http/https-en történő kommunikáció ? Szinkron, aszinkron ? Bocs, ha nagyonhülye kérdések, ha valaki el tudná mondani, hálás lennék. Node.JS-ben és python-ban jövöget most szembe velem vagy 2 napja.
Új hozzászólás Aktív témák
Hirdetés
- Counter-Strike: Global Offensive (CS:GO) / Counter-Strike 2 (CS2)
- CPU léghűtés kibeszélő
- Autós topik
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Path of Exile (ARPG)
- TCL LCD és LED TV-k
- Milyen TV-t vegyek?
- Milyen légkondit a lakásba?
- Radeon RX 9060 XT: Ezt aztán jól meghúzták
- Teljes verziós játékok letöltése ingyen
- További aktív témák...
- RTX 4080 SUPER,16GB. Ryzen 7 7800X3D, 32 RAM Fury RGB! Garancia!
- Asztali PC , i7 9700K , RX 5700 XT , 32GB DDR4 , 500GB NVME , 1TB HDD
- Dell Inspiron 5406 2-in-1i5-1135G7 16GB DDR4 3200 512GB NVME 14" FHD Érintőkijelző W11Pro
- Eladó MacBook Pro 14" M1 Pro (2021) 16/512 99% akku Makulátlan állapotban!
- Újszeru GIGABYTE G5 - 15.6" FullHD 144Hz - i7-13620H - 48GB - 1TB - RTX 4050 - Win11 - 1,5 év gari
- Lenovo ThinkPad X13 G2 multitouch
- Bomba ár! Lenovo X1 Carbon G6: i7-8G I 16GB I 256-512 SSD I 14" FHD I HDMI I Cam I W11 I Gari!
- ÁRGARANCIA!Épített KomPhone i5 14600KF 32/64GB RAM RX 7800 XT 16GB GAMER PC termékbeszámítással
- BESZÁMÍTÁS! ASUS STRIX B650E-E R7 7700 64GB DDR5 1TB SSD RTX 3080 10GB Thermaltake Ceres 500 850W
- BESZÁMÍTÁS! MSI B450M R5 5500 16GB DDR4 512GB SSD RX 5700XT 8GB Rampage SHIVA Chieftec 600W
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest