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开发板。
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