- Samsung Galaxy S23 Ultra - non plus ultra
- Motorola Edge 50 Ultra - szépen kifaragták
- Apple Watch Sport - ez is csak egy okosóra
- Redmi Note 12 4G - valaki fizetni fog
- iPhone topik
- Samsung Galaxy A56 - megbízható középszerűség
- Azonnali mobilos kérdések órája
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Google Pixel topik
- Megvan, milyen chipet használ a Pura 80 Ultra
-
Mobilarena
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
válasz
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.
-
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. -
vegyszer
addikt
válasz
Janos250 #17391 üzenetére
Nekem 2020 azzal indult, hogy a PayPal a hitelesítő SMS-eit a néhai Yodafone-nál beregisztrált számomra hiába küldte el, nem jöttek meg (mert valójában már telenyomoros voltam azon a számon). Vagy három hónapig nem tudtam belépni.
Csináltam egy másik accot, a Revolut virtuális kártyát hozzá kötve, de valami miatt mégis kellett az eredeti fiók. Asszem egy refund összege oda futott be valamiért, el kellett költeni.
Egy (látszólag) magyar számot hívva egy talán ír hölggyel beszéltem. Gyenge negyed óra alatt sikerült megértetni magam, hogy mi a hasfájásom. Megoldotta, hogy az SMS az előzetesen már regisztrált másodlagos számomra jöjjön.
A hétvégén meg a Revolut kezdett azzal zaklatni, hogy lejárt (az ősszel) az az okmányom, amivel anno oda mentem. Persze most vagy a szelfi nem jó neki, vagy az okmány képe. Folyton visszadob.Jó dolog ez az informatika, míg a Skynet az öntudatára nem ébred...
Új hozzászólás Aktív témák
Hirdetés
- Nitro ANV15-41 15.6" FHD IPS Ryzen 7 7735HS RTX 4060 32GB 1TB NVMe gar
- ASRock RX 5700 XT 8GB GDDR6 Phantom Gaming D OC Eladó!
- SilentiumPC Signum SG1 TG
- ThinkPad T490 27% 14" FHD IPS i7-8565U 16GB 512GB NVMe ujjlolv IR kam új akku gar
- X1 Tablet Gen3 13" 3K IPS érintő i7-8550U 16GB 512GB NVMe ujjlolv IR kam 4G LTE gar
- ÁRGARANCIA! Épített KomPhone Ryzen 7 5800X 32/64GB RAM RX 7800 XT 16GB GAMER PC termékbeszámítással
- Bomba ár! Dell Inspiron 15 3511 - i5-11GEN I 8GB I 256SSD I HDMI I 15,6" FHD I Cam I W11 I Gari
- Telefon felvásárlás!! iPhone 11/iPhone 11 Pro/iPhone 11 Pro Max
- Kaspersky, McAfee, Norton, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- Telefon felvásárlás!! Samsung Galaxy A22/Samsung Galaxy A23/Samsung Galaxy A25/Samsung Galaxy A05s
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged