前回は PCからWiFi経由で ESP-WROOM-02 を動かすことができました。今回はいよいよスマホ(Android)からコントロールできるようにしたいと思います。





Androidのプログラミングには、Android Studio を使ってみました。まず画面の設計をします。IPアドレスとポート番号を設定できるようにエディットテキスト、ステータス表示用テキスト、そしてON,OFF用のボタンを配置しました。





次にスマホからインターネットアクセスできるように、AndroidManifest.xml に”android.permission.INTERNET"を追加します。


<?xml version="1.0" encoding="utf-8"?>
&ltmanifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.blinkled" >

&ltuses-permission android:name="android.permission.INTERNET"/>

&ltapplication
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
&ltactivity android:name=".MainActivity" >
&ltintent-filter>
&ltaction android:name="android.intent.action.MAIN" />
&ltcategory android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>



プログラムの本体は二つのクラスから構成されています。MainActivty.class と AsyncSocket.class です。次のようにプログラミングしてみました。


MainActivity.class

package com.example.blinkled;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText mEditText = null;
private TextView mText = null;
private Button mLedOn = null;
private Button mLedOff = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mEditText = (EditText)findViewById(R.id.edittext);
mText = (TextView)findViewById(R.id.result);
mLedOn = (Button)findViewById(R.id.ledon);
mLedOff = (Button)findViewById(R.id.ledoff);

mLedOn.setOnClickListener(this);
mLedOff.setOnClickListener(this);
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.ledon:
sendLedOperation("ON");
Log.v("LED" ,"ON");
break;
case R.id.ledoff:
sendLedOperation("OFF");
Log.v("LED", "OFF");
break;
default:
}
}

private void sendLedOperation(String OnOff) {
String editText = mEditText.getText().toString();
String ip_and_port[] = editText.split(":");
AsyncSocket socket = new AsyncSocket(ip_and_port[0], ip_and_port[1], mText);
socket.execute(OnOff);
socket = null;
}
}



AsyncSocket.class

package com.example.blinkled;

import android.os.AsyncTask;
import android.widget.TextView;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

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 text) {
mIpAddress = ipStr;
mPortNo = Integer.parseInt(portStr);
mText = text;
}

@Override
protected String doInBackground(String... params) {

try {
Socket socket = new Socket(mIpAddress ,mPortNo);
OutputStream out = socket.getOutputStream();
out.write(params[0].getBytes());
out.flush();
out.close();
socket.close();
return params[0];
} catch (IOException e) {
e.printStackTrace();
return "Failure";
}
}

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



AsyncSocket については、こちらの記事も参考にしてください。Arduino側のプログラミングは前回の通りです。実際に動かしてみました。




無事に動きました。これで ESP-WROOM02 をスマホからもコントロールできるようになりました。アプリケーションの幅が広がりそうです。
(^^)/~


<関連記事>

Arduino で WiFiモジュール(ESP-WROOM-02) をWiFiで動かす!


Arduino で WiFiモジュール(ESP-WROOM-02) のLチカを試す!


Arduino 対応 WiFi モジュール(ESP-WROOM-02) の動作確認をしてみた(2)!


Arduino 対応 WiFi モジュール(ESP-WROOM-02) の動作確認をしてみた(1)!


Arduino 対応 WiFi モジュール(ESP-WROOM-02) のファームをアップデート!


Arduino 対応 WiFi モジュール (ESP-WROOM-02) の動作確認をしてみた


Arduino 対応激安 WiFi モジュール (ESP-WROOM-02) にピンヘッダをハンダ付け


Arduino 対応激安 WiFi モジュールが届きました!


Arduino 対応の激安WiFiモジュール







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

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



FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)

  • 出版社/メーカー: スイッチサイエンス
  • メディア: エレクトロニクス



アプリを作ろう! Android入門 Android Studio版 Android5対応

  • 作者: 高江 賢
  • 出版社/メーカー: 日経BP社
  • 発売日: 2015/08/18
  • メディア: 単行本