我试图通过串行连接从Raspberry Pi 4发送消息到Teensy 4.0(基于Arduino的微控制器),从RP上的TX-RX引脚发送消息到Teensy上的TX-RX引脚。
我在RP上使用C++和wiringPi
库,使用它的默认Raspberry Pi操作系统。
我做了一个最小的设置,并简单地尝试发送一个消息从RP到Teensy。但是,它似乎不工作。虽然没有显示错误的RP端,也没有收到消息的Teensy端。我尝试使用serialPuts
和serialPrintf
命令在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上进行某种预设置以使用串行引脚?
感谢阅读我的帖子,任何指导都是赞赏.
1条答案
按热度按时间rryofs0p1#
我想明白了:
我应该在初始化串行连接时使用
/dev/ttyS0
串行端口文件,而不是之前尝试使用的/dev/ttyAMA0
。只有当我按照hcheung的建议重新运行disabling the login shell's accessibility over the serial port命令时,它才出现在
ls -l /dev/tty*
列表中。