Arduino进阶05.Arduino 通信

已经定义了数百个通信协议来实现这种数据交换。每个协议可以分为两类:并行或串行。

已经定义了数百个通信协议来实现这种数据交换。每个协议可以分为两类:并行或串行。

并行通信

通过输入/输出端口在Arduino和外设之间进行并行连接是短距离(最多几米)的理想解决方案。然而,在其他情况下,当需要在两个设备之间建立较长距离的通信时,不可能使用并行连接。并行接口同时传输多个位。它们通常需要数据总线 – 通过八条,十六条或更多的线路进行传输。数据以1和0的巨大波形传输。

并行通信

并行通信的优点和缺点

并行通信肯定有其优势。它比串行更快,更直接,相对容易实施。然而,它需要许多的输入/输出(I / O)端口和线路。如果你曾经把一个项目从一个基本的Arduino Uno移动到一个Mega,你就知道微处理器上的I/O线是很宝贵的,而且很少。因此,我们更喜欢串行通信,牺牲针脚空间的潜在速度。

串行通信模块

今天,大多数Arduino板都是用几种不同的串行通信系统作为标准设备。

使用哪个系统取决于以下因素:

  • 微控制器有多少个器件与数据交换?
  • 数据交换的速度有多快?
  • 这些设备之间的距离是多少?
  • 是否需要同时发送和接收数据?

有关串行通信的最重要的事情之一是协议,应该严格遵守。它是一套规则,必须应用这些规则才能使设备正确地解释它们相互交换的数据。幸运的是,Arduino会自动处理这个问题,这样程序员/用户的工作就可以简化为简单的写(发送的数据)和读(接收的数据)。

串行通信类型

串行通信可以进一步分类为:

  • 同步 – 同步的设备使用相同的时钟,它们的时序彼此同步。
  • 异步 – 异步的设备具有各自的时钟,并由前一状态的输出触发。

很容易找出设备是否同步。如果给所有连接的设备提供相同的时钟,则它们是同步的。如果没有时钟线,它是异步的。

例如,UART(通用异步收发器)模块是异步的。

异步串行协议有一些内置的规则。这些规则只是有助于确保可靠且无误的数据传输的机制。这些避免外部时钟信号的机制是:

  • Synchronization bits 同步位
  • Data bits 数据位
  • Parity bits 奇偶校验位
  • Baud rate 波特率

同步位

同步位是与每个数据包传输的两个或三个特殊位。它们是起始位和停止位。正如它们的名称,这些位分别标记数据包的开始和结束。

起始位始终只有一个,但停止位的数量可以配置为一个或两个(尽管通常保持为1)。

起始位始终由从1到0的空闲数据线指示,而停止位将通过将线保持在1处而转换回空闲状态。

同步位

数据位

每个分组中的数据量可以设置为5到9位的任意大小。当然,标准数据大小是基本8位字节,但其他大小有它们的用途。7位数据包的效率可能比8位高,特别是如果你只是传输7位ASCII字符。

奇偶校验位

用户可以选择是否应该有奇偶校验位,如果是,则奇偶校验应该是奇数还是偶数。如果数据位中的1的数目是偶数,则奇偶校验位为0。奇数的奇偶校验正好相反。

波特率

术语波特率用于表示每秒传输的位数[bps]。注意,它指的是位,而不是字节。协议通常要求每个字节与几个控制位一起传输。这意味着串行数据流中的一个字节可以包括11位。例如,如果波特率为300bps,则每秒可以传输最大37字节和最小27字节。

Arduino UART

以下代码将使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右上角的串口监视器搜索Search

在串口监视器的顶部框中键入任意内容,然后按发送键或键盘上的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代码了解更多信息。

发布者:suiyublg,转转请注明出处:https://huibian.net/1305-2/

(30)
suiyublg的头像suiyublg
上一篇 2017年4月8日 23:43
下一篇 2017年4月10日 15:24

相关推荐

  • Arduino项目03.Arduino 读取模拟电压

    此示例将向你展示如何读取模拟引脚0上的模拟输入。输入从analogRead()转换为电压,并打印输出到Arduino软件(IDE)的串口监视器。 必需的组件 你将需要以下组件: 程序 按照电路图连接面包板上的组件,如下图所示。 电位器 电位器是一种简单的机电传感器。它将来自输入操作器的旋转或线性运动转换为电阻的变化。这种变化是(或可以)用于控制任何东西,从高…

    2017年4月14日
    20200
  • Arduino教程30.Arduino delay()函数

    delay()函数的工作方式非常简单。它接受单个整数(或数字)参数。此数字表示时间(以毫秒为单位)。当程序遇到这个函数时,应该等到下一行代码。然而,问题是,delay()函数并不是让程序等待的好方法,因为它被称为阻塞(blocking)函数。 delay()函数语法 delay (ms) ; 其中, ms 是以毫秒为单位暂停的时间(无符号…

    2017年3月29日
    18100
  • Arduino传感器04.Arduino PIR传感器

    PIR传感器可以让你感知运动。它们用于检测人是否进入或离开传感器的范围。通常出现在家庭或企业使用的电器和小工具中。它们通常被称为PIR,“被动红外”,“热电”或“IR运动”传感器。 以下是PIR传感器的优点: PIR由热电传感器制成,圆形金属罐中央有一个矩形晶体,可以检测红外辐射的水平。所有东西都发射出低水平的辐射,而东西越热发射的辐射就越多。运动检测器中的…

    2017年4月23日
    29500
  • Arduino函数库05.Arduino 三角函数

    你需要使用三角几何来计算移动物体的距离或角速度。Arduino提供了传统的三角函数(sin,cos,tan,asin,acos,atan),可以通过编写它们的原型来概括。Math.h包含三角函数的原型。 三角函数的精确语法 例子

    2017年4月4日
    22900
  • Arduino项目01.Arduino 闪烁LED

    LED是用于许多不同应用的小型强光灯。首先,我们将学习闪烁LED,即微控制器的Hello World。它就像打开和关闭灯一样简单。建立这个重要的基线将为你提供坚实的基础,以实现更复杂的实验。 必需的组件 你将需要以下组件: 程序 按照电路图连接面包板上的组件,如下图所示。 注意 – 要了解LED的极性,请仔细查看。两个腿中较短的,朝向灯…

    2017年4月12日
    22300

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
欢迎大家来到大雄学编程!