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

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

新規登録して質問してみよう
ただいま回答率
85.48%
シリアルポート

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Arduino

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

IoT

IoT(Internet of Things)とは、インターネットがコンピュータなどの情報・通信機器のネットワークだけでなく、世の中のある様々なモノに接続されて自動認識・自動制御・遠隔計測などの能力を備えることです。「モノのインターネット」と一般的にいわれます。

Q&A

2回答

816閲覧

WioLTEとArduinoとのシリアル通信

daichi-

総合スコア12

シリアルポート

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Arduino

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

IoT

IoT(Internet of Things)とは、インターネットがコンピュータなどの情報・通信機器のネットワークだけでなく、世の中のある様々なモノに接続されて自動認識・自動制御・遠隔計測などの能力を備えることです。「モノのインターネット」と一般的にいわれます。

0グッド

0クリップ

投稿2019/12/12 06:48

WioLTEを使ってArduino pro miniに対してシリアル通信を使って文字列を送信したいです。

ArduinoからWioLTEに対してシリアル通信を使って文字列を表示することはできましたが、その逆ができません。
WioLTEからUARTポートを使って文字列を送信しようと文字化けが起こります。

Arduinoはソフトウェアシリアルを使っています。
##WioLTE 送信側コード

#include <WioLTEforArduino.h> WioLTE Wio; #define UART_BAUD_RATE 19200 void setup() { Wio.Init(); Wio.PowerSupplyGrove(true); Serial.begin(UART_BAUD_RATE); SerialUSB.begin(UART_BAUD_RATE); SerialUSB.println("TESTかいし"); } void loop() { Wio.LedSetRGB(0,0,50); if(SerialUSB.available() > 0) { command((String)SerialUSB.readString()); SerialUSB.println(); } } void command(String c) { SerialUSB.print(c); Serial.print(c); delay(100); }

##Arduino pro mini 受信側コード

#include "Wire.h" #include <avr/interrupt.h> #include <MsTimer2.h> #include <SoftwareSerial.h> #include <avr/sleep.h> #include <avr/wdt.h> // UARTのボーレート[BPS] #define UART_BAUD_RATE 19200 // データ送信用UART SoftwareSerial TEST(11, 12); // RX, TX void setup() { Serial.begin(UART_BAUD_RATE); TEST.begin(UART_BAUD_RATE); } void loop() { if(TEST.available() > 0) { Serial.print("現在のデータ数:"); Serial.println(TEST.available()); String str = TEST.readString(); Serial.print("received:"); Serial.println((String)str); } }

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

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

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

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

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

guest

回答2

0

Wio-LTEってSTM32で3.3V、Arduino PRO MINIが5Vだとすると、Wio->Arduinoの場合電圧が足りてない、という可能性もあるのでは。(逆のWioのGrove UARTは5V大丈夫...だね。)

そもそも真面目に受信するならそっちの方にハードのUARTを割り当てて、単に垂れ流しで出せばいいだけの方をソフトシリアルで処理するほうが妥当だと思う。

単に右から左へデータを中継するだけなら、いま作っているのは文字コードについては責任を持つところではありません。どういう環境で試しているか知りませんが、最初の(WioLTEのUSBにデータを流し込んでいる)送りと最後の(Arduinoの出力を受けている)受けがどういうことをしているか、です。

投稿2019/12/14 02:46

thkana

総合スコア7629

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

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

0

日本語の通信というのは文字コードがあってないと文字化けが起こります
それぞれのコードの文字コードはなにか調べてみてください。

こういうマイコンで文字コード変換というのは荷が重いため、英数字のみで通信を行うようにしてはどうでしょう


それと、SoftwareSerialというのは送信するのはまだいいですが、受信となるとCPUの負担が大きいです。
もしかするとそこらへんで文字化け(通信エラー)を起こしてるのかもしれません
ボーレートを落として通信してみてください(9600とか4800とか)

投稿2019/12/12 06:52

編集2019/12/12 07:25
y_waiwai

総合スコア87747

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

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

daichi-

2019/12/13 14:30

回答ありがとうございます! あれからWioLTE側からArduinoへ'1'という文字列を送っているのですが"255"と表記されてしまいます。 Arduino側で文字コードの変換等をしないとダメなのでしょうか
y_waiwai

2019/12/13 22:21

Serial.read関数は受信されてないときに-1が返されますがそれでしょうか。 0以上を判断してその値を取り込みましょう。 シリアル通信というのは遅いです
daichi-

2019/12/14 17:24

いえ、書き方が下手ですみません。serial.write()で任意の数字を送った場合に、255と出力されてしまいます。しかし、受信したデータの出力をずっと確認していると、239などの数字が出力される場合があります。やはり、データが壊れているのでしょうか。
y_waiwai

2019/12/14 22:36

なんの関係もないデータがでてくるというのは通信エラーが起きてるってのも考えられます 回答にも書いてますが、まずは通信速度を落としてみればどうでしょう。 それで正常な値が出てくるのか、なにか状態が変わるのか見てみましょう
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問