你好,我是愛吃魚香ROS的小魚。上一節(jié)了解了MicroROS學(xué)習(xí)板的LED電路原理,最后得到結(jié)論是通過控制ESP_IO2的電平就可以控制電壓,接下來我們就嘗試?yán)?a target="_blank">Arduino的ESP_IO2對(duì)IO進(jìn)行控制。
本教程所使用硬件平臺(tái)為MicroROS學(xué)習(xí)板V1.0.0,可點(diǎn)擊閱讀原文購(gòu)買及查看詳情
一、GPIO控制介紹
1.1 什么是GPIO
首先我們了解下GPIO(General-purpose input/output),中文名通用型之輸入輸出的簡(jiǎn)稱。
- 輸出模式,指GPIO是可以通過程序 控制其電壓高低 ,普通的GPIO只能輸出(低電平0V)和高電平(3.3V,有的單片機(jī)是5V)。
- 輸入模式,指GPIO可以 讀取其上的電壓 ,普通的GPIO只能讀取低電平和高電平兩種。比如當(dāng)我們想測(cè)試一個(gè)按鍵是否被按下,就可以GPIO的輸入功能。
1.2 GPIO控制API
Arduino提供了簡(jiǎn)單易用的API來控制IO的輸入和輸出。
1.2.1 引腳模式設(shè)置-pinMode
該函數(shù)用于定義特定引腳的 GPIO 操作模式。
void pinMode(uint8_t pin, uint8_t mode);
pin
定義 GPIO 引腳編號(hào)。mode
設(shè)置操作模式。
基本輸入和輸出支持以下模式:
- INPUT將 GPIO 設(shè)置為不帶上拉或下拉(高阻抗)的輸入。
- OUTPUT將 GPIO 設(shè)置為輸出/讀取模式。
- INPUT_PULLDOWN 將 GPIO 設(shè)置為具有內(nèi)部下拉列表的輸入。
- INPUT_PULLUP 將 GPIO 設(shè)置為帶有內(nèi)部上拉的輸入。
1.2.2 數(shù)字輸出-digitalWrite
digitalWrite
用于設(shè)置被配置為OUTPUT
模式的引腳電平為HIGH
或 LOW
。
void digitalWrite(uint8_t pin, uint8_t val);
pin
所設(shè)置的GPIO編號(hào)。val
將輸出數(shù)字狀態(tài)設(shè)置為HIGH
或LOW
。
1.2.3 數(shù)字輸入-digitalRead
digitalRead
用于讀取配置為INPUT
模式的給定引腳的狀態(tài)。
int digitalRead(uint8_t pin);
pin
所設(shè)置的GPIO編號(hào)。
此函數(shù)將返回所選引腳的邏輯狀態(tài)為 HIGH
或LOW。
有了上面三個(gè)函數(shù),我們就可以編寫代碼了。
二、編寫LED閃爍代碼
新建example02_led
工程,接著輸入下面的代碼。
/**
* @file main.cpp
* @author fishros@foxmail.com
* @brief 使LED燈亮1s關(guān)閉1s,持續(xù)閃爍
* @version 0.1
* @date 2022-12-19
*
* @copyright Copyright (c) 2022
*
*/
#include < Arduino.h >
void setup()
{
// put your setup code here, to run once:
pinMode(2, OUTPUT); // 設(shè)置2號(hào)引腳模式為OUTPUT模式
}
void loop()
{
// put your main code here, to run repeatedly:
digitalWrite(2, LOW); // 低電平,打開LED燈
delay(1000); // 休眠1000ms
digitalWrite(2, HIGH); // 高電平,關(guān)閉LED燈
delay(1000); // 休眠1000ms
}
這里我們讓LED亮1s關(guān)閉1s,持續(xù)閃爍,代碼很簡(jiǎn)單,不再講解。
編譯下載代碼到開發(fā)板,接著觀察現(xiàn)象,你會(huì)發(fā)現(xiàn)藍(lán)色LED燈在不斷閃爍。
三、通過串口控制LED
我們繼續(xù)更新下工程代碼,實(shí)現(xiàn)通過串口指令來控制LED的亮滅。
#include < Arduino.h >
void setup()
{
Serial.begin(115200);
pinMode(2, OUTPUT); // 設(shè)置2號(hào)引腳模式為OUTPUT模式
}
void loop()
{
// LED串口控制代碼
if (Serial.available())
{
String command = Serial.readString();
if (command == "on")
{
digitalWrite(2, LOW); // 低電平,打開LED燈
}
else if (command == "off")
{
digitalWrite(2, HIGH); // 高電平,關(guān)閉LED燈
}
}
/* // LED閃爍代碼
digitalWrite(2, LOW); // 低電平,打開LED燈
delay(1000); // 休眠1000ms
digitalWrite(2, HIGH); // 高電平,關(guān)閉LED燈
delay(1000); // 休眠1000ms
*/
}
通過串口讀取指令,收到on則打開LED,收到off關(guān)閉LED。
將代碼下載到開發(fā)板,接著打開串口監(jiān)視器,輸入指令進(jìn)行測(cè)試。
四、總結(jié)
至此,我們成功完成了點(diǎn)燈,掌握了基本的GPIO輸出控制,下一節(jié)我們嘗試使用按鍵輸入來控制LED燈。
-
led
+關(guān)注
關(guān)注
242文章
23339瀏覽量
662267 -
輸入輸出
+關(guān)注
關(guān)注
0文章
42瀏覽量
10764 -
GPIO
+關(guān)注
關(guān)注
16文章
1216瀏覽量
52267 -
Arduino
+關(guān)注
關(guān)注
188文章
6477瀏覽量
187557
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論