UART не отправляет байтов - PullRequest
1 голос
/ 17 июня 2019

Я пытаюсь написать тестовый код для отправки данных через UART на моем Raspberry PI 3 b +, но не могу вернуть отправленные данные.Raspberry подключен через модуль UART к моему ноутбуку, поэтому я могу видеть результаты Putty.Кто-нибудь может сказать мне, что я делаю неправильно?

Я проверил, является ли порт isOpen и вернул ли он True, msg = b'Hello 'вернул Hello, показал привет, но байтов не получено.Отправка отдельных байтов также не обнаруживает байтов.Стирание тайм-аута показало, что оно достигнуто.

Редактировать: мало тестировало, работают ли порты должным образом

from __future__ import print_function
import serial

test_string = "Testing 1 2 3 4".encode('utf-8')
#test_string = b"Testing 1 2 3 4" ### Will also work

port_list = ["/dev/serial0", "/dev/ttyS0"]

for port in port_list:

    try:
        serialPort = serial.Serial(port, 9600, timeout = 2)
        serialPort.flushInput()
        serialPort.flushOutput()
        print("Opened port", port, "for testing:")
        bytes_sent = serialPort.write(test_string)
        print ("Sent", bytes_sent, "bytes")
        loopback = serialPort.read(bytes_sent)
        if loopback == test_string:
            print ("Received", len(loopback), "valid bytes, Serial port", port, "working \n")
        else:
            print ("Received incorrect data", loopback, "over Serial port", port, "loopback\n")
        serialPort.close()
    except IOError:
        print ("Failed at", port, "\n")

Это дает мне информацию о том, что tty0 не работает должным образом, но также получило абсолютное отсутствиеответ о корректности порта serial0

import serial
import struct
import time

port = serial.Serial("/dev/ttyS0", baudrate=115200, timeout=2.0)

i = 0
while True:
    msg = struct.pack('>HBBB', 3000, 243, 234, 254)
    port.write(msg)
    time.sleep(0.3)

    bytesToRead = port.inWaiting()
    print("Found {} bytes in serial".format(bytesToRead))
    if bytesToRead == 5:
        rcv = port.read(5)
        # port.write('\r\nYou sent:' + repr(rcv))
        for i in range(5):
            print('\r {} - {}'.format(i, bytes(rcv[i])))

        idCode = struct.pack('BB', rcv[0], rcv[1])
        idCode = struct.unpack('>H', idCode)
        idCode = idCode[0]
        # value = struct.unpack_from('HBBB', decode)
    i += 1
    if i == 4:
        exit()

Ожидаемые результаты:

Найдено 5 байтов в последовательном

(индекс) - (байт в этом индексе)

Получено:

Найдено 0 байтов в последовательном

1 Ответ

0 голосов
/ 20 июня 2019

решаемая.Это было просто вопрос проводки.Если кто-то в будущем захочет провести такой тест - он должен не забыть подключить RX к линии TX.Или, если он подключен к ноутбуку, лучше создать код, отвечающий за связь (но вместо ttyS0 или Serial0 порт должен быть настроен на соответствующий COM, например, «COM3»)

...