前提:自己的树莓派装的是ubuntu20.04server

有些问题树莓派官方的系统并没有问题,但是ubuntu就有问题

1.读取18b20温度传感器

  1. 安装raspi-config

到官方网站找到最新版本 http://archive.raspberrypi.org/debian/pool/main/r/raspi-config/
我用的是 raspi-config_20210604_all.deb
wget http://archive.raspberrypi.org/debian/pool/main/r/raspi-config/raspi-config_20210604_all.deb
dpkg -i wget raspi-config_20210604_all.deb
如果出现依赖报错则运行 apt –fix-broken install
继续 dpkg 安装
安装完后运行 raspi-config
选择 interface-options/1-wire enable

  1. 配置 boot config

原版系统是直接在 /boot/confit.txt 下面添加 dtoverlay=w1-gpio-pullup,gpiopin=4 就好了,但是 ubuntu-server 下这么操作没有用 ubuntu 下需要从外部读取树莓派的 sd 卡,修改 sd 卡中的 usercfg.txt 文件,在后面添加上面的那行

  1. 挂载驱动

sudo modprobe w1-gpio
sudo modprobe w1-therm

  1. 读取温度

cd /sys/bus/w1/devices/
然后进入 28- 开头的那个文件夹
cat w1_slave 之后就能看到 t=29875 这样一串数字
这代表温度是 29.875 度

  1. 使用 Go 来读取 18b20 的温度
package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "strconv"
    "strings"
    "time"
)

func main() {
    for true {
        content, err := ioutil.ReadFile("/sys/bus/w1/devices/28-01205659340d/w1_slave")
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println(string(content))
        temp1 := strings.Split(string(content), "t=")
        if len(temp1) == 2 { 
            temp2 := strings.Split(temp1[1], "\n")
            intTemp, _ := strconv.Atoi(temp2[0])
            fmt.Printf("current temperature: %d\n", intTemp/1000)
        }
        time.Sleep(time.Second)
    }   
}