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

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

新規登録して質問してみよう
ただいま回答率
85.37%
バイナリ

バイナリは、「0」と「1」だけで表現されている2進数のデータ形式。または、テキスト以外の情報でデータが記述されているファイルを指します。コンピューター内の処理は全て2進数で表記されています。

XBee

XBeeは、Digiインターナショナル社が提供するZigBee規格対応の通信モジュール。IoTプロトタイプの無線化などに用いられます。PCの専用ソフトウェアから全てのモジュールの設定ができるため、比較的簡単に使用することが可能です。

シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

Arduino

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

Q&A

解決済

2回答

2039閲覧

ArduinoからXBeeにバイナリの送信ができません

trainweather

総合スコア23

バイナリ

バイナリは、「0」と「1」だけで表現されている2進数のデータ形式。または、テキスト以外の情報でデータが記述されているファイルを指します。コンピューター内の処理は全て2進数で表記されています。

XBee

XBeeは、Digiインターナショナル社が提供するZigBee規格対応の通信モジュール。IoTプロトタイプの無線化などに用いられます。PCの専用ソフトウェアから全てのモジュールの設定ができるため、比較的簡単に使用することが可能です。

シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

Arduino

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

0グッド

0クリップ

投稿2018/10/25 14:12

APIモードのXBeeをArduinoに接続し
7E 00 13 10 01 00 13 A2 00 41 06 A9 47 FF FE 00 00 48 65 6C 6C 6F 11
以上のようなバイナリデータをシリアルで送信しようとしています。

ところが、以下のようなコードを書いても全く反応がありません。

Arduino

1byte A = 0x7E001310010013A2004106A947FFFE000048656C6C6F11; 2 3void setup() { 4 Serial.begin(115200); 5} 6 7void loop() { 8 Serial.println(A); 9 delay(1000); 10}

シリアルポートで監視をしても文字化けしたものしか表示されませんでした。
どのようにAPIのフレームを直接送れば良いのか教えていただけると助かります。

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

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

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

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

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

guest

回答2

0

それ、ちゃんとコンパイルできますか?

また、バイナリ送信するといいながらなんでprintlnを使ってるんでしょうか。
これは文字列を送信する関数じゃないんでしょうか

バイナリ受信で文字化けとは?どういう文字列が来るのを期待してるんでしょうか
バイナリの意味を勘違いしてるのでは

まず、XBeeを繋ぐより前に、PCをつないで正常に通信できているかを確認したほうがいいかと思いますが。

投稿2018/10/25 14:37

編集2018/10/25 14:46
y_waiwai

総合スコア88024

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

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

trainweather

2018/10/25 15:08

回答ありがとうございます。 >>なんでprintln Serial.writeにすると□が表示されるだけだったのでprintlnにしてみましたが、結局望みのものは出てきませんでした。 >>バイナリの意味を勘違いしてるのでは 普段はPythonなのですが、Pythonだと bytearray.fromhex("7E 00 12 10 01 00 13 A2 00 40 D5 D4 63 FF FE 00 00 74 65 73 74 30") この様な形式のものをSerial.write()しております。 APIのパケットのが送信できれば問題ありません。 >>正常に通信できているかを確認したほうがいい ATモードでの文字の送受信は問題なく行えました。
y_waiwai

2018/10/25 15:12 編集

バイナリの文字列を送信するなら、 byte A []="7E 00 12 10 01 00 13 A2 00 40 D5 D4 63 FF FE 00 00 74 65 73 74 30"; としましょう まあ、こういう文字列の送信になりますが。
trainweather

2018/10/25 15:34

文字列をシリアルでXBeeに送っても特に反応はありませんでした。 pythonで言うところの b'0x7E 00 12 10 01 00 13 A2 00 40 D5 D4 63 FF FE 00 00 74 65 73 74 30' が送信されればいいはずなのですが...
y_waiwai

2018/10/25 15:45

受信側はどういうコードですか? まずはテキストのやり取りをきちんとできるようにしましょう。 それができないうちはバイナリなぞ無理ですぜ
trainweather

2018/10/25 16:06

受信側は送信されれば勝手に読み込むようなつくりなので、特にコードは存在していません...
y_waiwai

2018/10/25 22:06

その文字化けが表示される、という時点でバイナリの受信に対応してません #バイナリ、は文字とは違うんで
y_waiwai

2018/10/26 03:26

えー、バイナリデータというのは、文字でないデータも含まれます 例えば、Aの文字は、0x41というデータで、Bの文字は0x42というデータです バイナリデータで、 41 42 ときたら、その表示には AB と表示されます しかし、 7E 00 というデータが来たときは、こんなデータは文字には存在しないので、結果、あなたのいう文字化けした、という表示がなされることになります さて、あなたはなにをしたいのでしょう。 現在、文字しか表示できないそのあなたの受信装置に、本当にバイナリデータを流せば、文字化けしまくりのワケワカランデータが表示されることになりますが、あなたはそういうことをしたいのでしょうか。 まずは、そのあなたの持っている受信装置を、バイナリデータに対応したものに取り替える必要があります
y_waiwai

2018/10/26 03:52

だから、その受信装置の方をどうにかしましょうよ
trainweather

2018/10/26 05:55

https://forum.arduino.cc/index.php?topic=473500.0 この方と全く同じ症状です。 ATモードだと問題なく送受信できます。 見たところこの人も解決してないようなので、不可能なのかもしれません。 XBeeのバージョンが変わったせいなのかは分かりませんが、xbee-arduinoライブラリでいろいろ試しましたが動かないようなので。
y_waiwai

2018/10/26 06:03

いや、不可能でもなんでもないです あなたのその受信装置が、テキストでしか対応していないために、バイナリデータを見ることができないだけ、です ATコマンドというのは、チェキストデータしか送りません。そりゃそれでは正常に見れるでしょ。 だけど、バイナリデータは見れません。
trainweather

2018/10/26 06:15

ようやく納得しました。 XBeeをシールドでPCに接続しているだけではダメみたいですね。 バイナリを受信できるようにしないと。
trainweather

2018/10/26 07:24

すみません、XBee側の問題でした。
guest

0

自己解決

API with escapeに変更することで解決しました。

※追記
結局ライブラリでやることにしました。

投稿2018/10/26 07:23

編集2018/10/27 04:17
trainweather

総合スコア23

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

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

raspypy

2019/07/09 01:50

私もまったく同じ状況で困っております。 もし私の状況を読んでいただき、アドバイス等いただけると助かります。 [私の環境] 親機 XBee Pro S2B (Cordinator API1に設定) 子機 Xbee Pro S2B (Router API1に設定) ⇔(USART接続) ⇔マイコン ※ちなみにAPI2でも試しましたが、状況は変わらずでした。 子機をATに設定して、マイコンからデータ{0x74,0x65,0x73,0x74}を送ると、 親機は"test"{0x74,0x65,0x73,0x74}というデータを受信できます。 しかし、APIに設定し、 次のデータを送っても、親機(XCTU)のconsole画面に何も表示されません。(データ受信がない) XCTU{0x7E,0x00,0x12,0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x74,0x65,0x73,0x74,0x31} trainweatherさまが言われている「バイナリで受信できるようにしないと」の部分が気になっているのですが、これを解決する方法が分からず、困っています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問