BeagleBone GPIO 控制 LED 示例 - Go 语言实现
package main
import ( "fmt" "os" "time" )
// GPIO 路径 const ( gpioPath = "/sys/class/gpio/" )
// GPIO 结构体 type GPIO struct { pin string // GPIO 编号 dirPath string // GPIO 方向路径 valPath string // GPIO 值路径 }
// 初始化 GPIO func InitGPIO(pin string) (*GPIO, error) { // 检查 GPIO 是否已经导出 if _, err := os.Stat(gpioPath + "gpio" + pin); os.IsNotExist(err) { // 导出 GPIO if err := writeToFile(gpioPath + "export", pin); err != nil { return nil, err } }
// 初始化 GPIO 结构体
gpio := &GPIO{
pin: pin,
dirPath: gpioPath + "gpio" + pin + "/direction",
valPath: gpioPath + "gpio" + pin + "/value",
}
// 设置 GPIO 方向为输出
if err := gpio.SetDirection("out"); err != nil {
return nil, err
}
return gpio, nil
}
// 设置 GPIO 方向 func (gpio *GPIO) SetDirection(dir string) error { return writeToFile(gpio.dirPath, dir) }
// 设置 GPIO 值 func (gpio *GPIO) SetValue(val string) error { return writeToFile(gpio.valPath, val) }
// 写入文件 func writeToFile(path, data string) error { file, err := os.OpenFile(path, os.O_WRONLY, os.ModePerm) if err != nil { return err } defer file.Close()
_, err = file.WriteString(data)
if err != nil {
return err
}
return nil
}
func main() { // 初始化 GPIO gpio, err := InitGPIO("60") if err != nil { fmt.Println("Init GPIO error:", err) return }
// 控制灯的开关
for i := 0; i < 10; i++ {
// 灯亮
if err := gpio.SetValue("1"); err != nil {
fmt.Println("Set GPIO value error:", err)
return
}
time.Sleep(500 * time.Millisecond)
// 灯灭
if err := gpio.SetValue("0"); err != nil {
fmt.Println("Set GPIO value error:", err)
return
}
time.Sleep(500 * time.Millisecond)
}
// 关闭 GPIO
if err := writeToFile(gpioPath + "unexport", gpio.pin); err != nil {
fmt.Println("Unexport GPIO error:", err)
return
}
}
原文地址: https://www.cveoy.top/t/topic/lRDf 著作权归作者所有。请勿转载和采集!