首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jetson纳米系列给arduino写错字符的消息

Jetson纳米系列给arduino写错字符的消息
EN

Stack Overflow用户
提问于 2020-04-22 05:15:08
回答 1查看 2.4K关注 0票数 0

我编写了一个用pyserial连接NVIDIA Jetson Nano的python脚本,通过与Arduino uno的串行通信,使用Jetson纳米J41引脚和Arduino Uno上的软件系列连接NVIDIA Jetson nano,但我对在arduino Uno上收到的消息有问题,有时我在消息中出现了坏字符。例如,我用pyserial "hello world“发送,当我检查arduino系列时,我得到了”he⸮lo“worlf*。

另外,当arduino收到一条消息时,它会用一个MESSAGE_OK来回答,而jetson总是在没有奇怪字符的情况下得到正确的消息。从杰特森到尤诺,坏角色被接收,但从奈诺到杰特森,这是可以的。我使用逻辑电平转换器连接arduino软件系列引脚到jetson纳米uart引脚。

我一直在努力弄清楚到底是怎么回事,但没有成功,如果有人能帮我提建议,或者答案会很棒。

我正在尝试一个最简单的例子,下面是我为arduino和jetson编写的代码:

Arduino:

代码语言:javascript
复制
#include <SoftwareSerial.h>

String a;
// Arduino uno Ext Serial pins
int ext_rx_pin = 9;
int ext_tx_pin = 8;
SoftwareSerial ext(ext_rx_pin, ext_tx_pin); //RX, TX 

void setup() {
  // opens serial port
  Serial.begin(38400); 
  // Setup external serial connection to jetson
  ext.begin(38400);
}

void loop() {
  while (ext.available() > 0) {
    a = ext.readStringUntil('\n'); // read the incoming data as string
    // Print message on ide console
    Serial.println(a);
    // Answer to jetson
    ext.print("MESSAGE_OK");
    ext.print("\n");
  }
}

Jetson:

代码语言:javascript
复制
#!/usr/bin/python3
import time
import serial

serial_port = serial.Serial(
    port="/dev/ttyTHS1",
    baudrate=38400,
    timeout=0.5
)

# Wait a second to let the port initialize
time.sleep(1)

arduino_message = ""
wait = True

try:
    while True:
        text = input("Input message: ")
        print("Sending:", text)
        text = text + "\n"
        print(text.encode())
        for i in text:
            serial_port.write(i.encode('utf-8'))
            time.sleep(0.1)
        wait = True
        while wait:
            if serial_port.inWaiting() > 0:
                data = serial_port.read()
                arduino_message = arduino_message + data.decode('utf-8')
                if data == "\n".encode():
                    wait = False
                    print(arduino_message)
                    arduino_message = ""

except KeyboardInterrupt:
    print("Exiting Program")

except Exception as exception_error:
    print("Error occurred. Exiting Program")
    print("Error: " + str(exception_error))

finally:
    serial_port.close()
    pass

另外,如果我试图回显从jetson发送到uno,然后从uno发送到jetson的内容,我会得到这条消息,因为错误字符:错误:'utf-8‘编解码器无法在0位置解码字节0 0xec :数据的意外结束。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-22 06:20:26

在预期字符和接收字符中存在一些单比特和双比特错误。这可能是电气和/或时间问题。

例如:

空间(0010 0000) =>“(0010 0010)

D (0010 0010) => f (0110 0110)

N (0000 10110000 1010) => *(其中之一是0010 1010)

尝试使用一个较慢的波特率之间的董事会,因为时间是一个特别的问题与软件系列。

或者,使用Arduino Uno上的硬件串行端口与另一个板进行通信。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61357759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档