一分钟打印一次时间-温度
方法1
#!/bin/bash
while true
do
echo -n $(TZ=UTC-8 date +%Y-%m-%d" "%H:%M:%S)
read number < /sys/class/thermal/thermal_zone0/temp
echo " Temp = $(expr $number / 1000)"
sleep 60
done
echo -n表示打印不换行!
注意到 除法以后小数点没有了
修改 apt-get install bc
#!/bin/bash
while true
do
echo -n $(TZ=UTC-8 date +%Y-%m-%d" "%H:%M:%S)
read number < /sys/class/thermal/thermal_zone0/temp
echo -n " Temp: "
echo "scale=3; $number/1000" | bc
sleep 2
done
方法2go
package main
import (
"log"
"os/exec"
"time"
)
func main() {
for {
cmd := exec.Command("cat", "/sys/class/thermal/thermal_zone0/temp")
stdout, err := cmd.Output()
if err != nil {
log.Printf("Fail to cat %v\r\n", err)
} else {
a := string(stdout)
a = a[:2] + "." + a[2:]
log.Printf("temp %s \r\n", string(a))
}
time.Sleep(time.Minute)
}
}
补充 已经有人写了温度-LED的
Golang与树莓派 - Go语言中文网 - Golang中文社区
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
}