最近在用ESP8266做一个联网开发,准备做两个版本的来吧,一个是手机APP版本的,另一个是基于OneNET云的版本的来吧,具体的要用来实现什么项目还没有决定,应该做一些经典的项目吧,比如智能家居之类的吧,有这方面项目的可以在评论区和我说说哈,我准备自己搞搞练练手来。

这次的话就准备先做个APP版本,APP的难点主要在于手机APP怎么去实现联网的功能,这个功能可能对于一些软开的同学来说比较简单吧,毕竟上课就是学这个的,但是我电子类出身的人,做这个确实有一问三不知的感觉,做了几天看了很多书籍视频和还有一些大牛的博客,自己搞了一套出来,并且测试成功了,心理有点激动,写篇博客记录一下,下一步的话就准备写个ESP8266的测试用例来了,再再下一步就是搞个项目来试试了。


一、准备工作

准备工作其实不多就两个软件下载安装一下,一个是Android Studio,一个是网络调试助手我用的是NetAssist,只要是能调试网络就都行。

我的思路是这样的,将ESP8266作为服务器,手机APP根据ESP8266的IP地址和端口号去进行连接,连接成功后传输数据,下发指令和接收单片机采集的数据。

安装包在这里:
Android Studio安装包
链接:https://pan.baidu.com/s/1nE4Z4kjhaHiN5lKFfvvE6g
提取码:duol
NetAssist:
链接:https://pan.baidu.com/s/1jvtaYG_eibdvkJasalq2pw
提取码:03bj
失效了可以去在这个资源里面去下载

https://download.csdn.net/download/qq_45488746/85355880
安装的方式大家可以参考这个:https://blog.csdn.net/tao_789456/article/details/118093106

这里主要做联网测试也不多强调这些东西哈。有疑问大家评论区一起相互交流学习哈。

二、安卓APP开发

我这里主要是分为两个类,一个就是MainActivity这个就是主程序执行的入口了
还有一个就是TCP_Test类,里面写了关于连接服务器IP和端口,传输数据等方法。
还有一个就是网络权限要开放出来

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

将网络权限放到AndroidManifest.xml中去
在这里插入图片描述
MainActivity类,主要是做一些控件管理和执行TCP连接
MainActivity的一些属性

public class MainActivity extends AppCompatActivity {

    private EditText edit_port;
    private EditText edit_ip;
    private Button btn_connect;
    private Button btn_open;
    private Button btn_close;
    private TCP_Test tcp_client;

具体实现
TCP连接测试代码大家可以根据自己的需求去替换即可主要都是用到啥发送和接收数据这些东西

 	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //获取控件
        setContentView(R.layout.activity_main);
        btn_close = findViewById(R.id.btn_close);
        btn_connect = findViewById(R.id.btn_connect);
        btn_open = findViewById(R.id.btn_open);
        edit_port = findViewById(R.id.edit_port);
        edit_ip = findViewById(R.id.edit_ip);
        //连接按键的事件
        btn_connect.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.v("按下连接后 ip--->","111");
                if(!edit_ip.getText().toString().isEmpty() && !edit_port.getText().toString().isEmpty()){
                    Log.v("按下连接后 ip--->",edit_ip.getText().toString());
                    Log.v("按下连接后 prot--->",edit_port.getText().toString());
                    My_TCP_Client_Test();		//TCP连接测试代码
                }
            }
        });
    }

TCP_Test类:
TCP_Test中的一些属性

client:是Socket的实例
out:输出流
in:输入流
server_State:当前TCP的连接状态标志位
在这里插入图片描述
连接方法

public boolean connect(String IP, int port){
        boolean isConnect = false;
        try{
            if(client == null) {
                client = new Socket();
            }
            SocketAddress socketAddress = new InetSocketAddress(IP, port);
            client.connect(socketAddress,2000);
            if(client.isConnected()) {
                Log.v("MyTcpClient----->", "成功连接上服务器");
                isConnect = true;
            }
        }catch (IOException e){
            Log.v("MyTcpClient----->", "失败"+e.getMessage());
            isConnect = false;
            e.printStackTrace();
        }
        return isConnect;
    }

发送和接收消息

    public void sendMsg(String msg){
        try{
            if(out == null) {
                out = client.getOutputStream();     //创建输出流
            }
            out.write(msg.getBytes());              //写入数据
        }catch (IOException e) {
            e.printStackTrace();
        }
    }

    public String rcvMsg(){
        byte[] msg = new byte[128];
        int msg_len;
        String Msg = null;
        try{
            if(in == null){
                in = client.getInputStream();       //创建获取流
            }
            msg_len = in.read(msg); //读取数据
            //数据长度为-1则服务器主动顿开连接
            if(msg_len == -1)
            {
                server_State = msg_len;
                Log.v("MyTcpClient----->", "服务器断开连接");
                closeAll();     //关闭所有接口
                return null;
            }
            Msg = new String(msg,0,msg_len);
        }catch (IOException e){
            e.printStackTrace();
        }
        return Msg;
    }

三、进行联网测试

网络调试助手打开TCP Server服务器
手机APP成功连接上
在这里插入图片描述
数据接收成功
在这里插入图片描述
到此整篇文章就到这里告一段落了,后面的用ESP8266联网的等后面来实现。
结论:完成了用Android Studio实现TCP连接服务器接收和发送数据的全过程测试。
源码的下载链接放在下面了

源码下载链接

源码下载链接:https://download.csdn.net/download/qq_45488746/85355720

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐