Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Konwerter TCP-IP/RS485 ESP8266

dktr 24 Lis 2017 17:42 9345 41
  • Konwerter TCP-IP/RS485 ESP8266

    Prosty konwerter TCPIP/RS485.
    Urządzenie umożliwia utworzenie zdalnego portu rs232/rs485 w systemach linux i windows i pozwala na komunikację z urządzeniami przez lan/internet. Projekt bazuje na kodzie UARTtransparentbridge, ale została mu dodana obsługa układu MAX485. ESP8266 zaprogramowane w ArduinoIDE, w załączniku kod źródłowy i "schemat".
    W systemie linux po uruchomieniu urządzenia wystarczy użyć 'socat':

    Kod: text
    Zaloguj się, aby zobaczyć kod

    Po wydaniu tego polecenia powstanie wirtualny UART w /dev/espS0.

    Testowane na wskaźniku ORNO OR-WE-504.

    Konwerter TCP-IP/RS485 ESP8266


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz pendrive 32GB.
  • #3 25 Lis 2017 11:02
    dktr
    Poziom 18  

    Tak, to będzie to samo co ESPlink, w 1200,2400,9600 działa poprawnie ale wymaga zmian w kodzie - serial.begin() Nie mam nic innego z rs485 poza tym wskaźnikiem orno, odpytywałem licznik całą noc co 1 sek i wszystkie wyniki są poprawne, ani jednego błędu transmisji.

  • #5 26 Lis 2017 22:15
    levy^
    Poziom 16  

    powinno działać ale na dużo mniejszych odległościach

  • #6 26 Lis 2017 23:06
    george2002

    Poziom 19  

    Wystarczy wymiana na MAX3485 i już wszystko zgodnie z sztuką i zasięgami ;)

  • #8 27 Lis 2017 08:57
    byrrt
    Poziom 21  

    Brak obsługi RS485 (sygnału DE) nie stanowi problemu:
    Konwerter TCP-IP/RS485 ESP8266
    Sprawdzone - działa, również w wielu urządzeniach produkcyjnych..

    Dodano po 1 [minuty]:

    ditomek napisał:
    Na jakiej podstawie obliczasz czas potrzebny na sterowanie sygnałem RE/DE?

    Tego się nie oblicza tylko sygnał DE opuszcza się po opuszczeniu ostatniego bajtu z bufora nadawczego.

  • #9 27 Lis 2017 11:21
    ditomek
    Poziom 20  

    na pierwszym poście re_de sterowane jest z pina ESP wiec schemat który wkleiłeś później nie ma sensu. Przy okazji sam z podobnego korzystam w swoich projektach.
    pytam o to bo w arduino czas potrzebny na sterowanie re_de nie jest taki prosty jak się wydaje.
    generalnie Serial.print jest wspomagany przez system przerwań i dla dłuższych stringów obsługa kończy się szybciej niż faktycznie wysyłanie danych.
    To oznacza, że skoro po print masz krótki delay i przełączenie re_de to kierunek transmisji zmieni sie na odbiór szybciej niż zostanie opróżniony bufor nadawczy. Tak jest w Atmegach. Zastanawiam się jak jest w ESP dlatego zapytałem.

  • #10 27 Lis 2017 21:32
    piterek-23
    Poziom 32  

    byrrt napisał:
    Brak obsługi RS485 (sygnału DE) nie stanowi problemu:
    Konwerter TCP-IP/RS485 ESP8266
    Sprawdzone - działa, również w wielu urządzeniach produkcyjnych..

    A jak dobrać elementy gdy UART pracuje na poziomie 3V3?
    MAX485 na MAX3485, a co z resztą?

  • #11 28 Lis 2017 13:06
    byrrt
    Poziom 21  

    piterek-23 napisał:
    MAX485 na MAX3485, a co z resztą?

    a co z resztą? zostaje ta sama..

  • #12 28 Lis 2017 13:24
    piterek-23
    Poziom 32  

    Chodziło mi o tranzystor i rezystory bo całe zasilanie zmieni się z 5V na 3V3. Jezeli nic nie trzeba zmieniać to super, ale wolałem zapytać.
    Dzięki, niedługo będę testował ;)

  • #13 17 Sty 2018 19:14
    uzi18
    Poziom 23  

    george2002 napisał:
    To coś na zasadzie esp-link ? https://hackaday.io/page/1304-virtual-serial-port-tunnel-to-use-with-esp-link bo esp-link ma bardzo dużo opcji tylko właśnie obsługa RS485 chyba nie jest zaimplementowana z tego co na szybko wyczytałem :)
    A jak z stabilnością ? i działa na jakich prędkościach i czy da się je zmieniać łatwo czy kod trzeba wgrywać do esp8266 żeby była inna :) ?


    Jest latka na esp-link z obsluga rs485, trzeba zerknac do repo/issue

  • #14 10 Lut 2018 23:07
    piterek-23
    Poziom 32  

    Panowie, wszystko super działa, ale... ale jest mały problem...
    Jeżeli np. zresetuję router to ESP traci połączenie i już nie potrafi ponownie nawiązać połączenia-wystarczy zrobić reset ESP i znów wszystko jest OK.
    Da się to jakoś poprawić? :)

  • #16 11 Lut 2018 05:10
    piterek-23
    Poziom 32  

    uzi18 napisał:
    Mowisz o sofcie z 1 postu?

    Tak.

  • #19 15 Lut 2018 20:04
    dktr
    Poziom 18  

    Chyba coś popsułem i nie ten plik załączyłem, ale ten z tego załącznika kompiluje się bez błędu.
    Inna sprawa że sam ESP połączy się ponownie do sieci i będzie sobie działał ale socat pewnie zwiśnie i trzeba go odpalić ponownie. Dla pełnej automatyzacji na serwerze można zrobić jakiś plik np cgi czy tam php który odpali socat'a a o ten plik będzie pytał ESP w momencie połączenia do sieci.

  • #21 17 Lut 2018 13:22
    piterek-23
    Poziom 32  

    dktr napisał:
    Chyba coś popsułem i nie ten plik załączyłem, ale ten z tego załącznika kompiluje się bez błędu.

    Wygląda na to, że wszystko działa jak należy. Gdy ESP sobie pracował to zrobiłem kilka razy reset routera i za każdym razem ESP łączył się ponownie.
    dktr napisał:
    Inna sprawa że sam ESP połączy się ponownie do sieci i będzie sobie działał ale socat pewnie zwiśnie i trzeba go odpalić ponownie.

    Dokładnie tak, należy ponownie użyć polecenia socat... :(
    dktr napisał:
    Dla pełnej automatyzacji na serwerze można zrobić jakiś plik np cgi czy tam php który odpali socat'a a o ten plik będzie pytał ESP w momencie połączenia do sieci.

    Miałbyś pomysł na taki skrypt?
    Do pełni szczęścia już tylko brakuje "automatyzacji" socat ;)

    Próbowałem coś takiego:
    Kod: bash
    Zaloguj się, aby zobaczyć kod

    Tworzy się dowiązanie /dev/ttyUSB10, ale licznika już nie czyta.

    Wielkie dzięki za poprawkę z WiFi ;)

  • #22 17 Lut 2018 15:07
    dktr
    Poziom 18  

    W kolejnej wersji softu doszła funkcja pobrania pliku z serwera w momencie połączenia do sieci bezprzewodowej:

    const String url = "http://192.168.2.40/esp_rs485.php?sign=";

    w tej zmiennej należy wskazać adres pliku na serwerze który po odpytaniu go skiluje i uruchomi ponownie socat. Przy okazji można sobie pobrać do zmiennej poziom sygnału z jakim połączył się do sieci esp8266.

    W php:
    <?php

    $sygnał=$_GET['sign'];
    ?>

  • #23 18 Lut 2018 16:53
    piterek-23
    Poziom 32  

    Możesz podpowiedzieć jak to wszystko ma dokładnie wyglądać, jak to zautomatyzować?

    Na ESP mam soft "es-rs485_v2", a w nim zmieniłem na swoje:
    WiFiServer localServer(4321);
    IPAddress staticIP(192, 168, 1, 221);
    IPAddress gateway(192, 168, 1, 1);
    IPAddress subnet(255, 255, 255, 0);
    const String url = "http://192.168.1.2/esp_rs485.php?sign=";
    WiFi.begin("moja_siec", "moje_haslo");

    Na serwerze utworzyłem plik php z zawartością:

    Kod: php
    Zaloguj się, aby zobaczyć kod

    I co teraz dalej, co z socat?
    Jeżeli ręcznie dodam:
    Kod: bash
    Zaloguj się, aby zobaczyć kod

    To wszystko wydaje się być OK

  • #24 19 Lut 2018 09:09
    byrrt
    Poziom 21  

    byrrt napisał:

    Brak obsługi RS485 (sygnału DE) nie stanowi problemu:
    Konwerter TCP-IP/RS485 ESP8266
    Sprawdzone - działa, również w wielu urządzeniach produkcyjnych..


    Ostatnio do tematu wracałem i byłoby niefair gdybym nie napisał że - co prawda takie rozwiązanie działa to nie jest wolne od wad. W tym wypadku nadajnik w RS485 jest włączany tylko gdy USART w procku wysyła zero.. Gdy jedynkę - układ przełącza się w odbiornik. Efekt jest taki:

    Konwerter TCP-IP/RS485 ESP8266

    Po lewej nadawanie - za pomocą układu ze schematu, który zamieściłem, po prawej - z układu w którym DE jest prawidłowo sterowane. Wygląda to tak przy załączeniu terminatorów na końcach linii, bez nich zawsze (nawet z DE sterowanym tylko w nadawaniu zera) wygląda dobrze.
    Tak dla potomnych..

    Jak mamy jedną prędkość dobraną transmisji można DE sterować układem opóźniającym.

    Konwerter TCP-IP/RS485 ESP8266

    Elementy trzeba sobie dobrać do prędkości..

  • #26 19 Lut 2018 20:01
    byrrt
    Poziom 21  

    Działa zawsze, nie ma to wpływu bo tu się robi po prostu dzielnik napięcia (rezystor polaryzujący - terminatory - rezystor polaryzujący). W wersji z tranzystorem bez układu opóźnień nadajnik nadaje tylko 0, na 1 zamiast ją transmitować puszcza linie wolno..

  • #28 24 Maj 2018 19:21
    po_48
    Poziom 6  

    Witam mam problem z wgraniem pliku es-rs485_v2.ino przez Arduino
    co robie nie tak?

  • #30 06 Cze 2018 17:25
    po_48
    Poziom 6  

    Arduino:1.8.1 (Windows XP), Płytka:"Generic ESP8266 Module, 80 MHz, ck, 26 MHz, 40MHz, QIO, 8M (7M SPIFFS), 2, v2 Lower Memory, Disabled, None, All Flash Contents, 115200"

    In file included from c:\documents and settings\admin\ustawienia lokalne\dane aplikacji\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\utility:68:0,

    from c:\documents and settings\admin\ustawienia lokalne\dane aplikacji\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\algorithm:60,

    from C:\Documents and Settings\admin\Ustawienia lokalne\Dane aplikacji\Arduino15\packages\esp8266\hardware\esp8266\2.4.1\cores\esp8266/Arduino.h:254,

    from sketch\es-rs485_v2.ino.cpp:1:

    c:\documents and settings\admin\ustawienia lokalne\dane aplikacji\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\xtensa-lx106-elf\bits\c++config.h:426:29: fatal error: bits/os_defines.h: No such file or directory

    #include <bits/os_defines.h>

    ^

    compilation terminated.

    exit status 1
    Błąd kompilacji dla płytki Generic ESP8266 Module.

    Ten raport powinien zawierać więcej informacji jeśli w
    File -> Preferencje zostanie włączona opcja "Pokaż
    szczegółowe informacje podczas kompilacji"

  Szukaj w 5mln produktów