• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ラズパイ3のSPI通信で文字列出力)

ラズパイ3のSPI通信で文字列出力

このQ&Aのポイント
  • ラズパイ3とアトメルのマイコン搭載の基板をSPI通信で連携するためのコードをPythonで作成しています。
  • SPI通信で文字列を出力するためのコードをPythonで書いたところ、エラーが発生して実行できません。
  • 文字列をSPIポートから出力する方法について教えていただけないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.1

 もしかすると、python3の文字列がらみかなぁ。  というわけで、確認。  data=b"abcdefg"  と治してください。文字列の前のbの文字は、このリテラルが普通の文字列では無く、バイト配列であることを表すプレフィックスです。  もし、これで動くようなら、そのからくりは  http://python.civic-apps.com/python3-bytes-str-convert/  あたりを参照してみてください。  または、「phthon3 文字列 バイト列 変換」あたりでググると参考になる文献はたくさん出てきます。  簡単に言うと、xfer2は、引数としてバイト配列を要求します。そして、文字列はバイト配列では「ありません」ということです。だから、文字列を送るためにはバイト配列としてリテラルを宣言するか、バイト配列に変換する必要があると言うことです。  もし、ちゃんと動いていたプログラムのdata=の行だけを変更したのなら、多分コレでしょう。  もし違ったら、(中略)の部分で、多分引用プログラムの前。spiとgpioの初期化の部分のコードの補足が必要です。

techhouse
質問者

お礼

回答頂きありがとうございます。 https://github.com/KenjiMaehara/raspberryPiTCPClient/blob/master/testSpi161101/test20161202.py こちらのpythonコードで data=b"abcdefg" これをやってみたのですが、 $ sudo python test20161202.py test20161202.py:18: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings. GPIO.setup(16, GPIO.OUT) writing data このようなエラーが戻ってきて動作しない状態です。 エラー内容をググってみたところ、 Raspberry PiでPythonのRPi.GPIOを使ってLチカする by @ma6ato on @Qiita http://qiita.com/masato/items/715e28e0c0c945a54297 こちらのサイトにて、同様のエラー内容が発生する場合の対処方法として、 コードの最後に GPIO.cleanup() これを行うこと良いということなので、やってみたのですが、やはり同様のエラーが戻ってくる状態です。 もしよければ、教えて頂けると幸いです。

techhouse
質問者

補足

一応の解決方法が見つかりましたので、メモがてら報告させて頂きます。 (中略) data03 = "abcdefg" commSpi(data03) (中略) def commSpi(data03): (中略) list0203 = list() list0203 = [] i = 0 for x in data03: list0203.insert(i,ord(x)) i += 1 (中略) str(spi.xfer2(list0203)) このような感じで、文字列変数をリストに変換することで、spi.xfer2()でのSPIでのデータ送信でエラーは出なくなりました。