LoginSignup
1
2

More than 5 years have passed since last update.

ESP8266 > シリアルUART通信処理 > コマンドを読み込んで応答 (v0.2)

Last updated at Posted at 2016-02-19
動作確認
ESP-WROOM-02

Adafruit Pi Zero Contest 2016で使うESP8266のプログラムを実装中。

シリアル通信で文字列を受けて、それに対する応答というのが必要になる。

シリアル通信のコードは以下を参考に自分の用途用に変更した。
http://qiita.com/exabugs/items/9d1b66aa1d22805afbc8

code (v0.2)

v0.2 @ github

esp8266_160220_BYOP.ino

/*
 * This program is used for a message station shown at
 * https://hackaday.io/project/9526-bring-your-own-pizero-byop
 */


/*
 * v0.2 2016 Feb 20
 *  - fix Serial_readCommand() to handle CR code
 *  - add Serial_replyToCommand()
 * v0.1 2016 Feb 20
 *  - add Serial_readCommand()
 *  - add serial setup
 */

//-------------------------------------------------------------------------
// static declarations

static const char kCodeCR = '\r';
static const char kCodeLF = '\n';

static String s_serialReceiveBuff = "";
static bool s_serialClearOnNext = false;
//-------------------------------------------------------------------------
void setup() {
  Serial.begin(115200); 
}

String Serial_readCommand()
{
  if (Serial.available() == 0) {
    return "";  
  }

  if (s_serialClearOnNext) {
    s_serialClearOnNext = false;
    s_serialReceiveBuff = "";
  }

  char code;
  while(Serial.available() > 0) {
    code = Serial.read();
    if (code == kCodeCR) {
      continue;
    }
    if (code == kCodeLF) {
      s_serialClearOnNext = true;
      return s_serialReceiveBuff;
    } else {
      s_serialReceiveBuff += code;
    }
  }
}

void Serial_replyToCommand(String cmdline)
{
  if (cmdline.equals("hello")) {
    Serial.println("hello, 7of9");
  } else {
    Serial.println(cmdline);    
  }
}

void loop() {
  String rcvd = Serial_readCommand();
  if (rcvd.length() > 0) {
    Serial_replyToCommand(rcvd);
  }
}

実行例

動作確認は「シリアルモニタ」で115200bpsにして行う。

以下の入力をしたとする。

入力
hello<CR><LF>
test<CR><LF>
hello<CR>
abc<CR>
hll<CR>

それぞれの応答は以下のようになる。

応答
hello, 7of9
test
hello, 7of9
abc
hll

受信文字列の判断は equals() を使っているが、そのうち、カンマ区切りをパースするようにする。
https://www.arduino.cc/en/Reference/StringEquals

備考

<LF>を改行のコードとしているため1つは入れないといけない。
<CR>は単純に読み捨てているのでなくてもいい。

1
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2