Arduino Rx/Tx komunikácia

noro-nr
Příspěvky: 9
Registrován: 18 úno 2020, 19:53
Reputation: 0

Arduino Rx/Tx komunikácia

Příspěvek od noro-nr » 30 bře 2020, 11:16

Dobrý deň, som začiatočník mám Arduino Wemos D1 a chcel vy som prepojiť cez port Rx/Tx s touto doskou

https://www.aliexpress.com/item/3282658 ... 4c4d4OMkLu

aby som vedel sledovať stav batérie z fotovoltaiky alebo zapínať externe zariadenia cez Wifi. Ale neviem presne ako funguje komunikácia. Za odpoveď Vám ďakujem, Norbert.

noro-nr
Příspěvky: 9
Registrován: 18 úno 2020, 19:53
Reputation: 0

Re: Arduino Rx/Tx komunikácia

Příspěvek od noro-nr » 30 bře 2020, 12:36

Skúšal som aj to čo som našiel na stránke Arduino
https://www.arduino.cc/en/tutorial/Soft ... ialExample
prepýsal som aj SoftwareSerial mySerial(2, 3); na SoftwareSerial mySerial(D0, D1);
a mySerial.begin(38400); na mySerial.begin(115200);

Ale žiadna odozva,aby som sa mohol od niečoho odraziť.

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: Arduino Rx/Tx komunikácia

Příspěvek od martinius96 » 30 bře 2020, 12:47

Predpokladám, že to kombinované Arduino má pinout ako štandardné ESP8266 dosky typu Wemos D1 Mini / NodeMCU.
D0 (GPIO 16) môže byť použitý iba ako TX ak ho emuluješ na UART a ty ho používaš ako RX.
Obrázek
Za predpokladu, že máš všetko správne zapojené, správne baud/s rýchlosti a zmeníš tento pin tak ti to bude fungovať podľa
https://www.arduino.cc/en/tutorial/Soft ... ialExample
Nahraj, otvor si UART monitor a napíš tam Get. Mal by si vidieť výstup.
D0 (GPIO 16) sa používa skôr na wake signál pre reset ESP, ak používaš sleep, alebo na ovládanie LED-ky, výstupu.
Nefunguje na ňom ani OneWire zbernica. Do budúcna sa tomuto pinu radšej vyhni ;)

noro-nr
Příspěvky: 9
Registrován: 18 úno 2020, 19:53
Reputation: 0

Re: Arduino Rx/Tx komunikácia

Příspěvek od noro-nr » 30 bře 2020, 13:12

pin 16 to nemá
ESP8266-D1-R1-Pinout-2.jpg

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: Arduino Rx/Tx komunikácia

Příspěvek od martinius96 » 30 bře 2020, 13:25

D0 je označenie na PCB (label). GPIO 16 je označenie pinu.
Je to ten istý pin. Do programu zapisuješ piny buď cez D alebo bez. Teda D0 zapíšeš v programe pre Arduino Ako D0 alebo 16. Je to to isté.
Tu sa zdá, že je na ten pin priamo vyvedený hardvérový RX...
Obrázek
Avšak... neviem prečo si si definoval cez software serial piny na hardvérovej sériovej (UART) zbernici (keďže tam sú hardvérovo)...

Ak by si používal iba Serial print, Serial read a pod, tam obsluhuješ priamo RX TX piny, ktoré sú tam hardvérovo, teda v tomto prípade D0 a D1.
Software Serial používaš vtedy, ak si chceš tú zbernicu na ľubovoľných pinoch definovať sám. Ak si tú dosku, ktorú tam chceš využiť napojíš priamo na RX TX tak nebudeš schopný nahrať do toho ESP-čka program. Budeš musieť odpojiť to zariadenie z tejto zbernice, lebo bude tým zariadením "blokovaná". Teda software serial využiješ, ak si budeš chcieť RX a TX emulovať napríklad na pinoch D3 (GPIO 0) a D4 (GPIO 2). Aby si nemusel furt odpájať to zariadenie, keď budeš chcieť do ESP nahrať nový program. Takže ak chceš využiť hardvérovú UART zbernicu, použi: https://www.arduino.cc/reference/en/lan ... rial/read/
Ak si ju chceš emulovať na iných pinoch, použi: https://www.arduino.cc/en/tutorial/Soft ... ialExample

noro-nr
Příspěvky: 9
Registrován: 18 úno 2020, 19:53
Reputation: 0

Re: Arduino Rx/Tx komunikácia

Příspěvek od noro-nr » 30 bře 2020, 14:58

#include <SoftwareSerial.h>

SoftwareSerial mySerial(D2, D3); // RX, TX
int incomingByte = 0; // for incoming serial data

void setup() {
Serial.begin(115200); // opens serial port, sets data rate to 9600 bps
Serial.println("Goodnight moon!");

// set the data rate for the SoftwareSerial port
mySerial.begin(115200);
mySerial.println("Get");
}
void loop() {
// send data only when you receive data:

if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();

// say what you got:
Serial.print("I received: ");
Serial.println(incomingByte, DEC);
}
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());

}

Keď som to spustil nič nevypísalo. a po reštartnutý mi vypísalo reťazec znakou a na konci "Goodnight moon!".

noro-nr
Příspěvky: 9
Registrován: 18 úno 2020, 19:53
Reputation: 0

Re: Arduino Rx/Tx komunikácia

Příspěvek od noro-nr » 30 bře 2020, 16:36

Keď som ich skombinoval tak som dostal výsledok:
I received: 101
I received: 10

vyzerá to tak že mySerial nekomunikuje.


#include <SoftwareSerial.h>

SoftwareSerial mySerial(D0, D1); // RX, TX
int incomingByte = 0;
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for Native USB only
}


Serial.println("Goodnight moon!");

// set the data rate for the SoftwareSerial port
mySerial.begin(115200);
mySerial.println("Hello, world?");
}

void loop() // run over and over
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();

// say what you got:
Serial.print("I received: ");
Serial.println(incomingByte, DEC);
}
}

I received: 101
I received: 10

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Arduino Rx/Tx komunikácia

Příspěvek od ondraN » 30 bře 2020, 18:06

Nezlob se, ale prostě nedokážu pochopit, když je tam kvalitní HW sériový port, proč se snažíš používat ten software serial :roll:

noro-nr
Příspěvky: 9
Registrován: 18 úno 2020, 19:53
Reputation: 0

Re: Arduino Rx/Tx komunikácia

Příspěvek od noro-nr » 30 bře 2020, 18:32

Skúšal som to aj bez toho. Výsledok bolo toto
I received: 71
I received: 101
I received: 116
I received: 10

a keď som tam nenapísal nič tak:
I received: 10

a keď som odpojil drôty od D0 a D1 a napísal som tam Get dostal so výsledok ako keď boli zapojené

takto
int incomingByte = 0; // for incoming serial data

void setup() {
Serial.begin(115200); // opens serial port, sets data rate to 9600 bps
}

void loop() {
// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();

// say what you got:
Serial.print("I received: ");
Serial.println(incomingByte, DEC);
}
}

ArduXPP
Příspěvky: 361
Registrován: 14 pro 2017, 19:31
Reputation: 0
Kontaktovat uživatele:

Re: Arduino Rx/Tx komunikácia

Příspěvek od ArduXPP » 30 bře 2020, 19:42

Ten HW port je pro komunikaci přes převodník, jedině, že by ten převodník nepoužil. Ale on ho používá pro komunikaci s PC. Pak je potřeba SW komunikace. K logice, je možné, že modul využívá 5V logiku, není to tam napsané. Ale ESP8266 má max. 3.6V.
Je taky možný, že Arduino Ide nepodporuje možnost příkazy přes konzoly.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 7 hostů