gpio
约 485 字大约 2 分钟
2024-05-31
GPIO 是单片机的基础功能,BeShell 实现了完整的 GPIO JavaScript API。
详细 API 请参考 GPIO 模块 API。
基础代码
C++ 初始化
#include <BeShell.hpp>
using namespace be ;
BeShell beshell ;
void app_main() {
// 应用 GPIO 和文件系统模块
beshell.use<GPIO>() ;
beshell.use<FS>() ;
// 挂载分区
FS::mount("/", new LittleFS("fsroot", true)) ;
// 启动 BeShell
beshell.setup() ;
// 自动运行 main.js
beshell.engine->evalScript("/main.js") ;
beshell.run() ;
}JS 初始化
gpio 是内置模块,无需额外配置即可导入使用:
import * as gpio from "gpio"闪烁 LED
将 LED 连接到 GPIO 12~15,运行以下代码:
import * as gpio from "gpio"
// 设置引脚为输出模式
gpio.setMode(12, "output")
gpio.setMode(13, "output")
gpio.setMode(14, "output")
gpio.setMode(15, "output")
// 每秒闪烁所有 LED
setInterval(() => {
gpio.write(12, gpio.read(12) ? 0 : 1)
gpio.write(13, gpio.read(13) ? 0 : 1)
gpio.write(14, gpio.read(14) ? 0 : 1)
gpio.write(15, gpio.read(15) ? 0 : 1)
}, 1000)注意:LED 耐受电压低于 GPIO 输出的 3.3V,请串联 1KΩ 电阻。
读取按键
import * as gpio from "gpio"
// 设置引脚为输入模式,并启用上拉
gpio.setMode(16, "input")
gpio.pull(16, "up")
// 监听引脚电平变化
gpio.watch(16, "both", (pin, value) => {
if (value) {
console.log("Button released")
} else {
console.log("Button pressed")
}
})将按键开关连接至 GPIO 16,另一端接 GND。
常用 API
| API | 说明 |
|---|---|
gpio.setMode(pin, mode) | 设置引脚模式:input、output、output-od、input-output |
gpio.pull(pin, mode) | 配置上下拉:up、down、updown、floating |
gpio.write(pin, value) | 输出电平(0 或 1) |
gpio.read(pin) | 读取当前电平 |
gpio.blink(pin, time) | 使引脚持续闪烁,返回定时器 ID |
gpio.watch(pin, edge, callback) | 监听电平变化边沿:rising、falling、both |
gpio.resetPin(pin) | 重置引脚到默认状态 |
常见问题
GPIO 输出电压是多少?
ESP32 GPIO 输出电压为 3.3V。
哪些引脚可用?
ESP32 大部分 GPIO 都可用,但以下引脚有特殊用途:
- GPIO 6~11:连接 SPI Flash
- GPIO 1~3:用于 UART 通信
如何避免引脚冲突?
使用前先调用 gpio.resetPin(pin) 重置引脚,确保没有被其他功能占用。
