树莓派的一些问题
前提:自己的树莓派装的是ubuntu20.04server
有些问题树莓派官方的系统并没有问题,但是ubuntu就有问题
1.读取18b20温度传感器
- 安装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
- 配置 boot config
原版系统是直接在 /boot/confit.txt 下面添加 dtoverlay=w1-gpio-pullup,gpiopin=4 就好了,但是 ubuntu-server 下这么操作没有用 ubuntu 下需要从外部读取树莓派的 sd 卡,修改 sd 卡中的 usercfg.txt 文件,在后面添加上面的那行
- 挂载驱动
sudo modprobe w1-gpio
sudo modprobe w1-therm
- 读取温度
cd /sys/bus/w1/devices/
然后进入 28- 开头的那个文件夹
cat w1_slave 之后就能看到 t=29875 这样一串数字
这代表温度是 29.875 度
- 使用 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) } }