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

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

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.