Skocz do zawartości

Skrypt w Pythonie, komunikacja szeregowa UART


Pomocna odpowiedź

Napisano (edytowany)

Czesc,

Mam skrypt, ktory ma za zadanie odczytac pojedynczego char'a przeslanego przez UART z ATMEGI:

BOSS_SITE = "https://forbot.pl/forum/"

SERIAL_PORT = "/dev/ttyACM0"
BAUD_RATE = 9600

import serial
import webbrowser

sp = serial.Serial(SERIAL_PORT, BAUD_RATE, timeout = 5)
sp.flush()
print ("Boss Button")

while(1):                       # Sit and wait forever
    response = sp.read(1)       # get one byte
    if response == "O":
        print ("Got OK Byte.  Waiting for button press.")
    elif response == "X":
        print ("Got Boss Byte!  Alarm!")
        webbrowser.open(BOSS_SITE)
    else:
        print ("Got nothing.  Still waiting.")

 

Skrypt jest z ksiazki, problem jest taki, ze nic nie dostaje, tzn. po odpaleniu skryptu mam tylko Got nothing. Still waiting. Odpalajac kontrolnie gtkterm i ustawiajac takie same parametry widze ze na uC wszystko dziala tak jak trzeba. Gdzie moze lezec problem? Dostepy, zajety port? Dodam ze uzywam python3 oraz ubuntu.

EDIT: Dorzucilem print(response) i sprawdzilem co dostaje wedlug skryptu. Jest to: b' '. Jesli wcisne przycisk na uC to dostaje b'X'. Z czego wynika taki typ otrzymanych danych?

EDIT 2: Ok. Rozwiazalem uzywajac funkcji response.decode('utf-8').

Troche wyskoczylem z tym pytaniem, bo nie zman pythona, ale sobie poradzilem 🙂Temat do zamkniecia/usuniecia

 

Edytowano przez steeams
  • Lubię! 2
  • 2 lat(a) później...

Dzień dobry!
Mam podobny problem z wykrywaniem odebranych znaków w micropythonie. Fragment kodu:

uart0 = machine.UART(0, 9600, parity=None, stop=1, bits=8, rx=rxPin, tx=txPin)
rec_buffer = []
global cmd_received
cmd_received = false

while True:
    if uart0.any() >0:
        rec_buffer = uart0.read(9)
       print(rec_buffer)
       if rec_buffer[0] == b'@':
           cmd_received = True
            print ("@ received")

Problem w tym, że  instrukcja 
      if rec_buffer[0] == b'@':
wydaje się nie działać, bo flaga cmd_received nie jest ustawiana, chociaż print(rec_buffer)  wyświetla dokładnie b'@'.   Kolega steeams sugerował użycie funkcji response.decode('utf-8')  - jak to zastosować w moim konkretnym przypadku? I jak rozpoznać więcej charakterystycznych znaków w odebranej ramce (chodzi o zaadresowanie konkretnego odbiorcy wiadomości)? BTW. czytanie 9 znaków jest trochę "na wyrost", ale nie ma tu większego znaczenia.  Uczę się "używać" Micropythona na RPi Pico i korzystam ze środowiska Thonny.
Pozdrawiam,
Zbig

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...