アナログセンサを使おうとして、ADCのMCP3004を買ってきてSPI通信しようとしたのだけど、どうもSPIが使えない?
こちらのサイトを参考にして、以下Pythonを作成。
http://qiita.com/masato/items/f089a17b1c9329eb7d03
#!/usr/bin/env python3
# coding:utf-8
import spidev
spi = spidev.SpiDev()
# spi.open(bus,device)
spi.open(0,0)
def readAdc(channel):
adc = spi.xfer2([1,(8+channel)<<4,0])
print(adc)
data = ((adc[1]&3) << 8) + adc[2]
return data
def convertVolts(data, vref):
volts = (data * vref) / float(1023)
volts = round(volts,4)
return volts
if __name__ == '__main__':
ch = 0
data = readAdc(ch)
print("adc : {:8} ".format(data))
v = 3.3
volts = convertVolts(data, v)
print("volts: {:8.2f}".format(volts))
上のファイルを、ssh接続させたラズパイゼロにコピーして起動しようとした。
pi@raspberrypi:~ $ sudo python pyhome/light.py
Traceback (most recent call last):
File "pyhome/light.py", line 9, in <module>
spi.open(0,0)
IOError: [Errno 2] No such file or directory
そんなもんねーよと言われる。え。なんでや。
海外フォーラムを見てみると、以下の投稿が自分の症状と同じようだ。
https://www.raspberrypi.org/forums/viewtopic.php?t=154317
pi@raspberrypi:~ $ ls /dev/spi*
ls: /dev/spi* にアクセスできません: そのようなファイルやディレクトリはありません
spiが無いと言われる。
pi@raspberrypi:~ $ grep -i 'dtparam' /boot/config.txt
dtparam=i2c_arm=on
#dtparam=i2s=on
dtparam=spi=on
dtparam=audio=on
pi@raspberrypi:~ $ lsmod | grep spi
spidev 7034 0
spi_bcm2835aux 5235 0
spi_bcm2835 7424 0
SPI自体は認識している様子?
dtoverlay=spi1-3cs
どっかでこんなの書いてたから追記してみた。何も変わらず。
pi@raspberrypi:~ $ ls /dev/spi*
/dev/spidev1.0 /dev/spidev1.1 /dev/spidev1.2
フォーラムを一通りなぞってみたらいつの間にか出てきた。
もしかして・・・!
pi@raspberrypi:~ $ sudo python pyhome/light.py
Traceback (most recent call last):
File "pyhome/light.py", line 9, in <module>
spi.open(0,0)
IOError: [Errno 2] No such file or directory
・・・と思ったがメッセージは変わらず。
フォーラムもなんか解決しないまま終わっている様子?
どうしたものか。
###誰か助けてほしい。
##追記
コメントのご助言通りspi.open(1,0)
としたらエラーは回避された。とても助かります。
ただ、値がゼロとなる。
SPI1用の配線にしてみたが、変わらず。
うーむ。
以下気になる点。
pi@raspberrypi:~ $ ls -la /dev/spidev*
crw-rw---- 1 root spi 153, 2 9月 25 17:18 /dev/spidev1.0
crw-rw---- 1 root spi 153, 1 9月 25 17:18 /dev/spidev1.1
crw-rw---- 1 root spi 153, 0 9月 25 17:18 /dev/spidev1.2
検索すると/dev/spidev0.0、/dev/spidev0.1が出てくるのだけど、自分のには1.0~しかない。
気になる。
pi@raspberrypi:~ $ dmesg | grep spi
[ 9.451988] spi_master spi0: /soc/spi@7e204000/waveshare35a-ts@1 has no valid 'spi-max-frequency' property (-22)
[ 9.452016] spi_master spi0: Failed to create SPI device for /soc/spi@7e204000/waveshare35a-ts@1
[ 9.698613] pinctrl-bcm2835 20200000.gpio: pin gpio18 already requested by 20215080.spi; cannot claim for 20203000.i2s
[ 11.043387] spi0.1 supply vcc not found, using dummy regulator
[ 11.171913] ads7846 spi0.1: touchscreen, irq 177
[ 11.186649] input: ADS7846 Touchscreen as /devices/platform/soc/20204000.spi/spi_master/spi0/spi0.1/input/input0
[ 11.491343] pinctrl-bcm2835 20200000.gpio: pin gpio17 already requested by 20215080.spi; cannot claim for spi0.0
[ 11.491368] pinctrl-bcm2835 20200000.gpio: pin-17 (spi0.0) status -22
[ 11.491394] fb_ili9340 spi0.0: Error applying setting, reverse things back
[ 11.532846] fb_ili9340: probe of spi0.0 failed with error -22
この辺りにヒントがありそう。
こっちだとspi0.0,0.1が出て来る。ただ既に使われてる?とか書いてるように見える。
Displayの表示もいろいろある。もしかして一時期使ってた小型ディスプレイの設定が悪さしている?
cocopar 3.2インチ ディスプレイ タッチパネル
確かにSPIのディスプレイだし可能性ありそう。先に使ってたら駄目とかあるのだろうか・・・。