Isi kandungan:

Peranti Raspberry PI Pelbagai I2C: 3 Langkah
Peranti Raspberry PI Pelbagai I2C: 3 Langkah

Video: Peranti Raspberry PI Pelbagai I2C: 3 Langkah

Video: Peranti Raspberry PI Pelbagai I2C: 3 Langkah
Video: RAMPS 1.4 - LCD (REPRAP DISCOUNT SMART CONTROLLER) 2024, November
Anonim
Peranti Raspberry PI Pelbagai I2C
Peranti Raspberry PI Pelbagai I2C
Peranti Raspberry PI Pelbagai I2C
Peranti Raspberry PI Pelbagai I2C

Rasa kecewa kerana anda tidak dapat menggunakan gandaan peranti I2C yang sama dalam projek anda. Tidak perlu menggunakan multiplexer perlahan. Kernel raspbian terbaru menyokong pembuatan beberapa bas I2C menggunakan pin GPIO. Penyelesaian ini sangat pantas.

Langkah 1: Beberapa Perintah Shell

Beberapa Perintah Shell
Beberapa Perintah Shell

Sambungkan salah satu peranti i2c anda semasa pi raspberry anda, mulakan pi raspberry anda dan jalankan

sudo i2cdetect -y 1

Anda akan melihat jadual seperti di gambar lampiran. Saya telah memasang sensor tekanan suhu dan barometrik BMP280. Alamat i2c adalah 0x76 mengikut jadual. Perhatikan alamat ini.

Lakukan ini untuk semua peranti i2c anda.

Langkah 2: Kes Pertama: Peranti I2c Mempunyai Alamat yang Sama

Kes Pertama: Peranti I2c Mempunyai Alamat yang Sama
Kes Pertama: Peranti I2c Mempunyai Alamat yang Sama

Ini selalu menjadi masalah. Bas i2c dapat menangani beberapa peranti, tetapi mereka harus mempunyai alamat i2c yang berbeza. Beberapa peranti i2c mempunyai jumper untuk menetapkan alamat i2c lain, tetapi banyak yang tidak. Dalam kes ini, anda mungkin menggunakan multiplexer i2c (perkakasan) untuk memutar SDA i2c (Data) dan SCL (Jam) atau anda boleh membuat bas i2c tambahan atau lebih.

Saya akan membuat dua bas tambahan, bas 3 dan 4

Buka cli dan jalankan

cd / but

sudo nano config.txt

Tambahkan baris kod berikut, lebih baik di bahagian di mana spi dan i2c diaktifkan.

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

Jalur ini akan membuat bas i2c tambahan (bas 4) pada GPIO 23 sebagai SDA dan GPIO 24 sebagai SCL (GPIO 23 dan 24 adalah lalai)

Tambahkan juga baris berikut untuk membuat bas i2c 3

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

GPIO 17 akan menjadi SDA dan GPIO 27 akan menjadi SCL untuk bas 4 i2c.

Paip kawalan X untuk keluar.

Catatan mengenai Penomboran Bas dan pesanan:

Jangan sekali-kali menggunakan bas 0 dan 2, ia digunakan untuk perkara lain di papan seperti eprom pada topi dll

Untuk siaran raspbian April 2019:

Anda harus selalu bermula dengan bas tertinggi (Bus 4 dalam kes ini) dalam config.txt anda dan terus ke bas terendah (bas 3).

Bas paling rendah mesti selalu bas 3

Sekiranya anda memerlukan 5 bas tambahan, bas mesti mengikut urutan 7, 6, 5, 4, 3

Masalah mengenai pesanan bas ini tidak ada ketika Instructable ini asalnya ditulis. Nampaknya perubahan dibuat pada kernel.

Matikan PI anda, alihkannya. Sambungkan peranti i2c anda ke bas 4 (SDA ke GPIO 23 dan SCL ke GPIO 24) dan yang lain ke bas i2c 3 (SDA ke GPIO 17 dan SCL ke GPIO 27).

Hidupkan pi.

Jalankan:

sudo i2cdetect -l (Huruf Kecil L)

Anda sekarang akan melihat bahawa bas i2c 3 dan 4 juga disenaraikan. Jalankan juga:

sudo i2cdetect -y 3

sudo i2cdetect -y 4

Sekarang anda boleh menggunakan sensor anda dalam bahasa pengaturcaraan anda. Ingatlah untuk menentukan bas i2c yang betul.

Lampirkan adalah contoh untuk sensor Suhu dan Tekanan BMP280 yang popular. Tidak ada multiplexer yang dapat membaca 2 BMP280s secepat ini.

Contoh 2 Sensor SDP 810 sensor juga dilampirkan. Sekali lagi berfungsi lebih pantas daripada multiplexer yang saya gunakan pada masa lalu

Saya membuat kod python untuk membaca dua BMP388 baru dari adafruit.

Saya juga boleh menambahkan sensor lain pada masa akan datang ke

Langkah 3: Kes 2: Alamat I2c yang berbeza

Ringkas. i2c adalah bas. Tujuan bas adalah untuk berkomunikasi dengan pelbagai peranti. Sambungkan peranti selari dengan bas i2c yang sama. Anda boleh menggunakan bas satu.

Jalankan:

sudo i2cdetect -y 1

Anda akan melihat peranti yang disenaraikan.

Disyorkan: