Skocz do zawartości

RS485 - UART odczyt danych z urządzenia za pomocą esp32.


Pomocna odpowiedź

Napisano

Cześć 

Nie mam jeszcze fizycznie urządzenia. Chciałbym z niego odczytać dane za pomocą esp32.

Urządzenie korzysta z protokołu RS485- UART. Nie jest to Modus.

Rozumiem, że na początek muszę podłączyć konwerter. Czy tak to powinno wyglądać?

Z urządzenia wychodzą 4 przewody D+,D-,gnd, VCC(4,5-6V)

Dokumentacja 

https://docs.google.com/spreadsheets/d/1LGTdl4474DxEXoYOsrr-g2m9RTHT4h1s/edit?usp=sharing&ouid=109465326608173892426&rtpof=true&sd=true

 

Odczyt 25 bajtów.

Czy przykładowy program powinien tak wyglądać? Czy mógłby ktoś pomóc przy kodzie?

 


#define RXD2 16   
#define TXD2 17

  
const int BYTE_COUNT = 25;
byte buffer[BYTE_COUNT];
int received = 0;

void setup() {
  Serial.begin(115200);
  Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);
  Serial.println("Czekam na 25 bajtów...");
}

void loop() {
  // Jeśli są dostępne dane w buforze
  while (Serial2.available() > 0 && received < BYTE_COUNT) {
    buffer[received] = Serial2.read();  // odczyt jednego bajtu
    received++;
  }

  // Gdy odebrano pełne 25 bajtów
  if (received == BYTE_COUNT) {
    Serial.println("Odebrano 25 bajtów:");

    for (int i = 0; i < BYTE_COUNT; i++) {
      Serial.print(buffer[i], HEX);
      Serial.print(" ");
    }
    Serial.println();

    // Reset licznika odbioru
    received = 0;
  }
}

 

 

 

 

 

Screenshot_20251116-155202.Chrome~3.png

(edytowany)

Musisz sterować sygnałem DE/RE esp potrafi zrobić to sprzętowo ustawia się to podczas konfiguracji uasrt w trybie rs485, nie wiem jak w arduino... Ale jeśli chcesz tylko nasłuchiwać tych linii to wystarczy de/re ściągnąć do masy na stałe. Aha nawet jeśli nie jest to modbus dobrze by było wiedzieć ile bajtów ma zostać odebrane 

Edytowano przez _LM_
(edytowany)
1 godzinę temu, _LM_ napisał:

Musisz sterować sygnałem DE/RE esp potrafi zrobić to sprzętowo ustawia się to podczas konfiguracji uasrt w trybie rs485, nie wiem jak w arduino... Ale jeśli chcesz tylko nasłuchiwać tych linii to wystarczy de/re ściągnąć do masy na stałe. Aha nawet jeśli nie jest to modbus dobrze by było wiedzieć ile bajtów ma zostać odebrane 

Jeśli chodzi o DE/RE to tych pinów nie muszę używać, ponieważ używam konwertera z automatyczną kontrola przepływu. Stosowałem go już z czujnikiem, który pracuje z modbus i działa ok.

Jeśli chodzi o odbiór bajtów to 25 musi być odebrane.

 Dane są wysyłane co 16s z urządzenia po RS485

Zapomniałem o użyciu w Arduino readBytes narazie kod wrzuciłem na surowo, ale muszę poskładać wszystko w jedną całość.

Serial.readBytes(buffer, length

 

Edytowano przez nebraska

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...