Youtube のコメント上で海外の人とやりとりをしていて、Arduino から Android への通信は試していないことに気が付きました。ということで、試してみることにしました。





ESP-WROOM-02 の Arduinoスケッチです。Android から ON/OFF を受けたらクライアントにLEDの状態を返信するように作りました。


#include &ltESP8266WiFi.h>

const char* ssid = "your ssid";
const char* password = "your password";
const int LED = 16;

WiFiServer server(8080);
WiFiClient client;

void connectWiFi(const char* ssid ,const char* password) {

WiFi.disconnect();
WiFi.mode(WIFI_STA);
WiFi.begin(ssid ,password);

while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}

void setup() {
Serial.begin(115200);
connectWiFi(ssid ,password);
server.begin();
client = server.available();

pinMode(LED ,OUTPUT);
}

void loop() {

while ((WiFi.status() != WL_CONNECTED)) {
connectWiFi(ssid ,password);
}

while (!client) {
client = server.available();
delay(10);
}

while (!client.available()) {
delay(10);
}
Serial.println("client connected");

String res = client.readStringUntil('\n');
Serial.println(res);
client.flush();

if (res.equals("ON")) {
digitalWrite(LED ,HIGH);
client.print("LED:ON");
}
else if (res.equals("OFF")) {
digitalWrite(LED ,LOW);
client.print("LED:OFF");
}
else {
Serial.println("ERROR");
client.print("error");
}
client.stop();
}



Android コードの通信部分は、コマンドを送信をしたら Arudino からの返信を受信するようにしました。典型的なクライアント・サーバー型のプログラムです。ベースとなるプロジェクトはこちらを参考にしてください。



public class AsyncSocket extends AsyncTask&ltString, Void, String> {
private String mIpAddress = null;
private Integer mPortNo = 0;
private TextView mText = null;

public AsyncSocket(String ipStr, String portStr ,TextView status) {
mIpAddress = ipStr;
mPortNo = Integer.parseInt(portStr);
mText = status;
}

@Override
protected String doInBackground(String... params) {
String data = "";
try {
Socket socket = new Socket(mIpAddress, mPortNo);
OutputStream out = socket.getOutputStream();
Scanner in = new Scanner(socket.getInputStream());
out.write(params[0].getBytes());
out.flush();
while(!in.hasNextLine());
do {
data += in.nextLine();
} while (in.hasNextLine());
out.close();
in.close();
socket.close();
return data;
} catch (IOException e) {
e.printStackTrace();
return "Socket Failure";
}
}

@Override
protected void onPostExecute(String s) {
mText.setText(s);
}
}



実際に動いている様子はこちらです。




無事に送受信できました。Arduinoからのセンサーデータを受信できるようにするともっと面白くなりそうですね。
(^_^)/~





ESP-WROOM-02実装済みmikroBUS(R)対応ブレークアウトボード

  • 出版社/メーカー: マイクロテクニカ
  • メディア: おもちゃ&ホビー






[改訂版]Android Studioではじめる 簡単Androidアプリ開発

  • 作者: 有山 圭二
  • 出版社/メーカー: 技術評論社
  • 発売日: 2016/01/07
  • メディア: 大型本