已经定义了数百种通信协议来实现此数据交换,每个协议可以分为两类之一:并行或串行。
Arduino和外围设备之间通过输入/输出端口的并行连接是距离短至几米的理想解决方案,但是,在其他情况下,如果需要在两个设备之间创建较长距离的通信,则无法使用并行连接,并行接口同时传输多个位。
串行通信可以进一步分类为-
同步 - 已同步的设备使用相同的时钟,并且它们的时序彼此同步。
异步 - 异步设备具有自己的时钟,并由先前状态的输出触发。
如果为所有连接的设备提供相同的时钟,则它们是同步的,如果没有时钟线,则它是异步的。
异步串行协议具有许多内置规则,这些规则不过是有助于确保健壮且无错误的数据传输的机制。
链接:https://www.learnfk.comhttps://www.learnfk.com/arduino/arduino-communication.html
来源:LearnFk无涯教程网
同步位是随每个数据包一起传送的两个或三个特殊位,它们是开始位和停止位,正如它们的名字一样,这些位分别标签数据包的开始和结束。
起始位始终由一条从1到0的空闲数据线表示,而停止位将通过将该行保持在1来转换回空闲状态。
每个数据包中的数据量可以设置为5到9位之间的任意大小,当然,标准数据大小是您的基本8位字节,但其他大小也有其用途。 7位数据包的效率可能高于8位,尤其是在您仅传输7位ASCII字符的情况下。
用户可以选择是否应该有奇偶校验位,如果是,则选择奇偶校验是奇数还是偶数,如果数据位中的1的位数为偶数,则奇偶校验位为0。奇偶校验正好相反
术语波特率用于表示每秒传输的位数[bps],请注意,它是指位,而不是字节,协议通常要求将每个字节与几个控制位一起传输。这意味着串行数据流中的一个字节可以包含11位。如果波特率是300 bps,则每秒最多可以传输37个字节和最少27个字节。
以下代码将使Arduino在启动时发送问候。
void setup() { Serial.begin(9600); //将串口库波特率设置为 9600 Serial.println("hello Learnfk"); //打印你好Learnfk } void loop() { }
上传到Arduino之后,打开Arduino IDE右上角的串行监视器,在串行监视器的顶部框中键入任何内容,然后按发送或键盘上的回车键。这将向Arduino发送一系列字节。
以下代码将使Arduino根据提供的输入输出输出。
void setup() { Serial.begin(9600); //将串口库波特率设置为 9600 } void loop() { if(Serial.available()) //如果可用于读取的字节数(字符) Serial.print("I received:"); //我收到的打印件 Serial.write(Serial.read()); //发送您阅读的内容 } }
请注意, Serial.print 和 Serial.println 将发回实际的ASCII码,而 Serial.write 将发回实际的文本。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)