Phần 4: Đọc dữ liệu từ cảm biến
1. Giới thiệu về cảm biến và cách kết nối với Raspberry Pi, 2. Thư viện cần thiết để đọc dữ liệu cảm biến, 3. Hướng dẫn đọc dữ liệu từ cảm biến (ví dụ: DHT11), 4. Xử lý và lưu trữ dữ liệu cảm biến, 5. Ví dụ thực hành: Đọc và hiển thị dữ liệu cảm biến trên màn hình.
Phần 4: Đọc dữ liệu từ cảm biến
1. Giới thiệu về cảm biến và cách kết nối với Raspberry Pi
Cảm biến là thiết bị có khả năng đo lường các thông số vật lý như nhiệt độ, độ ẩm, ánh sáng, và nhiều thông số khác. Trong dự án IoT, cảm biến thường được sử dụng để thu thập dữ liệu từ môi trường và gửi dữ liệu đó đến các thiết bị khác hoặc lên server.
Raspberry Pi là một máy tính nhỏ gọn, mạnh mẽ và phổ biến trong các dự án IoT. Để kết nối cảm biến với Raspberry Pi, bạn cần sử dụng các chân GPIO (General Purpose Input/Output) của Raspberry Pi. Ví dụ, cảm biến DHT11, một cảm biến nhiệt độ và độ ẩm phổ biến, có thể được kết nối như sau:
- Chân VCC: Kết nối với chân 5V trên Raspberry Pi.
- Chân GND: Kết nối với chân GND trên Raspberry Pi.
- Chân Data: Kết nối với một chân GPIO (ví dụ: GPIO4).
2. Thư viện cần thiết để đọc dữ liệu cảm biến
Để đọc dữ liệu từ cảm biến DHT11 trên Raspberry Pi, bạn cần cài đặt thư viện Adafruit_DHT. Đây là thư viện hỗ trợ việc giao tiếp với cảm biến DHT. Bạn có thể cài đặt thư viện này bằng cách sử dụng pip.
sudo pip install Adafruit-DHT
Đảm bảo rằng bạn đã cài đặt pip và Python trên Raspberry Pi của mình trước khi thực hiện lệnh trên.
3. Hướng dẫn đọc dữ liệu từ cảm biến (ví dụ: DHT11)
Để đọc dữ liệu từ cảm biến DHT11, bạn có thể sử dụng đoạn mã Python sau:
import Adafruit_DHT
import time
# Thiết lập loại cảm biến và chân GPIO kết nối
sensor = Adafruit_DHT.DHT11
pin = 4 # GPIO4
while True:
# Đọc dữ liệu từ cảm biến
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
# Kiểm tra dữ liệu hợp lệ
if humidity is not None and temperature is not None:
print('Nhiệt độ = {0:0.1f} *C, Độ ẩm = {1:0.1f} %'.format(temperature, humidity))
else:
print('Không thể đọc dữ liệu từ cảm biến')
time.sleep(2) # Đợi 2 giây trước khi đọc lại
Trong đoạn mã trên, chúng ta sử dụng vòng lặp while True để liên tục đọc dữ liệu từ cảm biến mỗi 2 giây. Hàm read_retry sẽ cố gắng đọc dữ liệu từ cảm biến và trả về nhiệt độ và độ ẩm.
4. Xử lý và lưu trữ dữ liệu cảm biến
Sau khi đọc dữ liệu từ cảm biến, bạn có thể xử lý và lưu trữ dữ liệu này. Một cách đơn giản để lưu trữ dữ liệu là ghi vào một file log. Bạn có thể thực hiện điều này bằng cách sử dụng đoạn mã sau:
import datetime
def save_data(temperature, humidity):
with open('sensor_log.txt', 'a') as file:
file.write(f"{datetime.datetime.now()}, Nhiệt độ: {temperature}, Độ ẩm: {humidity}\n")
# Trong vòng lặp đọc dữ liệu
if humidity is not None and temperature is not None:
save_data(temperature, humidity)
Đoạn mã trên sẽ ghi dữ liệu nhiệt độ và độ ẩm vào file sensor_log.txt cùng với thời gian đọc dữ liệu.
5. Ví dụ thực hành: Đọc và hiển thị dữ liệu cảm biến trên màn hình
Để hoàn thiện ví dụ này, chúng ta sẽ kết hợp tất cả các bước lại với nhau. Dưới đây là mã hoàn chỉnh cho việc đọc dữ liệu từ cảm biến DHT11, lưu vào file log và hiển thị trên màn hình:
import Adafruit_DHT
import time
import datetime
# Thiết lập loại cảm biến và chân GPIO kết nối
sensor = Adafruit_DHT.DHT11
pin = 4 # GPIO4
def save_data(temperature, humidity):
with open('sensor_log.txt', 'a') as file:
file.write(f"{datetime.datetime.now()}, Nhiệt độ: {temperature}, Độ ẩm: {humidity}\n")
while True:
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
if humidity is not None and temperature is not None:
print('Nhiệt độ = {0:0.1f} *C, Độ ẩm = {1:0.1f} %'.format(temperature, humidity))
save_data(temperature, humidity)
else:
print('Không thể đọc dữ liệu từ cảm biến')
time.sleep(2)
Chạy đoạn mã này trên Raspberry Pi của bạn, và bạn sẽ thấy dữ liệu nhiệt độ và độ ẩm được hiển thị liên tục trên màn hình và lưu vào file log.
Tips: Đảm bảo rằng bạn đã kết nối đúng chân GPIO và cài đặt thư viện cần thiết trước khi chạy mã. Nếu gặp lỗi, hãy kiểm tra lại kết nối và cài đặt thư viện.
