加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 一、前言
    • 二、硬件連接
    • 三、使能1-write接口
    • 四、通訊測(cè)試
    • 五、編寫代碼并運(yùn)行
    • 六、結(jié)束語
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

樹莓派從零開始快速入門第8講——單總線(以DS18B20為例)

07/08 15:25
1508
閱讀需 10 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

一、前言

單總線也叫做一線總線(one-write),它只有1根信號(hào)線,既傳輸時(shí)鐘又傳輸數(shù)據(jù),而且數(shù)據(jù)傳輸是雙向的,通過一問一答的形式實(shí)現(xiàn)兩個(gè)設(shè)備之間的數(shù)據(jù)交互。具體的原理我就不細(xì)說了,感興趣的同學(xué)可以自己去查閱相關(guān)的資料,今天我以DS18B20為例,講一下樹莓派的單總線的使用方法。

二、硬件連接

DS18B20引腳定義如下,根據(jù)引腳定義連接到樹莓派上,我這里用的是一個(gè)擴(kuò)展板,直接把傳感器接上即可。

引腳 名稱 說明
1 GND 供電電源負(fù)極
2 DQ 數(shù)據(jù)輸入輸出引腳(和MCU任意一個(gè)IO口相連,注意:這里需要有上拉電阻
3 VCC 供電電源正極

注意:如果你的傳感器是插件封裝的,一定要分清楚正負(fù),不然會(huì)燒壞的。判斷方法(僅供參考):平的一面對(duì)著自己,左邊的是GND,右邊的是VCC,中間的是信號(hào)線。接上之后可以迅速上電然后斷電,摸一下傳感器,如果迅速發(fā)熱并且非常燙說明接反了。

三、使能1-write接口

方法1:通過配置命令

sudo raspi-config    // 打開配置
sudo reboot          // 重啟,如果之前沒有使能,配置完之后要重啟才能生效

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

方法2:在可視化界面的設(shè)置里面修改

在這里插入圖片描述
在這里插入圖片描述

注意:如果設(shè)備啟動(dòng)的時(shí)候是沒有使能1-Write接口的,使能之后需要重啟才能生效。

四、通訊測(cè)試

sudo modprobe w1-gpio
sudo modprobe w1-therm
cd /sys/bus/w1/devices
ls                       // 查詢傳感器的ID,如果什么都沒有,可能是前面沒有使能1-Write,或者使能了但是沒有重啟,也可能是硬件連接有問題
cd 28-xxxxxxx            // 28-xxxxxxx:18b20的ID,每個(gè)傳感器的id都是不同的,根據(jù)自己的輸入,如果查詢的ID里面不是28開頭而是00開頭的,那應(yīng)該不是ds18b20
cat w1_slave

在這里插入圖片描述
在這里插入圖片描述

五、編寫代碼并運(yùn)行

1、方式1

基于w1thermsensor庫驅(qū)動(dòng)DS18B20,w1thermsensor庫集成了多款傳感器的驅(qū)動(dòng)(DS18S20、DS1822、DS18B20、DS28EA00、DS1825/MAX31850K)。

w1thermsensor Github 鏈接:https://github.com/timofurrer/w1thermsensor

示例代碼:

from w1thermsensor import W1ThermSensor
sensor = W1ThermSensor(W1ThermSensor.THERM_SENSOR_DS18B20, "00000cb51493")  #00000cb51493:是ds18b20的id,根據(jù)自己的id輸入(注意不要把“28-”也復(fù)制進(jìn)來)
temp = sensor.get_temperature()
print(temp)

注:該代碼基于w1thermsensor庫驅(qū)動(dòng),使用w1thermsensor庫之前先要安裝這個(gè)庫,命令如下:

sudo apt-get install python3-pip               // python3 pip安裝管理器依賴包
sudo apt-get install python3-w1thermsensor     // w1thermsensor庫

在這里插入圖片描述

查詢要讀取的ds18b20的id。

可以通過第四步的通訊測(cè)試查,也可以用下面的命令查。

cd /etc
ls /sys/bus/w1/devices

在這里插入圖片描述
示例代碼1運(yùn)行結(jié)果:
在這里插入圖片描述

2、方式2

這個(gè)方法其實(shí)就是基于第四點(diǎn)的通訊測(cè)試,把手動(dòng)輸入的命令寫在腳本上運(yùn)行。

示例代碼:

#!/usr/bin/python
# -*- coding:utf-8 -*-
import os
import glob
import time

os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')

base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'
def read_rom():
	name_file=device_folder+'/name'
	f = open(name_file,'r')
	return f.readline()

def read_temp_raw():
	f = open(device_file, 'r')
	lines = f.readlines()
	f.close()
	return lines

def read_temp():
	lines = read_temp_raw()
	while lines[0].strip()[-3:] != 'YES':
		time.sleep(0.2)
		lines = read_temp_raw()
	equals_pos = lines[1].find('t=')
	if equals_pos != -1:
		temp_string = lines[1][equals_pos+2:]
		temp_c = float(temp_string) / 1000.0
		temp_f = temp_c * 9.0 / 5.0 + 32.0
		return temp_c, temp_f

print(' rom: '+ read_rom())
while True:
	print(' C=%3.3f  F=%3.3f'% read_temp())
	time.sleep(1)

示例代碼運(yùn)行結(jié)果:

在這里插入圖片描述

六、結(jié)束語

DS18B20是一款很簡(jiǎn)單的單總線傳感器,我覺得以此為例去學(xué)習(xí)和了解單總線是一個(gè)非常好的選擇。

關(guān)于樹莓派和單片機(jī)的一些個(gè)人見解:

樹莓派快速入門系列教程,剛剛進(jìn)入基礎(chǔ)編程的教學(xué),為了避免大家進(jìn)入思維的誤區(qū),在這里我想說說我對(duì)樹莓派的一些看法。樹莓派是一個(gè)微型的電腦,在運(yùn)算能力方面是比單片機(jī)要強(qiáng)的,在編程上樹莓派更偏向應(yīng)用層的開發(fā),也可以理解為電腦軟件的開發(fā)。而單片機(jī)的話更多的是做底層外設(shè)驅(qū)動(dòng)的開發(fā),應(yīng)用層主要也是以控制為主,不會(huì)說用單片機(jī)去做一個(gè)非常復(fù)雜的數(shù)據(jù)運(yùn)算或者處理大量的數(shù)據(jù)。

所以,樹莓派的編程其實(shí)是有一點(diǎn)點(diǎn)脫離硬件的,就是我們可以不管底層的硬件是怎么實(shí)現(xiàn)數(shù)據(jù)采集和傳輸?shù)?,直接調(diào)用庫函數(shù),把數(shù)據(jù)拿到就行了,當(dāng)然,有時(shí)間和精力的話是可以去研究一下硬件的原理和底層的實(shí)現(xiàn)。而單片機(jī)的開發(fā)很多時(shí)候會(huì)遇到一些沒用過的芯片,我們就需要根據(jù)芯片的數(shù)據(jù)手冊(cè)去開發(fā)一個(gè)驅(qū)動(dòng)程序,然后再做應(yīng)用層的開發(fā),當(dāng)然了,單片機(jī)也是可以跑操作系統(tǒng)的,比如FreeRTos、RT-thread等,跑操作系統(tǒng)的話和樹莓派的編程就有些類似了,但畢竟跑系統(tǒng)的單片機(jī)還是少數(shù)。

總結(jié)起來就是一句話:樹莓派編程能用庫的就用庫,底層怎么實(shí)現(xiàn)的不用管,我們是做大事的,不要花太多的時(shí)間在一些小事情上面。純粹是個(gè)人的看法,勿噴,如果你有不同的見解,歡迎在評(píng)論區(qū)留言,謝謝!?。?/p>

好了,這一講的內(nèi)容就這么多了,如果對(duì)你有幫助,可以給個(gè)收藏,如果想了解更多樹莓派的知識(shí)可以關(guān)注我,后續(xù)我會(huì)繼續(xù)更新更多的教程。

樹莓派入門系列教程:樹莓派從零開始快速入門系列匯總

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
AD73311ARSZ 1 Analog Devices Inc Single-Channel, 3 V and 5 V Front-End Processor for General Purpose Applications Including Speech and Telephony

ECAD模型

下載ECAD模型
$10.72 查看
AT27C256R-70JU-306 1 Microchip Technology Inc IC OTP 256KBIT 70NS 32PLCC
暫無數(shù)據(jù) 查看
511FBA125M000BAG 1 Silicon Laboratories Inc LVDS Output Clock Oscillator,

ECAD模型

下載ECAD模型
$3.39 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜