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
}

}

BeagleBone GPIO 控制 LED 示例 - Go 语言实现

原文地址: https://www.cveoy.top/t/topic/lRDf 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录