- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ラズパイ3のSPI通信で文字列出力)
ラズパイ3のSPI通信で文字列出力
このQ&Aのポイント
- ラズパイ3とアトメルのマイコン搭載の基板をSPI通信で連携するためのコードをPythonで作成しています。
- SPI通信で文字列を出力するためのコードをPythonで書いたところ、エラーが発生して実行できません。
- 文字列をSPIポートから出力する方法について教えていただけないでしょうか。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
もしかすると、python3の文字列がらみかなぁ。 というわけで、確認。 data=b"abcdefg" と治してください。文字列の前のbの文字は、このリテラルが普通の文字列では無く、バイト配列であることを表すプレフィックスです。 もし、これで動くようなら、そのからくりは http://python.civic-apps.com/python3-bytes-str-convert/ あたりを参照してみてください。 または、「phthon3 文字列 バイト列 変換」あたりでググると参考になる文献はたくさん出てきます。 簡単に言うと、xfer2は、引数としてバイト配列を要求します。そして、文字列はバイト配列では「ありません」ということです。だから、文字列を送るためにはバイト配列としてリテラルを宣言するか、バイト配列に変換する必要があると言うことです。 もし、ちゃんと動いていたプログラムのdata=の行だけを変更したのなら、多分コレでしょう。 もし違ったら、(中略)の部分で、多分引用プログラムの前。spiとgpioの初期化の部分のコードの補足が必要です。
お礼
回答頂きありがとうございます。 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() これを行うこと良いということなので、やってみたのですが、やはり同様のエラーが戻ってくる状態です。 もしよければ、教えて頂けると幸いです。
補足
一応の解決方法が見つかりましたので、メモがてら報告させて頂きます。 (中略) 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でのデータ送信でエラーは出なくなりました。