通过LY-WIFI-1智能WiFi模块实现手机APP控制LED灯————Android端

Android端

1.Socket通信原理

Socket套接字概述:
网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
通信的两端都有Socket。
网络通信其实就是Socket间的通信。
数据在两个Socket间通过IO流传输。
Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和port。

简单来说,其实就是向单片机发送套接字作为指令

2.Android界面布局

开发工具选择的是android studio,下图是布局
在这里插入图片描述

3.需要的申请的权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

4.Activity代码

public class MainActivity extends AppCompatActivity {

    private Handler handler=null;

    EditText mIp,mPort;
    String mStrIp;
    int miPort;
    private Button mBtnConnect;
    private Button mledoff;
    private Button mledon;//  按钮LED灯开
    private TextView display;
    private Socket mSocket;     //  套接字
    private PrintStream out;    //  打印输出流
    private ConnectThread mConnectThread;   //  TCP连接线程

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

        mBtnConnect=(Button) findViewById(R.id.button3);
        mledon=(Button) findViewById(R.id.button);
        mledoff=(Button)findViewById(R.id.button2);


        mIp= (EditText) findViewById(R.id.editText);
        mPort= (EditText) findViewById(R.id.editText2);
        display= (TextView) findViewById(R.id.textView3);

        //增加程序网络服务兼容性
        if(Build.VERSION.SDK_INT>9){
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
        }

        mBtnConnect.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //  连接
                if(mSocket == null || !mSocket.isConnected()){
                    mStrIp=mIp.getText().toString();
                    miPort=Integer.valueOf(mPort.getText().toString());
                    mConnectThread = new ConnectThread(mStrIp,miPort);
                    mConnectThread.start();
                }
                if(mSocket != null && mSocket.isConnected()){
                    try{
                        mSocket.close();
                        mSocket=null;   //  清空mSocket
                        mBtnConnect.setText("连接");
                        Toast.makeText(MainActivity.this,"连接已关闭",Toast.LENGTH_LONG).show();
                    }catch (IOException e){
                        e.printStackTrace();
                    }
                }
            }
        });
        mledon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(out!=null){
                    out.print("8");
                    out.flush();
                }
            }
        });
        mledoff.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (out!=null){
                    out.print("9");
                    out.flush();
                }
            }
        });
    }

    private class ConnectThread extends Thread{
        private String ip;
        private int port;
        public ConnectThread(String ip,int port){
            this.ip=ip;
            this.port=port;
        }
        @Override
        public void run(){
            try {

                mSocket= new Socket(ip,port);
                out = new PrintStream(mSocket.getOutputStream());
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        mBtnConnect.setText("断开");
                        Toast.makeText(MainActivity.this,"连接成功",Toast.LENGTH_LONG).show();
                    }
                });
            }catch (IOException e){
                display.setText(e.getMessage());
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(MainActivity.this,"连接失败",Toast.LENGTH_LONG).show();
                    }
                });
            }
        }
    }
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值