Skocz do zawartości

Skrypt w Pythonie, komunikacja szeregowa UART


steeams

Pomocna odpowiedź

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
Link do komentarza
Share on other sites

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

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.