Raspberry Pi和Arduino之间使用串行引脚进行通信?(C++,RP 4,Teensy 4.0)

mccptt67  于 2023-02-26  发布在  其他
关注(0)|答案(1)|浏览(202)

我试图通过串行连接从Raspberry Pi 4发送消息到Teensy 4.0(基于Arduino的微控制器),从RP上的TX-RX引脚发送消息到Teensy上的TX-RX引脚。
我在RP上使用C++和wiringPi库,使用它的默认Raspberry Pi操作系统。
我做了一个最小的设置,并简单地尝试发送一个消息从RP到Teensy。但是,它似乎不工作。虽然没有显示错误的RP端,也没有收到消息的Teensy端。我尝试使用serialPutsserialPrintf命令在RP端,但无济于事。
RP代码:

#include <iostream>
#include <stdio.h>
#include <unistd.h>
#include <cstdlib>

#include <wiringPi.h>
#include <wiringSerial.h>

int main()
{
    int port;

    if ((port = serialOpen("/dev/ttyAMA0", 9600)) < 0)
    {
        fprintf(stderr, "Unable to open serial device: %s\n", strerror(errno));

        return 1;
    }

    if (wiringPiSetup() == -1)
    {
        fprintf(stdout, "Unable to start wiringPi: %s\n", strerror(errno));
        
        return 1;
    }

    //serialPrintf(port, "test\n");
    serialPuts(port, "test");

    serialClose(port);

    return 0;
}

Teensy代码:

#include "Arduino.h"

void setup() {
  Serial1.begin(9600);

  Serial.println("Listening...");
}

void loop() {
  if (Serial1.available() > 0) 
  {
    String incoming = Serial1.read();

    Serial.print("Recieved: ");
    Serial.println(incoming);
  }
}

由于我以前从未尝试过通过Linux上的串行端口进行连接,因此我需要找出"/dev/ttyAMA0"字符串的含义。在做了一些研究之后,据我所知,该字符串表示可以打开以与另一个设备和RP通信的串行端口。
我还尝试在RP上运行ls -l /dev/tty*命令,以列出所有假定的串行端口,但是它提示我60多个不同的tty端口...我不太确定要查找什么,或者在这里选择什么端口名称。我还尝试在我的Teensy断开连接的情况下运行该命令,尝试看看我是否可以识别连接到Teensy的端口,但是当我断开Teensy的连接时,没有一个端口消失。
我知道Teensy正在工作,因为我可以从我的Arduino IDE访问它,我验证了TX-RX是交叉连接的(RX-〉TX & TX-〉RX)。我将RP引脚GPIO 14连接到Teensy引脚0,并将RP引脚GPIO 15连接到Teensy引脚1
我还通过RP上的5V和GND引脚为Teensy供电,但这对串行通信并不重要。
下面是我的设置的示意图和图像:
第一节第一节第一节第一节第一次
我是否遗漏了什么?我是否应该使用另一个tty文件以正确连接?我如何决定选择哪个tty文件?我是否应该在RP上进行某种预设置以使用串行引脚?
感谢阅读我的帖子,任何指导都是赞赏.

rryofs0p

rryofs0p1#

我想明白了:
我应该在初始化串行连接时使用/dev/ttyS0串行端口文件,而不是之前尝试使用的/dev/ttyAMA0
只有当我按照hcheung的建议重新运行disabling the login shell's accessibility over the serial port命令时,它才出现在ls -l /dev/tty*列表中。

相关问题