UART не отправляет байты

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

Я проверил, открыт ли порт, и он вернул 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()

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

Found 5 bytes in serial

(index) - (byte at that index)

Есть:

Found 0 bytes in serial

Вы отключили вывод ядра и включили порт с помощью raspi-config? Взгляните на это.

Marcos G. 17.06.2019 06:26

моя командная строка была потеряна, теперь она выглядит так: dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 lift=deadline rootwait и в config.txt есть только enable_uart=1

Takahashi 17.06.2019 14:20

Самый безопасный способ — запустить sudo raspi-config и включить последовательный порт в меню. Затем перезагрузитесь и выполните петлевой тест, соединяющий RX с TX, и посмотрите, получите ли вы эхо от того, что вы пишете в порт.

Marcos G. 17.06.2019 15:00

У меня есть эхо на консоли Putty, когда я компилирую RPI, но петля пуста

Takahashi 17.06.2019 15:31

Понятно... Можете ли вы объяснить, как вы подключаете свои порты?

Marcos G. 17.06.2019 17:25
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
357
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Другие вопросы по теме