视频加载失败

【树莓派】温控风扇(golang)

453 字
2 分钟
【树莓派】温控风扇(golang)
【树莓派】温控风扇(golang)

0x00#

采用go语言编写,可编译直接运行 使用s8050三极管作为开关 使用14号针脚作为信号开关 2019-11-7 新增后台服务启动

0x01#

package main
import (
"bufio"
"flag"
"fmt"
"github.com/rehtt/gogpio"
"github.com/kardianos/service"
"log"
"os"
"strconv"
"time"
)
var (
max, min int
showTemp, h bool
)
func main() {
flag.BoolVar(&h, "h", false, "help")
flag.IntVar(&max, "m", 55, "开启风扇温度")
flag.IntVar(&min, "n", 50, "关闭风扇温度")
flag.BoolVar(&showTemp, "s", false, "查看当前温度")
flag.Usage = help
flag.Parse()
if h {
flag.Usage()
} else {
if !showTemp {
//服务
cfg := &service.Config{
Name: "temp",
DisplayName: "RPI CPU Temp",
Description: "RPI CPU Temp",
}
prg := &program{}
s, err := service.New(prg, cfg)
if err != nil {
log.Fatal(err)
}
// logger 用于记录系统日志
logger, err := s.Logger(nil)
if err != nil {
log.Fatal(err)
}
if len(os.Args) == 2 { //如果有命令则执行
err = service.Control(s, os.Args[1])
if err != nil {
log.Fatal(err)
}
} else { //否则说明是方法启动了
err = s.Run()
if err != nil {
logger.Error(err)
}
}
if err != nil {
logger.Error(err)
}
} else {
fmt.Println("当前温度:", t(), "°")
}
}
}
func t() int {
txt, _ := os.Open("/sys/class/thermal/thermal_zone0/temp")
defer txt.Close()
buf := bufio.NewReader(txt)
t, _, _ := buf.ReadLine()
temp, _ := strconv.Atoi(string(t))
temp = temp / 1000
return temp
}
func help() {
fmt.Fprintln(os.Stderr, `使用:temp [选项] [服务操作]
选项:`)
flag.PrintDefaults()
fmt.Fprintln(os.Stderr,`
服务操作:
install 安装服务(开启服务必做)
start 运行服务
stop 停止服务
uninstall 卸载服务
示例:
temp -s 显示温度
temp install && temp start 安装服务并启动
temp stop 停止服务
temp -m 50 start 带参数启动服务
启动服务需要root权限`)
}
//服务
type program struct{}
func (p *program) Start(s service.Service) error {
log.Println("开始服务")
go p.run()
return nil
}
func (p *program) Stop(s service.Service) error {
log.Println("停止服务")
return nil
}
func (p *program) run() {
// 这里放置程序要执行的代码……
pin, _ := gogpio.Open(14, gogpio.OUT)
for ; ; {
if t() >= max {
pin.High()
} else if t() <= min {
pin.Low()
}
time.Sleep(30 * time.Second)
}
}

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
【树莓派】温控风扇(golang)
https://rehtt.com/posts/155/
作者
Rehtt
发布于
2019-04-13
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Rehtt
Hello, I'm Rehtt.
公告
欢迎来到我的博客!
分类
标签
最新动态
站点统计
文章
150
分类
17
标签
73
总字数
67,772
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录