简介
使用的是树莓派3B+, Go编程实现OneWire方式读取DS18B20温度。
接线
DS18B20 包含经典三线, VCC和GND自不必说, 主要的是DQ线, 需要接4.7K的上拉电阻, 即4.7K欧姆的电阻接到DQ和VCC, 否则树莓派识别不到DS18B20, 切记…
树莓派OneWire
树莓派支持任意引脚实现One-Wire方式, 只是默认GPIO4支持
开启1-Wire支持
sudo raspi-config
Interfaces Options -> 1-Wire -> YES->OK
指令查看总线设备
ls /sys/bus/w1/devices/
28-00000094bebd :
0x28是family code
00000094bebd 是DS18B20的SN
使用系统指令直接查看读值
在/sys/bus/w1/devices/28-00000094bebd目录下的 w1_slave文件保存读取的信息, 第一句告诉你crc校验OK, 第二句告诉你值是29375
根据数据手册, d6 = 1101 0110 表示LSB
01 = 0000 0001 表示MSB
转成摄氏度就是29.375,所以t=29375也就是后三位是小数点
总线路径下的temperature也可以读取温度
sudo cat ./temperature
29812
查看模块是都被加载
手动加载w1内核模块
未被加载则使用如下指令进行加载
sudo modprobe w1-gpio
sudo modprobe w1-therm
选择/修改1-wire引脚
sudo dtoverlay w1-gpio gpiopin=4 pullup=0 # header pin 7
sudo dtoverlay w1-gpio gpiopin=17 pullup=0 # header pin 11
sudo dtoverlay w1-gpio gpiopin=27 pullup=0 # header pin 13
最后
看了上面, 暂时不使用Go去进行读取DS18B20了, 目前思路步骤记录一下 :
简单点就是: 读取28目录下的temperature文件或w1_slave文件过滤到t=xxxxx读取温度, 多个DS18B20做法类同
参考
GPIO and the 40-pin header
W1-GPIO - One-Wire Interface