- 追加された行はこの色です。
- 削除された行はこの色です。
#topicpath
** Arduino Tips [#z60736f6]
*** SPIを利用する [#m0d7f2a3]
- 概要~
SPI(Serial Peripheral Interface) は、マイコンがセンサからデータを取得するための通信方法としてよく使われている。~
同様にI2C と呼ばれる通信もある。どちらも、基本的には似た方式で通信するが、最近はSPI の方が好まれるようである。~
同様に[[I2C>../I2C]] と呼ばれる通信もある。どちらも、基本的には似た方式で通信するが、最近はSPI の方が好まれるようである。~
~
-- 基本用語~
[[Arduino の日本語リファレンス>http://www.musashinodenpa.com/arduino/ref/index.php?f=1&pos=539]]に準拠する。
--- MISO(Master In Slave Out)~
--- &color(red){MISO};(Master In Slave Out)~
デバイスの端子名。スレーブ(slave, 奴隷, マイコンから指令を受ける側)からマスタ(master, 主人, マイコン)へデータを送るときの端子。~
スレーブ側では、SDO(Serial Data Out)とかDO(Data Out)と書くこともある。~
スレーブ側では、&color(red){SDO};(Serial Data Out)とか&color(red){DO};(Data Out)と書くこともある。~
I2C でも通信できるBME280の場合 : &color(red){SDO};~
~
--- MOSI(Master Out Slave In)~
--- &color(red){MOSI};(Master Out Slave In)~
デバイスの端子名。マスタからスレーブへデータを送るときの端子。~
スレーブ側では、SDI(Serial Data In)とかDI(Data In)と書くこともある。~
スレーブ側では、&color(red){SDI};(Serial Data In)とか&color(red){DI};(Data In)と書くこともある。~
I2C でも通信できるBME280の場合 : &color(red){SDA};~
~
--- SCK(Serial ClocK)~
--- &color(red){SCK};(Serial ClocK)~
デバイスの端子名。データ転送を時に用いるクロックを流す端子。~
SCLK と書くこともある。~
&color(red){SCLK}; と書くこともある。~
I2C でも通信できるBME280の場合 : &color(red){SCL};~
~
--- SS(Slave Select)~
デバイスの端子名。MISO, MOSI, SCK の3つの端子を共通にして、複数のスレーブを1つのマスターに接続することを考える。このとき、~
マスターはどのスレーブと通信しているのか区別しなければならない。そのために、マスター側では、それぞれのスレーブと、個別に SS~
として接続して、マスター側が通信したいスレーブの SS の電圧をゼロにする。スレーブ側はそれを理解して、自分が通信する番なのか、~
--- &color(red){SS};(Slave Select)~
デバイスの端子名。&color(red){MISO};, &color(red){MOSI};, &color(red){SCK}; の3つの端子を共通にして、複数のスレーブを1つのマスターに接続することを考える。このとき、~
マスターはどのスレーブと通信しているのか区別しなければならない。そのために、マスター側では、それぞれのスレーブと、個別に &color(red){SS};~
として接続して、マスター側が通信したいスレーブの &color(red){SS}; の電圧をゼロにする。スレーブ側はそれを理解して、自分が通信する番なのか、~
それとも待機する番なのかを理解する。~
マスター側にはスレーブの個数だけ SS を用意する。~
スレーブ側は、SS は一つである。スレーブ側の SS は CS(Chip Select)と書くことがある。~
マスター側にはスレーブの個数だけ &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]]