Python - biblioteka pyserial i komunikacja z portem COM

Stronę tą wyświetlono już: 330 razy

W starszych komputerach istnieją porty szeregowe RS-232 w nowszych komputerach portu tego raczej się nie uraczy. Jest jednakże światełko w tym ciemnym tunelu, gdyż sterowniki niektórych urządzeń USB emulują port szeregowy COM umożliwiając tym samym proste komunikowanie się z takim urządzeniem na nowszych maszynach. Do takich urządzeń należą płytki rozwojowe Arduino, ja (tak szczęśliwie się składa) jestem szczęśliwym posiadaczem klona Arduino MEGA 2560, który działa tak samo i jest o niebo tańszy.

Instalacja pakietu pyserial

Domyślnie pakiet pyserial nie jest zainstalowany, ale spokojna twoja rozczochrana głowa albowiem tak się składa, że z łatwością można doinstalować tenże pakiet za pomocą instalatora pakietów PIP wpisując w konsoli polecenie:

> pip install pyserial

co spowoduje zainstalowanie tegoż pakietu.

Collecting pyserial
  Downloading https://files.pythonhosted.org/packages/0d/e4/2a744dd9e3be04a0c090
7414e2a01a7c88bb3915cbe3c8cc06e209f59c30/pyserial-3.4-py2.py3-none-any.whl (193k
B)
    100% |################################| 194kB 890kB/s
Installing collected packages: pyserial
Successfully installed pyserial-3.4

Konfiguracja połączenia z portem COM

Zanim zacznie się przygodę z komunikacją za pośrednictwem portu COM konieczne jest zapoznanie się z podstawami jego działania. Port ten przesyła dane dwukierunkowo za pomocą jednego pinu przesyłającego i jednego odczytującego dane. Dane przesyłane są zawsze z określoną prędkością mierzoną w bitach na sekundę. Standardowe ustawienie częstotliwości komunikacji z urządzeniem wynosi 9600 bitów na sekundę. Ważne aby wysyłać i odbierać dane z taką samą częstotliwością w przeciwnym przypadku dane nie będą odbierane przez urządzenie w sposób poprawny jak również komputer program nie będzie w stanie poprawnie odbierać danych.

Przy podstawowej konfiguracji konieczne jest również posiadanie wiedzy o nazwie portu. Pod Windowsem nazwy portów zaczynają się od COM i kończą liczbą określającą numer portu. Można sprawdzić w systemie, jakie porty COM są dostępne w Menadżerze urządzeń co też i widać na poniższym rysunku.

Windows - Menadżer urządzeń - wykryte porty COM
Rys. 1
Windows - Menadżer urządzeń - wykryte porty COM

Pod Linuksem sprawa jest nieco inna, albowiem każdy port w tym systemie jest plikiem i jako nazwę portu należy tutaj podać ścieżkę do tegoż pliku. Najłatwiej będzie uruchomić Arduino IDE z uprawnieniami administratora i w menu Narzędzia → Port powinna być dostępna lista portów związanych z Arduino, które są ścieżkami do plików je reprezentujących.

Na Ubuntu płytka Arduino powinna być wykryta jako plik /dev/ttyACM0.

Kolejna sprawa to określenie długości wysyłanych pakietów, transmisja danych wymaga aby pierwszy bit był zarezerwowany jako bit startu a następnie w zależności od ustawień może być przesłany ciąg bitów zazwyczaj od 7-miu do 9-ciu bitów. Następnie jest jeszcze bit zakończenia transmisji danych. Koniec końców pod Windowsem konfiguracja komunikacji z Arduino może wyglądać następująco:

Listing 1
  1. ser=serial.Serial(
  2. port='COM3',
  3. baudrate=9600,
  4. parity=serial.PARITY_NONE,
  5. stopbits=serial.STOPBITS_ONE,
  6. bytesize=serial.EIGHTBITS,
  7. timeout=1
  8. )

Wysyłanie danych portem COM

Wysyłanie danych za pomocą portu COM jest bardzo proste i wygląda następująco:

Listing 2
  1. import serial
  2. ser=serial.Serial(
  3. port='COM3',
  4. baudrate=9600,
  5. parity=serial.PARITY_NONE,
  6. stopbits=serial.STOPBITS_ONE,
  7. bytesize=serial.EIGHTBITS,
  8. timeout=1
  9. )
  10. #time.sleep(1);
  11. if ser.isOpen():
  12. print(ser.name + ' is open...')
  13. value = 1
  14. while True:#value > -1 and value < 10:
  15. ser.write(str.encode(str(value)))
  16. value = int(input("Give me a number from 0 to 9: "))

Przykład zastosowania komunikacji z Arduino MEGA 2560

Komunikację za pomocą portu szeregowego można wykorzystać np. do stworzenia wyświetlacza poziomu głośności muzyki z wykorzystaniem płytki adresowalnych diod WS2812 LED 5050 RGB 8x8 64.

Strony powiązane
strony powiązane
  1. pyserial.readthedocs.io/en/latest/pyserial_api.html - dokumentacja omawianej biblioteki

Komentarze