Mục lục:

Raspberry PI Nhiều thiết bị I2C: 3 bước
Raspberry PI Nhiều thiết bị I2C: 3 bước

Video: Raspberry PI Nhiều thiết bị I2C: 3 bước

Video: Raspberry PI Nhiều thiết bị I2C: 3 bước
Video: Using the second (I2C 0) port on a Raspberry Pi 2024, Tháng bảy
Anonim
Raspberry PI Nhiều thiết bị I2C
Raspberry PI Nhiều thiết bị I2C
Raspberry PI Nhiều thiết bị I2C
Raspberry PI Nhiều thiết bị I2C

Bực bội vì bạn không thể sử dụng nhiều thiết bị I2C giống nhau trong dự án của mình. Không cần sử dụng bộ ghép kênh chậm. Nhân raspbian mới nhất hỗ trợ việc tạo nhiều bus I2C bằng cách sử dụng các chân GPIO. Giải pháp này là siêu nhanh.

Bước 1: Một số Shell Comands

Một số Shell Comands
Một số Shell Comands

Kết nối một trong các thiết bị i2c của bạn khi đang sử dụng raspberry pi, khởi động raspberry pi của bạn và chạy

sudo i2cdetect -y 1

Bạn sẽ thấy một bảng như trong hình đính kèm. Tôi đã đính kèm một cảm biến áp suất nhiệt độ và khí áp BMP280. Địa chỉ i2c là 0x76 theo bảng. Lưu ý địa chỉ này.

Làm điều này cho tất cả các thiết bị i2c của bạn.

Bước 2: Trường hợp một: Các thiết bị I2c có cùng địa chỉ

Trường hợp một: Các thiết bị I2c có cùng địa chỉ
Trường hợp một: Các thiết bị I2c có cùng địa chỉ

Đây luôn là trường hợp có vấn đề. Một bus i2c có thể xử lý nhiều thiết bị, nhưng chúng phải có các địa chỉ i2c khác nhau. Một số thiết bị i2c có jumper để đặt các địa chỉ i2c khác, nhưng nhiều thiết bị thì không. Trong trường hợp này, bạn có thể sử dụng bộ ghép kênh i2c (phần cứng) để xoay i2c SDA (Dữ liệu) và SCL (Đồng hồ) hoặc bạn có thể tạo thêm một bus i2c trở lên.

Tôi sẽ tạo hai bus bổ sung, bus nl 3 và 4

Mở cli và chạy

cd / boot

sudo nano config.txt

Thêm dòng mã sau, thích hợp hơn trong phần mà spi và i2c được bật.

dtoverlay = i2c-gpio, bus = 4, i2c_gpio_delay_us = 1, i2c_gpio_sda = 23, i2c_gpio_scl = 24

Dòng này sẽ tạo một bus i2c bổ sung (bus 4) trên GPIO 23 dưới dạng SDA và GPIO 24 là SCL (GPIO 23 và 24 là mặc định)

Cũng thêm dòng sau để tạo i2c bus 3

dtoverlay = i2c-gpio, bus = 3, i2c_gpio_delay_us = 1, i2c_gpio_sda = 17, i2c_gpio_scl = 27

GPIO 17 sẽ là SDA và GPIO 27 sẽ là SCL cho i2c bus 4.

Gõ điều khiển X để thoát.

Lưu ý về Đánh số xe buýt và thứ tự:

Không bao giờ sử dụng xe buýt 0 và 2, nó được sử dụng cho những thứ khác trong bảng như eprom trên mũ, v.v.

Đối với bản phát hành raspbian tháng 4 năm 2019:

Bạn phải luôn bắt đầu với xe buýt cao nhất (trong trường hợp này là xe buýt 4) trong tệp config.txt của bạn và làm việc đến xe buýt thấp nhất (xe buýt 3).

Xe buýt thấp nhất luôn phải là xe buýt 3

Nếu bạn cần thêm 5 bus, các bus phải bi theo thứ tự là 7, 6, 5, 4, 3

Vấn đề này về thứ tự xe buýt không có ở đó khi Bản hướng dẫn này ban đầu được viết. Có vẻ như những thay đổi đã được thực hiện đối với hạt nhân.

Tắt PI của bạn, chuyển nó. Kết nối thiết bị i2c của bạn với bus 4 (SDA tới GPIO 23 và SCL tới GPIO 24) và thiết bị còn lại với i2c bus 3 (SDA tới GPIO 17 và SCL tới GPIO 27).

Bật số pi.

Chạy:

sudo i2cdetect -l (Chữ thường L)

Bây giờ bạn sẽ thấy rằng i2c bus 3 và 4 cũng được liệt kê. Cũng chạy:

sudo i2cdetect -y 3

sudo i2cdetect -y 4

Giờ đây, bạn có thể sử dụng cảm biến bằng ngôn ngữ lập trình của mình. Hãy nhớ chỉ định các bus i2c chính xác.

Đính kèm là một ví dụ cho cảm biến nhiệt độ và áp suất BMP280 phổ biến. Không có bộ ghép kênh nào có thể đọc 2 BMP280 nhanh như vậy.

Một ví dụ về 2 cảm biến Sensirion SDP 810 cũng được đính kèm. Một lần nữa hoạt động nhanh hơn nhiều so với bộ ghép kênh mà tôi đã sử dụng trước đây

Tôi đã tạo mã python để đọc hai BMP388 mới từ adafruit.

Tôi cũng có thể thêm các cảm biến khác trong tương lai vào

Bước 3: Trường hợp 2: Địa chỉ I2c khác nhau

Đơn giản. i2c là xe buýt. Mục đích của xe buýt là giao tiếp với nhiều thiết bị. Kết nối các thiết bị song song với cùng một bus i2c. Bạn có thể sử dụng xe buýt một.

Chạy:

sudo i2cdetect -y 1

Bạn sẽ thấy các thiết bị được liệt kê.

Đề xuất: