-
GAMEPOD.hu
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
-
_q
addikt
Sziasztok!
Úgy alakult, hogy kellene freertos kódot használjak. Van 4 task, ebből 1 db fut core 0-n a többi core 1-en. Jelenleg a 0-ra tettem egy wifi-s részt, ami figyeli a klienstől jön-e adat, ha igen akkor fogadja. Tettem bele delay-t is, de sajnos mindig előjön valami, ami miatt restartol az ESP32. A hiba ez lenne:
A kód ahol előjön a hiba:
void wificlientTask( void * parameter)
{
while(1)
{
String clientData;
char raw_data[11];
int i = 0;
int idxBatLevel = 0;
int idxTemp = 0;
WiFiClient client = wifiServer.available();
if (client) {
unsigned long CLIENT_TIMEOUT = millis();
while (client.available() == 0) {
if((millis() - CLIENT_TIMEOUT) > 10000) {
Serial.println(">>> Client Timeout !");
client.stop();
return;
}
delay(10);
}
while (client.available()) { // if there's bytes to read from the client,
char c = client.read();
if(c != 'W')
{
raw_data[i++] = c;
}
Serial.print(c);
delay(10);
}
}
}Lenne ötletetek, hogy mit kellene csináljak? Valami a
while (client.available()
résznél lehet, valamiért mint ha beakadna.[ Szerkesztve ]
-
Janos250
őstag
-
_q
addikt
Köszi a tippet és (#9056) Janos250-nak is. Nem konkrétan ezzel a sorral volt a gond, de a read_raw-hoz manuálisan hozzá adom a 'W'-t pár sorral lejjebb és ott már nem kellene az i indexet tovább léptetni, amit én viszont megtettem, így ott valóban túllépte a tömb a max elemszámát. Most ez a része kb. 20 perces futás alatt nem dobott hibát, cserébe ugyan itt előjött más
Ez a hiba. A serial monitoron jön egy 0-s index, illetve egy üres sor, mint ha nem küldene semmi adatot a kliens, majd amikor szétbontom a hőmérsékletet és az aksi szintet, az aksi szint üres, a hőmérséklet egy W. Ezek alapján az látszik, hogy valószínűleg küld valamit a kliens, különben be se lépne a fogadás programrészbe a szerver, viszont csak egy W-t.
Lehet elveszik az adat küldés közben? Érdemes lenne szervertől visszaküldenem az adatot a kliensnek, megnézni egyezik-e ha igen akkor oké, ha nem akkor küldje ismét a kliens? Változó hogy kb. 10-20-30 küldésenként jön elő, a küldés 5 másodpercenként megy. -
Janos250
őstag
Én mit néznék meg először:
1. Kiíratnám serialre azt az adatot, amit el akarok küldeni
2. Hogy a szenzor biztosan elvégezte-e a mérést. Nem tudom, milyen szenzor, de van, aminél kiadom a mérés parancsot, utána várni kell egy kicsit, mire tényleg olvasható.
De ez csak egy halk tipp.Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
_q
addikt
válasz Janos250 #9058 üzenetére
Köszi. A küldés monitorozást megcsináltam és ott minden rendben volt, valami a szerver oldalon van. Arra jutottam hogy a
while(client.available())
{
....
}okozza. Nem jól programoztam le a fogadott adat kiíratását. Így mikor küld a kliens, de a szerver nem tudja fogadni, akkor egy W bentmaradt és azt írja ki illetve üres sort, hogy nincs adat. Így már csak az maradt kérdés, vajon miért nem sikerült továbbítani a kliensnek az adatot. 10 db wifi hálózat érhető el , lehet bezavarnak egymásnak és teljesen normális az, hogy nem mindig sikerül a kliensnek wifi routeren kersztül a szervernek elküldeni az adatot?
[ Szerkesztve ]
-
Tankblock
aktív tag
Hello
itt a
void loop() {
// listen for incoming clients
WiFiClient client = server.available();
if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
....itt hasonló módon nézi meg ugyanazt.... én nem vagyok híve a túl sok változó újrainicializálásnak....
Release the Beast....
-
_q
addikt
válasz Tankblock #9060 üzenetére
Szia,
Jelenleg ezt próbálgatom, de ugyan az az eredmény, küldés fogadás között valami történik, mert a szerver nem kapja meg, időközönként timeoutot kapok a while ciklusnál. Valamiért nem csatlakozik a kliens, pedig a kliens serial monitoron nézve kiküldi az adatot, majd elmegy aludni.
WiFiClient client = wifiServer.available();
if (client) {
CLIENT_TIMEOUT = millis();
while (client.available() == 0) {
if((millis() - CLIENT_TIMEOUT) > 10000) {
Serial.println(">>> Client Timeout !");
client.stop();
break;
}
}
if (client.available()) { // if there's bytes to read from the client,
String clientData = client.readStringUntil('W');
clientData = clientData + 'W';
Serial.println(clientData);
client.stop();
... -
Janos250
őstag
A wifi vétel elvileg pufferelt, és a 0-ás magon fut. Nem terheled le a 0-ás magot? Próbáld meg, mindent a 1-es magra rakni, hogy akkor is ugyanez lesz? Tudod, a kíbicnek...
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
_q
addikt
válasz Janos250 #9062 üzenetére
0-ás magra raktam a wifi kliens fogadás taskot 0-ás prioritással. Semmi más nem fut rajta, legalább is általam nem, max a háttérben amiről korábban írtál 6-7 task a rendszer által futhat esetleg. A kód elkészültével a végén csak 5-10 percenként akarom hogy hőmérséklet adatot küldjön a kliens (jelenleg 2-10 másodpercekkel teszteltem), de elkerülve, hogy pont akkor történjen más művelet, mikor pont jönne a klienstől adat, minden mást a core 1-re tettem. Az hogy leterhelném a cpu-t nem gondolnám, a fogadáson kívül 1-2 konverziót csinálok csak, de azért bemásolom ide is:
void wificlientTask( void * parameter)
{
unsigned long CLIENT_TIMEOUT = 0;
int idxBatLevel = 0;
int idxTemp = 0;
int i = 0;
while(1)
{
WiFiClient client = wifiServer.available();
if (client) {
CLIENT_TIMEOUT = millis();
while (client.available() == 0) { //itt jon a hiba, timeout-al valtozo idokozonkent
if((millis() - CLIENT_TIMEOUT) > 10000) {
Serial.println(">>> Client Timeout !");
client.stop();
break;
}
}
if (client.available()) { // if there's bytes to read from the client,
String clientData = client.readStringUntil('W');
clientData = clientData + 'W';
Serial.println(clientData);
client.stop();
idxTemp = clientData.indexOf('Y'); //get the index of Y separator (25.47Y)
idxBatLevel = clientData.indexOf('W'); //get the index of W separator (3.12W)
clientTemp = clientData.substring(0, idxTemp); //25.47
clientBatLevel = clientData.substring(idxTemp+1, idxBatLevel); //3.12
Serial.print("temp: "); Serial.println(clientTemp);
Serial.print("bat: "); Serial.println(clientBatLevel);
delay(10);
}
else{
Serial.print("temp: "); Serial.println("-");
Serial.print("bat: "); Serial.println("-");
Serial.println("");
}
}
delay(10);
}
}A javasoltak alapján átraktam a változó deklarálást az elejére, hogy csak 1x történjen meg, ne minden ciklusban, illetve a client.read-et lecseréltem, hát ha az okoz gondot, de nem. (Egyébként érdekes mert én 11 karaktert küldök, még is 12-re kellett a tömböt létrehozzam a client.read-né még. client.print küldésnél a végére betesz valamilyen jelző bitet, \r, \n vagy valamit?)
"A wifi vétel elvileg pufferelt, és a 0-ás magon fut. "
Ezt úgy érted, hogy mindegy hogy én a bemásolt task-ot core 0 vagy core 1-re teszem, a wifi fogadása mindenképpen a core 0-án, a háttérben történik? Tehát ha én egy client.read vagy client.readStringUntil meghívást csinálok, akkor már nem a klienstől fog olvasni, hanem egy már háttérben beolvasott bufferből szedi ki az adatot? Tegyük fel működik, hogy átteszem core 1-re a kiolvasást. Akkor a core 0-ra nem tehetek semmit? A core 1-en van ntp lekérdezés, hőmérséklet olvasás, kijelző és még a wifi kliens olvasás is ide kerülne, nem lesz ez sok a core 1-en? A 4 taskból a wifi lekérdezést ezért akartam core 0-ra tenni, hogy még is zökkenőmentesen menjen, mert a core 1 ami igaz nem időkritikus de már így is 3 taskot futtat.[ Szerkesztve ]
-
Janos250
őstag
"Ezt úgy érted, hogy mindegy hogy én a bemásolt task-ot core 0 vagy core 1-re teszem, a wifi fogadása mindenképpen a core 0-án, a háttérben történik? Tehát ha én egy client.read vagy client.readStringUntil meghívást csinálok, akkor már nem a klienstől fog olvasni, hanem egy már háttérben beolvasott bufferből szedi ki az adatot? "
Igen, én így tudom.
"a core 0-ra nem tehetek semmit?"
Én szoktam, ez csak egy ötlet volt, hátha..
Vagy szintén csak ötlet, a delay(10) megnagyobbítása mondjuk 100-ra. Tudod, kísérletes tudományKözben itt töprengek.
Ha jól emlékszem, az ESP az 1-es csatornán forgalmaz. Esetleg más csatornán? Úgy rémlik, valahol azt is meg lehet adni, de nem emlékszem pontosan, hol.
Nálam az egyik projekt egy erősen "zajos" wifi környezetben gyakran hibázik, de kisebb forgalmú helyeken hibátlan. Tudod, csak ötletek, kellő kritikával fogadd!Közben megtaláltam:
bool softAP(const char* ssid, const char* passphrase = NULL, int channel = 1, int ssid_hidden = 0, int max_connection = 4);
[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
_q
addikt
válasz Janos250 #9064 üzenetére
Megpróbálom majd a delay-t magasabbra tenni. Nem AP módban hozom létre a szervert, hanem fix ip és router beállításokat használva (socket server kiegészítve fix IP-vel), így szerintem a linkelt függvényt nem tudom használni. Ha jól sejtem, akkor wifi socket szerver-kliens esetben a routeren tudom átállítani a csatornát, mivel jelen esetben az az AP.
"Nálam az egyik projekt egy erősen "zajos" wifi környezetben gyakran hibázik, de kisebb forgalmú helyeken hibátlan. "
A zajos környezet jelentheti azt, hogy kb. 9-10 elérhető wifi hálózat van körülöttem? Megnézem majd hogyan alakulnak a wifi csatornák, lehet az ESP pont egy sokak által használt csatornán kommunikál és ebből adódik időközönként a kommunikációs probléma.[ Szerkesztve ]
-
Tankblock
aktív tag
-
_q
addikt
válasz Tankblock #9066 üzenetére
Van esetleg javaslatod, ami stabilabb kapcsolatot tud vagy ez nem a websocet miatt van? 2 eszköz lenne, a szerver lekér NTP adatot netről, mér, kijelez. A másik eszköz a kliens, aki csak mér és küldi a szervernek az adatot. ESPNow sajnos nem jó a szükséges netről adat letöltés (később lehet adat feltöltés) miatt. Vagy törődjek bele, hogy ez nem lesz olyan stabil, mint egy SPI vagy I2C kommunikáció és inkább jobban járok, ha lekezelem az említett kommunikációs problémát egy adat újraküldéssel mondjuk?
[ Szerkesztve ]
-
Teasüti
nagyúr
ESPNow miért nem jó? Úgy olvastam, ha ugyanazon a csatornán megy, mint a normál wifi, akkor tud párhuzamosan mindkettőn kommunikálni.
Amúgy BLE-re nem gondoltál még? Sztem adja magát, gyakorlatilag erre van kitalálva, hogy szenzor adatokat küldözgessünk vele elemes kis fogyasztású eszközöknél. Mondjuk azt nem tudom, hogy a BT és a Wifi együtt működik-e. Wifi-s projektem még nem volt.Amúgy Core 0-s hibákat nálam a nagyobb delay() oldotta meg, de újabban inkább csak olyan műveleteket indítok azon a magon, ami egy meghívásra csak egyszer fut le. Minden ciklikus folyamat az 1-es magon van.
[ Szerkesztve ]
-
Tankblock
aktív tag
válasz Teasüti #9068 üzenetére
ugye nem az arduino esp32 core-t használjátok?
Én azt csak feltettem hogy éegyen, de 1 példánál többnél nem töltöttem vele időt. Inkább eclipse alatt küzdök.
nekem ment minden a 0 magra , akkor sem volt problémám....
Van egy elméletem, hogy az arduino implementációban van valami kehe.....A kapcsolat sosem lesz tökéletes ezzel együtt kell élni, és kezelni kell. Azt a design során kell eldönteni, hogy az adat fontos-e annyira h újrküldjük vagy sem. Ha igen akkor azt tárolni kell, amíg ki nem ment.
A BlueFi implementáció még nem tudom milyen formában van. Én a MESH networköt várom mint a messiást és a MQTT brokert, ha 1 implementációba bekerül és kapunk még 1 gateway nodot is akkor mindenre gombot vartunk......
Addig marad a BLuetooth mesh akinek nagyon kell NRF chippekkel.....
az említett hálózati túltelítettség végett nálam a router is a gyenge láncszemek közé tartozik, hajlamos eldobni az összes Wifi kapcsolatot és reportálni h minden jó. A wirelessben meg 0 becsatlakozott elem van.......
[ Szerkesztve ]
Release the Beast....
-
Teasüti
nagyúr
válasz Tankblock #9069 üzenetére
Szerintem itt te vagy az egyetlen, aki natívan programozza az ESP-t.
Annó én is csak azért akartam megpróbálni, mert akkoriban az Arduino Core-ban még nem volt benne, ami nekem kellett. Viszont én már megakadtam a programozó környezet beállításánál. Arduino IDE után egy Eclipse nekem kínai. Hobbi szinten nem is tartok rá igényt. Persze gondolom más lenne a helyzet, ha lenne IT végzettségem.[ Szerkesztve ]
-
_q
addikt
válasz Teasüti #9068 üzenetére
Itt írnak róla. Van ahol azt írják ugyan azon a csatornán kell legyen ESPnow és a wifi csatlakozás, de a kommentek nagy része arról számol be, hogy nem megy együtt a kettő. Én nem próbálkoztam, így saját tapasztalatom nincs. Lehet egy próbát megérne. A bluetooth-t nem tudtam mennyire működőképes jelenleg önmagában, illetve wifivel együtt. Tehát ezt a kettőt meg lehetne próbálni még, azért a socket server-client irányba mentem, mert ehhez egyből volt minta kód mindenféle negatív komment nélkül és biztosra akartam menni.
(#9069) Tankblock
Bizony arduino core, illetve idf függvényekkel néha kiegészítve Eclipse alatt regiszter szinten programozod?Köszi a tapasztalatot,úgy látom érdemes áttennem másik csatornára a routert, de akkor be kell látni, hogy sok wifi között előfordulhat veszteség.
[ Szerkesztve ]
-
Tankblock
aktív tag
Hello,
nem örültem meg, még,
esp-idf használom és néha megyek a development pathra néha meg a latest release pathra. Van róla rendes guide meg How to.... Nem oly ördöngős. Gitről meg lehet vadászni eléggé jó könyvtárakat is hozzá.
De igen volt rá példa h nem volt driver és hát nem maradt más hátra csak a technical reference....
Amúgy annyira nem kínai, sztem még az aurduino core is belerakható. Van kódkiegészítés, C++ hoz függvényekhez support. Refraktorálahtod a kódot. Megmuattaja hány helyen használod. Próbál írási időben segíteni.... (csak nem nekem :-P)
Az arduino ide-nek itt még van hova fejlődnie.Release the Beast....
-
_q
addikt
válasz Tankblock #9072 üzenetére
Arduino alatt is lehet használni az idf függvényeket, miért jobb szerinted ha arduino teljesen ki van hagyva? Az IDE sajnos nem a legszélesebb körben használható program. Azt sajnálom én is hogy egy STM32-es Kiel-hez vagy AVR studiohoz képest "butább" program. Sok hasznos funkciót elbírna még, de valószínű annyira hobbistáknak van kitalálva, hogy egy komolyan fejlesztőkörnyezet adta lehetőséget aki hobbi szinten programozik, ők nem hiányolják. Igaz én is hobbi szinten vagyok még is hiányolok sok funkciót
(#9068) Teasüti
Nézegettem a bluetooth + wifi használatot. Erre is azt írják githubos kommentek, hogy sajnos nem nagyon megy együtt, mert elfogy a RAM.
Valamit ki kell találjak, mert jelenleg a socket szerver még se lesz jó. NTP szerveren keresztül akartam dátumot lekérni, ami UDP-n keresztül kommunikál. Ha a socket szervernek statikus IP-t adok, akkor arra jutottam, hogy bezavarhat az UDP-nek, mert nem frissül az idő adat. Ha nem statikus IP-t használok akkor jó, viszont a socket kliens ki tudja mikor gondol egyet és nem tud csatlakozni. Jelenleg fix IP-t adok a szervernek, a kliensbe beírom erre csatlakozzon és megy is. Ha kihagyom ezt a fix IP dolgot, félek bármikor előjön egy csatlakozási probléma, amikor nem tudja a kliens hova csatlakozzon. Nem gondoltam, hogy ennyi problémás lesz.Akik minimum 2 db ESP32-t használnak és ezek egymással kommunikálnak (hogyan teszik, Bluetooth, ESPNow, más?), plusz netre is akartak csatlakozni esetleg, ők milyen lehetőséget tudtak használni? Nem gondolnám, hogy én vagyok az első aki ilyet szeretne csinálni.
[ Szerkesztve ]
-
Janos250
őstag
"Akik minimum 2 db ESP32-t használnak és ezek egymással kommunikálnak (hogyan teszik, Bluetooth, ESPNow, más?), plusz netre is akartak csatlakozni esetleg, ők milyen lehetőséget tudtak használni? "
Mint már többször írtam, nekem neten lóg egy szerver, ahova be lehet jelentkezni az egyik porton, és egy másik porton megy a http lekérdezés, hogy kiféle, miféle van épp bejelentkezve. Ez nem javaslat, csak infó.
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Teasüti
nagyúr
Ti tudtátok, hogy a Stream osztályban ilyen függvények vannak, hogy readStringUntil(), parseInt(), stb?
Én meg egészen idáig char változóba olvastam ki mindent és magamnak szenvedtem össze ciklusos függvényeket az adatok értelmezésére amikor az egészet le lehet rendezni pl. ennyivel:stream.readStringUntil('\n').toInt();
. Timeout meg astream.setTimeout()
-tal állítható. Mondjuk azt nem tudom ez kód blokkolja-e a futtatást.
Bezzeg a Stream osztállyal eddig egyetlen egy Arduinós példa megoldást sem láttam, mindenki csak aSerial.available()
ésread()
függvényeket használja vmilyen char változóval az adatfogadásra.[ Szerkesztve ]
-
_q
addikt
válasz Teasüti #9075 üzenetére
Igen valami ilyesmi, pontos szakszavakkal leírt megfogalmazást én se tudok.
(#9076) Teasüti
Igaz nem stream, hanem socket client esetén hasonlóan jártam, char-ba olvassák ki a fogadott adatot. Először én is a nehezebb úton indultam el, mire megtaláltam a readStringUntil('\n') opciót, ami string-ben olvas be. Érdemben sajnos nem tudok a stream-hez hozzá szólni.[ Szerkesztve ]
-
Teasüti
nagyúr
Ahogy nézem már írnak ezekről a Serial osztályban is. Hmm, meg mernék esküdni rá régen nem volt ennyi függvény ebben. Viszont üdvözítő újítások! Ha már úgyis Stream osztályt kell használni String-ekkel, akkor legalább natívan oldja meg a feladatot, ne kelljen külön ramot foglalni a saját függvényekhez!
[ Szerkesztve ]
-
Teasüti
nagyúr
Tudnátok segíteni kicsit, hogy library írásnál, hogy tudnék átadni egy Stream osztályt paraméterként?
Megnézve egy példát ezt látom, de nem tudom értelmezni. Nem láttam még ilyen szemantikát:class TinyGsmSim808: public TinyGsmSim800
{
public:
TinyGsmSim808(Stream& stream)
: TinyGsmSim800(stream)
{}Ez most mit jelent?
A TinyGsmSim808 osztályban a TinyGsmSim808 konstruktor alatt mi az a kettőspont és utána a TinyGsmSim800 függvény? A függvény meghívást nem a kapcsos zárójelek közé kéne tenni?Aztán tovább menve arra a függvényre ezt látom:
public:
TinyGsmSim800(Stream& stream)
: stream(stream)
{
Olyan függvény viszont nincs sehol definiálva, hogy stream().
Ez az egyetlen előfordulása így ebben a formában.Viszont nem értem mi történik itt pontosan a stream objektummal, amit egymásnak adogatnak át a függvények.
Ugyanitt lejebb a library függvényeiben viszont már ilyeneket látok, hstream.readStringUntil(',')
Nem látom illetve nem értem hogy jutottunk el a konstruktortól odáig, hogy már hivatkozunk a konstruktornak átadott objektumra.
Szóval hol kerül definiálásra a "stream" objektum, amit a függvénymeghíváskor használunk? Vagy amikor lefut a konstruktor és a benne lévő (Stream& stream), akkor ezzel már definiálva is van? Nem kellene vmi parancsot használni külön a kapcsos zárójelben? A (Stream& stream) nem egy helyi változóként működik? Elérhető marad a teljes library-ben?[ Szerkesztve ]
-
Tankblock
aktív tag
válasz Teasüti #9076 üzenetére
Hello,
nézd meg mennyivel dobja meg a letöltendő firmware méretét és a memória használatot aztán rájösz, hogy miért.....
Ha van egy mikrokontrollered akkor nem biztos h erre áldozod be azt a kevés erőforrást, főleg ha az osztály nagy részét nem is használod ki.
Release the Beast....
-
Tankblock
aktív tag
válasz Teasüti #9079 üzenetére
nem a
stream(stream)
programkód azt jelenti hogy amikor inicializálod akkor a bejövő cím értékét bemásolja a class stream nevű változójába.
[Member initialization in constructors]
Sztem a stream object nincs definálva, hol lehet megnézni a könyvtárat?
Release the Beast....
-
Janos250
őstag
válasz Teasüti #9076 üzenetére
"Ti tudtátok, hogy a Stream osztályban ilyen függvények vannak, hogy readStringUntil(), parseInt(), stb?"
A HardwareSerial.cpp-ben ez van:
HardwareSerial Serial(0);
Vagyis a HardwareSerial típusú Serial objektum tőlünk függetlenül "automatikusan" létrehozásra kerül.A HardwareSerial.h-ban viszont ez van:
class HardwareSerial: public Stream
Vagyis a HardwareSerial osztály örökli a Stream osztály public és protected tagfüggvényeit, adattagjait.A Stream.h-ban viszont ez van:
class Stream: public Print
Vagyis a Stream osztály meg örököl a Print osztálytól, így közvetve a HardwareSerial is örökol a Print osztályból. Ezért lehet pl. Serial.print() és még egy csomó.A readStringUntil az a Stream osztályból öröklődik, szintén egy csomó egyébbel együtt.
Célszerű végigbogarászni a
HardwareSerial.h
Stream.h
Print.h
fájlokat, kincseket lehet bennük találni.Ezért értelmesek pl. az alábbiak:
Serial.available();
Serial.read();
Serial.peek();
Serial.flush();
Serial.setTimeout(1000);
Serial.find("vege");
Serial.find(10);
Serial.find("vege",10);
char c ;
Serial.find(c);
char charBuffer[20];
Serial.readBytesUntil(c,charBuffer,10);
uint8_t uint8_tBuffer[20];
Serial.readBytesUntil(c,uint8_tBuffer,10);
String str1;
str1 = Serial.readString();
str1 = Serial.readStringUntil(c);Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
JozsBiker
aktív tag
Sziasztok !
Szeretném logolni egy búvárszivattyú működését, amihez áramérzékelőt használnék. Alapvetően kétfélét találtam: Hall érzékelőset ( ACS712 ) és tekercseset ( ZMCT103C ). Ez utóbbi szimpatikusabb volna üzembiztonság szempontjából, mert a szivattyú tápját nem kellene a panelen megjáratni, csak átvezetni a tekercs közepén. Viszont érdekes módon erről az érzékelő típusról gyakorlatilag semmi konkrétumot nem találni a neten. Pl. azt sem tudom miért van 4 kivezetése. Esetleg valakinek infója ? Köszi.
-
_q
addikt
Teasüti javaslata alapján utána néztem az ESPNow-nak. Sajnos nem tud egyszerre két eszköz kommunikálni + még netre is csatlakozni. Külön 2 eszköz kommunkációja ment. AP+STA mód kellene, de azt írták, hogy az ESP32-be egy rádió adó van, tehát ugyan azon a frekvencián tudja szórni az AP és STA jelet is. Ezért is SoftAP a neve annak amire képes. AP+STA mód estén, ha van egy router akkor STA módba lesz konfigurálva és úgy megy, ha nincs akkor pedig AP módban. Esetleg menet közben lehetne AP és STA között váltogatni, de azt nem próbáltam.
Megpróbálkozok még a bluetooth wifi kombóval hát ha megy. -
Teasüti
nagyúr
válasz Tankblock #9080 üzenetére
Nem figyeltem erre, viszont úgy veszem észre lassan a beágyazott rendszereknél is kezdődik, hogy egyre olcsóbbá válik az erőforrás, ami a programozás rovására megy. Pl egy Uno esetén a 32KB Rom-ot és 2KB Ram-ot alaposan be kellett osztani, viszont egy ESP32-nél azért a 4MB flash-nél és az 512KB Ram-nál annyira mindegy szerintem, hogy használunk-e String-eket, vagy sem.
-
DrojDtroll
addikt
Lehet valahogyan egy virtuális arduino mikrokontrollert programozni? Léteznek emulátorok?
Fontos lenne, hogy soros porton elérjem a virtuális eszközt.
-
Tankblock
aktív tag
-
_q
addikt
válasz Teasüti #9085 üzenetére
Mindenképpen 2 db ESP32-t akarok használni. Egyik kinti hőmérséklet mérésre, másik benti mérésre + kijelzésre. Sajnos a vezetékes kommunikáció ezért nem lehetséges. Ha nem akarnék NTP időadat alapján dátumot, akkor nem lenne gond egyik megoldással se amit eddig próbáltam (socket szerver, ESPnow), de nem szeretnék RTC modult pluszban, ha megoldható az NTP adat lekérése is. Így jelenleg a bluetooth maradt amit javasoltál, megpróbálom így. (RF modul vagy külső BT modul lehetne még opció, de ott is plusz elektronika kellene,. Ha már az ESP tudja a bluetooth wifi kombót, jó lenne ki is használni ).
-
Teasüti
nagyúr
Úgy értettem, hogy egy ESP32 duóval megoldani a gateway-t. Szenzor alatt meg a vezetéknélküli másik ESP-t értettem. Vagy használhatsz egy külső BT modult a gateway-en, pofon egyszerű programozni sima UART-vel kommunikál. A belső wifi-t meg netre ráállítani. Így nincs RAM limit se, mivel sima UART használat van csak, nem kell betölteni a BT könyvtárat. Igaz ez már nem BLE, hanem classic BT.
(Ha meg BLE modult használsz, annak meg lesz saját könyvtára amit megint csak be kell tölteni és vagy befér a ram-ba, vagy nem.)
Passz. BLE+Wifi ram korlátba ütközik, ez nem működik még natívan sem jelenleg.
ESPNow+Wifi viszont érdekes, annak elvileg mennie kéne.[ Szerkesztve ]
-
_q
addikt
válasz Teasüti #9093 üzenetére
Jaa értelek már, akkor 3 db ESP32 kellene viszont ez így már jónak kellene legyen, csak nagy helyet foglalna el a panelen.
Akkor ezért nem nagyon találok Wifi+Bluetooth példákat, mert nem nagyon megy együtt a kettő . Akkor ez is kilőve pedig szép és jó lenne ,ha menne együtt. Kezdem érezni az ESP korlátokat, pedig olyan jól hangzik, hogy mennyi mindent tud, viszont nagyon sok esetben ott van egy képzeletbeli vagy valóságos apró betűs rész, hogy "kivétel ebben és ebben az esetben nem tudja".
ESNow esetén egyik eszköz STA másik AP módban van. Az STA esetemben a külső ESP lenne, ami alszik és 15 percenként felébred, adatot küld AP, benti ESP-nek majd visszaalszik. A router mint AP eszköz, arra csak az STA eszköz tudna csatlakozni, de ő meg egyszerre két helyre nem képes vagy a "szerverre" vagy a routerre csatlakozik. Legalábbis kommentek alapján, illetve próbálkozásaim alatt erre jutottam, hogy ez lehet az oka. Egy példát találtam, ahol MQTT szervernek küld adatot egy ESPnow eszköz. Lehet, hogy csak Channel 1-en működik ? A routerem 2-es csatornán kommunikál. Megnézem majd mi van, ha átteszem azt is 1-re. Igaz tesztelni NTP klienssel tudom csak, amúgy is az lenne a lényeges nekem.
Ahogy nézem akármilyen vezeték nélküli eszközt választanék, nem úszom meg olcsón, akár RF, BT vagy egy 3. ESP32 is legyen az. Lehet jobban járnék az RTC modullal.
(Vicces mert az elején úgy indultam el, hogy valami összetettebb feladatot szeretnék, ne végezzek vele 2 hét alatt. Erre jött ez a hőmérő-óra projekt, gondolván nincs más jó lesz ez, nem baj ha hamar végzek vele. Erre....a legegyszerűbb dolgok tartanak legtovább Persze nem haszontalan amiket próbáltam, azokat is jobban ismerem legalább most már, de nem számítottam rá, hogy ennyi fejtörést okoz 2 ESP32 közötti kommunikáció.)[ Szerkesztve ]
-
Janos250
őstag
Én már rég elvesztettem a fonalat, csak egyetlen megjegyzésem lenne:
Saját tapasztalat alapján az ESP32 8 (nyolc) clientet tud párhuzamosan kezelni.
Mondom ezt anélkül, hogy valaha is lementem volna a socket programozás szintjére. Én maradtam a WiFiServer, WiFiClient szintjén, oldják meg ők a socketek kezelését.Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
_q
addikt
válasz Janos250 #9095 üzenetére
Sajnálom, ha nem voltam követhető
Lényeg, hogy működik ESPnow + wifin keresztül routerre csatlakozás, onnan adat lekérés. A megoldás az volt, hogy nem elég a két ESP-t 1-es csatornára tenni, hanem még a routert is 1-es csatornára kellett állítani. Más kombinációval sajnos nem működött.
Jó a webserver-kliens is, ha nem kellene fix IP címmel dolgozni, ahol már UDP is szóba jön, legalább is NTP adat lekérésnél kell UDP is. Onnantól, hogy fix IP cím van és UDP függvényeknél is megjelenik az
IPAddress
osztály, onnantól nem működik sajnos az NTP. Legalább is nekem nem sikerült megoldani. -
Teasüti
nagyúr
A megoldás az volt, hogy nem elég a két ESP-t 1-es csatornára tenni, hanem még a routert is 1-es csatornára kellett állítani. Más kombinációval sajnos nem működött.
Igen, azt hittem ezt már megbeszéltük korábban. ESPNow adhoc hálózatának és a WLAN-nak is egyazon csatornán kell lennie!
Így akkor ez most jó? Működik? Kipipálva ez a rész?Kíváncsi lennék egy BLE vs ESP-Now összehasonlításra, melyik lehet az energiatakarékosabb vajon.
[ Szerkesztve ]
-
_q
addikt
válasz Teasüti #9097 üzenetére
Igen beszéltük, hogy ugyan azon a csatornán kell legyen mindent. Előtte minden a kettesen volt, router + mind a kettő ESP, de az nem jó. Tehát ugyan azon a csatornára csatlakozás kevés, kimondottan az 1-es csatornán megy csak.
Igen pipa, úgy néz ki, de azért még tesztelem, hogy mennyire stabil és tényleg megy-e. Ezt leszámítva már csak kijelzőre kell küldeni az információt, illetve PCB-t tervezni hozzá. Köszönöm a segítséget mindenkinek
(Plusz opció: lehetne olyat, hogy a mért adatokat thingspeekre küldeni vagy más módon monitorozni, még meglátom.)
[ Szerkesztve ]
-
Teasüti
nagyúr
upsz, rossz topik...
[ Szerkesztve ]
Új hozzászólás Aktív témák
- Yettel topik
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Hálózati / IP kamera
- Milyen notebookot vegyek?
- Samsung Galaxy S21 FE 5G - utóirat
- Távcső topik
- Aliexpress tapasztalatok
- Xbox tulajok OFF topicja
- Rövid előzetesen a S.T.A.L.K.E.R. 2: Heart of Chornobyl
- A fociról könnyedén, egy baráti társaságban
- További aktív témák...