So-net無料ブログ作成
検索選択

Arduino と Android で WiFiモジュール(ESP-WROOM-02) を動かす2! [Arduino]

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


Arduino_and_Android_WiFi_bidirectionalCommunication.JPG


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)対応ブレークアウトボード

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

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






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

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

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