- Mobil flották
- Leesett a kamionról több millió eurónyi Z Fold7
- Xiaomi 15 - kicsi telefon nagy energiával
- Samsung Galaxy Z Fold7 - ezt vártuk, de…
- Samsung Galaxy A56 - megbízható középszerűség
- Xiaomi 14 - párátlanul jó lehetne
- Yettel topik
- Okosóra és okoskiegészítő topik
- A hagyományos (nem okos-) telefonok jelene és jövője
- Honor Magic5 Pro - kamerák bűvöletében
Hirdetés
Talpon vagyunk, köszönjük a sok biztatást! Ha segíteni szeretnél, boldogan ajánljuk Előfizetéseinket!
-
Mobilarena
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
Janos250
őstag
válasz
Janos250 #19131 üzenetére
Hozzászólok magamhoz.
Mellesleg nem csak ez, hanem a többi oldal is érdekes.
Például az teljes Arduino tanfolyam.
https://megtestesules.info/hobbielektronika/arduino.html -
válasz
Janos250 #19099 üzenetére
Épp most bonyolítod.
Legutóbb a Te kódodból indultam ki, mivel van egy laza 20 év full stack webfejlesztő tapasztalat mögöttem, ez a felépítés hasonlított legjobban egy klasszikus PHP szerver oldali programhoz.
Arra amit írtál, van kész megoldás, a kliens által küldött változókat aserver.arg("valtozo_neve")
egyszerűbben visszaadja, mint hogy a header parse-olásával kellene bajlódni.
Ez ugye megfelel a PHP_GET['valtozo_neve']
változójának. -
tibi-d
tag
válasz
Janos250 #19034 üzenetére
Hogy konkrétumokat is írjak. Egy berendezést vezérel az ESP32. A HMI kapcsolatot oldaná meg a tablet. Amíg a berendezés üzemel, addig az ESP és a tablet között a kapcsolatnak folyamatosan meg kéne lennie, hogy a tableten kiadott parancsot a készülék végre tudja hajtani. A berendezésen lévő folyamatról a tableten állapot megjelenítést kellene létrehozni. Az adat cserét legrosszabb esetben is másodpercenként meg kéne valósítani.
-
its_grandpa
tag
válasz
Janos250 #18948 üzenetére
Kíváncsivá tettetek ezzel az S3-al, utána olvasgattam kicsit (mondjuk több mint 1 órát de ilyenkor van csend és nyugalom).
>> Majd még a beállításokkal tökölődök, ....
Óvatosan a PSRAM--al, ha jól értettem meg a doksikat nagyon nem mindegy, hogy QSPI vagy OPI.
A #18944-ben látott board beállítások igen szerények ahhoz a board-hoz amit vettél.
Espressif doksi ha .... [link] -
válasz
Janos250 #18940 üzenetére
Először is frissítenem kellett a lapot az alaplapkezelőben, amihez ki kellett cserélnem a beállításokban az esp32 forrás linkjét az újabb github-os linkre, mert előtte 1.6 verzió volt fent, most már 2.*. A régivel nem volt s3 lap a listában egyáltalán, azért is kérdeztem.
Menő, hogy ezen már 16M flash meg 8M psram van. Utóbbi megőrzi a tartalmát deepsleep alatt? -
válasz
Janos250 #18798 üzenetére
Nem szoktam nyákot maratni/gyártatni, hanem minden áramkört proto-boardra tervezek, egy ideje UTP kábelből bontott vezetékeket használok az áthidalásokhoz, nekem bejött. Breadboard-on is jó jumper kábel helyett. Csak oda nem annyira jó, ahol mozgatva vannak a vezetékek.
-
t72killer
titán
válasz
Janos250 #18793 üzenetére
sodrott puha sz.r, nem egymagvú. Azért vettem hosszúkat, hogy lehessen 3-4centisre darabolva elegánsan használni.
A hegye meg a valóságban nem akkora, hanem kb fele. Épphogy beleér a breadboard fogójába. Ha továbbpucolom a héját, már vége is a "tűnek", jön a gyenge sodrott rész.
paypallal fizetek (nálunk van), max csinálok másik paypalt.
-
ReFleXx
addikt
válasz
Janos250 #18734 üzenetére
nekem 2db van, ugyanaz a MCU van rajta csak az usb/serial atalakito mas, az egyiknel ha nem emelek egy minimalisat a tx poweren fel sem csatlakozik, ha a router melle rakom akkor sem, egyebkent a jelerosseggel nincs baj, szal valami sw bug lehet, de a legnagyobb problema, hogy random alkalmankent meg igy sem csatlakozik fel.
lehet én kaptam ki 2 selejtet ebbol. -
Szancsó
aktív tag
válasz
Janos250 #18312 üzenetére
Panasz lett volna, de akkor nem érezted át a helyzetet
A terv az volt, hogy ha valaki tudja esetleg hogy lehet megnézni ezekből melyik mennyi helyet foglal lefordítva akkor az alapján indulok, egyébként meg ha összeáll valamennyire a dolog akkor egyenként kicserélgetem a library-ket (mondjuk a BT és Wifi pont a gyári), hátha pl. GFX modulon lehet majd fogni. Bár gyanítom ahhoz még kell egyszer patíciót növelni, illetve ha sikerül úgy beférni adott helyre akkor meg minek szenvednék vele?
Köszi
-
Wolfram
aktív tag
-
#70211840
törölt tag
válasz
Janos250 #18224 üzenetére
Tetszik ez a logikai analizátor. Lehet beruházok egyre, jól jöhet.
Sajnos csak 1 csatornás "játék" szkópom van, amivel ~50kHz lehet érdemben vizsgálódni.Arra gondoltam, hogy valamit elnézhettem a bekötésnél, de ugyanez swpar8-al működik.
Illetve más library-val megy a hardveres par8 is. Szóval kizárólag ennél a library-nál jön elő a hiba.
A készítő nem is tesztelte stm32-n, mert nincs neki, szóval "elméletileg" kellene működnie.A TFT display természetesen par8, nem spi. Valami ilyesmi: [link]
-
#70211840
törölt tag
válasz
Janos250 #18222 üzenetére
Köszönöm, hogy ránéztél.
Jelenleg egy BlackPill (STM32F401CCU) van egy ILI9225 PAR8-ra kötve, azzal próbáltam ki ismét a dolgot.
Jelenleg így néz ki a program eleje nálam:#define ARDUINO_ARCH_STM32
#include <SrcWrapper.h>
#include <Arduino_GFX_Library.h>
#include <databus/Arduino_STM32PAR8.h>
#define GFX_BL DF_GFX_BL // default backlight pin, you may replace DF_GFX_BL to actual backlight pin
Arduino_DataBus* bus = new Arduino_STM32PAR8(PB8, PB9, PB2, PB1, GPIOA);
Arduino_GFX *gfx = new Arduino_ILI9225(bus, PB0 /* RST */);
A "GPIOA" az aktuálisan kiválasztott chip A-port kezdőcímét jelenti, ahogy a PBx is.
A "typedef struct"-ot hol kellene megadnom? Csak azért, mert ha megadom, akkor hibába futok.
Jelen állapotában fordul a program viszont ugyancsak fehér képernyő fogad.
-
#70211840
törölt tag
válasz
Janos250 #18220 üzenetére
Közben megoldódott:
TwoWire myWire1(PB7, PB6);
TwoWire myWire2(PB11, PB10);
Kicsit ugyan bele kell majd nyúlnom a library-ba, hogy átadjam melyik portot kell használnia és ne simán a Wire-t használja.
Viszont az i2c scan most szépen fut és mindkét porton folyamatosan írogatja a megtalált 1-1 eszköz címét.(Ehh, de kényelmetlen, hogy a Sloeber-el nem megy a közvetlen feltöltés. Folyton kézzel kell az elkészült bin-t a "Release" könyvtárból feltöltenem.)
-
#70211840
törölt tag
válasz
Janos250 #18218 üzenetére
Köszönöm, kipróbálom majd.
Most egy drasztikusabb megoldással csinálom egyelőreMás:
Akadt egy olyan problémám, hogy egy "Blue Pill"-re 2db I2C eszköz van kötve, de mindegyik külön porton.
Van egy oled kijelző, ez az első i2c porton van. (sda1, scl1)
Van egy hőmérséklet szenzor, ez a második i2c porton van. (sda2, scl2)A kijelző simán működik, nincs vele teendőm. A library csinálja a Wire.begin(); hívást.
A szenzor csak akkor működik, ha átállítom a Wire sda-t és scl-t még a begin előtt.Wire.setSDA(PB11);
Wire.setSCL(PB10);
Wire.begin();
Ez viszont azt eredményezi, hogy a második port és a szenzor működik tovább, az első port és az oled kijelző nem.
Hogyan lehetne párhuzamosan használni a kettőt?
Nem lehetne valahogyan a "Wire"-ból egy másik példányt csinálni, mondjuk wire2 néven és annak állítanám be a fenti értékeket? -
válasz
Janos250 #18178 üzenetére
De nem, nem csak ez okozza! Mert ha teljesen más projektet kezdek (más sketch, más lappal, akár olyan, amit akkor nyitok meg először), akkor is gyorsabban fordít, ha a program meg volt előtte nyitva és már fordítottam vele valamit előzőleg.
Sőt, ha változtatok valamit az egyik library-n, érzékeli, és ki is írja, hogy változás miatt újra kell mindent fordítani, de akkor sem annyival lassabb, mint amikor először fordítok vele.
-
#70211840
törölt tag
válasz
Janos250 #18163 üzenetére
"Régóta Eclipse-t használok már és nagyon megszoktam"
"Még erősen kezdő vagyok"
A kettő együtt elég ritka társulás! :-)Így kiemelve valóban.
Viszont arról van szó, hogy a C/C++ nyevek idegenek nekem. Ezért az "erősen kezdő" jelző, amivel illettem magam. Komolyabban sohasem foglalkoztam ezekkel a nyelvekkel. Nagyon régen egyszerű, DOS-on futtatható, "nyúlfarknyi" programot írtam bennük, de ezzel kimerült a tudásom, amit azóta el is felejtettem.
Alapvetően magasabb szintű nyelveket, jelölőket használok.
(Php, Java és ezekhez köthető nyelvek, jelölők, kiegészítők)
Ezeket Eclipse-ben szoktam elkészíteni, ezért a "megszokás" kifejezés.De, hogy ON is legyek.
Találtam egy alternatívát, ami ötvözi első ránézésre az ArduinoIDE működését és az Eclipse szerkesztési lehetőségeit.
Megadva a linket az STM32 platform json fájlhoz, már le is töltötte a komponenseket és "Project" indításkor kiválasztható például a "BluePill" is.Az IDE neve: Sloeber ( [link] )
Teszek vele egy próbát.
-
#70211840
törölt tag
válasz
Janos250 #18156 üzenetére
A fő problémám egyrészt, hogy az ArduinoIDE-t IDE-nek nevezni vicc. Gyakorlatilag alig van megvalósítva benne, amit egy IDE-nek tudnia kellene. Kényelmetlen benne kicsit is komplexebb kódot írni.
Hiányzik például egy obj példány alapján megnyitni az implementációt. És sok hasonló funkció és hiányzik.
A grafikus rész pont nem érdekel, az viszont igen, hogy könnyen tudjak a kódon refaktorálni, ha szükséges. Szóval mindenképp maradok az Eclipse vonalon.
Amúgy nem tudom miben más vagy maga a fordító vagy a hardver specifikus built-in függvény rész, de kissebb kódot is készít, mint az ArduinoIDE-ben lévő STM32 board cuccos.
Ez például nagyon nem mindegy egy 64kB/20kB BluePill esetében.Szóval emiatt váltottam ArduinoIDE-ről végül az STM32CubeIDE-re.
-
#70211840
törölt tag
válasz
Janos250 #18127 üzenetére
A belekeveredés teljesen jogos. Nem értem mi a fordító baja.
Kipróbáltam egy másik "Board Manager URL"-t. Egészen pontosan az itt találhatót: [link]
Aztán leszedtem az ehhez tartozó board pakkot és kiválasztottam az STM32F1 Series (azon belül az STM32F1C8T6 128k) boardot.Na, ezzel iszonyat lassan és hatalmas kód készült el (csak 128k-ba fért bele, borzalmas a compiler), de nem volt problémája. Feltöltve egy fehér képernyő fogadott. Szóval valami még nem oké, de nem ütközi szintaktikai hibába. A SW Parallel megoldást fordítva és feltöltve, ez is rendben működik.
Szóval nagyon passz, hogy mi a baja
-
#70211840
törölt tag
-
ViZion
félisten
válasz
Janos250 #18119 üzenetére
Nem akarok kintről rendelni, meg az enyhén megduplázza a project árát. Akkor pl. Mosfet? Hmmm... de aktív alacsony a relé. Mondjuk ehhez a reléhez sem ragaszkodom, a lényeg, h a 3,3 V GPIO-val tudjak 230 V 0,5 A keringetőt kapcsolni. Most a mezei relé pajzs van, de kattogós, nem tudom, h hosszabb távon is jó megoldás-e. Mondjuk terhelve nincs (adatlaphoz képest), ha van ócó, egyszerű módja, akkor lecserélném vmi biztosabbra (SSR, vagy ilyesmi).
Elektronika topikba menjek inkább? Vagy hosszabb távon relé pajzsról van tapasztalat? -
#70211840
törölt tag
válasz
Janos250 #18113 üzenetére
További STM32F103 + ILI9225 8-bit Parallel fejlemény:
Csak nem hagyott nyugodni a dolog és kipróbáltam az Arduino_GFX (GFX Library for Arduino) software-parallel megoldását. Na ezzel beindult a kis kijelző végre, de persze jó lassú, mivel nem valódi parallel.
Az alábbi kódrészlettel kezdtem:/* More data bus class: https://github.com/moononournation/Arduino_GFX/wiki/Data-Bus-Class */
//Arduino_DataBus *bus = create_default_Arduino_DataBus();
Arduino_DataBus *bus = new Arduino_SWPAR8(PB7 /* DC/RS */, PB8 /* CS */, PB6 /* WR */, PB0 /* RD */, PA0 /* D0 */, PA1 /* D1 */,PA2 /* D2 */, PA3 /* D3 */, PA4 /* D4 */,PA5 /* D5 */, PA6 /* D6 */, PA7 /* D7 */);
/* More display class: https://github.com/moononournation/Arduino_GFX/wiki/Display-Class */
//Arduino_GFX *gfx = new Arduino_ILI9341(bus, DF_GFX_RST, 0 /* rotation */, false /* IPS */);
Arduino_GFX *gfx = new Arduino_ILI9225(bus, PB9 /* RST */);Az itt található megoldások közül melyikkel érdemes próbálkoznom STM32F1 esetében?
Ugyan a listában nincs felsorolva, de a könyvtárban található egy ilyen file: STM32PAR8
Ez elméletben talán jó, viszont nem tudom a "port" érték helyére mit vár?Arduino_STM32PAR8(int8_t dc, int8_t cs, int8_t wr, int8_t rd, GPIO_TypeDef* port);
-
#70211840
törölt tag
válasz
Janos250 #18115 üzenetére
Azt hiszem az ILI9225-Parallel-8bit projectet egy kicsit felfüggesztem. Amíg nem jövök bele jobban a dolgokba, talán az SPI protokolnál maradok.
A Nokia-5110 kijelzőt szépen sikerült már működésre bírnom SPI-n.A jelenlegi célpont egy 2.8" ILI9341 (240x320) SPI kijelző. Touch nélküli csak kijelző.
Ilyen: https://modulshop.hu/28-szines-tft-lcd-kijelzo-240x320-spi-arduino-788Az alábbi bekötéssel tesztelem:
TFT_DC PA3
TFT_CS PA4
TFT_RST PA0
TFT_CLK PA5
TFT_MISO PA6
TFT_MOSI PA7Először letöltöttem a Library Manager-ben az Adafruit GFX Library + Adafruit ILI9341 párost.
Az "examples/graphicstest/graphicstest.ino" ) fájt fordítottam, ami nálam az alábbi paraméterekkel példányosítja az "Adafruit_ILI9341" osztályt:// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
// If using the breakout, change pins as desired
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
Lefordítva a SW SPI-vel rendben működik (persze jó lassan), de amikor a HW SPI-re váltanék, akkor nincs kép.
Ha jól néztem az infókat, akkor STM32F103 esetében a CLK, MISO, MOSI a PA5, PA6, PA7 pineken élvez DMA támogatást.
A HW SPI osztály úgy nézem csak CS és DC paramétereket vár a példányosításhoz. De mi van az RST pinnel? Azt nem tudom hol kellene használnom.
Próbálkoztam ugyanezzel a bekötéssel a GFX Library for Arduino könyvtárral is.
Itt az "examples/HelloWorld/HelloWorld.ino" fájl volt a kiszemelt.
Ennél az alábbi módon próbáltam létrehozni az "Arduino_GFX" osztály példányát:/* More data bus class: https://github.com/moononournation/Arduino_GFX/wiki/Data-Bus-Class */
//Arduino_DataBus *bus = create_default_Arduino_DataBus();
//Arduino_DataBus *bus = new Arduino_HWSPI(PA3 /* DC */, PA4 /* CS */);
Arduino_DataBus *bus = new Arduino_SWSPI(PA3 /* DC */, PA4 /* CS */, PA5 /* SCK */, PA7 /* MOSI */, GFX_NOT_DEFINED /* MISO */);
/* More display class: https://github.com/moononournation/Arduino_GFX/wiki/Display-Class */
Arduino_GFX *gfx = new Arduino_ILI9341(bus, DF_GFX_RST, 0 /* rotation */, false /* IPS */);
Látható, hogy próbáltam az "Arduino_DataBus"-t az "Arduino_HWSPI" és az "Arduino_SWSPI"-vel is létrehozni, de egyik megoldással sem kaptam képet.
(Természetesen minden library-t a manager-en keresztül töltöttem le, ahol szükséges volt a hozzájuk tartozó dependency-kel együtt. Linkeket csak a fájlok/könyvtárak beazonosítása végett írtam.)
Az "Adafruit_ILI9341" esetében miért nem tudok HW SPI-t használni?
Az "Arduino_GFX" (GFX Library for Arduino) esetében miért nem látok a kijelzőn sem SW SPI, sem HW SPI megoldással képet?
Mit szúrok el? -
Janos250
őstag
válasz
Janos250 #18113 üzenetére
Mellesleg az jutott eszembe, hogy ha párhuzamos porton használod a kijelzőt, akkor határozottan jó választás az STM32, mert ott egyetlen utasítással tudod írni a 8 bites portra az egész bájtot:
*((volatile uint32_t *)0xaaaaaaaa) = X;
Az aaa a port címe, amit így fejből nem tudok, de az STM32-n van ilyen lehetőség, X meg amit írni akarsz rá (8 bites byte)
-
#70211840
törölt tag
válasz
Janos250 #18111 üzenetére
Először is köszönöm szépen a segítő szándékot. Nagy zöldfülű vagyok még a témában, de próbálok jobb lenni. "Túrom" a netet és beleakadok ebbe-abba.
Igen, a Boards Manager rendben van, látja az STM32 specifikus dolgokat, ezek is vannak kiválasztva, működnek is feltöltések serial és stlink módon is. Egy ILI9341 parallel TFT-t már sikerült is beüzemelnem a "Blue Pill"-el valami máshonnét összeszedett library-val, de majd megpróbálkozom a hivatalosan elérhető/letölthető verziókkal. Ez a kijelző eredetileg a DSO-138 oszcilloszkóp kijelzője volt és ezért parallel SPI helyett. Gondolom oda kellett a gyorssabb rajzolás.
A most probált kijelző, az ILI9225 (2.0") szintén parallel kivezetésű. Az általad is említett ILI9225 library viszont én úgy olvasom, hogy az SPI protokollal készült TFT-t képes kezelni. Ezért keresgélek erre-arra, hogy parallel módon használni tudjam.
Viszont tény, hogy kezdek kicsit már összezavarodni a dolgokban
Szóval jól látod a helyzetet. A különböző helyeken látott megoldások máshogy kötik össze a TFT-t a BluePill-el, ezért ide-oda kötözgetek. Sok library-ban amiket kipróbálok nem látom hol lehet minden pin kapcsolatot megadni. Az egyiken máshol van például a WR/RD páros, mint a másikon. Persze, ha meg lehet valahol adni ugyanazt a kivezetés, az jó. De amikor nem lehet (vagy épp nem találom) akkor marad a manuális átkötés.A "GFX Library for Arduino"-ban van például a "HelloWorld" example.
Ez alaphelyzetben egy default bus/kijelző kombinációt tölt be, de elméletileg testreszabható.
Látok egy ilyen bus fájlt: Arduino_STM32PAR8.h
Egy ilyen kijelző fájlt: Arduino_ILI9225.h
Nem lehetne ezeket összekombinálni és így lefordítani?(sorry az értetlenkedésem miatt...)
-
#70211840
törölt tag
válasz
Janos250 #18104 üzenetére
Nem értem, hogy ez mit takar. Ergo nem tudom definiálni sem a megfelelő értékre.
Mert ugye ilyet hogy pl. PB6 nem írthatok az A3 helyett, mivel ez sincs definiálva.
A megjegyzásben lévő "... Analog x" sem világos. Ez esetleg valami Arduino-s dolog? Ilyen van a "Bluepill"-en? Valamiért az ILI9225 8-bit parallel kifog rajtam.Pár szóban esetleg útba tudnál igazítani, hogy mit jelentenek ezek?
(Az ILI9341-et 8-bit parallel már sikerült működésre bírnom egy másik Lib-el.)
-
ViZion
félisten
válasz
Janos250 #17988 üzenetére
van egy tucat hasonló, fentebb -vagy máshol?- említettem. Ált. Londoni cím, megszűnt cég regisztrációja, csak előreutalás, magyar (OTP) számlára. Ali-s termékeket húznak be az oldalak, marha alacsony áron, minimális postaköltséggel.
Sem a bank, sem a rendőrség nem törte össze magát, h segítsen a károsultaknak, legalábbis a fórumokból ez jött le. Mai napig is élnek a weboldalak, pedig nem mai probléma.
Ha nem ismert cég és csak előre utalás van, meg olcsó is a futár, akkor rá kell keresni a cégre. -
Tomika86
senior tag
válasz
Janos250 #17943 üzenetére
sendHeader részeket kivettem.
Jelenleg kijelző nélkül próbálom, az index_html is bekerült így van kezdőoldal.
Működik a fájl méret átküldés is.
A nem .tft fájl üzenet működikDe a failure nem megy, illetve a reason se működik.
Ebben esetleg tudsz segíteni hogy kellene?nextion_update_server.send(200, "text/html", "failure_html?reason=" + nextion.statusMessage);
Köszönöm!
-
Tomika86
senior tag
válasz
Janos250 #17922 üzenetére
Köszönöm a választ!
És ha jól gondolom ezek is csak azért vannak, hogy az spiffs-ről beolvassa a tartalmakat.
String getContentType(String filename){
if(server.hasArg(F("download"))) return F("application/octet-stream");
else if(filename.endsWith(F(".htm"))) return F("text/html");
else if(filename.endsWith(".html")) return F("text/html");
else if(filename.endsWith(F(".css"))) return F("text/css");
else if(filename.endsWith(F(".js"))) return F("application/javascript");
else if(filename.endsWith(F(".png"))) return F("image/png");
else if(filename.endsWith(F(".gif"))) return F("image/gif");
else if(filename.endsWith(F(".jpg"))) return F("image/jpeg");
else if(filename.endsWith(F(".ico"))) return F("image/x-icon");
else if(filename.endsWith(F(".xml"))) return F("text/xml");
else if(filename.endsWith(F(".pdf"))) return F("application/x-pdf");
else if(filename.endsWith(F(".zip"))) return F("application/x-zip");
else if(filename.endsWith(F(".gz"))) return F("application/x-gzip");
return F("text/plain");
}
bool handleFileRead(String path) { // send the right file to the client (if it exists)
Serial.print("handleFileRead: " + path);
if (path.endsWith("/")) path += "index.html"; // If a folder is requested, send the index file
String contentType = getContentType(path); // Get the MIME type
String pathWithGz = path + ".gz";
if (SPIFFS.exists(pathWithGz) || SPIFFS.exists(path)) { // If the file exists, either as a compressed archive, or normal
if (SPIFFS.exists(pathWithGz)) // If there's a compressed version available
path += ".gz"; // Use the compressed verion
File file = SPIFFS.open(path, "r"); // Open the file
size_t sent = server.streamFile(file, contentType); // Send it to the client
file.close(); // Close the file again
Serial.println(String("\tSent file: ") + path);
return true;
}
Serial.println(String("\tFile Not Found: ") + path); // If the file doesn't exist, return false
return false;
} -
Tomika86
senior tag
válasz
Janos250 #17917 üzenetére
Már szerkeszteni nem tudtam
Szeretnék egyet kérdezni, ha tud valaki segíteni ebben.
Van ebben a könyvtárban webserveres példaprogram.Viszont én már az ESP32 ota feltöltéshez is azt használok, ebbe belezavar ha most a kijelzőét is beletenném a programba?
Ezek első blikkre mindkettőben ott vannak
MDNS.begin(host);
WebServer server(80);
server.begin();
server.handleClient();Nextion upload webserver
#include <FS.h>
#include <WiFi.h>
#include <WebServer.h>
#include <ESPmDNS.h>
#include <SPIFFS.h>
#include <ESPNexUpload.h>
/*
ESP32 uses Hardware serial RX:16, TX:17
Serial pins are defined in the ESPNexUpload.cpp file
*/
const char* ssid = "your_wlan_ssid";
const char* password = "your_wlan_password";
const char* host = "nextion";
// used only internally
int fileSize = 0;
bool result = true;
// init Nextion object
ESPNexUpload nextion(115200);
WebServer server(80);
String getContentType(String filename){
if(server.hasArg(F("download"))) return F("application/octet-stream");
else if(filename.endsWith(F(".htm"))) return F("text/html");
else if(filename.endsWith(".html")) return F("text/html");
else if(filename.endsWith(F(".css"))) return F("text/css");
else if(filename.endsWith(F(".js"))) return F("application/javascript");
else if(filename.endsWith(F(".png"))) return F("image/png");
else if(filename.endsWith(F(".gif"))) return F("image/gif");
else if(filename.endsWith(F(".jpg"))) return F("image/jpeg");
else if(filename.endsWith(F(".ico"))) return F("image/x-icon");
else if(filename.endsWith(F(".xml"))) return F("text/xml");
else if(filename.endsWith(F(".pdf"))) return F("application/x-pdf");
else if(filename.endsWith(F(".zip"))) return F("application/x-zip");
else if(filename.endsWith(F(".gz"))) return F("application/x-gzip");
return F("text/plain");
}
bool handleFileRead(String path) { // send the right file to the client (if it exists)
Serial.print("handleFileRead: " + path);
if (path.endsWith("/")) path += "index.html"; // If a folder is requested, send the index file
String contentType = getContentType(path); // Get the MIME type
String pathWithGz = path + ".gz";
if (SPIFFS.exists(pathWithGz) || SPIFFS.exists(path)) { // If the file exists, either as a compressed archive, or normal
if (SPIFFS.exists(pathWithGz)) // If there's a compressed version available
path += ".gz"; // Use the compressed verion
File file = SPIFFS.open(path, "r"); // Open the file
size_t sent = server.streamFile(file, contentType); // Send it to the client
file.close(); // Close the file again
Serial.println(String("\tSent file: ") + path);
return true;
}
Serial.println(String("\tFile Not Found: ") + path); // If the file doesn't exist, return false
return false;
}
// handle the file uploads
bool handleFileUpload(){
HTTPUpload& upload = server.upload();
// Check if file seems valid nextion tft file
if(!upload.filename.endsWith(F(".tft"))){
server.send(500, F("text/plain"), F("ONLY TFT FILES ALLOWED\n"));
return false;
}
if(!result){
// Redirect the client to the failure page
server.sendHeader(F("Location"),"/failure.html?reason=" + nextion.statusMessage);
server.send(303);
return false;
}
if(upload.status == UPLOAD_FILE_START){
Serial.println(F("\nFile received. Update Nextion..."));
// Prepare the Nextion display by seting up serial and telling it the file size to expect
result = nextion.prepareUpload(fileSize);
if(result){
Serial.print(F("Start upload. File size is: "));
Serial.print(fileSize);
Serial.println(F(" bytes"));
}else{
Serial.println(nextion.statusMessage + "\n");
return false;
}
}else if(upload.status == UPLOAD_FILE_WRITE){
// Write the received bytes to the nextion
result = nextion.upload(upload.buf, upload.currentSize);
if(result){
Serial.print(F("."));
}else{
Serial.println(nextion.statusMessage + "\n");
return false;
}
}else if(upload.status == UPLOAD_FILE_END){
// End the serial connection to the Nextion and softrest it
nextion.end();
Serial.println("");
//Serial.println(nextion.statusMessage);
return true;
}
}
void setup(void){
Serial.begin(115200);
Serial.println(F("\nRunning UploadServer Example\n"));
Serial.setDebugOutput(false);
if(!SPIFFS.begin()){
Serial.println(F("An Error has occurred while mounting SPIFFS"));
Serial.println(F("Did you upload the data directory that came with this example?"));
return;
}
//WIFI INIT
Serial.printf("Connecting to %s\n", ssid);
if (String(WiFi.SSID()) != String(ssid)) {
WiFi.begin(ssid, password);
}
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.print(F("\nConnected! IP address: "));
Serial.println(WiFi.localIP());
MDNS.begin(host);
Serial.print(F("http://"));
Serial.print(host);
Serial.println(F(".local"));
//SERVER INIT
server.on("/", HTTP_POST, [](){
Serial.println(F("Succesfully updated Nextion!\n"));
// Redirect the client to the success page after handeling the file upload
server.sendHeader(F("Location"),F("/success.html"));
server.send(303);
return true;
},
// Receive and save the file
handleFileUpload
);
// receive fileSize once a file is selected (Workaround as the file content-length is of by +/- 200 bytes. Known issue: https://github.com/esp8266/Arduino/issues/3787)
server.on("/fs", HTTP_POST, [](){
fileSize = server.arg(F("fileSize")).toInt();
server.send(200, F("text/plain"), "");
});
// called when the url is not defined here
// use it to load content from SPIFFS
server.onNotFound([](){
if(!handleFileRead(server.uri()))
server.send(404, F("text/plain"), F("FileNotFound"));
});
server.begin();
Serial.println(F("\nHTTP server started"));
}
void loop(void){
server.handleClient();
} -
autrcsab
csendes tag
válasz
Janos250 #17797 üzenetére
Köszönöm szépen az értékes megjegyzéseket és tanácsokat.
Pillanatnyilag a hardver összerakása folyik, gondot okozott, hogy a teensy 4.1 kártyából tévedésből az ethernet nélküli változatot rendelték, pedig az ethernetesre van szükség, hogy a GPS modul egység UDP-n keresztül tudjon kommunikálni a PC-vel.
Amikor elkészülünk, akkor szereljük fel a cuccokat egy traktorra.
Majd beszámolok róla, amikor eddig jutottunk.
-
-
Undoroid
őstag
válasz
Janos250 #17769 üzenetére
Szia Janos250!
Köszönöm a segítséget!
Igen, az Ördög nem alszik, de maga a vezérlő is csak akkor fog tápfeszt kapni, ha szükség lenne az elmozdításra!
A biztonság kedvéért megrajzolom a fém közlőkerék tervét és legyártatok párat belőle...az majd néhány grammos szorulás után nem engedi majd át a forgató erőt! Már ott tartok, hogy magát a kamerát fixre tenném és előtte egy tükröt mozgatnék! Így nem kellene a vezetékelését figyelni és akár 360 fokban is körbe lehetne forgatni a látószöget!
* * *
Ez a Lib már megvan!
Igen, sejtettem, hogy lesz benne valami "nem kerek" áttételi arány, ezért is írtam korábban, hogy nincs szükség a precíziós elfordulás mérésére és detektálására!
EZ az áramszenzoros megoldás még érdekes lehet...
...egy későbbi projektben még jól jöhet! Még akkor is, ha kendácsolt! Azokból szoktak a remek dolgok kisülni!
* * *
Dißnäëß
Ha esetleg finomabban szeretnéd szűrni a trafóból kijövő egyenirányított és pufferelt feszültséget, akkor a Graetz-híd belső diódáival (mind a néggyel, egyenként) köss párhuzamosan egy legalább 50V-os és max. 100nF-os kerámiakondit! Nagy adag 'zajt' tud leszedni a pufferelt feszültségről! Onnan mehetne a precízen beállított 317 ---> biztosíték ---> a tápfesszel párhuzamosan kötött Zener (Jól méretezd!!! Előbb lője ki az előtte lévő biztosítékot, mielőtt saját maga elpatkol!) -
Undoroid
őstag
válasz
Janos250 #17708 üzenetére
Szia!
Köszönöm a sok keresgélést, de sajnos ezek nem a legjobb kiindulási alapok! Annyit viszont segített, hogy a forrcsúcsok közül a 'belső négy' (szürke körök) megadja / megadják a Joy 'gombájának' a középpontját! Látszik a képen, hogy a négy pont átlójának metszőpontjában ott lehet a 'gomba' közepe! Sajnos ehhez is ki kell forrasztanom az egész elektronikát a hordozóról, de az alapján már össze tudok hozni egy teljes furatképet (sablont) a Joy furatairól!
Vagy lenyomatot veszek egy négyzetrácsos papírral a panel forrcsúcsairól és abból rajzolom vissza a furatképet...
" Aztán persze az is elgondolkodtató, hogy ha VÁM-mal, ÁFA-val, szállítással 500 forintért bejön Kínából, érdemes-e sajátot csinálni. " Úgy tűnik, hogy félreértettél! Nem egy új ilyen szerkezetet akarok építeni, hanem a meglévőt szeretném valami előlapba beleszerelni, ahol szépen tudja majd a dolgát végezni és védve lesz a külső, ártó behatásoktól!
-
Undoroid
őstag
válasz
Janos250 #17688 üzenetére
Szia Janos250!
Csináltam egy próbatákolást a Joy-hoz, de a középső furat (4 szélső a felfogatás és egy maga az irányító) egy kicsit mellé ment. Nem-e lehet valahonnan megszerezni a pontos furattávokat erről a Joy-ról? Sokat keresgéltem a NET-en, de nem találtam. Ezekben a 3D-s nyomtatási tervekben nem találhatóak meg ezek a méretek? Valahogyan nem-e lehet kimenteni ezeket az adatokat?
Ellenkező esetben kénytelen leszek leforrasztani mindent a hordozópanelról és úgy méretet venni... -
Undoroid
őstag
válasz
Janos250 #17673 üzenetére
Köszönöm a válaszokat!
Azt hiszem, hogy a B-változat lesz a befutó! A biztonság kedvéért, hétvégén ki fogom próbálni!
Viszont, ha már itt vagyok, akkor egy újabb kérdést tennék fel: Ennek a joy-nak van valami egyszerű burkolata, amibe bele lehet szerelni? Vagy marad a barkácsolás?
-
fpeter84
senior tag
válasz
Janos250 #17682 üzenetére
Nekem is kellett picit kémkedni SaleaeLogic-al a kw1281 forgalmat, mert bár a motorvezérlő szépen reagált a 0x01 5baud megszólításra, de pl a műszerfal nem reagált a 0x17 címére - aminek elvileg ott kellene lennie a VCDS és minden egyéb fellelhető információ szerint... Aztán átnyálazva a kommunikációt kiderült hogy a motorvezérlő tényleg a 0x01-en reagál, de a műszerfalat valamiért a 0x17+0x80==0x97-en kell megszólítani az 5baud inicializáláskor. Nem értem hogy erről miért nem találok sehol semmit - minden működőnek riportolt példaprogi a 0x17-es címen kommunikál a műszerfallal - de valamiért az A6 C5-ömön így működik 2 különböző cikkszámú VDO és egy Jaeger/Magneti órával is...
De ez a része most működik szuperül stabilan a hw UART-on több órás közlekedés közben sem tapasztaltam egyetlen újracsatlakozást sem, míg softserial-al bajosabb volt, le leszakadt folyton...
-
vegyszer
addikt
válasz
Janos250 #17638 üzenetére
Köszönöm a tippet, de rá kellett jönnöm, hogy technikai okok miatt a kétoldali "sorompó állítás" nem kivitelezhető.
Eredetileg én is (infra)lézeres/peizmás megoldásban gondolkodtam, de rá kellett jönnöm, hogy a szenorhoz képesti ellen oldalon nincs olyan fix pont, amit könnyen rá lehetne bármitis tenni. -
válasz
Janos250 #17621 üzenetére
Annyival kiegészíteném, hogy ha a fórumtárs minimálisat akar hardverezni, akkor inkább menjen a ProMicro irányába.
A legolcsóbb kontrollerek esetében a mikrokontroller FTDI chipen keresztül vannak USB-re kötve (vagy egyáltalán sehogy sem). Ilyenkor kell egy minimális bonyolultságú segédáramkör az USB-re illesztéshez.
A ProMicro ezzel szemben direktben az USB-re van kötve, ráadásul dedikált USB kontroller van benne, míg a Nano-n csak bitbanginggel lehet vUSB-t használni.
-
Tomika86
senior tag
válasz
Janos250 #17604 üzenetére
Ennyire nem akarom már bonyolítani, szerintem marad így egyenlőre.
Majd egyszer belemélyedek jobban, de ehhez a feladathoz felesleges kicsit, majd lesz erős WIFI kód. Terepre való dagonyászós járművekbe lesz, ott meg nincs mindeninél laptop, hogy feltörje
Ez már a 99,99%, még a panelon mókolok, de a program marad:
[link] -
Tomika86
senior tag
válasz
Janos250 #17552 üzenetére
Szia!
Te nagy ESP32 fun vagy, tudsz OTA-ban segíteni?
Létezik olyan, hogy webserveren lehet feltölteni a legenerált bin fájlt és ugyan ez tudja azt is hogy pl VS Code platformio alol a felöltés is wifin megy, de nem kell kiválasztanom fájlt, hanem wifin megy a feltöltés.Köszönöm!
-
polgcsabi
aktív tag
válasz
Janos250 #17544 üzenetére
Konkrétan ezt szeretném:
Van egy 16-os tömb aminek 0-4096 közt szeretnék értéket adni webes felületen.
int lederteke[16];
Hogyan lehet megoldani?
Nekem az is elég lenne, hogy mondjuk, beütöm a böngészőbe:
192.168.1.139/lederteke[16.28.4020,1256, stb.] vagy valami ilyesmi. Leütöm az ENTERT és az arduino kódban a ledértréke tömb felveszi a mind a 16 értéket amit beírtam.
Köszi! -
tonermagus
aktív tag
válasz
Janos250 #17420 üzenetére
STM32-ről ha jól emlékszem azt olvastam hogy nincs Flash memória benne. Legalábbis a Blue Pill-en. Nekem pedig szükségem van memóriára. Nem kell hatalmas nagy tárterület, de azért 15 db Float típusú változó értékét szeretném eltárolni.
Jelenleg a Mega 2560 Pro 7.000 Ft környékén mozog, míg egy ESP32 2.400 Ft körül. Ez már szignifikáns különbség, hiszen így majdnem a felére csökken az eszköz bekerülési költsége.
Új hozzászólás Aktív témák
- AMD Ryzen 9 / 7 / 5 / 3 5***(X) "Zen 3" (AM4)
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Futás, futópályák
- Mobil flották
- AMD Catalyst™ driverek topikja
- TCL LCD és LED TV-k
- Milyen nyomtatót vegyek?
- Otthoni hálózat és internet megosztás
- Milyen autót vegyek?
- Hobby elektronika
- További aktív témák...
- Bomba ár! HP EliteBook 845 G9 - Ryzen 5 6650U I 16GB I 512SSD I 14,1" Touch I Cam I W11 I NBD Gari!
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- LG 38WN95C - 38" Ívelt NANO IPS - 3840x1600 - 144hz 1ms - Nvidia G-Sync - AMD FreeSync - ThunderBolt
- Olcsó Notebook! Dell Latitude E6540! I7 4600U / 8GB DDR3 / 128GB SSD! / HD8790M
- LG 27MR400 - 27" IPS LED - 1920x1080 FHD - 100hz 5ms - AMD FreeSync - Villódzásmentes
Állásajánlatok
Cég: FOTC
Város: Budapest