- ASUS blog: válassz céljaidnak megfelelő monitort!
- A Bosch szerint Európának nem kellene az AI-t a halálba szabályozni
- GeForce RTX 5050 VGA-k hármasfogata a Gigabyte elképzelése alapján
- Kisebb gond akadt az ASUS egyik felsőpolcos vízhűtésével
- Fájdalmasan gyenge kijelzőt válaszott a Switch 2-höz a Nintendo
-
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
-
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 voltage
esp_adc_cal_characteristics_t adc_chars;
}
void loop()
{
int persons_no = reboot_counter; // csak a szépség kedvéért
if 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!
-
ViZion
félisten
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 leddel
const 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); //optional
IPAddress secondaryDNS(8, 8, 4, 4); //optional
char inputCode ;
WiFiServer myServer(80);
uint8_t futesSzazalek ;
const char httpHeaderNull[] PROGMEM = R"=====(
HTTP/1.1 200 OK
Connection: close
)=====";
const char httpHeader[] PROGMEM = R"=====(
HTTP/1.1 200 OK
Content-type:text/html
Connection: 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 server
Serial.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 browser
myServer.begin();
// PWM minta leddel
ledcSetup(ledChannel, freq, resolution);
ledcAttachPin(ledPin, ledChannel);
Serial.println("setup lefutott");
} ; // end setup
void 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 clients
if (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; // terminator
futesSzazalek = 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 leddel
futesszabalyozasMinta () ;
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 loop
void futesszabalyozasMinta (){
// PWM minta leddel
ledcWrite(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 1053
return (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 1
D: Connect to host icast.connectmedia.hu/5001/live.mp3
D: send GET command
...
D: Switch to HEADER
D: Headerline: Server: nginx
D: Headerline: Content-Type: audio/mpeg
D: Headerline: Connection: close
D: Headerline: icy-br: 128
D: Headerline: ice-audio-info: bitrate=128;samplerate=44100;channels=2
D: Headerline: icy-br: 128
D: Headerline: icy-name: Retro Radio
Mondjuk most magába fordult erősen az ESPE (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 0
Né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_FOUND
errorral tér vissza. Ebben az esetben ugye nem változik aznvs_buf
tartalma, azaz aContetns
logolá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
key
hosszát és azNVSBUFSIZE
-ra (150) beállítottlen
-t adja vissza, mivel a fentiek szerint utóbbi nem módosul (nyilván akey
egyé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_str
hívásnál alen
változó címe van átadva, azért, hogy aznvs_get_str
adja vissza benne abuffer
té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 NVS
A nvsgetstr fv. első 5 sora :
static char nvs_buf[NVSBUFSIZE] ; // Buffer for contents
size_t len = NVSBUFSIZE ; // Max length of the string, later real length
nvsopen() ; // Be sure to open nvs
nvs_buf[0] = '\0' ; // Return empty string on error
nvserr = 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]
-
its_grandpa
tag
válasz
gya/352 #19436 üzenetére
OK, akkor a chip mp3-módban van, kiveheted ezeket a sorokat.
Mi az Arduino Eszközök->Flash size beállítása amikor feltöltöd a programot ?
Debuggoljuk ki, hogy indul. Ehhez én a Termite-et használom soros monitorként.
Edzelf github oldalán az ESP32Radio-V2/issues/34-ben van powerup logging fálj.
Amikor elindul kiír magáról egy nagy adag infót,a tiéd mit?
Ez csak egy részlete, az NVS partició megléte a kérdés.D: Starting ESP32-radio running on CPU 1 at 240 MHz.
D: Version Fri, 15 Apr 2022 11:30:00 GMT. Free memory 113792
D: Display type is NEXTION
D: SPIFFS is okay, space 1378241, used 33132
D: Found partition 'nvs ' at offset 0x009000 with size 20480
D: Found partition 'otadata ' at offset 0x00E000 with size 8192
D: Found partition 'spiffs ' at offset 0x290000 with size 1507328
D: Read 32 keys from NVS -
válasz
gya/352 #19436 üzenetére
Ahogy írtam korábban, az NVS memóriával van valami gubanc:
22:58:11.630 -> D: nvs_get_str failed 1102 for key preset, keylen is 6, len is 150!
22:58:11.630 -> D: Contents:
22:58:11.630 -> D: updateNr 0 <= 0 to 0, relative is 0
22:58:11.630 -> D: updateNr result is 0
22:58:11.630 -> D: nextPreset is 0Valamitől nem lehet bele írni (tartós memória, ide menti a beállításokat).
ESP_ERR_NVS_NOT_FOUND (0x1102): A requested entry couldn’t be found or namespace doesn’t exist yet and mode is NVS_READONLY
[link]Itt találtam rá valamiféle megoldást, most túl fáradt vagyok értelmezni, hátha neked sikerül
-
gya/352
tag
válasz
its_grandpa #19431 üzenetére
Beszúrtam, kipróbáltam...
22:57:59.449 -> D: Slow SPI, Testing VS1053 read/write registers...
22:57:59.596 -> D: This is not a VS1053, but a VS1003 instead!
22:57:59.696 -> D: Fast SPI, Testing VS1053 read/write registers again...
22:58:01.454 -> D: This is not a VS1053, but a VS1003 instead!
22:58:01.454 -> D: 0xC017 kiolvasva: 0003
22:58:01.454 -> D: 0xC019 kiolvasva: 0000
22:58:01.702 -> D: Connect to network
22:58:10.627 -> D: SSID = T-Home_089F0D
22:58:10.627 -> D: IP = 192.168.1.51
22:58:10.627 -> D: Start web server
22:58:10.627 -> D: Network found. Starting mp3 client, mqtt and OTA
22:58:10.627 -> D: MQTT uses prefix esp32radio
22:58:10.627 -> D: Init MQTT
22:58:10.627 -> D: MDNS responder started
22:58:11.630 -> D: Rotary encoder is disabled (-1/-1/-1)
22:58:11.630 -> D: nvs_get_str failed 1102 for key preset, keylen is 6, len is 150!
22:58:11.630 -> D: Contents:
22:58:11.630 -> D: updateNr 0 <= 0 to 0, relative is 0
22:58:11.630 -> D: updateNr result is 0
22:58:11.630 -> D: nextPreset is 0
22:58:11.630 -> D: Radiofuncs cmd is 1
22:58:11.630 -> D: Connect to host icast.connectmedia.hu/5001/live.mp3
22:58:11.884 -> D: Song stopped incorrectly!Nem változott semmi...
-
gya/352
tag
válasz
its_grandpa #19411 üzenetére
Köszönök minden segítséget, de azt sem tudom hogy tudnám kiolvasni az említett regisztereket. Gondolom írni kellene rá egy kis programocskát, de nem tudok programozni. Ezt a rádiót is afféle copy-paste módon csináltam meg.
Ami még eszembe jutott, hogy az eredeti leíráshoz képes változtattam valamit a két board összeköttetésén, mert nincs összekötve az ESP32 EN portja a VS modul XRST portjával, hanem a XRST fixen fel van húzva egy 10k ellenállással az 5V-ra. Egy korábbi ESP8266 alapú rádió-projectben így volt megoldva, én meg úgy hagytam. Ez okozhatja-e a problémát?
-
-
op9
aktív tag
A másik problémám pedig, hogy volt már egy 5V-os aktív csipogóm, és ennek mintájára vettem S8550-es tranzisztort, valamint 1kOhm-os ellenállást.
A problémám az, hogy ezt szintén nem az ESP GPIO-járól akarom betáplálni, egyrészt, mert max. 3.3V lenne, másrészt jobb, ha az ESP32 csak a logikáért felel.
A 3.3V-os feszültség az ESP32-ből csak 1.25V-ra csökkenti a feszültséget a tranzisztoron keresztül, és így még egy picit van hangja, bár csak épphogy valami hallatszik, de nem akarom, h bármit is fogyasszon olyankor, valamint a low-levelen a tranzisztor kb. 0.45V-ot levesz az 5V-ból.
Ezek szerint a boarddal szerelt csipogó is hasonlóan nyekeregne?Olvastam, hogy egy alacsony Gate feszültségű MOSFET-tel lenne célszerűbb ezt használni.
Egy 2N7000-es jó lehet erre? Ennek 3V a Vgs, de állítólag, ha nagyon a közelében van a feszültség, akkor nem teljesen nyit.A BS108 már biztosan jó lenne, vagy teljesen vakon vagyok?
Köszi!
-
op9
aktív tag
Sziasztok,
Nemrég belekezdtem egy projektbe, aminek világítania, és sípolnia kellene.
Sikerült mind a két tulajdonságában megakadnom.
A világítással az lenne a kérdésem, hogy sikerült pár WS2812B-t tönkre tennem, és a miértet szeretném megtudni, hogy ne öljek meg továbbiakat.Így nézett ki a kapcsolási rajz (az ellenállás a data pin előtt 470ohm (2W)), annyi különbséggel, hogy a bal oldali kütyü is be volt táplálva 19V-tal, ami 4.77-re konvertált (multiméterrel úgy volt 4.99), valamint az ESP32 is kapott áramot USB-n keresztül, és a LED strip 14db-ból állt.
A kód így nézett ki:
#definie PIN 5
#define NUM 14
Adafruit_NeoPixel pixels = Adafruit_Neopixel(NUM, PIN, NEO_GRB + NEO_KHZ800);
void setup(){
pixels.begin();
}
void loop() {
for (int i = 0; i < NUM; i++) {
pixels.setPixelColor(i, pixels.Color(255, 0, 0))
pixels.show();
delay(1000);
}
}
Szóval másodpercenként el kezdett világítani egyre több LED pirosan.
Ezt többször megcsináltam, a többi színnel is, valamint úgy is, hogy mind a 3 szín világítson, hogy lássam, hogy mekkora áramerősség kell neki.
14db LED: [R: 0.11A, G: 0.11A, B: 0.11A, RGB: 0.48A] RGB gondolom azért lehetett ennyivel több, mert melegedett, és nagyobb lett az ellenállás.
Közben persze a többször lecsatlakoztattam a 19V-os táp csatit, meg az USB-t is, és különböző sorrendekben dugtam vissza.
Ekkor jött az ötlet, hogy csökkentsem a feszültséget, hátha elegendő kevesebb is, és valóban 3.7V-ig alig csökkent a fény, és a 0.11A is 0.8A-re csökkent.
Majd tovább csökkentettem a feszültséget kb. 2V-ig, meg vissza. Közvetlenül ezután, hogy lehúztam a tápot, meg vissza, a 4. LED-től kezdve random szerűen pár LED folyamatosan RGB-vel világított, és pár egyáltalán nem.Szétvágtam a szalagot, hogy leteszteljem egyesével, és a amelyikek nem világítottak, azok maradtak jók (7db), 6db-ra amint rákötöm a GND-t, és az 5V-ot egyből világít, data-ra semmit nem reagál. 1db nem világít egyáltalán, de annak a Din DO-ja zárlatos a sorban kb. a 9. lehetett, és voltak utána folyamatosan világító, és rendesen működő LED-ek is.
Multiméter alapján mindegyik LED jó helyen sípol, kivéve az az egy, ami nem is világít.Próbáltam utánajárni a dolognak, és egyrészt az ESP32 és a táp GND-je nem volt összekötve.
Nem használtan 1000nF 6.3V+-os kondenzátort a GND és 5V között.
Valamint olvastam, hogy a Signal feszültsége nem lehet magasabb a 5V-os ágra leadottnál.
A Signal ugye 3.3V nekem, mert az ESP32 annyit ad le.
A 19V->5V-os konverterem sem biztos, h rádugáskor nem adott le nagyobb feszültséget, bár kb. a 15. rádugás után lehetett a gond.Mi okozhatta ezt, és a folyamatosan világító LED-eket még normális működésre lehet-e bírni?
Az általam helyesnek vélt kapcsolás, az így lenne, ha csak 1 helyről akarom táplálni az egészet:
Ez így már jó? Elegendő lesz a 3.3V signal, ha 30db LED-et kb. 10 centis távolsággal akarom egy 0.5mm2 sodrott réz vezetékkel összekötni? Bár az eddig cikkek alapján nem láttam, h vki 3.3V -> 5V logic convertert használt volna.
Köszi!
-
gya/352
tag
Igen, ez igaz, én sem találtam nyomát, hogy másnál is így működne.
Telefontöltőről működtetem a cuccot, de elmegy a PC USB portjáról is, kb. 150 mA-t vesz fel. Az ESP32-ről van átdrótozva az 5V a DAC-ra és ott van rajta még 47 uF kondi.
Elég nehezen tudom elképzelni hogy a felsorolt problémák lennének, mert a hiba az elég konzekvens, viszont van néhány adó amivel viszont jól működik. -
válasz
gya/352 #19378 üzenetére
Volt már téma korábban.
Anélkül, hogy beleásnám magam a szoftver részébe: ha azzal gond lenne, annak valószínűleg nyoma lenne a github oldalon az issues fülön, de nincs. Tehát valószínűleg hardveres gond lehet. Elsősorban a táp résszel lehet valami gubanc: milyen tápot kap az egész cucc és külön-külön az összetevők?
Ha az rendben van, akkor az összeköttetés az esp és az mp3 modul közt (rövidzár, laza forrasztás, esetleg külső zavar). És nem tudom, hogy a router, amire az egész kapcsolódik, volt-e már újraindítva, de az is tud problémát okozni. -
gya/352
tag
Üdv Mindenkinek!
Bocs ha nem ide való a téma, de alkalmasabb topikot nem találtam.
Nagyon új vagyok a témában úgyhogy előre elnézést kérek.
Összeraktam próbából egy internetes rádió lejátszót. ESP32 és VS1003. Az edzelf féle projectet. Azért ezt mert ez volt a számomra legjobban másolható, mivel Arduinohoz, programozáshoz nem nagyon értek. Alapjában véve működik a cucc, de vannak vele gondjaim. A legnagyobb baj az, hogy induláskor nem kezdi el lejátszani a beállított állomást, hanem mégegyszer ki kell választani a web-es felületről és úgy kezdi el lejátszani. Úgyan ez igaz szinte bármelyik rádióállomásra, hogy ha kiválasztom a listából akkor sem kezdi el lejátszani, hanem újra ki kell választani és akkor már műxik. Remélem érthetően irom le miről van szó. Ilyenkor az alábbi látszik a terminálon:
[19:54:01]D: Connect to host icast.connectmedia.hu/5001/live.mp3
[19:54:01]D: Song stopped incorrectly!
[19:54:01]D: REG Contents
[19:54:01]D: --- -----
[19:54:01]D: 0 - 808
[19:54:01]D: 1 - 33
[19:54:01]D: 2 - 8
[19:54:01]D: 3 - 6000
[19:54:01]D: 4 - 0
[19:54:01]D: 5 - AC45
[19:54:01]D: 6 - C1
[19:54:01]D: 7 - 1E06
[19:54:01]D: 8 - 0
[19:54:01]D: 9 - 0
[19:54:01]D: A - 0
[19:54:01]D: B - F8F8
[19:54:01]D: C - 0
[19:54:01]D: D - 0
[19:54:01]D: E - 0
[19:54:01]D: F - 0Van valakinek ezzel kapcsolatban tapasztalata?
Ez lenne a legfontosabb kérdés, ezen kívűl van még más gond is, mert nem fogadja a parancsokat MQTT-n keresztül, de annélkül lehet élni.
Köszönök bármilyen tippet. -
Wolfram
aktív tag
válasz
vargalex #19366 üzenetére
Igen, esp8266:esp8266:d1_mini, kihalásztam az
arduino-cli board listall -ból (a list nem ment).
Viszont most azt látom hogy a fordítási idő elképesztő hosszú ( 4 perc? )
arduino-cli --fqbn esp8266:esp8266:d1_mini compile <projectdir>
Ehhez van valamilyen paraméter? (fordításhoz használt memória stb) -
ekkold
Topikgazda
Igen lehet ilyen "trükkökkel" gyorsítani egy programot, de ez processzor függő is.
Pl. a BluePill (STM32F103) a legtöbb utasítást egyetlen órjel alatt végrahajtja, tehát a feltétel kiértékelés, vagy éppen egy változó ellenőrzése ugyanúgy egyetlen órajel idejéig tart (14 nanosec).Csak érdekességképpen az ESP procik lassabban olvassák a flash-t mint az STM (és a programkód a flas-ból fut), emiatt ez utóbbi annak ellenére gyorsabb, hogy alacsonyabb az órajele. Amikor elkezdtem használni a BluePill-t, meg is lepett, hogy mennyire gyors (főleg egy arduino-hoz képest). Ráadásul hardveres szozó/osztó modulja van így az esetek nagy részében az is egyetlen órajel. Ez anyit jelent, hogy a kódban pl. szorzás helyett bitléptetést használva (vagy fordítva) ugyanolyan sebességgel fut a program. De mondjuk Atmega proci esetén (pl. arduino nano) hatalmas sebességkülönbség van a két módszer között. Ez utobbi esetében a szorzás/osztás esetén gyakorlatilag egy ciklusnak kell lefutnia a prociban.
-
ViZion
félisten
ESPEasy-ben a goto/return vagy gosub hogy van megoldva? Lehet, h csak nem találom és van...
-
Wolfram
aktív tag
Egysoros http get hívást tud valaki ESP32-n? kb. ennyi kellene:
String data = http.get("http:\\hostname\query"); -
Janos250
őstag
Például:
Valami ilyesmit mindenképpen:
TZT Breadboard 830 Point PCB Board MB-102 MB102 Test Develop DIY kit 1200 Ft
https://www.aliexpress.com/item/1005003080884294.html
és hozzá a 3 féle kábelt:
https://www.aliexpress.com/item/1005004317066197.htmlEzek közül meg lehet válogatni:
67 db. egyszerű szenzor szállítással 5200 Ft-ért.
https://www.aliexpress.com/item/4001287965075.htmlDHT11 Digital Temperature And Relative Humidity Sensor 600 Ft
3.3 V-os (ESP8266, ESP32) és 5V-os (pl UNO) egyaránt jó
https://www.aliexpress.com/item/1207150391.htmlAHT10 AHT20 AHT21 High Precision Digital Temperature and Humidity Sensor (3.3 , 5V)
800 Ft
https://github.com/enjoyneering/AHTxx
https://www.aliexpress.com/item/33014230295.htmlVagy innen is válogathatsz:
Digital Temperature Sensor / Humidity Sensor DHT11 DHT22 AM2302 AM2301 AM2320 MW33
Sensor And Module For Arduino electronic DIY
https://www.aliexpress.com/item/1005001933682381.htmlBMP280 Digital Barometric Pressure Sensor Module 800Ft
https://www.aliexpress.com/item/32346767511.htmlSoil Moisture Hygrometer 600 Ft
https://www.aliexpress.com/item/32666789455.htmlDS18B20 Temperature Sensor 1000 Ft
https://www.aliexpress.com/item/4000143479592.htmlCapacitive Soil Moisture Sensor Module 650 Ft
https://www.aliexpress.com/item/32908693444.htmlTZT NJK-5002C Hall Effect Sensor Proximity Switch NPN 3-Wires Normally Open 1300 Ft
https://www.aliexpress.com/item/1005002329919234.htmlTZT Mini IR Pyroelectric Infrared PIR Motion Human Sensor Automatic Detector 600 Ft
https://www.aliexpress.com/item/1005001438454767.html100pcs /lot Transparent Round 5mm super bright water clear Green Red white Yellow
Blue Light LED bulbs emitting diode F5 vegyes színekben is 1000Ft
https://www.aliexpress.com/item/1005001414503004.html0.96 inch oled IIC Serial White OLED Display Module 128X64 I2C SSD1306 12864 LCD
Screen Board GND VDD SCK SDA 1000 Ft
https://www.aliexpress.com/item/1005003945327969.htmlTM1637 4 Bits / TM1638 / 74HC595 8 bit Digital LED Display Module 7 Segment 0.36Inch
Clock RED Anode Tube Four Serial Driver 1000 Ft
https://www.aliexpress.com/item/1005003945380746.htmlGY-NEO6MV2 new NEO-6M GPS Module NEO6MV2 with Flight Control EEPROM MWC APM2.5 large
antenna for arduino 1600 Ft
https://www.aliexpress.com/item/1005005199337977.htmlTZT 1LOTS 28BYJ-48-5V 4 phase Stepper Motor+ Driver Board ULN2003 for Arduino 1 x
Stepper motor +1x ULN2003 Driver board 1000 Ft
https://www.aliexpress.com/item/1005001414701209.htmlTZT DC 6V 30RPM 200RPM N20 Mini Micro Metal Gear Motor with Gearwheel DC Motors
GA12-N20 1600 Ft
https://www.aliexpress.com/item/1005002652046953.htmlDC 12V Electric Brushless DC Motor High Torque Gear Motor Geared Box S30K Reduction
Motor 14RPM 2 Wires for Electronic Toys Fan 1600 Ft
https://www.aliexpress.com/item/1005004582663682.htmlLIS3DSH LIS3DH high-resolution three-axis accelerometer triaxial accelerometer
module for Arduino 700 Ft
https://www.aliexpress.com/item/1005004525941005.htmlEgyszerű smart car meg pl:
https://www.aliexpress.com/item/4000921549839.htm -
ViZion
félisten
Alap feladatokra az ESP8266 is elég, főleg, ha van is otthon...
Ehhez van mindenféle modul, szenzor, csecsebecse...
De a sikerélmény miatt én kicsiben kezdenék, pl. egy WLED vagy valami hasonló, mozgásérzékelős hangulatvilágítás a szobába, szekrénybe, ágy aljára (ez mindig akkor jut eszembe, amikor belerúgok...).
Nekem az Ambilight építésben segítettek, de szerintem csak azért, h előbb ülhessenek a géphez minecraftozni...
Jah, minecraft lámpa is van neten, menőn néz ki. -
Először is azt kéne eldönteni, hogy milyen lap köré épüljön az egész!
5V TTL jelszinttel dolgozó lapok:
- Arduino UNO: nagy, és elavultnak mondható, mégis kezdésnek talán a legjobb, mert a világ összes neten található példakódja tulajdonképpen erre íródott vagy kompatibilis vele, és nagyon sok shield kapható hozzá, ami egy forrasztás nélkül a boardra dugható másik alaplapot jelent. Ezenkívül igénytelen és kb. elpusztíthatatlan.
A neten készen kapható szenzorok nagy része kompatibilis vele.
- Arduino Mega 2560: még nagyobb, hasonlóan "elavult" lap (ár/érték arányban), de a fenti board minden jó tulajdonságával: az UNO shield-ek ugyanúgy rádughatók, viszont sokkal több GPIO van rajta, több memóriát tartalmaz, és több hardveres extrát tud (több PWM láb, timer, soros port stb). Az én robot autóm e köré épül. Egyébként az összes 8 bites 3D nyomtatót, CNC gépet stb. erre a lapra szokták építeni, sztenderdnek mondható sokoldalú lap.
- Mega2560 mini / 2560 Mega Mini Pro: ugyanaz, mint az előbbi, csak forrasztgatni kell, mert a shield-ek már nem kompatibilisek vele (fizikailag, műszakilag igen!). Ez akkor jöhet jól, ha kis méretű robotot szeretnél építeni.
3,3V jelszinttel dolgozó lapok:
- ESP32 (ebből már több generáció van: wroom, s1, s2, s3): modern, az egyik legjobb és legolcsóbb lap, de más CPU köré épül. A neten szintén nagyon sok példakód található hozzá, és a legtöbb UNO-ra írott kód is fut rajta, módosításokkal (külön ehhez íródott library-kre lesz szükség). Beépítve tartalmaz Wifi-t és Bluetooth-t!
- STM32 Bluepill: ARM alapú, gyors és sokoldalú board, talán a legkomolyabb tudásban az összes felsorolt lap közül. Sajnos én nem kerültem eddig kapcsolatba vele, úgyhogy nem tudok róla írni (hülyeséget meg nem akarok
).
Hogy miért fontos, milyen jelszinttel dolgoznak ezek a lapok? Mert a szenzorokat/drivereket/tápot ehhez kell megválasztani. Itt kezd bonyolódni a dolog.
A processzorok köztudottan füsttel működnek. A nem összeillő jelszinteket illeszteni kell egymáshoz, különben valamelyikből kijön a füst, és nem működik tovább. -
Pero
senior tag
sziasztok,
segítségre volna szükségem D1 mini ESP8266 al kapcsolatban.
WLEDet szeretnék rajtuk használni. gép Win10, driver fent van.
az első ha bármit is csinálok, nem jelenik meg eszközkzelőben csak villan 2 rövidet és egy picivel hosszabat a resetgomb meg noymására. én arra kezedk gyanakodni, hogy DOA.
2. számú versenyzőre sikertült felrakni a WLED-et, telefonon fel is utdtam venni a lsitára, majd miután lehúztam gépről soha többet nem volt elérhető akár gépre akár powerbankra dugva. próbáltam restelni is de nem tudom újra flashelni (GND-D3 5mp)is megvolt.
a furca h ez eszköz kezelőben szépen megjelenik de nem tudok sehogy sem ennél többet kicsikerni belőle.
Ha volna tanács azt előre is köszönöm.
üdv -
#68216320
törölt tag
válasz
ViZion #19198 üzenetére
A kijelzők legtöbbjén eleve rajta van a pullup. Ergó arra a vonalra amin kijelző (is) van, már nem szükséges tenni, mert ha teszel esetleg túl alacsony lenne a duple pulupp eredője.
Amúgy ha már pullup:
Az ESP32-n mintha lenne belső felhúzó. Azt nem lehetne használni? (mondjuk 1-2 I2C esetén, gondolom több esetén biztonságosabb egy külső)
pl. pinMode(2, INPUT_PULLUP); -
its_grandpa
tag
válasz
its_grandpa #19177 üzenetére
Megnéztem az arduino ESP32 board manager 2.0.5-ben ez van a Lolin S2 mini variants-ban, pins_arduino.h
static const uint8_t SDA = 33;
static const uint8_t SCL = 35;
Tévedtem, bocs, van default.
-
Új hozzászólás Aktív témák
Hirdetés
- Autós topik
- Konteó topic
- One otthoni szolgáltatások (TV, internet, telefon)
- Gumi és felni topik
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- MW2 - MW3 játékosok baráti köre
- Ford topik
- Samsung Galaxy A54 - türelemjáték
- Motorolaj, hajtóműolaj, hűtőfolyadék, adalékok és szűrők topikja
- Kerékpárosok, bringások ide!
- További aktív témák...
- FÓLIÁS! LG UltraWide 35WN75C-B Ívelt Monitor! 3440x1440 VA / 100Hz / 5ms / FreeSync
- Tom Clancy's The Division - Sleeper Agent Edition Xbox One
- IBM Thinkpad T42 15" IPS + Dock II +tartalék alkatrészek
- Precision 7550 15.6" FHD IPS i9-10885H RTX 3000 32GB 512GB NVMe magyar vbill IR kam gar
- AKCIÓ!!! GAMER PC: Új RYZEN 5 5600X +Új RTX 3080 +Új 32-64GB DDR4 +1-2-4TB NVMe SSD! GAR/SZÁMLA!
- Telefon felvásárlás!! iPhone 13 Mini/iPhone 13/iPhone 13 Pro/iPhone 13 Pro Max/
- BESZÁMÍTÁS! ASRock B550M R5 5600 16GB DDR4 512GB SSD RX 6600 XT 8GB Kolink Observatory LM RGB 600W
- Használt Intel procik - Core 2 - Dual Core
- Eladó Apple iPhone Xr 64GB fekete / ÚJ KIJELZŐ / 100% AKKU / 12 hónap jótállással!
- Csere-Beszámítás! Számítógép PC Játékra! I5 14400F / RTX 4060ti 16GB / 32GB DDR5 / 1TB SSD
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged