質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

3回答

6255閲覧

ラズパイzeroとArduino間のGPIOピンを用いたシリアル通信のプログラム

threestars

総合スコア9

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2018/07/28 12:34

編集2018/07/28 12:44

前提・実現したいこと

現在ラズパイzero WとArduino間でGPIOピンを用いてシリアル通信をしようとしています.
ラズパイ側でPythonを用いたプログラムでデータを送ろうとしているのですが,データを送ろうとした行で止まってしまい,動かなくなります.
よろしくお願いします.

発生している問題・エラーメッセージ

エラーメッセージ無し

該当のソースコード

Python

1import serial 2import time 3ser serial.Serial 4ser.port = '/dev/ttyAMA0' 5ser.baudrate = 9600 6ser.open() 7time.sleep(2) 8ser.write('a') //ここで動かなくなる 9time.sleep(2)

---Arduino側
byte val=0;
int led = 13;

void setup() {
pinMode(led, OUTPUT);
Serial.begin(9600);
}

void loop() {
if(Serial.available() > 0){

val = Serial.read(); Serial.print(val); //for debug if(val == 'a'){ digitalWrite(led,HIGH); delay(1000); } else if(val == '0') { digitalWrite(led,LOW); delay(1000); } }

}


試したこと

ser = serial.Serial('/dev/ttyACM0', 9600)を試した際に,エラーメッセージが出なかったので,指定するportの名前はおそらく間違ってないと思います.

補足情報(FW/ツールのバージョンなど)

python のバージョンはpython 2.7です.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

他の回答者殿に追加。ラズパイは3.3V、Arduinoの一般的なUNOなどは5Vなのでもし電圧が違う機種ならばレベル変換の必要が。
参考
Raspberry PIのGPIO上シリアルとArduinoの通信

それとそのGPIOのPINが正しいか?を確認するにはTXとRXをつないで自分自身が送信した結果が受信できるか?を確認。

mt08殿のportが正しいか?が確認できます。

投稿2018/07/28 23:06

MasahikoHirata

総合スコア3747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

threestars

2018/07/29 02:06

ありがとうございます!通信できました!
guest

0

ベストアンサー

threestarsさん、

/dev/ttyAMA0 を、/dev/serial0にしてみてください。

ラズパイのフォーラムのトピック python hangs on serial write()の回答から、です。

Try changing all instances of "/dev/ttyAMA0" to "/dev/serial0" in your code.
That's 'serialZero', not 'serialOh'.

By default on a Pi Zero W, '/dev/ttyAMA0' is reserved by the system to talk to the Bluetooth Controller.
The 'serial0' alias is the new way to address the Serial Port, and should work on all Pi models running up to date Raspbian.

(グーグル先生翻訳改)
あなたのコードで "/dev/ttyAMA0"のすべてのインスタンスを "/dev/serial0"に変更してみてください。
それは 'serialZero'であり、 'serialOh'ではありません。
Pi zero Wではデフォルトで、 '/dev/ttyAMA0'はBluetoothコントローラと通信するためにシステムによって予約されています。
'serial0'エイリアスはシリアルポートを扱う新しい方法で、最新のRaspbianを実行しているすべてのPiモデルで動作するはずです。

投稿2018/07/28 18:14

mt08

総合スコア1825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

threestars

2018/07/29 02:06

ありがとうございます!!無事にデータを送ることができました!!本当にありがとうございます!!
guest

0

指定するportの名前はおそらく間違ってないと思います.

おそらく、で動いてくれるなら、90%のデバッグは必要なくなりますね
しっかり確認しておいてください。


第13回: GPIOを汎用UARTに設定する
シリアルを有効にするにはいろいろ設定が必要と書いてありますが、ここらへんは大丈夫でしょうか。

投稿2018/07/28 12:40

編集2018/07/28 13:00
y_waiwai

総合スコア87749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

threestars

2018/07/28 13:03

そちらのページを参考にして設定をしました.
y_waiwai

2018/07/28 13:05

で、その通りになってるのか確認してみよう。 GPIOのピンには間違いはないのか、接続は間違いはないのか、などなど。 全部間違っていないと言うなら、なにも言えることはなくなりますわな。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問