動作確認
ESP-WROOM-02
Adafruit Pi Zero Contest 2016で使うESP8266のプログラムを実装中。
シリアル通信で文字列を受けて、それに対する応答というのが必要になる。
シリアル通信のコードは以下を参考に自分の用途用に変更した。
http://qiita.com/exabugs/items/9d1b66aa1d22805afbc8
code (v0.2)
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>
は単純に読み捨てているのでなくてもいい。