Hirdetés
- Lassacskán fenyőfát állítanak a hardverek
- Tudjuk, de nem tesszük: a magyarok többsége nem törődik adatai védelmével
- Mesébe illő csodakábelt tervezett a GeForce-ok leégése ellen a Segotep?
- Irodát kért, de gyárat kapott Elon Musk a Samsungtól
- Nyílt forráskódú lett a legegyszerűbben használható AI tartalomgeneráló
-
PROHARDVER!
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
-
olli
tag
válasz
vargalex
#20469
üzenetére
Kiíratás:
Received packet :1 HELLO 36.50 34.00 38369' with RSSI -99 Status: 1 BOILER
vagyis így már egy csomagból működik a pin 13 vezérlése is.
Korábban rákérdeztem az ESP-NOW vonalra a két esp közötti kommunikáció egyik protokolra. A jelen megoldás és az között stabilitás és kidolgozottság lenne csak a különbség? -
olli
tag
loRa sender codban:
sensors.requestTemperatures();float T1 = sensors.getTempC(D0);float T2 = sensors.getTempC(D1);Serial.print("Sending packet: ");Serial.println(counter);// send packetLoRa.beginPacket();LoRa.print(state);LoRa.print(" ");LoRa.print("HELLO");LoRa.print(T1 );LoRa.print(" " );LoRa.print(T2 );LoRa.print(" ");LoRa.print(counter);LoRa.endPacket();counter++;ESP32u4 receiver codban:// try to parse packetint packetSize = LoRa.parsePacket();if (packetSize) {// received a packetSerial.print("Received packet :");// read packetwhile (LoRa.available()) {Serial.print((char)LoRa.read());}// print RSSI of packetSerial.print("' with RSSI ");Serial.println(LoRa.packetRssi());A packetből hogyan lehet a state értékét kinyerni? -
Janos46
tag
Sziasztok.
Jó régen foglalkoztam a témával. Ismét szeretnék egy ESP8266/DHT11-et működésre bírni. Még megvannak a megfelelő könyvtárak, da ha elidítom, akkor már az ellenőrzésnél a következő üzenetet kapom:
In file included from C:\Users\Jano\Documents\Arduino\libraries\ESP8266WiFi\src/ESP8266WiFi.h:33:0,
from C:\Users\Jano\Documents\Arduino\ESP8266_DHT11_WiFi_1\ESP8266_DHT11_WiFi_1.ino:4:
C:\Users\Jano\Documents\Arduino\libraries\ESP8266WiFi\src/ESP8266WiFiType.h:26:10: fatal error: queue.h: No such file or directory
#include <queue.h>
^~~~~~~~~
compilation terminated.
exit status 1
Hiba a(z) Arduino Uno alaplapra fordításra.
==========
Tudnátok segíteni hogy mi a gond? Előre is köszönettel: János -
Janos250
őstag
válasz
lanszelot
#20426
üzenetére
Az ilyen multishieldek alapvetően jók, sok minden van rajtuk. Ha nem a gyári programját használod, akkor valóban jó lesz sok mindenre.
Viszont idővel majd bizonyára átállsz az UNO-nál korszerűbb lapra, és akkor látod majd, mennyivel egyszerűbb lesz az életed, nagyjából ugyanannyi pénzből.
Breadboard:
Én ezért csináltattam az ESP32-mhöz panelt, amin sok minden rajtavan, és ha lehet, azt használom. Terveztem már a neten fennlévő, egészen jónak tűnő panelt is csináltatni, de egyelőre az még elmaradt. A 10 db. panel volt 5 $ (0.5 $ /db. , ha 10-et csináltattam.) igaz, hogy 3-4-nél többet nem használok, a többi megy a szemetesbe, de így is sokat segít. Bár a szállítás sajnos elég drága. -
Janos250
őstag
Köszi, azt hiszem, valami ilyesmi lesz. Ilyen DC/DC-m van pár, de nem is kell a 3 potis, elég az 1 potis is, mert pl. áramkorlát nem kell.
Vagy tényleg 3 potis, és akkor az "indokolatnul nagy kondi", egy Li akku lesz, ami állandóan rajta lesz a töltőn, és az áram lekapcsolásakor is működik egy darabig.
Egyébként egy riasztó része lesz.
A mai "olcsó" kínai kamerák zöme is tudja az emberi alak felismerést, valamint nem csak mailre, hanem riasztó szerverre is tud küldeni egy karaktersorozatot TCP-n.
Ez a szerver egy ESP32 + SIM800 lesz, ami megcsörgeti a zsebemben lévő (buta) telefont, amivel telefonálni szoktam. Nem veszem fel, mert akkor ingyenes.
Erre előveszem a táskából az okostelefont, bekapcsolom, és megnézem neten a kamerát, hogy a sok gyerek közül melyik az, amelyik megint le akarja verni kalapáccsal a vasszekrényről a lakatot. -
Janos250
őstag
ESP32 + SIM800
ESP32 3.3 V, azzal nincs gond, de a SIM800 az 4V-os, és nem megy 3.3-ről, az 5V-ot meg nem bírja el. Viszont STABIL, és 2A (peek) kell neki. Ezeket Li akkukhoz illesztik, de én nem akarok akkut pluszba betenni.
Kinek milyen ötlete van, hogyan csináljak lehetően egyszerűen 4V, 2A-t? LDO-t nem találok 4V-ra, pedig az volna a legegyszerűbb.
DC/DC elég stabil ehhez vajon? -
Tomika86
senior tag
Sziasztok!
4MB Flash méretű ESP32 esetén amikor fordítok miért csak ennyit ír ki?
Flash: [======== ] 79.7% (used 1044901 bytes from 1310720 bytes)
Lehet valahogyan növelni a felhasználható flash méretet a programhoz?
Arduino IDE alatt van valami partició méret állítási lehetőség, de PlatformIO alatt nem tudom hol kell.
Tennék a programba még egy kis újítást, de 103,9% lett.
(van OTA frissítésem a programban már)
Köszönöm! -
fpeter84
senior tag
válasz
Janos250
#20354
üzenetére
éppen turkálom egy A6 C5 canbus hálózatait (elsősorban a powertrain vonalat), térképezgetem fel hogy milyen adatokat tudok onnan kinyerni, és azon agyaltam hogy hogyan lehetne a legjobban megjeleníteni őket, ha valami kis LCD-nél többet akarok? saját program windows-os tableten/laptopon? vb6 és delphi7 amivel utoljára játszottam...
vagy androidos program a fejegységen? ahhoz se konyítok, eddig a MIT app inventor volt a legmagasabb szint, de abban agyhalál lenne ennyi mindent össze puzzle-özni... ekkor jutott eszembe, hogy mi lenne ha egy ELM327-et emulálva a droidos Torque jelenítené meg a dolgokat? elkezdtem guglizni hogy hogyan is néz ki a protokoll, mi lenne a minimum amivel át tudnám verni az app-ot, erre belefutottam ebbe a szuper kis projektbe... Nano+HC06 BT adapterrel működött is pöcc-röff, de mivel a canbus-ról összeszedett adatokból szeretném etetni, a legkézenfekvőbb az lenne ha a natív BT-s és CAN-es ESP32-vel menne, esetleg a 2 CAN miatt a DUE+HC06... de sajnos sosem álltak össze a fejemben igazán tökéletesen ezek az objektum-orientált dolgok, csak totózok kísérletezek aztán van amikor sikerül ráérezni, de most sehogy sem akar menni... -
Wolfram
aktív tag
ESP8266 újraindul 40-50 percenként.
ESP.getResetInfoPtr()->reason 4-es kódot mutat.
A kódban nincs reset parancs, mitől indulhat újra? Úgy tűnik nincs exception mert akkor 2-es lenne a kód.
-
fpeter84
senior tag
Sziasztok!
Tudna valaki segíteni abban, hogy ezt a motorvezérlő+ELM327 emulátor lib-et hogyan tudnám átültetni hardveres sorosportra? Eredeti formájában Nano-val softserial-al működik, de szeretném vagy egy Due-n használni aminek van 2 CAN-je is, vagy esetleg ESP32-n a belső kékfoggal és CAN-el...
Amivel eddig próbálkoztam: OBDSerialComm.h -ban a 65-dik sorban lévő softserial sort lecseréltem erre: HardwareSerial *serial; valamint az OBDSerialComm.cpp -ben az 5-8 sorokat felcseréltem erre:
setBaudRate(9600);
// serial = new HardwareSerial();
serial->begin(9600);
serial->setTimeout(SERIAL_READ_TIMEOUT);
Valamint az #include után beszúrtam még egy HardwareSerial & serial = Serial1; -t... De arra nem tudok rájönni, hogy a serial=new... sorral mit kellene kezdeni - HardwareSerial()-al nem eszi meg. így fagy a vas, még egy Hello World kiiratásáig se jut el rögtön a setup elején...
Próbálkoztam egy olyan verzióval is, hogy a .h-ból teljesen kikommenteltem a 65-ös sort (nem próbáltam átírni) és helyette ez lett a .cpp-ben: [link] a módosított sorok végére // ### jelölést tettem hogy meg lehessen találni... Ezzel a módosítással lefordul a példa .ino, de nem reagál a kékfog adapterről érkező kérésekre. Természetesen a kapcsolás működik, serial passthrough kóddal látom ahogy a Torque próbál kérdezgetni az ELM-től az AT parancsokkal...
Ha valaki nagyon unatkozik, bele tudna nézni hogy hogyan lehetne feléleszteni?
-
#68216320
törölt tag
Üdv.
Szeretek retro számítógépekkel bíbelődni és ehhez hozzátartozik a floppy lemez használat. Valódi lemez, nem emuláció.
Azonban szükségem van USB-s floppy meghajtóra. Sajnos az újabban beszerezhető usb-s floppy meghajtók minősége elég nagy szórást mutat, így a tervem az, hogy a hagyományos drive-ot illeszteném usb-n a modern pc-hez.Ismertek esetleg STM32 vagy ESP kontrollerrel (ezek vannak itthon) egyszerűen megvalósítható megoldást?
A régi drive-ból maradt egy ilyen vezérlő, de nem látszik rajta semmi. Van info, hogy mi lehet ez? [kép]
-
-
cog777
őstag
Keresgeltem, de nem talaltam topikot a kerdesemre, remelem maradhat. Szoval, elhataroztam hogy ujraszervezem a hazi homeros projektemet, jelen pillanatban van egy ESP32 amely szerverkent funkcional megjeleniti egy LCD-n a kulonbozo ESP8266-ok altal kuldott adatokat, homerseklet, paratartalom.
Ezt a felallast szeretnem kivaltani egy okosabb rendszerrel. Elsosorban kellene riasztas vagy emal-ra, vagy telefonra ha a benti homerseklet eler egy kuszoberteket.
Amit most kigondoltam hogy az RPi lesz a szerver, es pythonnal kuldhetek email. Viszont vannak okosabb IoT rendszerek de ezeket nem ismerem. Van valami otletetek hogyan tudnam megoldani?
Talaltam IoT dashboard-okat de azok kb 10 dollartol kezdodnek havonta, nemelyiknek mobilos app-ja is van.
IFTTT-t nem ismerem, lehet hogy ez segit? pl email notification?
https://anthscomputercave.com/tutorials/ifttt/using_ifttt_web_request_email.htmlTovabba egy IoT dashboardot is keresek, aminek van mobilos app-ja, regebben volt ingyenes par eszkozig, de most nem talalok. Korabban csinaltam magam, bereltem egy szervert es domain nevet, grafana-t futtattam, de erre mar nincs idom, valami kulcsrakeszebb kellene.
Talan ti is hasznaltok ilyen IoT riaszto/dashboard szeruseget. Elore is koszi a tanacsokat.
-
cog777
őstag
Vannak itt ott a lakasban es a kertben ESP8266 moduljaim, 4xAA aksival, dobozozokban. Ezek merik a homersekletet es kuldik egy ESP32-nek, amelyik megjeleniti az ertekeket.
A kertiek fel orakra elalszanak, 70uA-t fogyasztanak igy, kb 4-6 honapot siman mennek aksiva. Probapanelokra raktam az procikat es az alkatreszeket.
Par eve remekul mukodnek, de mosnanatba vettem eszre hogy nemelyik nem kapcsol be, pedig frissen toltott aksikat raktam be. Szerintem eselyes hogy a probapanelok korrodalodtak. A benti modul rendben mukodik.
A kinti homerseklet szenzorokat akarom valami megbizhato megoldasra cserelni.
Tud valaki kesz homerseklet modulokat (zart, kintit, elemmel v aksival mukodo), amelyek valamilyen ismert protokollon kuldik az adatokat es azokat tudnam feldolgozni?A szervert szivesen epitem en tovabbra is, nem kifejezetten konyhakesz rendszerben gondolkodom.
-
Wolfram
aktív tag
Foglalkozott már valaki hang rögzítéssel ESP-n?
Ha lementem a nyers analóg mikrofon értékeket egy file-ba, azt fel tudom valamivel dolgozni PC-n? (átkonvertálni wav vagy mp3 formátumba) -
Tomika86
senior tag
Ezt megnézem mit tehetek, mert az esp32-ben nincs pontos időm tárolva. akkor maximum azt teszem az x tengelyre, hogy mióta van megnyitva a kapcsolat. Igazából lényegtelen, hogy mikor történt bármi is, csak legyen viszonyítási alap.
Viszont most munkahelyemen kipróbáltam és simán viszi 50ms-et, hiba nélkül. Ezek szerint kliens oldalon se mindegy mi van.
-
Tomika86
senior tag
válasz
vargalex
#20205
üzenetére
Szia!
Te nagyon kened vágod a témát, tudsz esetleg segíteni abban, hogy websocket segítségével, miért nem tudok 100ms alatti intervallummal adatot küldeni?
jelenleg van egy programom amit megcsináltam offline elérhetővé, illetve összerakosgattam a javascript kódot is.
Jelenleg 110ms-al próbálkozok (ezzel jó is), a szinusz és koszinusz csak teszt.
Jobb lenne ha 100ms alá tudnék menni, viszont ilyenkor megbolondul az ESP32, heap error, lefagy az adatátvitel, újraindulgat.Az a helyzet, hogy szeretnék kb 5 grafikont, és jelenleg még csak 2 van (de így se elég gyors).
[link]
src mappában a fájlokKöszönöm, ha bármiben tudsz segíteni, ötletet mondani. Illetve tuti találsz benne hülyeséget is, amit én nem tudok még.
-
Wolfram
aktív tag
ESP32-S2-n Ard IDE feltöltés után nem indul a progi (nem ír hibát az output-ban), csak ha megnyomom kézzel a reset gombot, valami rémlik korábbról de nem jut eszembe mi volt a megoldás?
-
Wolfram
aktív tag
válasz
Janos250
#20200
üzenetére
Valami ilyesmire gondoltam (kézi számolással demonstrálva):
long sinceSec =esp_timer_get_time()/1000000;
long min = sinceSec / 60;
long sec = sinceSec % 60;
Serial.printf(" ESP32 running since: " + min + " minutes " + sec + " seconds");de nem ismerem a C string formázást, vagy hogy a dátum objektumnak van-e valamilyen parse funkciója ami kiszámol egy komplett Dd HH:MM:SS dátumot.
-
Janos250
őstag
válasz
Wolfram
#20199
üzenetére
"Hogy lehet ESP32-n nanosecond-ot /system_get_time()/ dátummá alakítani? "
Az biz' macerás lesz!
1. a 80 Mhz-es perifériális órajelet számlálja (ha az, amire én gondolok)
2. időnként túlcsordul -> átfordul
3. tudni kell valami kezdő időpontot, onnan tudod számolni
Én régen így oldottam meg, lehet, ha ma újra használnám, már másként csinálnám:
http://arduinouser.hu/esp32/ccount/ccount.txt
Ez persze csak a túlcsordulást/átfordulást kezeli, ettől még nem lesz dátum.Elvileg ez létezik, de még nem próbáltam
std::string s = date::format("%F %T", std::chrono::system_clock::now()); -
Wolfram
aktív tag
ESP-ben vannak thread-ek? Tudok valamit futtatni úgy hogy az nem blokkolja a loop-ot?
-
válasz
Wolfram
#20171
üzenetére
Nem lehet, hogy nincs egyetlen delay sem a loop-ban és emiatt nem tud a CPU a wifivel foglalkozni? Bár ez ha jól tudom, ESP8266-ra jellemző, te meg ESP32-t használsz, de hátha ez a gond, egy próbát megér.
ESP-n a delay máshogy működik, más funkciót tölt be, mint az AVR-eken. -
Janos250
őstag
válasz
Wolfram
#20171
üzenetére
Ezért nem használom én a többféle http fv. egyikét sem. Mivel egyszerű, magam írom meg hozzá kezelést.
Ha minden kötél szakad, akkor be kell tenni a fv-t a .ino mellé, esetleg át is nevezni, azt includolni, mert abba akkor tehetsz magadnak átmenetileg kiíratást, hogy mi a nyűgje.
Az ESP32 16 darab klienst tud kezelni. Nem forduhat elő, hogy többet nyitsz meg, mert még a régiek is élnek, mert nem kaptak választ?
Nincs benne olyan lehetőség, hogy csak akkor get-elj, ha van is ot valaki, aki várakozik?
Próbáld meg kiíratni az FD-jét, ha túlszalad a 63-on, akkor ez a baj. -
Wolfram
aktív tag
Ez az a kód ami miatt folyamatosan resetel az ESP (nem látni exception-t a serial monitoron) :
HTTPClient http;
http.begin(url);
int httpResponseCode = http.GET();egy idő után feladja a resetelgetést és lehal az egész lap.
Valaki szakértsen mi a gond ezzel a kóddal.
-
-
Tankblock
aktív tag
válasz
Wolfram
#20104
üzenetére
C++ try() catch() nekem tesztek alatt működik esp-idf et használok (configurálni kellett a sdkconfigot is hozzá), lehet dobni hibát throw() , arra nem esküszök meg hogy ESP_ERROR_CHECK makróra is tud e dobni, nálam működött....
másik megoldás a JTAG pl : [link] bár ezt még nem használtam, ha lesz ráidőm kipróbálom majd.
-
-
Wolfram
aktív tag
Amikor egy lap (ESP32) lefagy, milyen lehetőségek vannak a debugolásra?
Lehet a fagyást kódból kezelni, pl.: letárolni az utolsó hibát valahova? -
Janos250
őstag
válasz
lanszelot
#20035
üzenetére
Ne delay-el old meg, hanem egy max6675 olvasás után tárold el a ms értéket, és csak akkor olvass, ha az aktuális ms, és a letárolt közti különbség nagyobb egy megadott értéknél. A gomnyomást meg állapotban tárolhatod, és ha állapot is, ms is jó, akkor alvasol.
Ha egyszer átállsz ESP32-re, akkor ez egyszerűbb lesz. -
its_grandpa
tag
válasz
KoVee84
#19967
üzenetére
Bocs de ez így egy ~ 130 soros borzalom.
A case ágak 0-3 ig ugyanazok, csak a név kiírása miatt van benne "magic number" azaz a texts[n].
Ez kb. a fele, 65 sor és remélem ugyanazt csinálja.int vref = 1100;const char* persons[] = {"Kovács","Könözsi","Csepura","Németh"};const uint64_t egy_nap = 86400000000;RTC_DATA_ATTR unsigned int reboot_counter = 0;void setup(){Serial.begin(115200);delay(10);epd_init();delay(10);// Correct the ADC reference voltageesp_adc_cal_characteristics_t adc_chars;}void loop(){int persons_no = reboot_counter; // csak a szépség kedvéértif reboot_counter < 4:{epd_poweron();epd_clear();delay(10);uint16_t v = analogRead(BATT_PIN);float battery_voltage = ((float)v / 4095.0) * 2.0 * 3.3 * (vref / 1000.0);String voltage = "Feszültség: " + String(battery_voltage) + "V";Serial.println(voltage);int cursor_x = 60;int cursor_y = 475;writeln((GFXfont *)&FiraSans, (char *)voltage.c_str(), &cursor_x, &cursor_y, NULL);cursor_x = 180;cursor_y = 290;writeln((GFXfont *)&OpenSansExtraBold72, (persons[ persons_no]), &cursor_x, &cursor_y, NULL);reboot_counter++;epd_poweroff_all();esp_sleep_enable_timer_wakeup(egy_nap * 7);esp_deep_sleep_start();}else if reboot_counter = 4:{epd_poweron();delay(10);int cursor_x = 550;int cursor_y = 475;writeln((GFXfont *)&FiraSans, ("SZELEKTÍV KUKA"), &cursor_x, &cursor_y, NULL);reboot_counter++;epd_poweroff_all();esp_sleep_enable_timer_wakeup(egy_nap * 6);esp_deep_sleep_start();}else{esp_restart();}} /* loop */A switch ágak végére meg illenék a break csak a megszokás miatt.
(ez a notepad++ ból történő másolás, kódformázás nem lett az igazi, bocs)
-
KoVee84
senior tag
válasz
KoVee84
#19966
üzenetére
#include <Arduino.h>
#include "epd_driver.h"
#include "font/firasans.h"
#include "font/opensans72eb.h"
#include "esp_adc_cal.h"
#include "pins.h"
#include "time.h"
int vref = 1100;
const char* texts[] = {"Kovács","Könözsi","Csepura","Németh"};
const uint64_t egy_nap = 86400000000;
RTC_DATA_ATTR unsigned int reboot_counter = 0;
void setup()
{
Serial.begin(115200);
delay(10);
epd_init();
delay(10);
// Correct the ADC reference voltage
esp_adc_cal_characteristics_t adc_chars;
}
void loop()
{
switch (reboot_counter)
{
case 0:
{
epd_poweron();
epd_clear();
delay(10);
uint16_t v = analogRead(BATT_PIN);
float battery_voltage = ((float)v / 4095.0) * 2.0 * 3.3 * (vref / 1000.0);
String voltage = "Feszültség: " + String(battery_voltage) + "V";
Serial.println(voltage);
int cursor_x = 60;
int cursor_y = 475;
writeln((GFXfont *)&FiraSans, (char *)voltage.c_str(), &cursor_x, &cursor_y, NULL);
cursor_x = 180;
cursor_y = 290;
writeln((GFXfont *)&OpenSansExtraBold72, (texts[0]), &cursor_x, &cursor_y, NULL);
reboot_counter++;
epd_poweroff_all();
esp_sleep_enable_timer_wakeup(egy_nap * 7);
esp_deep_sleep_start();
}
case 1:
{
epd_poweron();
epd_clear();
delay(10);
uint16_t v = analogRead(BATT_PIN);
float battery_voltage = ((float)v / 4095.0) * 2.0 * 3.3 * (vref / 1000.0);
String voltage = "Feszültség: " + String(battery_voltage) + "V";
Serial.println(voltage);
int cursor_x = 60;
int cursor_y = 475;
writeln((GFXfont *)&FiraSans, (char *)voltage.c_str(), &cursor_x, &cursor_y, NULL);
cursor_x = 180;
cursor_y = 290;
writeln((GFXfont *)&OpenSansExtraBold72, (texts[1]), &cursor_x, &cursor_y, NULL);
reboot_counter++;
epd_poweroff_all();
esp_sleep_enable_timer_wakeup(egy_nap * 7);
esp_deep_sleep_start();
}
case 2:
{
epd_poweron();
epd_clear();
delay(10);
uint16_t v = analogRead(BATT_PIN);
float battery_voltage = ((float)v / 4095.0) * 2.0 * 3.3 * (vref / 1000.0);
String voltage = "Feszültség: " + String(battery_voltage) + "V";
Serial.println(voltage);
int cursor_x = 60;
int cursor_y = 475;
writeln((GFXfont *)&FiraSans, (char *)voltage.c_str(), &cursor_x, &cursor_y, NULL);
cursor_x = 180;
cursor_y = 290;
writeln((GFXfont *)&OpenSansExtraBold72, (texts[2]), &cursor_x, &cursor_y, NULL);
reboot_counter++;
epd_poweroff_all();
esp_sleep_enable_timer_wakeup(egy_nap * 7);
esp_deep_sleep_start();
}
case 3:
{
epd_poweron();
epd_clear();
delay(10);
uint16_t v = analogRead(BATT_PIN);
float battery_voltage = ((float)v / 4095.0) * 2.0 * 3.3 * (vref / 1000.0);
String voltage = "Feszültség: " + String(battery_voltage) + "V";
Serial.println(voltage);
int cursor_x = 60;
int cursor_y = 475;
writeln((GFXfont *)&FiraSans, (char *)voltage.c_str(), &cursor_x, &cursor_y, NULL);
cursor_x = 180;
cursor_y = 290;
writeln((GFXfont *)&OpenSansExtraBold72, (texts[3]), &cursor_x, &cursor_y, NULL);
reboot_counter++;
epd_poweroff_all();
esp_sleep_enable_timer_wakeup(egy_nap * 7);
esp_deep_sleep_start();
}
case 4:
{
epd_poweron();
delay(10);
int cursor_x = 550;
int cursor_y = 475;
writeln((GFXfont *)&FiraSans, ("SZELEKTÍV KUKA"), &cursor_x, &cursor_y, NULL);
reboot_counter++;
epd_poweroff_all();
esp_sleep_enable_timer_wakeup(egy_nap * 6);
esp_deep_sleep_start();
}
case 5:
{
esp_restart();
}
}
} -
KoVee84
senior tag
Nem raktam deep sleepet...

órakezelésben tudtok segíteni?
Íme a kód:#ifndef BOARD_HAS_PSRAM
#error "Please enable PSRAM !!!"
#endif
#include <Arduino.h>
#include "epd_driver.h"
#include "font/firasans.h"
#include "font/opensans72eb.h"
#include "esp_adc_cal.h"
#include "pins.h"
#include "time.h"
int vref = 1100;
const char* texts[] = {"Kovács","Könözsi","Csepura","Németh"};
const unsigned long het1 = 604800000UL;
const unsigned long het2 = 1209600000UL;
const unsigned long het3 = 1814400000UL;
const unsigned long het4 = 2419200000UL;
const unsigned long szelektiv = 2332800000UL; // utolsó nap
//teszt
//const uint32_t het1 = 20000;
//const uint32_t het2 = 40000;
//const uint32_t het3 = 60000;
//const uint32_t het4 = 80000;
//const uint32_t szelektiv = 70000;
void setup()
{
Serial.begin(115200);
delay(10);
// Correct the ADC reference voltage
esp_adc_cal_characteristics_t adc_chars;
epd_init();
epd_poweron();
epd_clear();
delay(10);
// első hét
//feszültség
uint16_t v = analogRead(BATT_PIN);
float battery_voltage = ((float)v / 4095.0) * 2.0 * 3.3 * (vref / 1000.0);
String voltage = "Feszültség: " + String(battery_voltage) + "V";
Serial.println(voltage);
int cursor_x = 60;
int cursor_y = 475;
writeln((GFXfont *)&FiraSans, (char *)voltage.c_str(), &cursor_x, &cursor_y, NULL);
//név
cursor_x = 180;
cursor_y = 290;
writeln((GFXfont *)&OpenSansExtraBold72, (texts[0]), &cursor_x, &cursor_y, NULL);
epd_poweroff_all();
}
void loop()
{
unsigned long currentMillis = millis();
switch (currentMillis)
{
case het1:
{
epd_poweron();
epd_clear();
delay(10);
uint16_t v = analogRead(BATT_PIN);
float battery_voltage = ((float)v / 4095.0) * 2.0 * 3.3 * (vref / 1000.0);
String voltage = "Feszültség: " + String(battery_voltage) + "V";
Serial.println(voltage);
int cursor_x = 60;
int cursor_y = 475;
writeln((GFXfont *)&FiraSans, (char *)voltage.c_str(), &cursor_x, &cursor_y, NULL);
cursor_x = 180;
cursor_y = 290;
writeln((GFXfont *)&OpenSansExtraBold72, (texts[1]), &cursor_x, &cursor_y, NULL);
epd_poweroff_all();
break;
}
case het2:
{
epd_poweron();
epd_clear();
delay(10);
uint16_t v = analogRead(BATT_PIN);
float battery_voltage = ((float)v / 4095.0) * 2.0 * 3.3 * (vref / 1000.0);
String voltage = "Feszültség: " + String(battery_voltage) + "V";
Serial.println(voltage);
int cursor_x = 60;
int cursor_y = 475;
writeln((GFXfont *)&FiraSans, (char *)voltage.c_str(), &cursor_x, &cursor_y, NULL);
cursor_x = 180;
cursor_y = 290;
writeln((GFXfont *)&OpenSansExtraBold72, (texts[2]), &cursor_x, &cursor_y, NULL);
epd_poweroff_all();
}
case het3:
{
epd_poweron();
epd_clear();
delay(10);
uint16_t v = analogRead(BATT_PIN);
float battery_voltage = ((float)v / 4095.0) * 2.0 * 3.3 * (vref / 1000.0);
String voltage = "Feszültség: " + String(battery_voltage) + "V";
Serial.println(voltage);
int cursor_x = 60;
int cursor_y = 475;
writeln((GFXfont *)&FiraSans, (char *)voltage.c_str(), &cursor_x, &cursor_y, NULL);
cursor_x = 180;
cursor_y = 290;
writeln((GFXfont *)&OpenSansExtraBold72, (texts[3]), &cursor_x, &cursor_y, NULL);
break;
}
case szelektiv:
{
epd_poweron();
delay(10);
int cursor_x = 550;
int cursor_y = 475;
writeln((GFXfont *)&FiraSans, ("SZELEKTÍV KUKA"), &cursor_x, &cursor_y, NULL);
epd_poweroff_all();
break;
}
case het4:
{
esp_restart();
}
}
} -
vargalex
félisten
válasz
KoVee84
#19938
üzenetére
Mire iratod ki az adatokat? Ha nem e-ink kijelzőre, akkor ugye a kijelzés is harap erősen az akkuból.
Egyébként, ha e-ink, akkor ahogy a kolléga mondja, deep sleep-be kell küldeni az ESP32-t (én ESP8266-al csináltam percenként ébredő hőmérőket, amik 10 percenként wifi-re is csatlakoznak és post-olják az addig mért adatokat, azok egy 18650-es cellával 3-4 hónapig elvannak) és időzítve ébreszteni.Szerk.: mondjuk a developer board-ok nem biztos, hogy ideálisak a feladatra, mivel ha az ESP-t deep sleep-be is küldöd, attól a körítés, ami a lapon van, fogja enni az akkut. És nem biztos, hogy maga az ESP a legnagyobb fogyasztó. Én csupasz ESP12E-kett használtam a projektemhez.
-
válasz
KoVee84
#19938
üzenetére
Ez jól hangzik.

Nem ismerem ezt a kütyüt, csak a fotó alapján látom, hogy ESP32 van rajta, és abban van RTC modul, ha nem is a legpontosabb. Arra viszont szerintem pont jó, hogy felébressze a cuccot mondjuk minden éjszaka, NTP szerverről frissítse magát és visszaaludjon. Szívesen segítenék, de ESP-ben nem vagyok különösebben jártas, és a kütyü nélkül tesztelni sem tudnám, de ha ide beteszed (ha hosszú, töltsd fel valahová) akkor biztos megoldjuk.

-
válasz
lanszelot
#19910
üzenetére
Ez a képen fogalmam sincs, hogy micsoda, de talán sejtem, mire gondolsz. Az Arduino előtt pár évig foglalkoztam PIC mikrokontrollerrel (PicKit2, 16F877 μC), a hozzá való szoftvert és programozót mai napig használom attiny μC-k felprogramozására, illetve debugolásra. Na most, hasonlóan az Arduino-hoz, azt is C-ben kell programozni, igaz ahhoz saját fejlesztőkörnyezet volt, és közel sem ennyi library és példakód, de a logikája némileg hasonló (regiszterek használata, portok kezelése). De azt azért túlzás lenne állítani, hogy aki az egyiket tudja, az a másikat is, kb mintha azt mondanám, hogy aki tud biciklizni, az tud repülőt is vezetni.
Más kérdés, ha egy adott μC-t integrálnak az Arduino ökoszisztémába (STM32, ESP). -
vargalex
félisten
válasz
Tomika86
#19896
üzenetére
ESP oldalról válaszolod az átirányítást (ezt látnod is kell a böngészőben developer módban a network fülön, ahogy minden más választ is), de azt ajax hívás esetén a böngésző nem követi, azaz neked kell a javascript-ben a location-t beállítani. Ennek a résznek nincs köze az esp-hez, tisztán böngésző/javascript működés.
-
Tomika86
senior tag
válasz
vargalex
#19893
üzenetére
Az esp32 kódjában lenne az átirányítás (nem a javascriptben)
Ahol a send(400, "text/plain", "FAIL CONNECTION")(sima szöveg küldés böngészőre)
de próbáltam ezzel is
request->redirect("/nextion_fail");
És ehhez megvan a hozzátartozó http_get kérés, ahol a html kódot küldöm el.
Ez a nextion.cpp az other mappábanDe akkor valamit félreértek, illetve teljesen máshogy kell csinálni.
Az ajax kód jó így.
Az esp32nél a post kódnál ahol ellenőrzöm a check_status értékét, ott egy hibaközlő html oldalt szeretnék megjeleníteni.Köszönöm
-
Tomika86
senior tag
válasz
vargalex
#19890
üzenetére
Átalakítottam, így az ESP32 400-as kódot küld, ha true a check_status és nem jelenik meg az upload gomb.
De a fő probléma az hogy nem jelenik meg az oldalon a kiíratott üzenet sem:
if (check_status)
{
request->send(400, "text/plain", "FAIL CONNECTION");
// request->redirect("/nextion_fail");
Serial.println("Check status Fail");
}
else {
Serial.println("Check status Ok");
request->send(200);
}itt a redirect ki van kommentelve, de azzal sem jelenik meg, pedig a redirect még működik, de az ott lévő request->send(400, "text/html", fail_page); nem működik.
Tehát a fő probléma, hogy az átirányított oldal nem töltődik be, illetve még a sima text sem (nem a scriptben lévő alert)
Köszönöm!
-
Tomika86
senior tag
Sziasztok!
Hátha itt valaki tud segíteni, eddig sehol.
Röviden a program(teszt jelleggel van):
1. betallózva a fájlt, ellenőrzi a kiterjesztést, .tft esetén elküldi a méretet az esp32 felé. illetve aktív lesz az upload gomb.
Eddig működik
2. check_status direkt true értékkel van
3. ha a check_status értéke 1 akkor át kellene lépnem egy hibaüzenetet megjelenítő oldalra.Na a 3. lépésnél van a gond, nem csinálja meg.
Sima text/plain szövegkiírást sem ami a példában van.
Próbáltam redirectet is, de az ott lévő html oldalt sem jeleníti meg a böngésző (odalép pedig)Sehol sem találok ilyen példaprogramot, ahol átirányítás van és megjelenítve egy hibaoldal. Serial.print van mindenhol, ami nálam is működik, de ez nem felhasználóbarát. Inkább kiírnám a hibát az oldalon.
Ide tettem fel a programot:
[link]Köszönöm ha bárki tud hozzátenni valamit, akármi is legyen az.
-
Wolfram
aktív tag
Hang helyének/irányának meghatározása, csinált már valaki ilyet? A setup egy ESP32-S2 és 4db MAX4466 mikrofon egy 2x2m-es négyzet sarkain elhelyezve.
Kezdjek házilag matekozni, vagy van már valami megírt kód erre? -
Tud valaki olyan vezeték nélküli megoldást, ami elfér egy karórában ?
Anyukámnak szeretnék egy karra csatolható vészjelző eszközt csinálni, ami elmegy egy darab CR2032-es elemről. Attiny85 (Attiny12?) + IR LED + nyomógomb a terv, csak az a gond, hogy az IR nem megy át a falon. A vevő oldalon egy ESP8266 lenne IR vevővel, wifire kötve.
A másik ötletem, hogy magát az ESP8266-ot tenném az órába, van egy pucér ESP8266 modulom. Csak szemben az Attiny-vel, ami szépen elműködik 2,5V-ról is, ennek kellene stabilizátor és egy nagyobb áramot leadni képes táp, a wifi miatt.
Szóval valami rádiós eszköz kellene, ami méretben nem nagyobb egy gombelemnél. Az egyetlen, amit tudnia kell, hogy ~10m távolságban falon át egyetlen jelet/impulzust tudjon megbízhatóan átvinni a vevő oldalra.
-
Wolfram
aktív tag
ESP8266-on a hostnévből hogy tudok IP címet gyártani?
Konkrétan az a probléma hogy a websocket kliens úgy tűnik nem tudja feloldani a hostnevet, csak IP címmel kapcsolódik.
-
válasz
lanszelot
#19855
üzenetére
Na most gondolod rosszul, nem tud több szálon futni (kivétel mondjuk az esp32 ahol két mag van), ezt miből vontad le?

A program futása soronként történik, kivéve ha megszakítást használsz (de valójában ott is soronként fut a kód).
Ami téged félrevezetett, hogy a megoldás, amit adtam neked, egy modern oprendszer időosztásos módszeréhez hasonlóan látszólag egy időben, de valójában felváltva csinál több dolgot. -
ReFleXx
addikt
válasz
Harcipocok84
#19851
üzenetére
ha eleg egy uart akkor ott a jol bevalt arduino uno ha tobb is kell akkor pl arduino mega, stm32 bluepill vagy esp32
-
DigitXT
félisten
válasz
lanszelot
#19836
üzenetére
Nagy vonalakban úgy, ahogy írod, egymagos processzoron: pont erre céloztam,
hogy azért a megszakítás ennek keresztbe tud verni rendesen, illetve többszálú
programnál egyéb problémák is felmerülnek a párhuzamosítással kapcsolatban.
(Márpedig egy ESP32 pl. kétmagos, szóval nem teljesen elrugaszkodott dolog.)Az a baj, hogy feltételezed, hogy adott programrészbe került és ott volt a baj a
delay funkcióval, pedig ez a legkevésbé valószínű.
Sokkal valószínűbb, hogy
a kód nem is ott tartott. Ilyenkor hasznos beszúrni egy pár Serial.print(akármi)
hívást a kritikus részekre, és nézni a Serial Monitor-on, hogy mit írtál el...
Nagyon könnyű elgépelni valamit, s ha megeszi a fordító, akkor sz.rul fog futni:
az egyik ilyen legtriviálisabb (kezdő*) hiba valami értékének a téves vizsgálata,
nevezetesen ha véletlenül nem az "==" operátort használod, hanem az "="-t...
Simán lefordul, simán fut, csak nem azt csinálja, amit gondoltál, hanem amivel
hasonlítanád, azt adja értéknek, majd értékeli, hogy 0 vagy 1* az eredmény.
*: de nem csak kezdők követhetik el, hiszen lehet elgépelés is, emiatt néhány
fejlesztői környezet direkt nézi az ilyet, warningot dob rá, hogy ezt akartad-e...*: pontosabban "nem nulla", nehogy valaki belekössön... Egy gyors példa erre:
if (sensorValue = 90) { valami } else { egyéb } Ennél nem csak az a baj, hogy
az "egyéb" soha nem fog lefutni, hanem az is, hogy a sensorValue utána végig
90 lesz, egészen amíg újra be nem olvastad... (És ez egyetlen pici elgépelés.) -
-
Janos250
őstag
válasz
Tomika86
#19820
üzenetére
Nem ástam bele magam az ESPAsyncWebserver rejtelmeibe, nem is tervezem, mert én szeretem "gyalog" megoldani a dolgokat.
Ennek ellenére - mivel a kíbicnek semmi sem drága - azért leírom, hogyan próbálnám
Én így próbálnám meg:t.open("GET","/nextion_update",true)t.send()
vagy:t.open("GET","/nextion_update="+e.target.result,true)t.send()
bár annyira nem bogarásztam végig, mi az a e.target.result, gondolom valami érték, amit küldeni akarsz. -
Tomika86
senior tag
Sziasztok!
Kettő részből áll a kérdésem:
- Tud valaki jó tutorial-, vagy leírást, hogy a weboldalon lévő javascript kód hogy adja át az adatokat az esp32-nek. ESPAsyncWebservert-t használok, ebbe hogy jönnek át az adatok.
- Ki van aki beleásta magát az ESPAsyncWebserver könyvtár rejtelmeibe?
Egy WebServer könyvtárral íródott programot szeretnék átalakítani async könyvtárra, de nem akar menni.Példaként, itt egy html kód:
<!DOCTYPE html>
<html>
<head>
<script type='text/javascript'>
var file,cmp,partSize=100,offset=0;
function upload(){
file=document.querySelector('input[name=file]').files[0],
partSize=parseInt(document.querySelector('input[name=partSize]').value),
cmp=document.getElementById('completed'),
file?sendInfo(file.size):alert('Choose firmware file.')
}
function sendDataHandler(e){
if(null==e.target.error){
cmp.innerText=(100*offset/file.size).toFixed(1)+'%',
offset+=e.target.result.byteLength;
var t=new XMLHttpRequest;
t.onreadystatechange=function(){
4 == t.readyState && 200 == t.status && (offset<file.size?sendData():cmp.innerText='All data was sent')
},
t.open('post','/nextion_update'),
t.send(e.target.result)
}
else alert('Error: '+e.target.error)
}
function sendData(){
var e=new FileReader,
t=file.slice(offset,partSize+offset);
e.onload=sendDataHandler,
e.readAsArrayBuffer(t)
}
function sendInfo(e){
var t=new XMLHttpRequest;
t.onreadystatechange=function(){
4==t.readyState&&200==t.status&&sendData()
},
t.open('post','/nextion_fs'),
t.send(e)
}
</script>
</head>
<body>
<input type='file' name='file'/>
<input type='button' value='upload' onclick='upload()'/> <br/>
<label id='completed'></label>
<br/> Chunk size: <input type='text' name='partSize' value='1024' size='4'/>
</body>
</html>
Ebben történik adatküldés esp felé, és ESP programban megérkezik, de hogyan?// Receive file size
server.on("/nextion_fs", HTTP_POST, [](AsyncWebServerRequest * request){},
NULL,
[](AsyncWebServerRequest * request, uint8_t *data, size_t len, size_t index, size_t total) {
uint32_t fsize = atoi((const char*)data);
Serial.println("Nextion prepare message: " + String(nextion.prepareUpload(fsize)));
Serial.println("File size: " + String(fsize) + "bytes");
// Filesize and connection test
if(nextion.prepareUpload(fsize)) {
Serial.println("Start upload. File size is: " + String(fsize) + "bytes");
request->send(200);
}
else {
Serial.print("Bad file size");
Serial.println(nextion.statusMessage + "\n");
request->send(500);
}
});Nem működik a kód egyébként
Köszönöm!
-
agent_k
őstag
Sziasztok!
Valamikor ilyen iskolába jártam, de már sok mindent elfelejtettem, elnézést kérek a feltehetően igen amatőr kérdésért.
Van egy esp8266-om meg egy kapacitív földnedvesség mérőm. Napelemről megy, aksival. Az mcu-t meg a szenzort is 3.3V-ról üzemeltetem. Gondolom már sejtitek, a probléma, hogy ha az mcu deep sleepben is van, a szenzor nyilván akkor is fogyaszt, hiszen direktben kapja a feszt.
Szeretném egy GPIO pinről hajtani, de a szenzornak minimum 40mA kell, tehát kellene nekem egy alkalmas mosfet. A google keresések valahova ide lyukadtam ki: AO3400A és IRLZ24N
Segítsetek nekem melyik legyen? Vagy ezek tök rossz választások és van ennél sokkal jobb?Köszönöm!
-
válasz
Dißnäëß
#19712
üzenetére
Ahogy Grandpa írta, nem kell túlgondolni, ezekre már gondoltak.
Enyémről írtam egy cikket, csak valamiért elnyelték a logout hullámai, nem tudom, h már publikus-e [link].
Mondjuk itt a termosztát maradt, a keringető lett ESP vezérlésű. Később ezt a Home Assistant fogja majd ellátni vezérléssel, egyelőre csak adatokat közöl vele.
Termosztát állítgatás megint egyéni, nálunk folyamatos a kapcsolgatás, asszony random képes 25 foknál is kijelenteni, h fázik... megfogja a radiátort, az hideg -> hideg van bent. Már gondoltam, h csalok a hőmérőkkel, ráállítok +2-3 C°-t mindre
Ez mondjuk csak a nappalira igaz, emeleten termofejek beállítva, annyi. -
válasz
Dißnäëß
#19712
üzenetére
Én nem tudok mindenre válaszolni, csak örülök, hogy benéztél.

Esp32-n van permanens tár, ami nem EEPROM, de pont ilyen beállítások tárolására találták ki, még a hozzá való library-t is ennek megfelelően nevezték el (Preferences.h).
Én sem tudom, mit kell folyton állítgatni egy termosztátot...
Amikor kazános fűtésű házban laktunk, vettem egy okosabb termosztátot, ahol időzítve minden nap minden órájára be lehetett állítani a hőfokot. Eleinte élveztem, játszottam vele, aztán elkezdtem szépen törölgetni a beállításokat, míg egyszer csak azt vettem észre, hogy mindent kitöröltem és már hónapok óta ugyanaz az egy a hőfok van beállítva. 
-
-
Dißnäëß
nagyúr
Sziasztok Urak !
Rég jártam erre
A DIY jegyében szeretném megcsinálni kezdôként életem elsô wifis termosztátját.
Az alap egy ESP8266 vagy 32-es, ez sztem mindegy, mindegyik jó az igényeimnek.
Hogyan védenétek ki egy esetleges áramszünet hatását ? Szóval eeprom-on kattogok még mindig, illetve hogy minden egyes beállítást
- vagy magában tárol el eeprom-on
- vagy induláskor felveszi az adatokat vmi szerverrôl, pl. MQTT-n, hogy mire álljon vissza, ami fut egy szünetmentes Pi4-en mondjukUtóbbinál nem kérdés, hányszor lehet hôfokot beállítani a rendszernek.
Elôbbinél is max a kis elemmel támogatott RTC+eeprom lehet az, ami az írások számában limitálhat. Mennyit tudnak ezek ? Elég lehet egy ilyen kis kieg. modul hozzá, melyben egy kétjegyû szám letárolódik, csak állításkor ?
Az ultimate question: hányszor állítgathatja az ember vajon úgy 20-30 év alatt a termosztáton a hôfokot, miután belakott vmit ?
Mehetne eleve minden a Pi-rôl is, igen, ha az szünetmentes, de a fûtést önállóra tervezném, szóval ha a Pi lehal vagy bármi anomália adódik, a termosztát akkor is tegye azt, ami a dolga, ezért nem központosítom a funkciót a Pi-be.
-
Janos250
őstag
válasz
Blasius
#19708
üzenetére
Bocs, nem tudom milyen kontrollert használsz. ESP32-n lefordul.
A volatile azt jelenti, hogy ha egy változót nemrégiben használt a processzor, akkor annak a tartalma a cache-ben van még, és ha nincs volatile, akkor onnan kivehető. Ha van volatile előtte, akkor minden egyes használatkor az eredeti helyőről kell beolvasni. Ez akkor létszükséglet, ha "valaki más " (pl. másik szál, interrupt) is változtat a változó értékén. Ilyenkor lehet figyelni pl. arra, hogy ha egy vektorba rakjuk az értékeket, és a foglaltságot növeljük, akkor mi történik, ha a kettő között kéri a program (pl. interrupttal) valamelyik értéket. A legősibb, hogy addig letiltjuk az interruptot, a korszerűbb meg a mutex, hogy nem engedjük, hogy másik szál használja.
Amit linkeltél, ott nem látok bajt a sorrendiséggel, vagy párhuzamos hozzáféréssel. -
válasz
vargalex
#19687
üzenetére
Az ESP eszközeid nem akkor kapják a 192.168.4.1-et, ha ők AP-ként és DHCP szerverként működnek és te rájuk csatlakozol
De, tényleg, de hülye vagyok

egyébként nem egyszerűbb a PC-den 192.168.2.0/24-ből beállítani egy statikus IP-t
Az a baj, hogy ezt a mondatot nem értem.
a 192.168.2.0 után mi az a 24? De, valószínűleg ez lesz a megoldás, majd ha megértettem. 
-
vargalex
félisten
Az ESP eszközeid nem akkor kapják a 192.168.4.1-et, ha ők AP-ként és DHCP szerverként működnek és te rájuk csatlakozol, így kapsz tőlük egy IP-t a 192.168.4.1/24-ből?
Elvileg működhet a netmask átírás, de egyébként nem egyszerűbb a PC-den 192.168.2.0/24-ből beállítani egy statikus IP-t, közvetlenül csatlakozni vezetékkel az N14U-ra és átállítani a LAN IP-jét egy saját hálózatodban lévőre (nem használtra)? Gondolom repeater módban kikapcsolja a DHCP szervert... Majd visszarakhatod a PC-det DHCP-re.
Ezért szeretem az OpenWrt-t. Ott ilyen esetben én a második router LAN interface-jának azt mondom, hogy DHCP-n kérjen magának IP-t (és gateway-t, DNS-t). Nem kell kézzel beállítani semmit, látszik az első router DHCP táblájában.
-
válasz
Janos250
#19682
üzenetére
Srácok, baromira off téma, de az előzőekhez kapcsolódik és most eszembe jutott megkérdezni, mert látom ti eléggé vágjátok ezt a kérdést.
Láma kérdés, de sajnos ez a téma nálam nagy fehér folt.
A régi routeremet (Asus n14u) beállítottam repeater módba, és saját ip címnek a 192.168.2.1-et találtam neki adni. Azóta képtelen vagyok elérni a router beállítások menüjét, közvetlen lan kapcsolaton se, se a wan, se a lan portokon, ráadásul wifin sem lehet rá kapcsolódni valami okból, viszont a vezetékkel rádugott eszköz kap netet rajta keresztül. Sőt, a másik routerre (Asus ac57u) belépve azt se látom, hogy fel van rá csatlakozva. 
Jól sejtem, hogy ha az alap routeren átírom a subnet mask-ot 255.255.0.0-ra, akkor a másik routert el fogom tudni érni a 192.167.2.1 címen? Nem szeretném resetelni, mert amúgy egy csomó beállítás van benne (pl. mac címek a mac szűrés miatt). De ha ez így van, hogy emiatt nem tudom elérni, akkor mégis miért tudom elérni az ESP eszközeimet, amik meg alapból a 192.168.4.1 címet kapják?
-
Janos250
őstag
Ismét előkerült egy fűtésszabályozási dolog ESP32-vel.
Mivel a jómúltkor megtanítottatok a range slider használatára, átvariáltam egy kicsit, hogy demónak (talán) alkalmas legyen, és felteszem ide. Nem Githubra, vagy egyébre, mert a változók neveit átírtam magyarra. Miért szeretem a kezdőknek szánt demót így csinálni? Azért, mert ha magyar az azonosító, azonnal tudja első rápillantásra is, aki a kezébe veszi, hogy azt a nevet szabadon adhatjuk neki.
Jobbat írni szabad!!!!!
Kicsit hosszú, de - mivel szöveg - talán nem terheli nagyon a memóriát.# define IPharmadikSzama 0 // router fuggo# define IPnegyedikSzama 30 // olyat, ami nem utkozik massal#include <string>#include <WiFi.h>using namespace std;// PWM minta leddelconst int ledPin = 2;const int freq = 5000;const int ledChannel = 0;const int resolution = 8 ;const char* ssid = "*********";const char* password = "*********";IPAddress ip(192, 168, IPharmadikSzama, IPnegyedikSzama);IPAddress dns(192, 168, IPharmadikSzama, 1);IPAddress gateway(192, 168, IPharmadikSzama, 1);IPAddress subnet(255, 255, IPharmadikSzama, 0);IPAddress primaryDNS(8, 8, 8, 8); //optionalIPAddress secondaryDNS(8, 8, 4, 4); //optionalchar inputCode ;WiFiServer myServer(80);uint8_t futesSzazalek ;const char httpHeaderNull[] PROGMEM = R"=====(HTTP/1.1 200 OKConnection: close)=====";const char httpHeader[] PROGMEM = R"=====(HTTP/1.1 200 OKContent-type:text/htmlConnection: close)=====";char htmlHeader[] PROGMEM = R"=====(<!DOCTYPE html><html lang = hu ><head><meta charset="UTF-8"><title>Minta csuszkára</title><style>.futesContainer {text-align: center;}</style></head>)=====";char body[] PROGMEM = R"=====(<body><div class="futesContainer">fűtés százalék: <span id="FutesSzazalek"></span><br><input type="range"id="FutesSlider"min="1" max="99" value="50"oninput="FutesSzazalek.innerText = this.value"onchange="servernekElkuld('F',this.value)"></div><script>/*megallas utan az ertek kuldese a szervernek: */servernekElkuld= function(keszulekKod,mitKuldErtek) {var futesXML = new XMLHttpRequest();futesXML.open("GET", keszulekKod+"="+mitKuldErtek, true);futesXML.send();}/*kezdoertek kiiras: */document.getElementById("FutesSzazalek").innerHTML = document.getElementById("FutesSlider").value;</script></body></html>)=====";void setup(void) {Serial.begin(115200);delay(2000);WiFi.begin(ssid, password);if(!WiFi.config(ip, gateway, subnet, dns, secondaryDNS)) {Serial.println("STA Failed to configure");}Serial.print("Connecting to ");Serial.println(ssid);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}// Print local IP address and start web serverSerial.println("");Serial.println("WiFi connected.");Serial.println("IP address: ");Serial.println(WiFi.localIP());// this will display the Ip address of the Pi which should be entered into your browsermyServer.begin();// PWM minta leddelledcSetup(ledChannel, freq, resolution);ledcAttachPin(ledPin, ledChannel);Serial.println("setup lefutott");} ; // end setupvoid loop(void) {string aktualisSor = "";char elsoSor[50];uint16_t karakterszam = 0 ;uint16_t sorokSzama = 0 ;unsigned long elozoIdoMilliSec= 0;const long timeoutIdoMilliSec = 1000; //in milliseconds (example: 2000ms = 2s)IPAddress tavoliIP ; // = uint8_t tavoliIP[4]WiFiClient myClient = myServer.available(); // Listen for incoming clientsif (myClient) {tavoliIP = myClient.remoteIP() ;// printf("tavoli IP: %d.%d.%d.%d\n",tavoliIP[0],// tavoliIP[1],tavoliIP[2],tavoliIP[3]);elozoIdoMilliSec= millis();aktualisSor = "";// printf ("aktualisSor1 = %s\n",aktualisSor.c_str());while (!myClient.available()){if ( (millis()- elozoIdoMilliSec) > 100 ) {tavoliIP = myClient.remoteIP() ;Serial.println(tavoliIP) ;myClient.flush() ;myClient.stop() ;printf ("megszakitva\n");return;} ; // if ( (millis()- elozoIdo) > 100 )} ; // while (!myClient.available())while (myClient.connected()&& ( (millis() - elozoIdoMilliSec) <= timeoutIdoMilliSec) ) {if (myClient.available()) {karakterszam++ ;char c = myClient.read();// Serial.print(c);aktualisSor += c;if (c == '\n') {if (aktualisSor.length() == 0) {break;printf (" ures sor \n");}else {sorokSzama++ ;if ( sorokSzama == 1){aktualisSor.copy (elsoSor, aktualisSor.length(), 0);elsoSor[aktualisSor.length()] = 0 ;};aktualisSor = "" ;} ; // end else (if(c == '\n'))} ; //end if (c == '\n')} ; // if (myClient.available())} ; // while (myClient.connected()inputCode = elsoSor[5];switch (inputCode) {case ' ':printf("IP: %d.%d.%d.%d bejelentkezett, vagy frissített\n",tavoliIP[0],tavoliIP[1],tavoliIP[2],tavoliIP[3]);myClient.println(httpHeader);myClient.println(htmlHeader);myClient.println(body);break;case 'F':char futesSzazalekChar[2] ;futesSzazalekChar[0] = elsoSor[7];futesSzazalekChar[1] = elsoSor[8];futesSzazalekChar[2] = 0; // terminatorfutesSzazalek = stoi(futesSzazalekChar);myClient.println(httpHeaderNull);printf("kuldo IP: %d.%d.%d.%d\n",tavoliIP[0],tavoliIP[1],tavoliIP[2],tavoliIP[3]);printf (" F=%d\n",futesSzazalek);// PWM minta leddelfutesszabalyozasMinta () ;break;default:printf (" ismeretlen jott, valami hiba van\n");break;}; // end switch (inputCode)myClient.flush();myClient.stop();while (myClient.available()){delay(1) ;}; // while (myClient.available())} ; // if (myClient)delay(50);} ; // end loopvoid futesszabalyozasMinta (){// PWM minta leddelledcWrite(ledChannel, futesSzazalek/100.0*255);} ; -
bimbula53
tag
válasz
its_grandpa
#19613
üzenetére
Az összes netradio project a VS1053-ra épül és az Adafruit könyvtárat használja mint alap.
Ez nem zárja ki, hogy a VS1003-at ne lehessen használni anélkül, hogy a lib-be keljen nyúlni..
A Yoradio az esp32 dev modulra épül. Minden más modulnál ismerni kell a lábkiosztást. Itt is lehet használni a VS1003 -t gond nélkül. Természetesen más fajta DAC -ot is lehet használni. Problémák adódhatnak, amire igyekeznek gyorsan reagálni. Sajnos magyar nyelvű forumja nincs. De persze minden megoldható. Néztem az általad linkelt projektet is. Korábban már találkoztam a névvel, csak nem sikerült rá lelnem próba erejéig. Ahogy néztem 4éve nem nyúltak hozzá. Ezek a projektek egyéni ízlés szerint íródtak sok sok csiribirivel. Sok közül lehet kiválasztani azt ami neki bejön. -
its_grandpa
tag
válasz
bimbula53
#19601
üzenetére
Csak megnéztem a kódot, nem próbáltam ki.
Van egy Heltec ESP32-es modulom, amin rajta az oled is.
Természetesen saját lib-el lehet meghajtani, amihez át kellene írnom a fél Yoradiot.Ezt ki lehet próbálni "gyári" VS1053 lib-et használ [link] , de ...
Az Adafruit lib csak 1053-al működik, ahogy a #17857-ben írtam,kicsit bele kell nyúlni a 1003-használatához. Ez nálam az Adafruit_VS1053.cpp 123. sorában kezdődik, a 132. sort kell javítani
uint8_t v = Adafruit_VS1053::begin();// return (v == 4); ez a 1053return (v > 2); ez ha a chip verzió minimum VS1003 =3 -
ekkold
Topikgazda
-
gya/352
tag
válasz
razorbenke92
#19589
üzenetére
A Home Assistantnak mint okosotthon központnak van a hozzá csatlakozó ESP alapú mikrokontrollerekre egy rendszere, ez az ESPHome. Az ESPHome szoftverelemekből összeépíthető firmware. Ennek a rendszernek van médialejátszó komponense és a Home Assistant központ pedig tud stream-elni a hálózatra médiafolyamot. Szerintem ezt lehet alkalmazni ilyen multiroom rendszerre is.
A Home Assistanttal még én is csak ismerkedem, tapasztalatom ebben az irányban nincs még, de az ez iránt érdeklődőknek érdemes benézni az Okosotthon topikba. -
bimbula53
tag
válasz
gya/352
#19584
üzenetére
Én is sokat ki próbáltam programozási alapok nélkül. A befutó esp8266-ra "karadio + arduino nano + ssd1306 (0,96 fehér). Androidos app-al. Természetesen böngészőből is vezérelhető.
ESP32 -re is készült 2,8 -s színes kijelző VS-1003 2db encoderrel. Ezt váltottam le "Yoradio" projektre. Érdekessége a karadio app is használható hozzá. Ez némi ismereteket feltételez arduino ide használatához. Ha valamelyik érdekel akkor a tapasztalataimat nagyon szívesen megosztom. -
-
válasz
gya/352
#19584
üzenetére
Egyébként örülök, hogy pörög ez a netrádió téma itt, mert nekem is van tervem ilyesmivel. Nekem az a tervem, hogy a házban minden valamirevaló hangfalhoz rádobok aux-ra egy ESP alapú netrádió vevőt. A cél, hogy ha kell, az egész házban szólhasson ugyanaz a forrás kellemes hangerőn anélkül, hogy egy kitüntetett helyen üvöltené be a házat.
-
gya/352
tag
válasz
bimbula53
#19577
üzenetére
Nem ragaszkodok hozzá.
Előtte már építettem egy egyszerűt ESP8266-tal, és továbblépésként találtam ezt.
Egyszerűnek tűnt...hát nem lett az, de amikor megakadtam a saját korlátaimban, és beírtam ide, a topiktársak rendes kis brain-storming-ot indítottak el és érdekes volt végigjárni ezt az utat, nem akartam átlépni másik projectre. De ha van más javaslatod kérlek ne tartsd magadban. Annyit megnéztem korábban hogy már azt sem tudom melyik lehetett volna esetleg még befutó. -
its_grandpa
tag
válasz
vargalex
#19578
üzenetére
Igen, nem szép dolog ilyet csinálni, igazad van.
"Sportolok" a VSCode-al , érdekes eredményre jutottam (nem kötöttem össze a VS1003 board-al az ESP-met). Lehet emiatt a Config weboldalán csak 6 sor van a prefs-ből.
Kézből beírva a Control-on azonban csatlakozik szépen.D: Radiofuncs cmd is 1D: Connect to host icast.connectmedia.hu/5001/live.mp3D: send GET command...D: Switch to HEADERD: Headerline: Server: nginxD: Headerline: Content-Type: audio/mpegD: Headerline: Connection: closeD: Headerline: icy-br: 128D: Headerline: ice-audio-info: bitrate=128;samplerate=44100;channels=2D: Headerline: icy-br: 128D: Headerline: icy-name: Retro Radio
Mondjuk most magába fordult erősen az ESP
E (39389) task_wdt: Task watchdog got triggered. The following tasks did not reset the watchdog in time:abort() was called at PC 0x400f6e3c on core 0Nézegetem kicsit még de nem tudom megér-e ez ennyit.
-
olli
tag
[link] rtc_master
[link] oled könyvtár
[link] szintén,
ezek hiba nélkül fordítódnak esp32+ds3231 kódban.
Ami nem sikerül, az aktuális dátum/idő másnap, reset után, csak a fordítás időpontját mutatja.
25.50 C
20.25 C
32.00 C
Sending packet: 10
Saturday, March 04 2023 20:04:17
Mai állapot.
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 13
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress D0 = { 0x28, 0x31, 0xBF, 0x29, 0x07, 0x00, 0x00, 0x7D }; // "T1"
DeviceAddress D1 = { 0x28, 0x4F, 0x8E, 0x2A, 0x07, 0x00, 0x00, 0x37 }; // "T2"
/* for normal hardware wire use above */
#include <Wire.h>
#include <RtcDS3231.h>
RtcDS3231<TwoWire> Rtc(Wire);
// handy routine to return true if there was an error
// but it will also print out an error message with the given topic
bool wasError(const char* errorTopic = "")
{
uint8_t error = Rtc.LastError();
if (error != 0)
{
Serial.print("[");
Serial.print(errorTopic);
Serial.print("] WIRE communications error (");
Serial.print(error);
Serial.print(") : ");
switch (error)
{
case Rtc_Wire_Error_None:
Serial.println("(none?!)");
break;
case Rtc_Wire_Error_TxBufferOverflow:
Serial.println("transmit buffer overflow");
break;
case Rtc_Wire_Error_NoAddressableDevice:
Serial.println("no device responded");
break;
case Rtc_Wire_Error_UnsupportedRequest:
Serial.println("device doesn't support request");
break;
case Rtc_Wire_Error_Unspecific:
Serial.println("unspecified error");
break;
case Rtc_Wire_Error_CommunicationTimeout:
Serial.println("communications timed out");
break;
}
return true;
}
return false;
}
#include <Arduino.h>
#include "Wire.h"
#include "oled.h"
#include <WiFi.h>
#include "time.h"
#include <LoRa.h>
#include "secrets.h" // WiFi SSID & password
#define SCK 5 // GPIO5 -- SX1278's SCK
#define MISO 19 // GPIO19 -- SX1278's MISO
#define MOSI 27 // GPIO27 -- SX1278's MOSI
#define SS 18 // GPIO18 -- SX1278's CS
#define RST 14 // GPIO14 -- SX1278's RESET
#define DI0 26 // GPIO26 -- SX1278's IRQ(Interrupt Request)
#define BAND 433E6
unsigned int counter = 0;
#define RTC_ADDRESS 0x68 // I2C eszköz címe
String rssi = "RSSI --";
String packSize = "--";
String packet ;
struct tm timeinfo;
static char msg[20]; // character buffer
OLED display = OLED(4, 15, 16, 0x3C, 128, 32, true); // SSD1306
void setup() {
pinMode(16,OUTPUT);
pinMode(25,OUTPUT);
digitalWrite(16, LOW); // set GPIO16 low to reset OLED
delay(50);
digitalWrite(16, HIGH); // while OLED is running, must set GPIO16 in high
Serial.begin(115200);
while (!Serial);
SPI.begin(SCK,MISO,MOSI,SS);
LoRa.setPins(SS,RST,DI0);
if (!LoRa.begin(433E6)) {
Serial.println("Starting LoRa failed!");
while (1);
}
Serial.println("init ok");
Wire.begin();
display.begin();
display.clear();
display.draw_string(4, 8, "RTC clock", OLED::DOUBLE_SIZE);
display.display();
//------- Initialize the Temperature measurement library--------------
sensors.begin();
sensors.setResolution(D0, 10); //T1
sensors.setResolution(D1, 10); //T2
}
void loop() {
sensors.requestTemperatures();
float T1 = sensors.getTempC(D0);
float T2 = sensors.getTempC(D1);
Serial.print("Sending packet: ");
Serial.println(counter);
// send packet
LoRa.beginPacket();
LoRa.print("hello ");
LoRa.print(counter);
LoRa.endPacket();
counter++;
digitalWrite(25, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(25, LOW); // turn the LED off by making the voltage LOW
delay(1000);
getTime(&timeinfo); // display time/date
Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
RtcTemperature temp = Rtc.GetTemperature();
if (!wasError("loop GetTemperature"))
{
temp.Print(Serial);
// you may also get the temperature as a float and print it
// Serial.print(temp.AsFloatDegC());
Serial.println(" C ");
}
display.clear();
strftime (msg, 15, "%Y-%b-%d %a ", &timeinfo);
display.draw_string(16, 1, msg); // Display date
strftime (msg, 10, "%T ", &timeinfo); // Display time
display.draw_string(8, 12, msg, OLED::DOUBLE_SIZE);
display.display(); // Refresh screen
delay(3000);
display.clear();
display.setCursor(8,0);
display.println("T1= ");
display.setCursor(30,0);
display.println(T1);
display.setCursor(60, 0);
display.println(" C");
display.setCursor(8,12);
display.println("T2= ");
display.setCursor(30,12);
display.println(T2);
display.setCursor(60, 12);
display.println(" C");
display.display();
Serial.print(sensors.getTempC(D0));
Serial.println(" C");
Serial.print(sensors.getTempC(D1));
Serial.println(" C ");
}
//--- Convert decimal numbers to BCD -----------------------
byte decToBcd(byte val) {
return ( (val / 10 * 16) + (val % 10) );
}
//--- Convert BCD numbers to decimal ----------------------
byte bcdToDec(byte val) {
return ( (val / 16 * 10) + (val % 16) );
}
/*--- Set RTC time/date ------------------------------------
void setTime(struct tm* time) {
Wire.beginTransmission(RTC_ADDRESS);
Wire.write(0); // set register pointer to 00h
Wire.write(decToBcd(time->tm_sec)); // set seconds
Wire.write(decToBcd(time->tm_min)); // set minutes
Wire.write(decToBcd(time->tm_hour)); // set hours
Wire.write(time->tm_wday + 1); // set day of week (1=Sun, 7=Sat)
Wire.write(decToBcd(time->tm_mday)); // set date (1 to 31)
Wire.write(decToBcd(time->tm_mon) + 1); // set month
Wire.write(decToBcd(time->tm_year - 100)); // year from 2000 (0 to 99)
Wire.endTransmission();
}*/
//--- Read time/date from RTC ------------------------------
void getTime(struct tm* time) {
Wire.beginTransmission(RTC_ADDRESS);
Wire.write(0); // a kiolvasás kezdőcímének beállítása
Wire.endTransmission(false);
Wire.requestFrom(RTC_ADDRESS, 7); // Hét bájt kiolvasása (time/date)
time->tm_sec = bcdToDec(Wire.read() & 0x7f); // Másodpercek (0-59)
time->tm_min = bcdToDec(Wire.read()); // Percek (0 - 59)
time->tm_hour = bcdToDec(Wire.read() & 0x3f); // Órák (24h kijelzéshez)
time->tm_wday = bcdToDec(Wire.read() - 1); // Hét napja (0 - 6)
time->tm_mday = bcdToDec(Wire.read()); // hónap napja (1 - 31)
time->tm_mon = bcdToDec(Wire.read() - 1); // hónap sorszáma (0 - 11)
time->tm_year = bcdToDec(Wire.read()) + 100; // 1900-tól eltelt évek
} -
Wolfram
aktív tag
Ali-n véletlenül PSRAM nélküli ESP-t rendeltem, valaki tudja mire jó, vagy mire kell ez a ram? Dobhatom ki a kukába, vagy ez csak speciális alkalmazásokhoz kell?
-
Tomika86
senior tag
Sziasztok!
Távolság számlálást, jelenleg ezt használom, hogy lehetne átalakítani, hogy ne legyenek kerekítések és esetleg ne legyen float számolás. Jelenleg működik így. (ESP32 miatt van interruptban az FPU bekapcsolás és regiszter mentés). A kód devkiten fut és négyszögjellel hajtom meg, soros monitoron figyelem,
float CalibrationValue_nextion = 6900.0;
float GearratioValue_nextion = 5.0;
Ez a kettő érték változik, felső egy kalibráló érték, ezzel lehet pontosítani, alsó az áttétel megadása.#define METER_RESET_BUTTON_PIN GPIO_NUM_39
#define SPEED_INTERRUPT_PIN GPIO_NUM_14
#define TRIP_COUNTER_RESET_METER 2000
#define SPEEDOMETER_RESET_TIME_MS 3000
void IRAM_ATTR Speed_ISR_Handler();
void SpeedAndTripCalculation(gpio_num_t meterresetinput, const uint32_t speedometerZeroTime, const uint16_t TripmeterResetInterval);
float CalibrationValue_nextion = 6900.0;
float GearratioValue_nextion = 5.0;
uint16_t Speedometer;
uint32_t TravelledMeters_tonextion, TripMeter_Km, OdoMeter_Km;
uint8_t TripMeter_100meterPlace;
volatile float Trip_meter, Odo_meter, Meter_calc;
float DistanceOfImpulse_mm;
float DistanceOfImpulse_m;
volatile uint32_t MillisSavingInSpeedinterrupt;
volatile uint32_t TimeInSpeedinterrupt;
volatile uint32_t PreviousMicrosInSpeedinterrupt;
uint32_t cp0_regs[18];
void setup() {
pinMode(SPEED_INTERRUPT_PIN, INPUT);
pinMode(METER_RESET_BUTTON_PIN, INPUT);
Serial.begin(115200);
attachInterrupt(SPEED_INTERRUPT_PIN, Speed_ISR_Handler, FALLING);
delay(500);
}
void loop() {
SpeedAndTripCalculation(METER_RESET_BUTTON_PIN, SPEEDOMETER_RESET_TIME_MS, TRIP_COUNTER_RESET_METER);
Serial.print("Sebesseg: ");
Serial.println(Speedometer);
Serial.print("Meter: ");
Serial.println(TravelledMeters_tonextion);
Serial.print("Trip szamolo: ");
Serial.println(TripMeter_Km);
Serial.print("Trip 100m szamolo: ");
Serial.println(TripMeter_100meterPlace);
Serial.print("\n");
}
void SpeedAndTripCalculation(gpio_num_t meterresetinput, const uint32_t speedometerZeroTime, const uint16_t TripmeterResetInterval) {
DistanceOfImpulse_mm = CalibrationValue_nextion / GearratioValue_nextion;
DistanceOfImpulse_m = DistanceOfImpulse_mm / 1000.0;
// Sebesség
if ((millis() - MillisSavingInSpeedinterrupt) < speedometerZeroTime) {
Speedometer = 3600 * DistanceOfImpulse_mm / (TimeInSpeedinterrupt);
}
else {
Speedometer = 0;
}
Speedometer = constrain(Speedometer, 0, 300);
// Megtett méter számláló
if (Meter_calc > 99999 || (digitalRead(meterresetinput))) {
Meter_calc = 0;
}
TravelledMeters_tonextion = round (Meter_calc);
// Napi számláló
if (Trip_meter > 999.9999) {
Trip_meter = 0;
TripMeter_Km++;
}
// Nullázás ha 9999km felett van, vagy a beállított felett, vagy nulláztunk gombbal
if ((TripMeter_Km > 9999) || (TripMeter_Km >= TripmeterResetInterval)) {
Trip_meter = 0;
TripMeter_Km = 0;
}
TripMeter_100meterPlace = ((uint32_t)Trip_meter / 100) - (((uint32_t)Trip_meter / 1000) * 10);
// Odo km
if (Odo_meter > 999.9999) {
Odo_meter = 0;
OdoMeter_Km++;
}
if (OdoMeter_Km > 9999999) {
Odo_meter = 0;
OdoMeter_Km = 0;
}
}
void IRAM_ATTR Speed_ISR_Handler() {
// get FPU state
uint32_t cp_state = xthal_get_cpenable();
if(cp_state) {
// Save FPU registers
xthal_save_cp0(cp0_regs);
} else {
// enable FPU
xthal_set_cpenable(1);
}
Odo_meter += DistanceOfImpulse_m;
Trip_meter += DistanceOfImpulse_m;
Meter_calc += DistanceOfImpulse_m;
TimeInSpeedinterrupt = (micros() - PreviousMicrosInSpeedinterrupt);
PreviousMicrosInSpeedinterrupt = micros();
MillisSavingInSpeedinterrupt = millis();
if(cp_state) {
// Restore FPU registers
xthal_restore_cp0(cp0_regs);
} else {
// turn it back off
xthal_set_cpenable(0);
}
}Bármi ötletet meghallgatok, ami jobbá teszi.
Köszönöm!
-
Tankblock
aktív tag
Szia
https://github.com/indrekluuk/LiveOV7670/blob/master/CMakeLists.txt
és a .gitignore filaban benne van a szépség:
https://github.com/indrekluuk/LiveOV7670/blob/master/.gitignore
nem tölti fel gittre a sajár CMake fileját ..... modjuk ez lehet a Visual Code + PlatformIO végett van, ebben nincs tapasztalatom....idea
# ignore files generated by "platformio init"
src/.idea
src/.pioenvs
src/.gitignore
src/.travis.yml
src/CMakeLists.txt
src/CMakeListsPrivate.txt
/cmake-build-debug/CMake írja le mit hol kell keresnie a fordítónak és a linkelőnek.
Make után amikor a esp-idf átváltott CMake re a hajamat téptem egy darabig mire megszoktam. -
válasz
gya/352
#19457
üzenetére
esptool.py -p com4 erase_flash
Ezzel is próbáld meg, ahogy a linkelt oldalon írják.
Próbáltál már különböző memória kiosztásokat (APP/OTA/SPIFFS) beállítani feltöltés előtt?
Az oldalon egyébként írják az okokat is:
SOLVED:
We are now 99% sure this problem is actually caused by a hardware design issue with our USB programming board.
During the condition where the main power supply to the board is OFF but the programmer is still connected to USB, we see stray voltages on the pins connected to the ESP32, including the MTDI pin. This pin has an internal pull down in the ESP, but it is not active until after power is applied. Where it has floated high during power down, it looks like the pin is not pulled low fast enough at power on, and gets read as "1". This causes the VDD_SDIO to be set to 1.8v instead of 3.3v. We observe that the pin strapping shown by the bootloader is 0x33 or 0x3f instead of 0x13. The condition persists a software reboot, and our testers were usually experiencing a recurrence of the problem if they cycled the power. However, reprogramming the board would reset it until some future power interruption caused it to recur.
The problem did not happen on our original boards because the flash still worked correctly even at the lower voltage. However, more recent boards have a later ESP module with a different flash chip (Manufacturer: c8; Device: 4017). I have now confirmed that on these boards, the flash can be read but cannot be written when VDD_SDIO has been set to 1.8v.
I have worked around the problem on our dev boards by running this espefuse command to set the VDD_SDIO to 3.3v via the e-fuses:
CODE:python path\to\esp\tools\espefuse.py -p comX set_flash_voltage 3.3V
Van neked kötve valami az MTDI pin-re (GPIO12)? Ha jól értem egy külső lehúzó ellenállás (pl 10kΩ) esetleg megoldhatja a dolgot.
-
gya/352
tag
válasz
vargalex
#19456
üzenetére
Ehhez a flash torleshez kell egy python kornyezet a pcre? Windowsos vagyok termeszetesen.
Vagy van valami program erre?
Az Arduinoban van egy olyan menupont ami elvileg torli a flasht a feltoltes elott. En mindig ugy toltottem fel a firmwaret.
Az espressif honlapjan is van egy flash download tool nevu progi, abban is van egy kulon erase gomb, az ejjel azzal is letoroltem gondoltam hatha segit de nem valtozott.
Lehet hogy ezek nem torlik a teljes tarteruletet? -
vargalex
félisten
válasz
its_grandpa
#19455
üzenetére
Igen, üres, mert
ESP_ERR_NVS_NOT_FOUNDerrorral tér vissza. Ebben az esetben ugye nem változik aznvs_buftartalma, azaz aContetnslogolás teljesen normális, hogy az üres string-re (nvs_buf[0] = '\0';miatt) inicializált értékkel tér vissza.
Szóval, én is megpróbálnám a flash törlést.#19453 its_grandpa: Teljesen normális az a log, hiszen ahogy Aryes által bemásolt kódban is látszik, az eredeti
keyhosszát és azNVSBUFSIZE-ra (150) beállítottlen-t adja vissza, mivel a fentiek szerint utóbbi nem módosul (nyilván akeyegyébként sem módosulna). -
its_grandpa
tag
válasz
vargalex
#19450
üzenetére
First of all
, te nem fél vagy az én világomban hanem egész.Igen, ennek ellenére nem tudom hová tenni ezt a hibaüzenetet:
nvs_get_str failed 1102 for key preset, keylen is 6, len is 150!Annyi mindent láttam már az ESP világban, hogy én biztos megpróbálnám meghívni a "real_len"-el.
Az itteni [link] kódot meghívva kiderülne, hogy látja-e egyáltalában a "preset" kulcsot.
-
vargalex
félisten
válasz
its_grandpa
#19446
üzenetére
Az
nvs_get_strhívásnál alenváltozó címe van átadva, azért, hogy aznvs_get_stradja vissza benne abuffertényleges hosszát.Ha jól olvasom, az
1102-es hiba azESP_ERR_NVS_NOT_FOUND: "A requested entry couldn’t be found or namespace doesn’t exist yet and mode is NVS_READONLY" -
gya/352
tag
válasz
its_grandpa
#19447
üzenetére
Hat basszus jol beleastad magad.
Neked is es Aryesnek is koszonom hogy foglalkoztok vele.
En most nem nem fogok tudni jatszani vele a hetvegen. De jovo heten folytatom, bar szerintem egyelore feladom es berendelek egy uj esp32 boardot, mert nekem gyanus hogy fizikailag van vele vmi problema. -
its_grandpa
tag
Amíg "debuggoltam" írtatok párat de sebaj, azért ezt most csak itt hagyom

Jogos, nem emlékeztem rá de most megnéztem.
Viszont azt gondolom megtaláltam és vesszek meg ha értem másnak miért működik.
Esp32_radio_init.ino 28. sor preferences.clear() , töröl mindent.
Ezután kiírja kódból az összeset,nézzük a 49. sort. preferences.putString ( "preset", "6" ) ;Ezt látjuk a hibaüzenetben:
:58:11.630 -> D: nvs_get_str failed 1102 for key preset, keylen is 6, len is 150!A kulcs hossza 6 ("preset" sztring hossza) de mi 150-et akarunk olvasni.
Ennek oka a main.cpp 708. sorától az nvsgetstr ( const char* key ) függvény és a 145. sor#define NVSBUFSIZE 150 // Max size of a string in NVSA nvsgetstr fv. első 5 sora :
static char nvs_buf[NVSBUFSIZE] ; // Buffer for contentssize_t len = NVSBUFSIZE ; // Max length of the string, later real lengthnvsopen() ; // Be sure to open nvsnvs_buf[0] = '\0' ; // Return empty string on errornvserr = nvs_get_str ( nvshandle, key, nvs_buf, &len ) ;Megnyitjuk, a 150 hosszú nvs_buf 0. pozijára beírjuk a C sztring szeparátort, eddig OK.
Ezután viszont vissza akarjuk olvasni a kulcsot ( a mi esetünkben ez a "preset") , a 150 hosszú nvs_buf-ba, de mindig 150 hosszan mert a len változó értéke az bizony 150.
Ez így - szerintem - sose fog menni,hibaüzenet lesz a 718. sorban.
Ha minden igaz a kulcs valódi hosszát így lehet(ne) kideríteni.size_t real_len = 0;nvs_get_str ( nvshandle, key, nullptr , &real_len );
Ezután kellene beolvasni a kulcsot a tényleges hossz ismeretében.nvserr = nvs_get_str ( nvshandle, key, nvs_buf, &real_len ) ;Itt egy jó példa fv. a tényleges hossz megállapítására [link]
Új hozzászólás Aktív témák
- Endgame Gear gamer egerek /OP1 8K, XM2we, XM1R, XM1 RGB (fehér/fekete/lila)/
- iKing.Hu-Samsung Galaxy S25 Ultra Titanium Black 12/256 GB-karcmentes Garancia 2028. 08. 23-ig
- BESZÁMÍTÁS! ASUS B760M i5 12400F 32GB DDR4 1TB SSD RTX 3070Ti 8GB ZALMAN Z1 Plus Cooler Master 750W
- Azonnali készpénzes Sony Playstation 5 lemezes és digitális felvásárlás személyesen/csomagküldéssel
- Egyedi névre szóló karácsonyfadísz rendelhető! 3D Nyomtatott!
Állásajánlatok
Cég: ATW Internet Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Erre előveszem a táskából az okostelefont, bekapcsolom, és megnézem neten a kamerát, hogy a sok gyerek közül melyik az, amelyik megint le akarja verni kalapáccsal a vasszekrényről a lakatot.
vagy androidos program a fejegységen? ahhoz se konyítok, eddig a MIT app inventor volt a legmagasabb szint, de abban agyhalál lenne ennyi mindent össze puzzle-özni... ekkor jutott eszembe, hogy mi lenne ha egy ELM327-et emulálva a droidos Torque jelenítené meg a dolgokat? elkezdtem guglizni hogy hogyan is néz ki a protokoll, mi lenne a minimum amivel át tudnám verni az app-ot, erre belefutottam ebbe a szuper kis projektbe... Nano+HC06 BT adapterrel működött is pöcc-röff, de mivel a canbus-ról összeszedett adatokból szeretném etetni, a legkézenfekvőbb az lenne ha a natív BT-s és CAN-es ESP32-vel menne, esetleg a 2 CAN miatt a DUE+HC06... de sajnos sosem álltak össze a fejemben igazán tökéletesen ezek az objektum-orientált dolgok, csak totózok kísérletezek aztán van amikor sikerül ráérezni, de most sehogy sem akar menni...


Más kérdés, ha egy adott μC-t integrálnak az Arduino ökoszisztémába (STM32, ESP).

Ez mondjuk csak a nappalira igaz, emeleten termofejek beállítva, annyi.
a 192.168.2.0 után mi az a 24? De, valószínűleg ez lesz a megoldás, majd ha megértettem. 
ekkold

