【问题标题】:UART send no bytesUART不发送字节
【发布时间】:2019-06-16 22:12:20
【问题描述】:

我正在尝试在我的 Raspberry PI 3 b+ 上编写通过 UART 发送数据的测试代码,但我无法接收到我发送的数据。 Raspberry 通过 UART 模块连接到我的笔记本电脑,所以我可以在 Putty 结果中看到。谁能告诉我我做错了什么?

我检查了端口 isOpen 是否返回 True , msg=b'Hello' 返回的 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 个字节

【问题讨论】:

  • 您是否禁用了内核输出并启用了raspi-config 的端口?看看this
  • 我的命令行丢失了,现在看起来像这样:dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 lift=deadline rootwait 并且在 config.txt 中有仅 enable_uart=1
  • 最安全的方法是运行sudo raspi-config并在菜单上启用串口。然后重新启动并做一个环回测试,将 RX 连接到 TX,看看你写到端口的内容是否得到回显
  • 当我在 RPI 上编译但环回为空时,我在 Putty 控制台上得到了回显
  • 我明白了...您能解释一下您是如何连接端口的吗?

标签: python-3.x raspberry-pi uart


【解决方案1】:

解决了。这只是接线问题。 如果将来有人想这样进行测试-他们必须记住将RX与TX线连接。或者如果它与笔记本电脑连接,最好创建负责在其上进行通信的代码(但不是 ttyS0 或 Serial0 ,端口应该设置为正确的 COM,例如“COM3”)

【讨论】:

    猜你喜欢
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 2021-10-24
    相关资源
    最近更新 更多