Golang与树莓派

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

最近买了个树莓派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

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