Fórum témák

» Több friss téma
Lapozás: OK   126 / 138
(#) neogeo2 válasza szitko hozzászólására (») Feb 23, 2023 /
 
Szia, éppen az openai-val szórakozok. Gondoltam beírom a kérdésed oda... A válasza a következő:

Az ESP8266 mikrovezérlő soros porton keresztül történő kommunikációja alapvetően csak a 7-bites ASCII kódot használja. Azonban, ha kiterjesztett ASCII karaktereket, ékezetes betűket, vagy más speciális karaktereket szeretne küldeni, akkor az ESP8266-nak meg kell adni, hogy mely karakterkódolást használjon a kommunikáció során.

Ehhez először be kell állítani az Arduino IDE soros portját azon a karakterkódoláson, amelyet használni szeretne. Ehhez nyissa meg az Arduino IDE soros portjának ablakát, majd kattintson a bal alsó sarokban található fogaskerék ikonra. Ezután válassza ki a kívánt karakterkódolást az "Encoding" menüpontból.

Ha a kívánt karakterkódolást beállította, akkor az ESP8266-nak meg kell adnia, hogy milyen karakterkódolást használjon a kommunikáció során. Ehhez az ESP8266-nak küldenie kell egy speciális karaktert a soros porton keresztül, amely jelzi a fogadó oldalnak, hogy melyik karakterkódolást használja.

Az UTF-8 karakterkódolást általában használják a kiterjesztett ASCII karakterek, ékezetes betűk és más speciális karakterek küldésére. Az UTF-8 karakterkódolást használó speciális karakter az ASCII kódolásban a hexa-decimális értékű 0xC2, majd utána a speciális karakter hexa-decimális kódja következik.

Például, ha küldeni szeretne egy ékezetes "á" karaktert, akkor az ESP8266-nak küldenie kell az ASCII kódolásban a hexa-decimális értékű 0xC3, majd utána a "á" karakter hexa-decimális kódját (0xA1).

Íme egy példa kód arra, hogy hogyan küldjön ékezetes betűket az ESP8266-n keresztül a soros porton:

c++

#include <ESP8266WiFi.h>

void setup() {
Serial.begin(115200);
Serial.print("\xC3\xA1"); // küldés "á" karakter
}

void loop() {
// kód
}

Fontos megjegyezni, hogy a fogadó oldalnak is meg kell adnia a karakterkódolást, hogy helyesen értelmezhesse a küldött karaktereket.
(#) szitko válasza neogeo2 hozzászólására (») Feb 23, 2023 /
 
Köszi. Ügyes az AI.
A gondom csak annyi, hogy nem a soros monitoron szeretném megjeleníteni a karaktereket.
A progi rövid leírása: HTML oldalról fogad X hosszúságú karaktert (betű, szám, stb) az ESP, és ezeket a karaktereket némi feldolgozás után továbbküldi soros porton egy másik MCU-nak.
A fogadó MCU tudja értelmezni a pl. ékezetes karaktereket.
(#) pipi válasza szitko hozzászólására (») Feb 23, 2023 /
 
Html-el vigyázni kell, ott mindenféle spec "kicserélt" karaktert is kaphatsz, pl https://www.html.am/reference/html-special-characters.cfm
Előbb ezt kell tisztázni mit kapsz a html-ből, ha ezt tovább kell küldened, akkor a fenti ákombákomot át kell konvertálnod, pl utf8-ra, VT100-ra, akármire, amit a vevő oldal meg tud jeleníteni. Az az "X" hosszúság is módosulhat az ákombákom hosszával
(#) szitko válasza pipi hozzászólására (») Feb 23, 2023 /
 
A Html szövegbevitel korlátozódik az ASCII és az ASCII Extended karakterekre. Tehát 32-255.
(#) pipi válasza szitko hozzászólására (») Feb 24, 2023 /
 
Pont ezt linkeltem, benne az ékezetes, meg óhéber abc... Továbbra is azt kell tisztáznod, a vevő oldal milyen karakterkészletet tud megjeleniteni, az esp-el erre kell konvertálnod a html ákombákom-ot
A hozzászólás módosítva: Feb 24, 2023
(#) marcellus96 hozzászólása Márc 4, 2023 /
 
Sziasztok!

ESP32 mikrovezérlő segítségével szeretnék adatokat beolvasni egy külső AD konverterről (MCP33131). Az átvitel a chip select láb lehúzásával kezdődik, majd ennek magas szintre állításával fejeződik be. Az a problémám, hogy a chip select láb lehúzása és az órajel (10MHz) megjelenése között sok idő telik el (3.5us, amely a csatolt szkóp ábrán látszik). Közel azonos időben kellene történnie, hogy folyamatosan tudjam az adatokat olvasni. Találkoztatok már hasonló problémával? Mi lehet a megoldás? A válaszokat előre is köszönöm!

Itt látható a forráskód:
  1. #include <SPI.h>
  2.  
  3. #define _numBits 14
  4.  
  5. uint16_t val;
  6.  
  7. void setup(){
  8.     setCpuFrequencyMhz(240);
  9.    
  10.     SPI.setBitOrder(MSBFIRST);
  11.     SPI.setDataMode(SPI_MODE0);
  12.     SPI.begin();  
  13.     SPI.setFrequency(10000000);
  14.  
  15.     pinMode(SS,OUTPUT);    
  16.     digitalWrite(SS, HIGH);
  17. }
  18.  
  19. void loop(){
  20.     uint16_t values = readADC();
  21. }
  22.  
  23. uint16_t readADC(){
  24.     GPIO.out_w1tc = 0b00100000; //CS láb alacsony
  25.     val = SPI.transfer16(0xFFFF);
  26.     GPIO.out_w1ts = 0b00100000; //CS láb magas
  27.    
  28.     if(_numBits == 14) {val = val >> 2;}
  29.     else if(_numBits == 16) {val = val;}
  30.     else if(_numBits == 12) {val = val>> 4;}
  31.     return val;
  32. }

adc.jpg
    
(#) jefflynn válasza marcellus96 hozzászólására (») Márc 4, 2023 / 1
 
Meg kellene nézni az SPI.transfer16 forrását. Valószínűleg ennyi ideig tart, amíg elindítja az átvitelt, valamit csinál még előtte.
(#) kapu48 válasza marcellus96 hozzászólására (») Márc 4, 2023 /
 
Az SS-nek nem adtál értéket?
  1. pinMode(SS,OUTPUT);  // Ezért ez  nem lesz kimenet!
(#) kapu48 válasza marcellus96 hozzászólására (») Márc 4, 2023 / 1
 
  1. #include <SPI.h>
  2.  
  3. #define _numBits 14
  4. #define SS  15
  5. uint16_t val;
  6.  
  7. void setup(){
  8.     setCpuFrequencyMhz(240);
  9.    
  10.     SPI.setBitOrder(MSBFIRST);
  11.     SPI.setDataMode(SPI_MODE0);
  12.     SPI.begin();  
  13.     SPI.setFrequency(10000000);
  14.  
  15.     pinMode(SS,OUTPUT);    
  16.     digitalWrite(SS, HIGH);
  17. }
  18.  
  19. void loop(){
  20.     uint16_t values = readADC();
  21. }
  22.  
  23. uint16_t readADC(){
  24.     digitalWrite(SS, HIGH);//CS láb alacsony
  25.     val = SPI.transfer16(0xFFFF);
  26.     // esetleg várdmeg amig a SPI végez    
  27.     while(val == 0X00) delayMicroseconds(700);
  28.     digitalWrite(SS, HIGH); //CS láb magas
  29.    
  30.     if(_numBits == 14) {val = val >> 2;}
  31.     else if(_numBits == 16) {val = val;}
  32.     else if(_numBits == 12) {val = val>> 4;}
  33.     return val;
  34. }
(#) marcellus96 válasza jefflynn hozzászólására (») Márc 4, 2023 /
 
Köszönöm!
Átnéztem az SPI könyvtárat és közben találtam egy esp32-hal-spi könyvtárat is, ami hardver közelibb. Ennél már nincs késleltetés (max 100ns) a CS láb lehúzása és az órajel között. A VSPI lábakon max 8MHz-en, a HSPI lábakon pedig 20MHz-en is sikerült adatvesztés nélkül továbbítanom értékeket.
Holnap megpróbálom olvasni az AD konvertert is.
Jelenleg 1 mikroszekundum van az órajel ciklusok között, tehát elméletileg 2 mikroszekundumonként tudok majd mintát venni. Jó lenne lemenni még kevesebb időre a két órajel ciklus között, de arra még sajnos nem jöttem rá, hogyan tudnék.
(#) marcellus96 válasza kapu48 hozzászólására (») Márc 4, 2023 /
 
Elnézést, azt a két sort elfelejtettem kivenni, az előző kódból maradt bent.

Ezt használtam a CS láb vezérlésére, ebben az esetben nem kellett külön beállítanom kimenetnek:
  1. GPIO.out_w1tc = 0b00100000; //CS láb alacsony
  2. GPIO.out_w1ts = 0b00100000; //CS láb magas
(#) jefflynn válasza marcellus96 hozzászólására (») Márc 5, 2023 /
 
Szerintem ezen tovább gyorsítani csak DMA-val lehet. Találtam egy könyvtárat, hátha segít. Bővebben: Link
(#) marcellus96 válasza jefflynn hozzászólására (») Márc 5, 2023 /
 
Köszönöm! Kipróbáltam, de ezzel sajnos nem sikerült lemennem 25us alá, az SPI órajeltől független ez az idő a két adatcsomag között. Sajnos nem találok rá beállítási lehetőséget.
(#) Firefighter1 hozzászólása Márc 30, 2023 /
 
Sziasztok!

Olyan segítséget keresnék, aki penge ESP és ESP GSM modul programozásban!

Köszönöm!
(#) andyka hozzászólása Ápr 12, 2023 /
 
Sziasztok.
Egy ES8266 -ot és egy ESP32 -öt szeretnék I2C buszon összekötni, a 32-es kérdezzen és a 8266-os vállaszoljon, de a nativ könyvtárak nem jönnek be. Ha mindkettö 8266, vagy 32 ugy igen, de nem sikerült a kettőt összehozzam. Esetleg van-e valakinek tapasztalata.
Serial -on is megfelelne, úgy sem sikerült.
A hozzászólás módosítva: Ápr 12, 2023
(#) András123 hozzászólása Ápr 12, 2023 /
 
Üdv Mindenkinek ! Amatőrként egy nagyon kezdő projektbe fogtam bele. Egy ESP NODEMCU 12E modullal, és egy DHT22 hőmérséklet és páratartalom mérő szenzorral játszogatok Web szerveren keresztül akartam elérni az adatokat: Nagyon kezdőkét angol weboldalakról pl Instrucktables vettem a lehetőségeket, és végül sikerült is megoldanom a feladatot. Ráment egy és fél napom, a keresések és a próbálgatások miatt. Az lenne a kérdésem hogy mi lehet annak az oka, ha már valaki veszi a fáradtságot és egy komplett weboldalat szentel ennek az amúgy egyszerű feladatnak, hogy a megadott kódok pontatlanok, és nem a leírásban is szereplő eredményeket kapom, annak ellenére hogy ügyeltem arra , hogy a leírásban szereplő verziójú könyvtárakat telepítettem és mindent pontosan a leírtak alapján végeztem.. PL volt olyan hiba hogy az adatok pl Hőmérséklet Celsius fokban is, és Farenheit fokban is irreális értékeket mutattak pl +23 foknál - 3,5 fokot. Másik hasonló projektban a firmwerben a D5 Pinre kíírt lábkiosztásnál a D1 pinre rakva működött csak helyesen. Néha a hálózatot nem ismerte fel az eszköz. Több verziót is kipróbáltam mire meglett a valóban működő kód. Ha már egy ennyire egyszerű feladatnál ennyi hibalehetőség van mire számítsak egy komolyabb feladat pl időjárás állomás elkészítésénél , ha mások által megírt kódokra kellek hagyatkozni?
(#) Ragathol válasza András123 hozzászólására (») Ápr 13, 2023 /
 
Szia.
Ha nem akarsz kodolni, van alternativa ESPEasy firmware.
(#) Elektro.on válasza András123 hozzászólására (») Ápr 13, 2023 /
 
Szia!
Én úgy érzem, hogy a 23°C foknál mért 3,5%C hiba az nem szoftver hanem mérési probléma.
A DHT22 nem analóg jelet szolgáltat ahol a programod rosszul számol, hanem digitálisan elküldi a mért értéket amit ki kell jelezned.

Itt már tárgyaltunk a szenzorok mérési pontatlanságáról.

Amikor én méregettem negy vagy öt darab pontosnak hitt higanyos mérőhöz viszonyítottam. De a higanyos mérők is egymáshoz képest 4°C szortak.
(#) András123 válasza Elektro.on hozzászólására (») Ápr 13, 2023 /
 
Ugyanazt a szenzort használtam az összes tesztelt projektben. Szerintem a megírt kóddal lehet valami hiba ,mert az adott szenzor két másik hasonló projektben jól működik. De azt végképp nem értem hogyan lehet, hogy az adott kódban a DHT22 data lábat kiossztják a D5 pinre és énnekem pedig csak akkor működik ha a D1-re rakom. Látom egyértelműen a kódban hogy oda programozták.
(#) Lamprologus válasza András123 hozzászólására (») Ápr 14, 2023 / 2
 
Idézet:
„De azt végképp nem értem hogyan lehet, hogy az adott kódban a DHT22 data lábat kiossztják a D5 pinre és énnekem pedig csak akkor működik ha a D1-re rakom.”


Nézd meg a modul lábkiosztását!
D1= GPIO5
(#) Elektro.on válasza András123 hozzászólására (») Ápr 14, 2023 / 1
 
Akkor ha úgy gondolod, hasonlítsd össze ezzel.
(#) András123 válasza Lamprologus hozzászólására (») Ápr 14, 2023 /
 
Igazad van ezt eléggé elnéztem....
(#) András123 válasza Elektro.on hozzászólására (») Ápr 14, 2023 /
 
Igen ez lett a jó megoldás amivel működik.. Viszont a többi hibaforrást továbbra sem értem mi okozza, más hasonló projektekben. Gondolok itt szerver csatlakozási problémákra szenzor pontatlanságokra
(#) András123 hozzászólása Ápr 14, 2023 /
 
További kérdésem az lenne ,hogy tud e valaki hasonló projektet linkelni , ahol szintén web szerveren keresztül láthatom az adatokat, Home Asistant nélkül. Olyan projektre gondolok ahol már kicsit komolyabb időjárás állomásról lenne szó, pl szélsebesség és csapadék mennyiség mérővel kiegészítve? Valós időbeli mérésekre gondolok , Nincs szükségem régebbi statisztikák összehasonlítására.
A hozzászólás módosítva: Ápr 14, 2023
(#) andyka hozzászólása Ápr 16, 2023 /
 
Sziasztok.
Probálok megvalositani egy I2c kapcsolatot egy ESP8266 - szolga és egy ESP32 - mester között.
Segitségre lenne szükség. A minta kod - az 1_3, kifogástalanul müködik, de az 1_4, ahol ott vannak a hőmérők, vagyis amit kellene hogy csináljon igazából, ott már nem müködik, mind össze-vissza adatokat kap a mester ESP.
Az 1_3 -al jeloltek a minta kod, az 1_4 -esek lennének a megvalósitás.
Kösz
(#) jefflynn válasza andyka hozzászólására (») Ápr 16, 2023 /
 
A kuldo_1_4-ből hiányzik a Wire.setClock(25000UL); sor. Ez nem lehet gond?
(#) jefflynn válasza jefflynn hozzászólására (») Ápr 16, 2023 /
 
Bocs, valószínűleg hülyeséget írtam, a órajelet a master oldalon kell csak beállítani. Ezt találtam ami segíthet, a 7-es posztban vannak hasznos információk.
A hozzászólás módosítva: Ápr 16, 2023
(#) andyka válasza jefflynn hozzászólására (») Ápr 16, 2023 /
 
Az _1_4 es perifériásból ki spóróltam egy „boolean”-t, gondoltam hogy az zavar be a küldésbe, de azelőtt sem ment.
Idézet:
„a 7-es poszt”
- 2.0.7 -es verziot használom, mind a két kod lefordul 32-re és 8266-ra is, de a feltöltésnél nem használhatom ugyanazt a lapka beállítást.
A lényeg, az _1_3 -asok rendesen müködnek. Lehetséges hogy az „OneWire” bezavar a „Wire” müködésébe ? Más magyarázatot én nem tudok, de az is hogy lehetséges ? Az már felülmúl engem hogy ezt kideritsem
A hozzászólás módosítva: Ápr 16, 2023
(#) andyka hozzászólása Ápr 16, 2023 /
 
Biztosan észrevehető hogy úgy próbáltam megszerkeszteni hogy az adatok legyenek készen már a továbbításra, ne a kéréskor álljon neki mérni, ami nyilvánvaló hogy nagy késéssel járna
(#) KoblogPerGyok hozzászólása Máj 8, 2023 /
 
Szaisztok!

Az elektronikában kezdőktől jövök ide. ESP32 vásárlása előtt vagyok. PIC-ben igen sok problémát megoldottam már, de annak vannak korlátai, de előnyei is. A dSPIC timer interrup-ot értem. Ott az MPLAB-ban lehet szimulálni a futásidőt. Annak segítségével fel lehet regiszter szinten programozni a timert. No de, ott úgy működik a dolog, hogy mikor meghívódik a timer interrupton lévő függvény a flag-et törölni kell. Majd a timert előre meghatározott értéktől kell indítani a függvény végén. Azaz ki lehet számítani az MPLAB-al, hogy mennyi utasítás ciklusba kerül az interrupt futása. Így a Timert annyival kevesebbről lehet indítani, így halál pontos időzítéseket lehet csinálni.

Akkor a kérdés:
ESP32-t Arduino IDE ben lehet programozni ha jól tudom. Ott nincs ciklus számlálás, nem tudom beállítani rendesen esetleg. De a kérdés legfontosabb része. Semelyik példakódban nem találtam utalást a timer overflow flag kinullázására. Egyszerűen egy függvény és kész. Hogyan működik pontosan? A függvény meghívásakor kinullázza a timert, majd 2-4 utasítás ciklussal eltolja(mert annyiba kerül a nullázás és értékadás) és indítja a függvénytől függetlenül, vagy a függvény visszatérésekor nulláz és indít? Precíz időzítéshez ez kellene nagyon, de nem tudom hogyan oldották ezt meg. Esetleg én is írhatok ilyen függvényeket? Arduino IDE-ben van, vagy más IDE-ben lehet szimulálni az időt, mint az MPLAB--ban?
Következő: »»   126 / 138
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem