arduino串口监视器显示nan_乐创物联物联网架构之硬件层中间件Arduino 串口通信

0 前言

大家好!我叫乐创物联,我主要是做工业自动化方面和物联网方面的。了解熟悉工业自动化领域的,也开发过物联网相关的产品。我的初衷是做工业物联网的,但这个系统太过于庞大,后续也会自主去学习一下。所以就先做小的系统,例如构建一整套智能家居系统,从硬件到软件全系列。下面就开始这套智能家居系统是如何在物联网基础上构建。在这里你可以0开始,然后到1质变,仅仅需要一起跟我学乐创物联物联网架构的学习。

乐创物联物联网学习路线

回顾一下上节《乐创物联物联网架构之硬件层中间件Arduino EEPROM》,从EEPROM简介,然后EEPROM库介绍(EEPROM Write、EEPROM Read、EEPROM Clear、EEPROM Crc、EEPROM Get、EEPROM Put、EEPROM Update、EEPROM Iteration),最后介绍了用于记录开关机的次数例子。本节就来讲感知层下硬件层中间件Arduino 串口通信。感知层是物联网最基础的部分,就像人的五官一样去感受世界。

1 Arduino 串口通信简介

Arduino需要和其他设备之间进行通信(例如PC、蓝牙、WiFi等),而最常见最简单的方式就是串口通信。

Arduino Uno开发板上,它的串口位于Rx(0)和Tx(1)引脚上,Arduino通过USB口的转换芯片(例如像CH340芯片)与这两个引脚连接。

https://www.arduino.cc/reference/en/language/functions/communication/serial/

用于Arduino开发板与计算机或其他设备之间的通信。所有Arduino板都有至少一个串行端口(也称为UART或USART),有的具有多个。

硬件串口引脚

注:TX / RX引脚上的串行通信使用TTL逻辑电平(5V或3.3V,取决于板)。不要将这些引脚直接连接到RS232串行端口。它们的工作电压为+/- 12V,可能会损坏Arduino开发板。

Arduino

2 函数介绍

1)if(Serial)

  • 描述

指示指定的串行端口是否已就绪。

在具有本地USB的板上if (Serial)(或if(SerialUSB)在Due上)指示USB CDC串行连接是否打开。对于所有其他板卡和非USB CDC端口,这将始终返回true。

  • 句法

if (Serial)

  • 参数

  • 返回值

如果指定的串行端口可用,则返回true。如果在准备就绪之前查询Leonardo的USB CDC串行连接,则仅返回false。数据类型:bool。

void setup() {

//初始化串口并等待打开串口

Serial.begin(9600);

while (!Serial) {

; // 等待串口连接,仅限本地USB

}

}

void loop() {

//主程序

}

2)Serial.available()

  • 描述

获取可用于从串行端口读取的字节数(字符)。这是已经到达并存储在串行接收缓冲区(包含64个字节)中的数据。

  • 句法

Serial.available()

  • 参数

Serial:串行端口对象。

  • 返回值

可读取的字节数。

以下代码返回通过串行端口接收的字符。

int incomingByte = 0; //对于输入的串口数据

void setup() {

Serial.begin(9600); //打开串口,并设置波特率为9600bps

}

void loop() {

//仅在收到数据时回复

if (Serial.available() > 0) {

//读输入的串口数据

incomingByte = Serial.read();

// 打印

Serial.print("I received: ");

Serial.println(incomingByte, DEC);

}

}

Arduino Mega示例:

以下代码将在Arduino Mega的一个串口中接收的数据发送到另一个。这可用于通过Arduino板将串行设备连接到计算机。

void setup() {

Serial.begin(9600);

Serial1.begin(9600);

}

void loop() {

// 从port 0读取, 发送到port 1

if (Serial.available()) {

int inByte = Serial.read();

Serial1.print(inByte, DEC);

}

//从port 1读取, 发送到port 0

if (Serial1.available()) {

int inByte = Serial1.read();

Serial.print(inByte, DEC);

}

}

3)Serial.availableForWrite()

  • 描述

获取可用于在串行缓冲区中进行写入而不阻止写入操作的字节数(字符)。

  • 句法

Serial.availableForWrite()

  • 参数

Serial:串行端口对象。

  • 返回值

可以写入的字节数。

4)Serial.begin

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值