MCP3008を用意し、以下のようにつなぐ。
(可変抵抗は観察用で、実際には必要な電圧入力を設定する)

次のようなスクリプトを書く。
fa.spi("init",1000);
fa.spi("cs",0);
fa.spi("write",0x01);
a = fa.spi("write",0x80);
b = fa.spi("write",0xFF);
fa.spi("cs",1);
fa.spi("read");
s = bit32.bor(bit32.lshift(bit32.band(a,0x03),8),b)
v = 3.3*s/1023;
print("CH0:"..v.."[V]");
一応解説を入れておくと、
0x01はスタートビット
0x80は測定指示(シングルエンド・CH0・ダミー)
0xFFはダミーである。
a,bに合計10bitのデータが入るので、sで結合し、vで電圧にしている。
MCP3008は厳密にはSPIではない(8bit刻みではない)のだが、
SPIでも互換で使えるように設計されており、
データシートにあるSPI機能を用いた使い方そのままである。
cs=1の後、空読みしているのは、前回の記事に載せた仕様(orバグ)ためである。
センサー情報をWi-Fiで飛ばしたい、あるいはスマホから読み取りたい時には便利なので
試してみてほしい。
より多くのセンサーを繋ぎたいのであれば、I2C変換機能を持ったボード
(秋月FlashAir DIP IOボードもしくはAirioRP)を使い、
I2Cで繋がるA/DコンバータICを使うことをおすすめする。
(細工をすれば、あまった1ピンで2つのSPIスレーブを制御することもできるが)
