Youtube のコメント上で海外の人とやりとりをしていて、Arduino から Android への通信は試していないことに気が付きました。ということで、試してみることにしました。
ESP-WROOM-02 の Arduinoスケッチです。Android から ON/OFF を受けたらクライアントにLEDの状態を返信するように作りました。
Android コードの通信部分は、コマンドを送信をしたら Arudino からの返信を受信するようにしました。典型的なクライアント・サーバー型のプログラムです。ベースとなるプロジェクトはこちらを参考にしてください。
実際に動いている様子はこちらです。
無事に送受信できました。Arduinoからのセンサーデータを受信できるようにするともっと面白くなりそうですね。
(^_^)/~
ESP-WROOM-02 の Arduinoスケッチです。Android から ON/OFF を受けたらクライアントにLEDの状態を返信するように作りました。
#include <ESP8266WiFi.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<String, 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
- メディア: 大型本