Stránka 1 z 2

Arduino Rx/Tx komunikácia

Napsal: 30 bře 2020, 11:16
od noro-nr
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.

Re: Arduino Rx/Tx komunikácia

Napsal: 30 bře 2020, 12:36
od noro-nr
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ť.

Re: Arduino Rx/Tx komunikácia

Napsal: 30 bře 2020, 12:47
od martinius96
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 ;)

Re: Arduino Rx/Tx komunikácia

Napsal: 30 bře 2020, 13:12
od noro-nr
pin 16 to nemá
ESP8266-D1-R1-Pinout-2.jpg

Re: Arduino Rx/Tx komunikácia

Napsal: 30 bře 2020, 13:25
od martinius96
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

Re: Arduino Rx/Tx komunikácia

Napsal: 30 bře 2020, 14:58
od noro-nr
#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!".

Re: Arduino Rx/Tx komunikácia

Napsal: 30 bře 2020, 16:36
od noro-nr
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

Re: Arduino Rx/Tx komunikácia

Napsal: 30 bře 2020, 18:06
od ondraN
Nezlob se, ale prostě nedokážu pochopit, když je tam kvalitní HW sériový port, proč se snažíš používat ten software serial :roll:

Re: Arduino Rx/Tx komunikácia

Napsal: 30 bře 2020, 18:32
od noro-nr
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);
}
}

Re: Arduino Rx/Tx komunikácia

Napsal: 30 bře 2020, 19:42
od ArduXPP
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.