#topicpath ** Arduino Tips [#z60736f6] *** SPIを利用する [#m0d7f2a3] - 概要~ SPI(Serial Peripheral Interface) は、マイコンがセンサからデータを取得するための通信方法としてよく使われている。~ 同様に[[I2C>../I2C]] と呼ばれる通信もある。どちらも、基本的には似た方式で通信するが、最近はSPI の方が好まれるようである。~ ~ -- 基本用語~ [[Arduino の日本語リファレンス>http://www.musashinodenpa.com/arduino/ref/index.php?f=1&pos=539]]に準拠する。 --- &color(red){MISO};(Master In Slave Out)~ デバイスの端子名。スレーブ(slave, 奴隷, マイコンから指令を受ける側)からマスタ(master, 主人, マイコン)へデータを送るときの端子。~ スレーブ側では、&color(red){SDO};(Serial Data Out)とか&color(red){DO};(Data Out)と書くこともある。~ I2C でも通信できるBME280の場合 : &color(red){SDO};~ ~ --- &color(red){MOSI};(Master Out Slave In)~ デバイスの端子名。マスタからスレーブへデータを送るときの端子。~ スレーブ側では、&color(red){SDI};(Serial Data In)とか&color(red){DI};(Data In)と書くこともある。~ I2C でも通信できるBME280の場合 : &color(red){SDA};~ ~ --- &color(red){SCK};(Serial ClocK)~ デバイスの端子名。データ転送を時に用いるクロックを流す端子。~ &color(red){SCLK}; と書くこともある。~ I2C でも通信できるBME280の場合 : &color(red){SCL};~ ~ --- &color(red){SS};(Slave Select)~ デバイスの端子名。&color(red){MISO};, &color(red){MOSI};, &color(red){SCK}; の3つの端子を共通にして、複数のスレーブを1つのマスターに接続することを考える。このとき、~ マスターはどのスレーブと通信しているのか区別しなければならない。そのために、マスター側では、それぞれのスレーブと、個別に &color(red){SS};~ として接続して、マスター側が通信したいスレーブの &color(red){SS}; の電圧をゼロにする。スレーブ側はそれを理解して、自分が通信する番なのか、~ それとも待機する番なのかを理解する。~ マスター側にはスレーブの個数だけ &color(red){SS}; を用意する。~ スレーブ側は、&color(red){SS}; は一つである。スレーブ側の &color(red){SS}; は &color(red){CS};(Chip Select)と書くことがある。~ I2C でも通信できるBME280の場合 : &color(red){CSB};~ ~ -- ピンの数~ これらの信号線を全部使うとなると、マスター側は3+スレーブの数 だけのピンを使うことになる。しかし、 slave がひとつである場合には、これを減らすことができる。残すべきピンについては以下の通りである。 #style(class=table_left) |ピンの数 | 残すピン |h |4 | 全部(MISO,MOSI, SCK, SS)| |3 | MISO, MOSI, SCK | |2 | MOSI, SCK| #clear ~ - 実際の接続~ ゆるい規格なので、方言が強いようである。それぞれのチップに応じて対応する。 -- 接続例~ --- [[典型的な Arduino に気圧センサSCP1000を接続する>https://www.arduino.cc/en/Tutorial/BarometricPressureSensor]] --- [[ESP32 に 気圧センサBME280を HSPI で接続する>https://www.mgo-tec.com/blog-entry-esp32-bme280-sensor-library.html]](後半です。) ~ - 参考URL -- [[Arduino の日本語リファレンス>http://www.musashinodenpa.com/arduino/ref/index.php?f=1&pos=539]] -- [[「SPI」の解説>https://synapse.kyoto/glossary/glossary.php?word=SPI]]