Cảm biến BME280 được sử dụng để đo các chỉ số liên quan đến nhiệt độ môi trường, áp suất khí quyển và độ ẩm tương đối. Nó chủ yếu được sử dụng trong các ứng dụng web và di động, nơi tiêu thụ điện năng thấp là điểm mạnh. Cảm biến này sử dụng giao thức I2C hoặc SPI để truyền dữ liệu tới bộ điều khiển micro. Mặc dù có một nhiều phiên bản BME280 khác nhau có sẵn trên thị trường, nhưng ở đây sử dụng phiên bản có hỗ trợ giao thức truyền thông I2C và SPI.
I2C viết tắt là Inter-Integrated Circuit và hoạt động trên nguyên tắc của hệ thống đa truy cập nhiều master slave dữ liệu đồng bộ. Với BME280 và bộ vi điều khiển, Raspberry Pi Pico đóng vai trò là master và cảm biến BME280 là slave. Raspberry Pi Pico giao tiếp với cảm biến BME280 thông qua giao thức I2C để cung cấp nhiệt độ, áp suất khí quyển và chỉ số độ ẩm tương đối.
Hình dưới đây cho thấy cảm biến BME280 và sơ đồ chân của nó.
BME280 Pinout
VCC: kết nối với nguồn 3.3V
SCL: sử dụng đễ nhận xung clock
SDA: sử dụng để gửi và nhận dữ liệu
Việc kết nối BME280 với Raspberry Pi Pico rất đơn giản. Chúng ta kết nối đầu VCC với 3,3V, nối đất với mặt đất (điểm chung), chân SCL của cảm biến với SCL của bo mạch và SDA của cảm biến với chân SDA của bo mạch.
Raspberry Pi Pico có hai bộ điều khiển giao thức I2C. Cả hai bộ điều khiển I2C đều có thể truy cập thông qua các chân GPIO của Raspberry Pi Pico. Bảng sau đây là kết nối của các chân GPIO với cả hai bộ điều khiển I2C. Mỗi kết nối của bộ điều khiển có thể được cấu hình thông qua nhiều chân GPIO như trong hình. Nhưng trước khi sử dụng bộ điều khiển I2C, nên cấu hình trong phần mềm các chân GPIO mà bạn muốn sử dụng làm bộ điều khiển I2C cụ thể.
Bộ điều khiển giao thức I2C |
Các chân GPIO |
I2C0 – SDA |
GP0/GP4/GP8/GP12/GP16/GP20 |
I2C0 – SCL |
GP1/GP5/GP9/GP13/GP17/GP21 |
I2C1 – SDA |
GP2/GP6/GP10/GP14/GP18/GP26 |
I2C1 – SCL |
GP3/GP7/GP11/GP15/GP19/GP27 |
Các kết nối chân giữa hai thiết bị đang sử dụng được mô tả như bên dưới.
BME280 |
Raspberry Pi Pico |
VCC |
3.3V |
SDA |
GP0 (I2C0 SDA) |
SCL |
GP1 (I2C0 SCL) |
GND |
GND |
Chúng tôi đã sử dụng các kết nối giống như được chỉ định trong bảng trên. Tuy nhiên, bạn cũng có thể sử dụng với các kết hợp chân SDA/SCL khác. Sơ đồ kết nối Raspberry Pi Pico với BME280
Chúng tôi sẽ phải cài đặt thư viện BME280 cho MicroPython.
Để thực hiện, hãy mở phần mềm Thonny IDE và Raspberry Pi Pico đang được cắm vào máy tính. Chọn Tools > Manage Packages. Thao tác này sẽ mở Trình quản lý package Thonny.
Tìm kiếm “bme280” trong thanh tìm kiếm bằng cách nhập tên của nó và nhấp vào nút 'Tìm kiếm trên PyPI.' Từ các kết quả tìm kiếm sau, nhấp vào kết quả được đánh dấu bên dưới: micropython-bme280 và cài đặt thư viện này.
Sau một lúc, thư viện này sẽ được cài đặt thành công. Bây giờ đã sẵn sàng lập trình Raspberry Pi Pico với cảm biến BME280 sử dụng MicroPython.
Vì đã cài đặt thư viện BME280 cho mạch Raspberry Pi Pico, sau đó sử dụng các chức năng có sẵn trong thư viện BME280 để đọc giá trị cảm biến.
Bây giờ hãy xem một ví dụ giải thích hoạt động của cảm biến. Kết nối cảm biến BME280 với mạch Raspberry Pi Pico thông qua giao thức I2C như được hiển thị ở trên trong sơ đồ kết nối. Chúng ta sẽ thấy code tập lệnh MicroPython và sau khi tải nó lên bảng mạch, sẽ thấy các chỉ số về nhiệt độ, áp suất và độ ẩm tương đối được in trên màn hình shell console MicroPython.
Bây giờ, hãy xem tập lệnh MicroPython hỗ trợ BME280 để đọc cảm biến. Sao chép đoạn code sau vào tệp .py và tải tệp lên Raspberry Pi Pico. Tập lệnh MicroPython này đọc các giá trị Áp suất, Nhiệt độ và Độ ẩm từ BME280 qua các bus I2C và in chúng lên màn hình shell console MicroPython.
from machine import Pin, I2C #importing relevant modules & classes
from time import sleep
import bme280 #importing BME280 library
i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000) #initializing the I2C method
while True:
bme = bme280.BME280(i2c=i2c) #BME280 object created
print(bme.values)
sleep(10) #delay of 10s
Đầu tiên, sẽ import các chân và I2C. Chúng ta phải chỉ định chân sử dụng cho giao tiếp I2C. Chúng tôi cũng cần import module sleep để tạo thêm độ trễ 10 giây giữa các lần đọc dữ liệu. Ngoài ra, hãy import thư viện bme280 đã cài đặt trước đó.
from machine import Pin, I2C #importing relevant modules & classes
from time import sleep
import bme280 #importing BME280 library
Xác định các chân GPIO Raspberry Pi Pico sử dụng cho BME280
Tiếp theo, chúng ta sẽ khởi tạo các chân I2C GPIO cho SCL và SDA tương ứng. Chúng ta đã sử dụng các chân I2C0 SCL và I2C0 SDA.
Tạo một phương thức I2C() có bốn tham số. Tham số đầu tiên là kênh I2C muốn sử dụng. Tham số thứ hai chỉ định chân I2C GPIO của bo mạch được kết nối trên bus SDA. Tham số thứ ba chỉ định chân I2C GPIO của bo mạch được kết nối với chân SCL. Tham số cuối cùng là kết nối tần số.
Chúng tôi đang đặt chân SCL ở chân 1 và SDA trên chân 0.
i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000)
Tiếp theo, chạy một vòng lặp vô hạn bên trong đó tạo một biến object BME280 có tên là bme để truy cập các giá trị đọc của cảm biến thông qua biến này. Chúng tôi sẽ in các giá trị lên các thiết bị đầu ra bằng cách sử dụng lệnh in. Chúng tôi cũng thêm độ trễ 10 giây sau mỗi lần giá trị đọc được hiển thị.
while True:
bme = bme280.BME280(i2c=i2c) #BME280 object created
print(bme.values)
sleep(10) #delay of 10s
Sau khi bạn đã sao chép đoạn code sau vào tệp, hãy nhấp vào biểu tượng “Save” để lưu code chương trình trên PC. Lưu tệp bằng cách đặt tên cho tệp kết thúc bằng .py và chọn lưu vào thư mục.
Sau khi đã lưu code, nhấn nút Run để tải code lên module Raspberry Pi Pico. Trước khi tải code lên, hãy đảm bảo chọn đúng bảng mạch.
Bạn sẽ thấy giá trị nhiệt độ(°C), áp suất (hPa) and độ ẩm (%) đang được in trên màn hình shell console. Mỗi bộ giá trị sẽ được cập nhật sau mỗi 10s.
Trong phần này, chúng ta sẽ xem cách hiển thị các giá trị áp suất, nhiệt độ, độ ẩm BME280 trên màn hình OLED 0,96 SSD1306 bằng MicroPython và Raspberry Pi Pico.
Tải thư viện BME280 MicroPython lên bảng mạch Raspberry Pi Pico. Đối với màn hình OLED, sẽ cần tải thư viện lên Raspberry Pi Pico.
Để thực hiện, hãy mở phần mềm Thonny IDE và Raspberry Pi Pico đang được cắm vào PC. Chọn Tools > Manage Packages. Thao tác này sẽ mở Trình quản lý package Thonny.
•Tìm kiếm “ssd1306” trong thanh tìm kiếm bằng cách nhập tên của nó và nhấp vào nút ‘Search on PyPI.'
•Từ các kết quả tìm kiếm sau, hãy nhấp vào kết quả được đánh dấu bên dưới: micropython-ssd1306
Tải thư viện này.
Sau một lúc, thư viện này sẽ được cài đặt thành công. Bây giờ đã sẵn sàng lập trình Raspberry Pi Pico với màn hình OLED.
Cần các thành phần sau để kết nối Raspberry Pi Pico với màn hình OLED và BME280.
Raspberry Pi Pico
Cảm biên BME280
Màn hìnhSSD1306 OLED
Kết nối dây
Màn hình OLED có 4 chân sẽ kết nối với Raspberry Pi Pico. Vì màn hình OLED yêu cầu điện áp hoạt động trong khoảng 3,3-5V nên sẽ kết nối chân VCC với 3,3V, đây sẽ là điểm chung với bo mạch và cảm biến. Chân SCL của màn hình sẽ được kết nối với chân SCL của module và chân SDA của màn hình sẽ được kết nối với SDA của module. Chân đất của cả ba thiết bị sẽ được nối chung.
Các kết nối giữa ba thiết bị đang sử dụng được mô tả bên dưới.
Màn hình SSD1306 OLED |
Raspberry Pi Pico |
BME280 |
VCC |
3.3V |
VCC |
SDA |
GP0 (I2C0 SDA) |
SDA |
SCL |
GP1 (I2C0 SCL) |
SCL |
GND |
GND |
GND |
Thực hiện theo sơ đồ dưới đây để kết nối đúngSơ đồ kết nối Raspberry Pi Pico, BME280 và OLED
from machine import Pin, I2C #importing relevant modules & classes
from time import sleep
import bme280 #importing BME280 library
from ssd1306 import SSD1306_I2C
i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000) #initializing the I2C method
oled = SSD1306_I2C(128, 64, i2c)
while True:
oled.fill(0)
bme = bme280.BME280(i2c=i2c) #BME280 object created
temperature = bme.values[0] #reading the value of temperature
pressure = bme.values[1] #reading the value of pressure
humidity = bme.values[2] #reading the value of humidity
print('Temperature: ', temperature) #printing BME280 values
print('Humidity: ', humidity)
print('Pressure: ', pressure)
oled.text("Temp "+temperature, 0, 0)
oled.text("PA "+pressure, 0, 20)
oled.text("Humidity "+humidity, 0,40)
oled.show() #display
sleep(10) #delay of 10s
Phần này sẽ giải thích code MicroPython được sử dụng để hiển thị các giá trị cảm biến lên màn hình OLED.
Import thư viện hỗ trợ lập trình ssd1306 OLED đã cài đặt trước đó. Điều này sẽ giúp truy cập tất cả các chức năng được xác định bên trong nó.
from ssd1306 import SSD1306_I2C
Dữ liệu chân SCL và SDA được lưu vào một biến object 'i2c' sẽ kết nối với bus I2C và giúp giao tiếp giữa hai thiết bị
Bây giờ, sẽ tạo một biến object ‘oled’ của SSD1306_I2C sử dụng chiều rộng, chiều cao và biến i2c làm tham số.
oled = SSD1306_I2C(128, 64, i2c)
Xóa màn hình OLED với lệnh led.fill().
oled.fill(0)
Lấy các mẫu giá trị nhiệt độ, độ ẩm và áp suất của cảm biến BME280 và in lên màn hình shell console
temperature = bme.values[0] #reading the value of temperature
pressure = bme.values[1] #reading the value of pressure
humidity = bme.values[2] #reading the value of humidity
print('Temperature: ', temperature) #printing BME280 values
print('Humidity: ', humidity)
print('Pressure: ', pressure)
Cuối cùng, hiển thị chữ cùng với giá trị đọc được từ cảm biến trên OLED.
oled.text("Temp "+temperature, 0, 0)
oled.text("PA "+pressure, 0, 20)
oled.text("Humidity "+humidity, 0,40)
Cuối cùng, gọi thuộc tính show() trong object oled để các thay đổi hiển thị trên OLED. Tạo độ trễ 10 giây giữa mỗi lần đọc.
oled.show()
sleep(10)
Tải code trên dưới dạng tệp .py lên mạch Raspberry Pi Pico. Nhấn nút Run để tải code lên module Raspberry Pi Pico. Bạn sẽ thấy các giá trị nhiệt độ, áp suất và độ ẩm của BME280 trên màn hình OLED như sau:
Ngoài ra, màn hình shell console cũng hiển thị tập các chỉ số cảm biến BME280: