Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   465 / 840
(#) MsDw válasza TavIR-AVR hozzászólására (») Júl 29, 2018 /
 
Szia!

Hibát kapok, ha pint akarok írni a wire.begin-be.

error: no matching function for call to 'TwoWire::begin(int, int)'

Maradtam a fentebb írt kódnál; beírtam a 4-5 lábat, és hibát kapok....
  1. Wire.begin(5, 4);


Nem lehetséges pin-t definiálni a wire.begin - függvény bemenetén:
hivatalos oldal: arduino.cc

Kérnék segítséget! Köszönöm!

tbarath igen, 7 bites a címzés, de szerintem először fizikailag kellene rábírnom őket a kapcsolódásra. Lásd pl. TavIR-AVR válasza az I2C pinek definiálása...

Külföldi oldalakon azt írják a "GPIO 4 is SDA - GPIO 5 is SCL" a default I2C bus láb.
Írták TavIR-AVR válaszát is a pinek definiálására, de nekem nem sikerül!
(#) tbarath válasza MsDw hozzászólására (») Júl 29, 2018 /
 
Nem kell külföldi oldalakra hivatkozni, ott van a hivatalos oldalon: Bővebben: Link
Uno: A4 (SDA), A5 (SCL)
Mega: 20 (SDA), 21 (SCL)

És a Wire.begin() is elég beszédes:
Idézet:
„Parameters
address: the 7-bit slave address (optional); if not specified, join the bus as a master.”


Szóval ha Wire.begin()-nel kezded, akkor a mega (azt hiszem azt használnál) lesz a master, ha pl. Wire.begin(8), akkor pedig egy slave lesz 8-as címmel.

Tavir egyébként az ESP-re írta amit írt:
Idézet:
„ESP esetén:
wire.begin(SCL,SDA);”


Szóval az ESP az egyik dolog, a mega pedig a másik. (Az uno pedig egy harmadik, amit itt nem használunk.)
(#) MsDw válasza tbarath hozzászólására (») Júl 29, 2018 /
 
Sziasztok!
Arduino Mega 2560 -am van. Egy ESP8266MOD -om. Szeretném összekötni őket.
Ezt a kódot szeretném futtatni az ESP-n (I2C kommunikációhoz):
  1. #include <Wire.h>
  2.  
  3. void setup() {
  4.   Wire.begin();   // join i2c bus (address optional for master)
  5. }
  6.  
  7. byte x = 0;
  8.  
  9. void loop() {
  10.   Wire.beginTransmission(8); // transmit to device #8
  11.   Wire.write("x is ");        // sends five bytes
  12.   Wire.write(x);              // sends one byte
  13.   Wire.endTransmission();    // stop transmitting
  14.  
  15.   x++;
  16.   delay(500);
  17. }

A mega 2560-on pedig ezt a kódot (I2C kommunikációhoz):
  1. #include <Wire.h>
  2.  
  3. void setup() {
  4.   Wire.begin(8);                // join i2c bus with address #8
  5.   Wire.onReceive(receiveEvent); // register event
  6.   Serial.begin(9600);           // start serial for output
  7. }
  8.  
  9. void loop() {
  10.   delay(100);
  11. }
  12.  
  13. // function that executes whenever data is received from master
  14. // this function is registered as an event, see setup()
  15. void receiveEvent(int howMany) {
  16.   while (1 < Wire.available()) { // loop through all but the last
  17.     char c = Wire.read(); // receive byte as a character
  18.     Serial.print(c);         // print the character
  19.   }
  20.   int x = Wire.read();    // receive byte as an integer
  21.   Serial.println(x);         // print the integer
  22. }

Nem működik. Nem tudok az ESP-s kódban a wire.begin függvényhez SDA - SCL pin-t definiálni.
Jelenleg itt tartok/tartunk. Ehhez kértem segítséget, mert azt írta TavIR-AVR, hogy az ESP -ben definiálni kell a bus lábait.
Ezt a hibát kapom, ha így szeretném definiálni a bus pin-t Wire.begin(5, 4); - " error: no matching function for call to 'TwoWire::begin(int, int)' "
Ehhez kérnék útmutatást. Próbálok közben én is utánnanézni, de azt találtam, hogy nem lehet pint definiálni, és ezt osztottam meg, illetve ez alapján/után kértem újabb iránymutatást az ügyben. Azért is linkeltem be, hogy lássák, hogy nem kész kódot várok, hanem csak egy kis szamárvezetést!
Sőt meg is fogadtam az itteni tanácsot, és átállnék I2C bus-ra, a SERIAL -ról.
(#) tbarath válasza MsDw hozzászólására (») Júl 29, 2018 /
 
Én nem i2c-ztem ESP-vel, de a TwoWire::begin(int, int)-re szerintem igenis match lenne a Wire.begin(5, 4). Legalábbis ez lenne a logikus, hacsak nem akar a TwoWire::begin(int, int) paramétert írni, mert az konstanssal nem fog menni.

Viszont amit az ESP kódodnál írtál, az a Wire.begin(), az tényleg no match a TwoWire::begin(int, int)-re.
(#) KoblogPerGyok válasza MsDw hozzászólására (») Júl 30, 2018 /
 
Szia!

Légy szíves csatold a wire.h fájlodat. Ne linket, hanem a valósat ami a hdd-n van.
(#) KoblogPerGyok válasza MsDw hozzászólására (») Júl 30, 2018 /
 
Nézz erre felé:

https://github.com/mahfuz195/BMP280-Arduino-Library/issues/3

Szerintem jobb lesz, ha lecseréled a wire.h-t
(#) MsDw válasza KoblogPerGyok hozzászólására (») Júl 30, 2018 /
 
Sziasztok!

Fetöltöm a Wire h és cpp file -okat, de azokban sincs lehetőség a pinek beírására.

Arduino 1.6.5-r2 -t használok, mert az újabbak valami sz*r win kompatibilitás miatt nem futnak a gépemen. Win7 x64, MSI alaplap, 4GB RAM, I3-7100 processzor.

Lehet, hogy ez a verzió olyan régi lenne, hogy a wire -ben nem lehet pin-t beírni?!
Bármi lehet....
Köszönöm a segítségeket!
(#) MsDw válasza MsDw hozzászólására (») Júl 30, 2018 /
 
Letöltöttem a legújabb arduino -t: Arduino_1.8.5 de ennek a wire h és cpp file-ja ugyan az, mint az előzőé, itt sem lehet SDA - SCL pint definiálni.
(#) KoblogPerGyok válasza MsDw hozzászólására (») Júl 30, 2018 /
 
Ez a gond szerintem. A te wire.h-d nem tudja ezt. A wire.cpp-ben ez van:


  1. void TwoWire::begin(void)
  2. {
  3.   rxBufferIndex = 0;
  4.   rxBufferLength = 0;
  5.  
  6.   txBufferIndex = 0;
  7.   txBufferLength = 0;
  8.  
  9.   twi_init();
  10. }


Itt semmi nincs a lábak kiosztásával kapcsolatban. Azonban itt hívja meg a twi_init() függvényt ami szintén nem kér semmit, de ebben ez van ha minden igaz (Netről szedtem az infót):

  1. void twi_init(void)
  2.  
  3. {
  4.  
  5.   // initialize state
  6.  
  7.   twi_state = TWI_READY;
  8.  
  9.   twi_sendStop = true;          // default value
  10.  
  11.   twi_inRepStart = false;
  12.  
  13.  
  14.  
  15.   // activate internal pullups for twi.
  16.  
  17.   digitalWrite(SDA, 1);
  18.  
  19.   digitalWrite(SCL, 1);
  20.  
  21.  
  22.  
  23.   // initialize twi prescaler and bit rate
  24.  
  25.   cbi(TWSR, TWPS0);
  26.  
  27.   cbi(TWSR, TWPS1);
  28.  
  29.   TWBR = ((F_CPU / TWI_FREQ) - 16) / 2;
  30.  
  31.  
  32.  
  33.   /* twi bit rate formula from atmega128 manual pg 204
  34.  
  35.   SCL Frequency = CPU Clock Frequency / (16 + (2 * TWBR))
  36.  
  37.   note: TWBR should be 10 or higher for master mode
  38.  
  39.   It is 72 for a 16mhz Wiring board with 100kHz TWI */
  40.  
  41.  
  42.  
  43.   // enable twi module, acks, and twi interrupt
  44.  
  45.   TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA);
  46.  
  47. }



Ok, de mi az SDL SCA? Az meg a pins_arduino.h-ban van definiálva, ami 4 és 5. Szerintem neked az ESP-ben 1 és 2. (Mi a pontos számszerinti értéke a gpio akármilyen lábaknak?)

Ha igazam van, akkor két külön Arduino könyvtárat kell csinálnod (lekopizod), de az egyikben (az esp-hez készítettben) át kell írni a pinouts.h-t. Ebből megy fel az esp-re a kód, a másik háborítatlan könyvtárból pedig a megára, vagy melyikre.
(#) KoblogPerGyok válasza MsDw hozzászólására (») Júl 30, 2018 /
 
Ezért kell szerintem az arduino-ide-ben kiválasztani a cél board-ot, de ha nincs benne az esp akkor leszedni és installálni hozzá.

Mikor az esp-re töltöd akkor a helyesen kiválasztott panel miatt szerintem a lábkiosztások helyesek lesznek.

Ha ez megvan akkor a mega/uno-ra feltöltés előtt a cél board változtat.

Megcsináltad ezt?

Bár csak okoskodom, lehet teljesen hibás az elképzelésem.
(#) KoblogPerGyok válasza KoblogPerGyok hozzászólására (») Júl 30, 2018 /
 
Szerintem nem installáltad az IDE-be...

Bővebben: Link

A fenti linkben a libraries almenüben i2C lib-almenüre klikkelve:

Idézet:
„I2C (Wire library)
Wire library currently supports master mode up to approximately 450KHz. Before using I2C, pins for SDA and SCL need to be set by calling Wire.begin(int sda, int scl), i.e. Wire.begin(0, 2) on ESP-01, else they default to pins 4(SDA) and 5(SCL).
SPI”


Ezt szerintem elkummantottad eddig. Külön van hozzá minden. Jól sejtem?
(#) KoblogPerGyok válasza KoblogPerGyok hozzászólására (») Júl 30, 2018 /
 
Mivel az esp teljesen más hardver ezért majdnem mindenből több kell.

A linken eléred ezt:

https://github.com/esp8266/Arduino/tree/master/libraries

onnan pedig a wire könyvtár:


https://github.com/esp8266/Arduino/tree/master/libraries/Wire

abban pedig:

Idézet:
„void TwoWire::begin(int sda, int scl){

default_sda_pin = sda;

default_scl_pin = scl;

twi_init(sda, scl);

flush();

}”



Egy szónak száz a vége, szerintem ezekkel mennie kell. Az első esetekben az Arduino-hoz tartozó libeket töltötted fel. Ehhez másik kell.
(#) MsDw válasza KoblogPerGyok hozzászólására (») Júl 30, 2018 /
 
Sziasztok!

FÉL SIKER!!! I2C bus pin-t már tudok deklarálni az ESP-nek, hála a segítségeknek! Köszönet érte mindenkinek, aki segített! Tényleg más file-ok kellenek az ESP-hez; mint pl.: Wire h és cpp.
A trükk: nyitottam egy mintaprogramot az ESP-hez, majd töröltem minden sort a megnyitott mintaprogramból, beírtam az új kódot, mentés másként.
Már elfogadja a:
  1. Wire.begin(12, 13);  //SDA and SCL

Viszont nem kommunikálnak, holnap letöltöm, és kipróbálom az itt javasolt I2C "port" scanner-t, hátha jutok valamire. Jó éjt!
(#) KoblogPerGyok válasza MsDw hozzászólására (») Júl 30, 2018 /
 
Gratula!

Az i2c scanner valószínűleg nem kell majd. Ezt a korábbi tapasztalataim mondatták velem, de szerintem hibásan gondoltam. Olyan i2c -vel kommunikáló hardvereket gyártanak, amikben be van 'égetve' építve a címe is. Sokszor csak egy forrasztási helyet kell rövidre zárni és máris más a címe. Ez kevert meg. A Mega/Uno/Nano stb. esetében nem kell, ha minden igaz.

Amúgy 'tbarath' már elmondta a megoldást, de figyelmetlen voltam, mentem pár kört én is, de sokat tanultam az biztos!

Én is köszönöm nekik!
(#) berkesandor válasza krauszkrisztian14 hozzászólására (») Júl 30, 2018 /
 
(#) morzsa15 hozzászólása Júl 31, 2018 /
 
Sziasztok!

Olyan kérdésem lenne hogy valaki esetleg csinált már arduinoból olyat hogy ki írja a kapásindex-et esetleg az aktuális vízállást? Vagy tudna adni valaki ötletet hogy hogyan induljak el sajnos nem találtam olyan oldalt amin ez fent van és lenne neki api-ja ami nekem megfelelő lenne.

Minden segítséget szívesen fogadok!

Üdv!
(#) Bakman válasza morzsa15 hozzászólására (») Júl 31, 2018 /
 
Ugyan nem értek az Arduni-hoz, de elmondod mi az a kapásindex? Hátha valaki rá tud mutatni valamire, hogy ez kell neked.
(#) RoliNyh válasza morzsa15 hozzászólására (») Júl 31, 2018 /
 
Ennyi erővel akár az aktuális vízállást is kifejthetnéd,
mert itt általában elektronikások vannak nem horgászok...
A hozzászólás módosítva: Júl 31, 2018
(#) KoblogPerGyok válasza morzsa15 hozzászólására (») Júl 31, 2018 /
 
Szia!

Gondolom komolyabb projektben gondolkodsz. Olyasmit szeretnél, hogy pl jön egy sms az arduino felé, az lekérdezi a netről az infót, majd visszaküldi sms-ben. De lehet teljesen mást szeretnél, de minden esetre egy olyan oldal kell, ahonnan pl egy SQL vagy ahhoz hasonló módon lekérdezhető az adat. Ha ilyen kellene akkor a prog.hu-t ajánlanám, ott is a társalgó rovatba kell feltenni a kérdést.
(#) tbarath válasza morzsa15 hozzászólására (») Júl 31, 2018 / 1
 
Ha jól sejtem, akkor a kapásindex és az aktuális vízállás is valamilyen web-es szolgáltatásból kinyert infó alapján jön, és noha lehet hogy arduino-val is meg lehet csinálni, de...
Ha az uC irányhoz ragaszkodsz, akkor mondjuk ESP32, ami erősebb mint az arduino és van benne wifi, szóval egy helyi hotspot-ra (akár a telefonról megosztott netre is) fel tud kapcsolódni, tud kommunikálni a neten. De lehet hogy egy raspberry pi0w célszerűbb erre, mert sokkal erősebb és ott van a kezed alatt a teljes linux userland (ez nem uC hanem SBC). Leszeded az adott weboldalt (curl), aztán kitúrod belőle a számodra szükséges infókat sed/awk segítségével, de lehet egy megfelelő regexp-pel a grep is elég erre. Persze használhatsz perl/python/php/js/stb. script- vahy programnyelveket is ehhez, ha azokban otthonosabban mozogsz. A pi-ra is tudsz tenni pl. i2c kijelzőt, bár arra akár hdmi TV-t is
A hozzászólás módosítva: Júl 31, 2018
(#) MsDw válasza KoblogPerGyok hozzászólására (») Aug 1, 2018 /
 
Sziasztok!
Sajnos nem sikerült...nem látják egymást. Lefuttattam az I2C port scanner-t, de nem talál semmit. Próbáltam az ESP "gyári default" I2C portját, aztán másik üres gpio portokat, de semmi, süket mint az ágyú. Szintillesztő be van kötve. Próbáltam 10k, 6,8k és 4,7k felhúzóellenállásokkal is, persze mindkét oldalon azonos ellenállások. A mega biztos, hogy jó. Az ESP-t nemrég vettem, nem valószínű, hogy hibás lenne, hiszen semmelyik porton nem kommunikál. Tudnátok adni valami tippet?
Továbbra is a fenti pofon egyszerű kóddal próbálkozom, hogy legalább ott ne legyen hiba, amíg nem sikerül rendesen összehozni a komunikálást.
(#) KoblogPerGyok válasza MsDw hozzászólására (») Aug 1, 2018 /
 
Megnézem, lehet van itthon ilyenem, de nem 100%
(#) proba válasza MsDw hozzászólására (») Aug 1, 2018 /
 
Lehet mindkét eszköz master akar lenni, és ezért nem beszélgetnek egymással ? A kódodat nem néztem végig de sehol nem látom említve egyik eszköz címét sem. Így a másik keresheti bármeddig. Keress egy rendes hardveres eszközt, először próbáld azt elérni, utána jöhet a szoftveres kommunikáció.( legalább csak egy ismeretlenes lesz az egyenlet.)
(#) kobold99 válasza proba hozzászólására (») Aug 1, 2018 /
 
(#) MsDw válasza proba hozzászólására (») Aug 1, 2018 /
 
Sziasztok!

Írtam fentebb, hogy lefuttattam az I2C port scanner-t, az arduino.cc oldalról töltöttem le, amit kobold99 is belinkelt, de sajnos semmi.
Elvileg itt a slave címzés:
  1. void setup() {
  2.   Wire.begin(8);

Ez pedig a master címzés:
  1. Wire.beginTransmission(8);

A "bbs.espressif.com" fórumot most nézegetem.

Köszönöm a segítségeket!
(#) proba válasza MsDw hozzászólására (») Aug 1, 2018 /
 
Szerintem ez is segíthet:Bővebben: Link. ESP-re a wire könyvtár alapban nem tud SLAWE módot szerintem. Így csak masternak használható. Bár alaposabban nem kerestem rá.
(#) MsDw válasza proba hozzászólására (») Aug 1, 2018 /
 
Sziasztok!

Proba, ezzel a kóddal próbálkozom már egy ideje, amit belinkeltél de hálás vagyok, hogy próbálsz segíteni! Az ESP-t használom master-nak.
Talán holnap lesz időm, kipróbálom SPI-vel is a kommunikációt, mert találtam egy jónak ígérkezőt azon a fórumon, amit kobold99 linkelt be (bbs.espressif.com).
Jó éjt!
(#) tbarath válasza MsDw hozzászólására (») Aug 2, 2018 /
 
Nem ez nem a master címzés.
Olvasd már el a dokumentációt, nem olyan nehéz. Be kell írni a fv nevét a gugliba és jellemzően első helyen hozza.
(#) MsDw válasza tbarath hozzászólására (») Aug 2, 2018 /
 
Sziasztok!

Idézet:
„Olvasd már el a dokumentációt, nem olyan nehéz.”

Bocsánat, lehet én nem tudok olvasni, vagy még túl kezdő vagyok:
www.arduino.cc/en/Reference/WireBegin:
Wire.begin(address)
Parameters
address: the 7-bit slave address (optional); if not specified, join the bus as a master.
Címzés: 7 bites SLAVE cím (opionális); ha nem használod(nincs meghatározva), akkor kapcsolódjon a buszhoz MASTER -ként. Jól fordítok?

Ha csak 2db eszköz van a buszon, és csak az egyik van megcímezve Slave-nek, akkor szerintem a másik nem nagyon lehet más, mint Master, tekintettel a Wire.begin paraméterére.

A másik címzés:
www.arduino.cc/en/Reference/WireBeginTransmission
Wire.beginTransmission(address)
Parameters
address: the 7-bit address of the device to transmit to
Címzés: 7 bites eszköz cím, ahová küldeni akarok (adatokat) Jól fordítok?

Sajnos nem vagyok túl jó angolból!

Vagyis ezen dokumentumok alapján az én olvasatomban így fest a kód:
  1. // MASTER KÓD
  2. int SLAVE_ADDRESS = 8;
  3. Wire.begin(); // ha nem írok be semmit MASTER
  4. Wire.beginTransmission(SLAVE_ADDRESS); // kinek küldöm az adatokat (SLAVE cím)
  5.  
  6. // SLAVE KÓD
  7. int SLAVE_ADDRESS = 8;
  8. Wire.begin(SLAVE_ADDRESS); // Ki vagyok és mi a címem a buszon


Ja igen, a google keresés a "master address arduino i2c"
master address arduino i2c
És igen, a második helyen hozza azt a kódot, amivel próbálkozom, és már be is írtam ide a fórumba, hátha valami turpisság van a kódban, de eddig ilyet nem jelztek. Nem értem, milyen más dokumentumot kellene még elolvasnom tbarath? Kérlek linkeld be! Köszönöm!
Sanyi
(#) KoblogPerGyok hozzászólása Aug 2, 2018 /
 
Sziasztok!

Megjött a kedvem nekem is az esp8266 programozásához, azonban ehhez kellene egy USB TTL átalakító.


Kérdés, hogy a sok közül hogyan tudom kiválasztani azt, ami ugyan USB-ről megy (PC), de 3.3V-on kommunikál az ESP-vel. Mindenhol csak azt láttam, hogy rákötik, de az ESP RX/TX lába nem viseli ezt el. Jól gondolom? Vagy az USB->TTL közé kell egy szintillesztő?


Nem lehet Alin olyat kapni ami mindezt egyszerre tudja? Azaz integrálva van a szintillesztő?


Másik: Ami nekem van ESP az on csak soros kommunikáció van. Szerintem MsDw -nek is ilyen van.
Következő: »»   465 / 840
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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