e-tipsmemo

ごった煮

Raspberry piでSPI通信

RaspberryでSPIする必要がでてきてその方法を調べたのでメモ。
しかもPythonじゃないといけない。
python好きじゃないけど

pi@raspberrypi:~ $ cat /proc/version
Linux version 4.14.66-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.9.3 (crosstool-NG crosstool-ng-1.22.0-88-g8460611)) #1137 SMP Fri Aug 24 16:36:53 BST 2018

raspi-configとかそんなコマンドを打てばSPIを有効にできたりした気がする。
または,/boot/config.txtに以下追記

qiita.com

#!/usr/bin/env python
import time
import sys
import spidev
import RPi.GPIO as GPIO

spi = spidev.SpiDev()
spi.open(0,0)
spi.no_cs = True
spi.max_speed_hz =

SS_list = [4,18,17,8]

GPIO.setmode(GPIO.BCM)
GPIO.setup(SS_list, GPIO.OUT)

if __name__ == '__main__':
        try:
                while True:
                        GPIO.output(4, GPIO.LOW)
                        spi.xfer2([0x55,xAA])
                        GPIO.output(4, GPIO.HIGH)
                        print("hello")

                        time.sleep(1)
        except KeyboardInterrupt:
                GPIO.cleanup();
                spi.close()
                sys.exit(0)

テストコード一秒ごとにSPI通信する。

Slave Selectを複数使いたかったのでGPIO moduleもインポートしている。

CE0をマニュアルで操作したかった。
www.raspberrypi.org

SPI_CPOL    - Clock polarity
SPI_CPHA    - Clock phase
SPI_CS_HIGH - Chip Select active high
SPI_NO_CS   - 1 device per bus, no Chip Select
SPI_3WIRE   - Bidirectional mode, data in and out pin shared

SPI_NO_CSを指定すればいいらしい
のでspidevでそのように設定している。

Raspberry Pi 3 Model B+ スターターセット BASIC

Raspberry Pi 3 Model B+ スターターセット BASIC