You are on page 1of 3

GIAO TIẾP RASBERRY PI VỚI DS18B20

1. Kích hoạt truyền thôi 1-Wire trên Raspberry Pi

Vào menu Start chọn Preferences chọn Raspberry Pi Configuration

Hộp thoại Raspberry Pi Configuration xuất hiện, chọn Tab Interfaces, chọn 1-Wire. Sau đó
nhấn OK, khởi động lại Raspberry Pi

Chân mặc định dành cho giao tiếp 1-Wire trên Raspberry là chân GPIO4. Trường hợp
muốn sử dụng chân khác làm truyền thông 1-Wire chúng ta thực hiện như sau (giả sử chúng ta
dùng GPIO12 làm chân giao tiếp 1-W):
- Mở file config.txt trên Raspberry bằng dòng lệnh:
sudo nano /boot/config.txt
Tìm đến dòng dtoverlay = w1-gpio sửa thành dtoverlay=w1-gpio, gpiopin=12.
Sau đó nhấn CTRL-X , chọn Y và nhấn Enter để ghi lại file vừa sửa. Khởi động lại
Raspberry Pi.

2. Kiểm tra hoạt động truyền thông 1-W với DS18B20 bằng dòng lệnh

- Nạp module truyền thông 1-Wire bằng dòng lệnh sau:


o Sudo modprobe w1-gpio.
- Nạp module nhiệt hỗ trợ DS18B20 bằng dòng lệnh:
o Sudo modprobe w1-therm
- Chuyển từ thư mục hiện hành sang thư mục chứa thông tin về truyền thông 1-Wire, thông
tin về cảm biến DS18B20 bằng dòng lệnh
o cd /sys/bus/w1/devices/
- Sau khi chuyển vào thư mục này, list tất cả các thiết bị kết nối 1-Wire bằng dòng lệnh
o ls
- Lệnh ls sẽ list hết thư mục chứa cảm biến giao tiếp với Raspberry qua truyền thông 1-Wire.
Ở đây là thư mục 28-0000003b3dd4. Chuyển vào thư mục này bằng lệnh:
o Cd 28-0000003b3dd4
- Đọc giá trị nhiệt độ từ DS18D20 bằng dòng lệnh
o Cat w1_slave
3. Chương trình Python

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_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
return "Nhiet do: ",temp_c
while True:
print(read_temp())
time.sleep(1)

BÀI THỰC HÀNH


1. Đọc giá trị nhiệt độ từ cảm biến DS18B20, hiển thị giá trị nhiệt độ trên màn hình
LCD16x2. Trường hợp giá trị nhiệt độ đọc vào lớn hơn 25oC chữ hiển thị trên LCD sẽ
nhấp nháy.
2. Viết chương trình đọc giá trị nhiệt độ, độ ẩm từ cảm biến DHT11 không sử dụng thư viện
sẵn có dành cho Raspberry (tự viết code giao tiếp 1-Wire giữa Raspberry Pi và DHT-11)

You might also like