Golang与树莓派

蒙卓 · · 7172 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

最近买了个树莓派3b,本来是做下载机用的,但是发现在上面写Go代码,编译,其实和在一般机器上的体验是一样的。

不过树莓派本身有其他电脑没有的玩法,那就是GPIO的支持,配合Go-gpio库,就可以控制这些接口

下面是一个简单的跑马灯+CPU温度探测程序

因为没加散热片……所以温度有点高┐( ̄ヮ ̄)┌

代码如下,根据/sys下的温度文件读数值,另一个是根据负载改变闪烁的频率。

很简单,所以我就不加注释了:)至于为啥叫jurassic,因为侏罗纪公园的电网就是蓝橙指示灯,然后写代码的胖子就被吃掉了

package main

import (
        "fmt"
    "io/ioutil"
    "strconv"
    "time"
    "runtime"

        "github.com/stianeikeland/go-rpio"
    "github.com/shirou/gopsutil/load"
)

const (
    BLUE = 20
    ORANGE = 21
    CORE_TEMP_PATH = "/sys/class/thermal/thermal_zone0/temp"
)

func init(){
    runtime.GOMAXPROCS(1)
}

func main() {

    fmt.Printf("System initial...")
        if rpio.Open() == nil{
        fmt.Println("[OK]")
    } else {
        fmt.Println("[ERROR]")
    }
        defer rpio.Close()
        orange := rpio.Pin(ORANGE)
    blue    := rpio.Pin(BLUE) 
    orange.Output()
    blue.Output()
    orange.Low()
    blue.High()


    for {
        stat, err := load.Avg() 
        if err != nil {
            fmt.Println(err)
            break
        }
        interval := int(stat.Load1)
        if stat.Load1 < 1 {
            interval = 1    
        }
        fmt.Printf("Load1:%.2f Temp:%.2f'C", stat.Load1, loadTemp())
        time.Sleep(time.Millisecond * time.Duration(interval * 900))
        blue.Toggle()
        orange.Toggle()
        fmt.Printf("\r")
    }
}

func loadTemp() float64 {
    b, err := ioutil.ReadFile(CORE_TEMP_PATH)
    if err != nil {
        return -1000
    }
    raw, err := strconv.ParseFloat(string(b[:len(b)-2]), 64)
    if err != nil {
        fmt.Println(err)
        return -1001    
    }
    return raw/100
}

有疑问加站长微信联系(非本文作者)

本文来自:Zhuo's blog

感谢作者:蒙卓

查看原文:Golang与树莓派

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

7172 次点击  
加入收藏 微博
1 回复  |  直到 2019-01-05 20:34:43
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传