已经定义了数百个通信协议来实现这种数据交换。每个协议可以分为两类:并行或串行。
通过输入/输出端口在Arduino和外设之间进行并行连接是短距离(最多几米)的理想解决方案。然而,在其他情况下,当需要在两个设备之间建立较长距离的通信时,不可能使用并行连接。并行接口同时传输多个位。它们通常需要数据总线 - 通过八条,十六条或更多的线路进行传输。数据以1和0的巨大波形传输。
并行通信肯定有其优势。它比串行更快,更直接,相对容易实施。然而,它需要许多的输入/输出(I / O)端口和线路。如果你曾经把一个项目从一个基本的Arduino Uno移动到一个Mega,你就知道微处理器上的I/O线是很宝贵的,而且很少。因此,我们更喜欢串行通信,牺牲针脚空间的潜在速度。
今天,大多数Arduino板都是用几种不同的串行通信系统作为标准设备。
使用哪个系统取决于以下因素:
有关串行通信的最重要的事情之一是协议,应该严格遵守。它是一套规则,必须应用这些规则才能使设备正确地解释它们相互交换的数据。幸运的是,Arduino会自动处理这个问题,这样程序员/用户的工作就可以简化为简单的写(发送的数据)和读(接收的数据)。
串行通信可以进一步分类为:
同步 - 同步的设备使用相同的时钟,它们的时序彼此同步。
异步 - 异步的设备具有各自的时钟,并由前一状态的输出触发。
很容易找出设备是否同步。如果给所有连接的设备提供相同的时钟,则它们是同步的。如果没有时钟线,它是异步的。
例如,UART(通用异步收发器)模块是异步的。
异步串行协议有一些内置的规则。这些规则只是有助于确保可靠且无误的数据传输的机制。这些避免外部时钟信号的机制是:
同步位是与每个数据包传输的两个或三个特殊位。它们是起始位和停止位。正如它们的名称,这些位分别标记数据包的开始和结束。
起始位始终只有一个,但停止位的数量可以配置为一个或两个(尽管通常保持为1)。
起始位始终由从1到0的空闲数据线指示,而停止位将通过将线保持在1处而转换回空闲状态。
每个分组中的数据量可以设置为5到9位的任意大小。当然,标准数据大小是基本8位字节,但其他大小有它们的用途。7位数据包的效率可能比8位高,特别是如果你只是传输7位ASCII字符。
用户可以选择是否应该有奇偶校验位,如果是,则奇偶校验应该是奇数还是偶数。如果数据位中的1的数目是偶数,则奇偶校验位为0。奇数的奇偶校验正好相反。
术语波特率用于表示每秒传输的位数[bps]。注意,它指的是位,而不是字节。协议通常要求每个字节与几个控制位一起传输。这意味着串行数据流中的一个字节可以包括11位。例如,如果波特率为300bps,则每秒可以传输最大37字节和最小27字节。
以下代码将使Arduino在启动时发送hello world。
void setup() { Serial.begin(9600); //set up serial library baud rate to 9600 Serial.println("hello world"); //print hello world } void loop() { }
将Arduino草图上传到Arduino后,打开Arduino IDE右上角的串口监视器搜索。
在串口监视器的顶部框中键入任意内容,然后按发送键或键盘上的enter键。这将发送一系列字节到Arduino。
以下代码返回它接收到的任何东西作为输入。
以下代码将使Arduino根据提供的输入传送输出。
void setup() { Serial.begin(9600); //set up serial library baud rate to 9600 } void loop() { if(Serial.available()) //if number of bytes (characters) available for reading from { serial port Serial.print("I received:"); //print I received Serial.write(Serial.read()); //send what you read } }
请注意,Serial.print 和 Serial.println 将发回实际的ASCII代码,而 Serial.write 将返回实际的文本。请参阅ASCII代码了解更多信息。
使用鼠标库,你可以使用Arduino Leonardo,Micro或Due来控制计算机的屏幕光标。这个特殊的例子使用五个按钮来移动屏幕上的光标。...
在本章中,我们将熟悉Tableau界面中提供的各种导航功能。在运行Tableau桌面上,我们得到顶部的菜单,其中显示了我们可以导航的所...
介绍 EventDispatcher 类是分派事件的所有类的基类。 EventDispatcher 类实现了 IEventDispatcher 接口。 EventDispatcher 类允...
SDK 介绍按 Ctrl + Shift + Alt + S 弹出项目结构设置区,如上图所示。如上图标注 1 所示,IntelliJ IDEA 支持 6 种 SDK...
如文章开头演示的 Gif 实时代码模板,其实时代码模板内容为:System.out.println("-----------YouMeek.com-----------$VAR1$值="...
在 IntelliJ IDEA 的安装讲解中我们其实已经知道,IntelliJ IDEA 本身很多功能也都是通过插件的方式来实现的,只是 IntelliJ IDE...
常用设置如上图 Gif 所示,在我们按 Ctrl + Shift + N 进行打开某个文件的时候,我们可以直接定位到该文件的行数上。一...