SSブログ

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
  • メディア: 大型本




nice!(45)  コメント(2)  トラックバック(0) 
共通テーマ:趣味・カルチャー

nice! 45

コメント 2

kei

こんにちは。
いつも楽しく拝見しています。

>>Arduinoからのセンサーデータを受信できるようにするともっと面白くなりそうですね。

私は今ここでセンサーデータを更新できず止まっています。
ぜひ実装し詳細を今まで以上に丁寧に投稿してくださいねー。
応援してます!
by kei (2016-09-12 10:53) 

ys_oota

keiさん、いつもご覧いただきありがとうございます。

あれ?随分前にやったような記憶があるのですが、記事にしていなかったのですね。記憶を絞り出して、そのうち記事にしたいと思います。ネタの提供ありがとうございます。^^
by ys_oota (2016-09-12 23:02) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。