专栏中心

EEPW首页 > 专栏 > Arduino esp8266系列教程三----串口的常用函数

Arduino esp8266系列教程三----串口的常用函数

发布人:Linux嵌入式 时间:2023-01-03 来源:工程师 发布文章
常用函数1.Serial.begin(speed)

打开串口

参数:

speed :波特率

2.Serial.available()

获取串口上可读取的数据的字节数。该数据是指已经到达并存储在接收缓存(共有64字节)中。available()继承自Stream实用类。

语法:

Serial.available()

参数:

返回值:

返回可读取的字节数

示例:

int incomingByte = 0; // for incoming serial data

void setup() {

Serial.begin(9600); // opens serial port, sets data rate to 9600 bps

}

void loop() {

// send data only when you receive data:

if (Serial.available() > 0) {

// read the incoming byte:

incomingByte = Serial.read();

// say what you got:

Serial.print("I received: ");

Serial.println(incomingByte, DEC);

}

}

3.Serial.read()

读串口数据,read()继承自Stream实用类。 语法:

Serial.read()

参数:

返回值:

串口上第一个可读取的字节(如果没有可读取的数据则返回-1)- int型。

示例:

int incomingByte = 0;   // 用于存储从串口读到的数据 void setup() {
        Serial.begin(9600);     // 打开串吕,设置速率为9600 bps}
 void loop() {
 
        // 只在收到数据时发送数据        if (Serial.available() > 0) {
                // 读取传入的字节                incomingByte = Serial.read();
 
                // 指示你收到的数据                Serial.print("I received: ");
                Serial.println(incomingByte, DEC);
        }
}
4.Serial.flush()

刷新串口数据,等待串口数据完成输出。

5.Serial.print()

往串口发数据,无换行 描述

以人类可读的ASCII码形式向串口发送数据,该函数有多种格式。整数的每一数位将以ASCII码形式发送。浮点数同样以ASCII码形式发送,默认保留小数点后两位。字节型数据将以单个字符形式发送。字符和字符串会以其相应的形式发送。例如:

Serial.print(78) 发送 "78"

Serial.print(1.23456) 发送 "1.23"

Serial.print('N') 发送 "N"

Serial.print("Hello world.") 发送 "Hello world."

可选的第二个参数用于指定数据的格式。允许的值为:BIN (binary二进制), OCT (octal八进制), DEC (decimal十进制), HEX (hexadecimal十六进制)。对于浮点数,该参数指定小数点的位数。例如:

Serial.print(78, BIN) gives "1001110"

Serial.print(78, OCT) gives "116"

Serial.print(78, DEC) gives "78"

Serial.print(78, HEX) gives "4E"

Serial.println(1.23456, 0) gives "1"

Serial.println(1.23456, 2) gives "1.23"

Serial.println(1.23456, 4) gives "1.2346"

你可以用F()把待发送的字符串包装到flash存储器。例如:

Serial.print(F(“Hello World”))

要发送单个字节数据,请使用Serial.write()。

添加 F() 相当于为字符串常量定义了PROGMEM属性,常量字符串仍然存储在FLASH中,但是程序运行时不会再将常量字符串从FLASH中copy到SRAM中,而是直接读取FLASH中的字符串,这样一来就节约了SRAM,但是代码运行速度就下降了。

语法:

Serial.print(val)

Serial.print(val, format)

参数:

val: 要发送的数据(任何数据类型)

format: 指定数字的基数(用于整型数)或者小数的位数(用于浮点数)。

返回值:

size_t (long): print()返回发送的字节数(可丢弃该返回值)。

示例:

/*

Uses a FOR loop for data and prints a number in various formats.

*/

int x = 0; // variable

void setup() {

Serial.begin(9600); // open the serial port at 9600 bps:

}

void loop() {

// print labels

Serial.print("NO FORMAT"); // prints a label

Serial.print("\t"); // prints a tab

Serial.print("DEC");

Serial.print("\t");

Serial.print("HEX");

Serial.print("\t");

Serial.print("OCT");

Serial.print("\t");

Serial.print("BIN");

Serial.print("\t");

for(x=0; x< 64; x++){ // only part of the ASCII chart, change to suit

// print it out in many formats:

Serial.print(x); // print as an ASCII-encoded decimal - same as "DEC"

Serial.print("\t"); // prints a tab

Serial.print(x, DEC); // print as an ASCII-encoded decimal

Serial.print("\t"); // prints a tab

Serial.print(x, HEX); // print as an ASCII-encoded hexadecimal

Serial.print("\t"); // prints a tab

Serial.print(x, OCT); // print as an ASCII-encoded octal

Serial.print("\t"); // prints a tab

Serial.println(x, BIN); // print as an ASCII-encoded binary

// then adds the carriage return with "println"

delay(200); // delay 200 milliseconds

}

Serial.println(""); // prints another carriage return

}

6.Serial.println()

往串口发数据,类似Serial.print(),但有换行。

7.Serial.write()

写二进制数据到串口,数据是一个字节一个字节地发送的,若以字符形式发送数字请使用print()代替。

语法:

Serial.write(val)

Serial.write(str)

Serial.write(buf, len)

参数:

val: 作为单个字节发送的数据

str: 由一系列字节组成的字符串

buf: 同一系列字节组成的数组

len: 要发送的数组的长度

返回:

write()会返回发送的字节数,所以读取该返回值是可选的。

示例:

void setup(){

Serial.begin(9600);

}

void loop(){

Serial.write(45); //以二进制形式发送数字45

int bytesSent = Serial.write(“hello”); //发送字符串“hello” 并返回该字符串的长度。

}

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词: Arduino esp8266

相关推荐

Arduino最全的中文教程

基于arduino开发板的网络独立下载终端

高通收购Arduino带来了全新的氛围——UNO Q上的人工智能与信号处理

什么是 Linduino

视频 2014-10-23

基于Arduino的双模科学计算器设计

3D8S的“脱机运行”

视频 2013-07-26

Arduino硬件模拟器 vs 实物零件:哪个更合适?

Arduino UNO Q登陆DigiKey,现已开放预订

二十年过去 Arduino已经远不止是Arduino了

1 物联网与嵌入式开发

视频 2015-07-07

基于Portenta的农业和草坪管理

使用Arduino和EMG的错误姿势和肌肉拉伤监测器,带实时蓝牙警报

在 Ubuntu 12.04 上安装 Arduino IDE

视频 2013-07-26

Arduino的教程

资源下载 2012-11-24

动手玩转Arduino

ArduinoISP, Hex & Bootloader

视频 2013-07-26

动手玩转Arduino

高通收购硬件公司Arduino,深耕机器人领域

机器人 2025-10-10

高通收购Arduino,开源社区持怀疑态度

嵌入式系统 2025-11-03
更多 培训课堂
更多 焦点
更多 视频

技术专区