Последовательная связь между raspberry pi и teensy (используя выводы UART/GPIO)

Я пытаюсь связаться со своим малиновым PI с тинси (arduino, который может притворяться мышью и клавиатурой для непосвященных).

Я хочу получать информацию об ардуино и на основе этой информации перемещать мышь.

На стороне arduino я сделал этот тестовый скрипт:

void setup() {
    Serial1.begin(9600); // According to the Teensy Docs, this is the RX1 & TX1 on my board.
    // Serial itself corrosponds to the micro-usb port
}
String msg = "";      

void loop() {

    if(Serial1.available() > 0) {
      msg = "";
      while(Serial1.available() > 0) {
          char read = Serial1.read();
          msg += read;
      }
      Serial1.write('X'); // Acknowledge with reply
    }
    Serial1.println(msg); // Output to console for debugging
    // Should be a number 1-9
    // TODO: further processing

}

На Raspberry Pi я запускаю этот тестовый скрипт:

import time
import serial
import random       
ser = serial.Serial(            
port='/dev/ttyS0',
baudrate = 9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
 timeout=1
)
while True:
    n = random.randint(1,9)
    print("Writing", n)
    ser.write(n)
    time.sleep(1)
    feedback = ser.read()
    print(feedback) // Expecting 'X'

Когда я запускаю скрипт, я не вижу вывода в последовательной консоли, а также пустого сообщения (b'') (обратите внимание на параметр тайм-аута)

Я уже включил последовательную связь с raspi-config и перезапустил. Когда я перечисляю устройства (ls -l /dev/), я вижу:

lrwxrwxrwx  1 root root           5 Apr 28 20:21 serial0 -> ttyS0
lrwxrwxrwx  1 root root           7 Apr 28 20:21 serial1 -> ttyAMA0

В качестве дополнительного теста я провел minicom -b 9600 -o -D /dev/ttyS0 с 1 проводом, соединяющим RX с TX на пи, и он успешно отразился.

У меня проблема с кодом или возможная проблема с оборудованием? Может быть, поскольку это тинси, требуется какой-то другой протокол? См. здесь

У меня нет идей относительно того, почему он не общается правильно. Вот моя проводка:


person retep    schedule 29.04.2020    source источник
comment
Вы можете поговорить с тинси, используя последовательный терминал arduino IDE? или minicom... в большинстве случаев я вижу эту проблему в том, что arduino имеет небольшое время раскрутки для последовательного порта после открытия порта... попробуйте перевести спящий режим на несколько секунд после того, как python откроет последовательный порт для arduino, прежде чем пытаться отправить любые данные   -  person Joran Beasley    schedule 29.04.2020
comment
Я неправильно смотрю на картинку или у вас есть Rx-Rx и Tx-Tx?   -  person Delta_G    schedule 29.04.2020
comment
@Delta_G разве это не должно совпадать?   -  person Peter S    schedule 29.04.2020
comment
Когда вы разговариваете с кем-то, вы говорите ему в рот и слушаете его уши? То, что одна сторона передает, другая должна получить.   -  person Delta_G    schedule 29.04.2020


Ответы (1)


У вас есть линия Rx, соединенная вместе, и линии Tx, соединенные вместе. То, что один передает, другой должен получить. Вам нужно пройти Tx-Rx и Rx-Tx.

person Delta_G    schedule 29.04.2020