ラズベリーパイ B でgpioを使ったuartをしたいのですが、どうしようもなくなりまして、質問させて頂きます。
※serialをインポートしています。
※python 3.4.2を使用しています
二つ、問題があります。
わかりにくいかもしれませんが、出来るだけ詳しく書きます。回答、よろしくお願いします。
一つ目は、write()の中にstr型を入れると、
タイプエラーと返され、バイト列を代入しないと動いてくれません。
encodeで変換して代入すると動きました。
二つ目は、文字列送信時に、先頭の2文字しか正常に送ることが出来ず、そのあとは文字化けしてしまう摩訶不思議な問題です。
受信はread lineを用い、printして、出来ていることは確認できました。
こちらから送信して受信を画面表示してからこちらにそのまま送り返すプログラムで試したところ、どうも2文字までしかできません。
一つ目で挙げた、encodeして代入するやり方で出力だけ試してみても、結果は同じで、2文字までしか正常に動いてくれません。
このままですと、2文字までしか送れない悲しい事態に陥ります。だれか、助けてください(泣)
受信出力するプログラムを載せておきます。
import serial
import time
sel= serial.Serial('/dev/ttyS0',baudrate=9600)
while 1:
st=sel.readline()
print(st)
sel.write(st)
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
#「送る」とか「受信」の主語が書かれていないので、現象がどちら向きの通信のことを仰っているのか理解しにくいです。
> 二つ目は、文字列送信時に、先頭の2文字しか正常に送ることが出来ず、そのあとは文字化けしてしまう
ご提示のソースには、ポートと通信速度しか書かれておりませんが、その他のパラメータはラズパイと通信相手側と一致しているのでしょうか?
また、serial.Serialにはフロー制御のパラメータ(下記)もあるので、そちらを使用してみては如何ですか?
https://pythonhosted.org//pyserial/pyserial_api. … より
> class serial.Serial
> __init__(port=None, baudrate=9600, bytesize=EIGHTBITS, parity=PARITY_NONE, stopbits=STOPBITS_ONE, timeout=None, xonxoff=False, rtscts=False, write_timeout=None, dsrdtr=False, inter_byte_timeout=None)
> xonxoff (bool) – Enable software flow control.
> rtscts (bool) – Enable hardware (RTS/CTS) flow control.
> dsrdtr (bool) – Enable hardware (DSR/DTR) flow control.
> Note that enabling both flow control methods (xonxoff and rtscts) together may not be supported. It is common to use one of the methods at once, not both.
> dsrdtr is not supported by all platforms (silently ignored). Setting it to None has the effect that its state follows rtscts.
No.1
- 回答日時:
>write()の中にstr型を入れると、タイプエラーと返され、バイト列を代入しないと動いてくれません。
>encodeで変換して代入すると動きました。
なら解決したんじゃないの。
詳しくはないですけど
str型ってのは「ストリング」つまり「文字列」なので
使ってない値が入れば拒否、コンパイルの段階なら「あんた使い方間違ってますよ」というエラーでしょう。
>そのまま送り返すプログラムで試したところ、どうも2文字までしかできません。
受信側のハード能力が原因かもですね。
シリアルデータの受信は、「ちょっと待って今忙しいから」というプロトコルと信号線による制御方法がありますけど
それらのどちらも使ってないなら
2文字程度ならバッファ(「緩衝域」)により受け取れますけどそれ以上は無理だったりします。
回答、ありがとうございます。
こんなに早くしてくださるとは思いませんでした。
write()に関してはたしかに解決したと言ってもいいかもしれません。ただ、ネットの記事などを見るに、文字列を代入しているものですから、これでいいのかと思った次第です。
成る程、緩衝域なるものがあるのですね。思い返してみれば、picでやっていた時も、同じようなことになっていました..
picですと、1文字ごとに少し時間をおいてということが出来ますが、ラズベリーパイでそういうことはできるのか、僕の検索力では分からなかったです...
出来れば解決策などご存知でしたら、教えて頂けないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- au(KDDI) iPhoneSEを使用しています。ショートメールを使用していて入力中に70と表示されるのは70文字ま 1 2022/11/28 23:36
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Perl perlについての質問 2 2022/10/17 15:25
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- 固定電話・IP電話・FAX FAXの送受信について 2 2023/06/03 06:46
- iPhone(アイフォーン) ショートメールの文字数制限について。 3 2023/01/24 11:37
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Java Java 南京錠 2 2023/02/04 11:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エラーの意味は? Lvalue req...
-
C言語 列挙型(enum型)変数について
-
テキストボックスの値を変数に...
-
C言語 アロー演算子について質...
-
VBAでダブルコーテーション入り...
-
7行テトリスコードで分からな...
-
Variant型で宣言してるのにEmpt...
-
EXCEL/VBA 変数の値をクリップ...
-
i++と++i ってどう違うのですか?
-
verilog HDLの[=]と[<=]の使い分け
-
VB6.0 DataGridでのfirstRowの...
-
VBA 1行で複数の代入を行った...
-
C言語(高校1年の内容)について
-
画像のプログラムに関して質問...
-
初心者が簡単なPowerShellスク...
-
Access2003 オートナンバーの現...
-
Excel-vba 文字列と変数を...
-
初心者プログラミング
-
VisualStudio2022でC言語プログ...
-
プログラミングについての質問...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
エラーの意味は? Lvalue req...
-
C言語 列挙型(enum型)変数について
-
EXCEL/VBA 変数の値をクリップ...
-
整数xxxが大き過ぎますというエ...
-
テキストボックスの値を変数に...
-
[VBS]変数を定数に変換する方法...
-
Variant型で宣言してるのにEmpt...
-
jsp~jspにhiddenを使って変数...
-
processing エラーで、 "cannot...
-
python の 連鎖代入の文法
-
i++と++i ってどう違うのですか?
-
プログラミングで変数と関数の...
-
C言語 アロー演算子について質...
-
「%」を使って、偶数か奇数かを...
-
JavaScriptをURLから直接実行し...
-
VBA 1行で複数の代入を行った...
-
ExcelのVBAでをA列に第0〜19項...
-
無名関数のメリットがよくわか...
-
コマンドプロンプト バッチ|結...
おすすめ情報