這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
最近買了個樹莓派3b,本來是做下載機用的,但是發現在上面寫Go代碼,編譯,其實和在一般機器上的體驗是一樣的。
不過樹莓派本身有其他電腦沒有的玩法,那就是GPIO的支援,配合Go-gpio庫,就可以控制這些介面
下面是一個簡單的跑馬燈+CPU溫度探測程式
因為沒加散熱片……所以溫度有點高┐( ̄ヮ ̄)┌
代碼如下,根據/sys下的溫度檔案讀數值,另一個是根據負載改變閃爍的頻率。
很簡單,所以我就不加註釋了:)至於為啥叫jurassic,因為侏羅紀公園的電網就是藍橙指示燈,然後寫代碼的胖子就被吃掉了
package mainimport ( "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}