为了在Arduino和其他设备之间进行通信,我们可以使用串行通信。这通常被用来与计算机 "对话",可视化来自Arduino的数据,以及调试你的项目。或者也可以用来与其他设备通信。
Arduino自带了内置的Serial 库。你不需要导入任何特别的东西来使用它。
我们在计算机和Arduino之间为上传程序到设备而建立的USB连接被自动设置为处理串行通信,因此我们可以通过Arduino IDE发送和接收信息。
现在让我们看看如何通过串行发送数据。
在Arduino程序的setup() 功能中,你需要通过设置串行数据传输的数据速率(用波特表示)来初始化串行通信。通常情况下,9600 。
Serial.begin(9600);
bauds = 每秒比特
然后你可以使用几个Serial 函数中的一个。
例如,Serial.print() 。
Serial.print("Hello!");
让我们通过编译和上传这个程序到Arduino来试试。
void setup() {
Serial.begin(9600);
Serial.print("Hello!");
}
void loop() {
}
保存并上传程序到Arduino,然后在Arduino IDE中点击右上角的 "串行监控 "按钮。

该按钮将打开计算机上的串行接口监视器。确保它被调整到程序中设置的波特率,你应该看到 "Hello!"字符串被打印出来。

Serial.print() 只是你可以运行的函数之一。
你还有Serial.println() ,它写了一些东西,并添加了一个\n 行终结符,所以每条信息都被打印在自己的行上。
你也可以从这个串行接口监视器向Arduino发送消息。看到上面有Send 按钮的输入框了吗?
在Arduino程序中,你可以使用Serial.read() 。字符是用ASCII编码的,如果你运行这个程序。
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
Serial.print(Serial.read());
}
}
你会在串行接口中看到打印回来的你所发送的字符的ASCII十进制数值。试着写test ,然后点击Send 。

最好使用Serial.println() ,让每个数字都打印在一个行上。

116 是ASCII编码的 是ASCII编码的 是ASCII编码的 。t``101 e``115 s
而10 是换行字符。
要打印该字符而不是ASCII编码,请使用Serial.write() 函数。
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
Serial.write(Serial.read());
}
}

Serial.available() 确保有数据准备被读取。如果没有发送数据,它将返回 ,所以如果我们不添加这个检查,我们只会在串行监视器中看到一堆 的重复。-1 -1
在串行对象中你可以使用更多的函数。
在这里查看它们的细节:https://www.arduino.cc/reference/en/language/functions/communication/serial/。
值得注意的是,在Arduino上你有一组tx 和rx 的引脚。在Arduino Uno上,它们是0和1号针脚,在MKR 1010上,它们是13和14号针脚。当你通过USB使用串行通信时,不要将这些引脚用于I/O,否则你的数据可能会受到干扰。
也就是说,这些引脚被用作串行接口,这对直接与其他设备通信非常有用,而不是通过USB与你的计算机通信。