zoukankan      html  css  js  c++  java
  • ESP8266 SDK开发: 网络篇-综合-8266TCP服务器(espconn) (NONOS 2.2.0)与Android TCP客户端实现无线网络通信控制

    实现的功能

    Android TCP客户端连接8266的TCP服务器,网络控制开发板继电器

     

    1.控制继电器吸合

    2.控制继电器断开

    前言

    1.用户在看这一节之前请先学习

    https://www.cnblogs.com/yangfengwu/p/12543923.html   Android TCP客户端

    https://www.cnblogs.com/yangfengwu/p/12543847.html   8266 TCP服务器

     

    2.控制继电器引脚

     

     

    协议规定

    Android TCP客户端发送给ESP8266TCP服务器控制继电器吸合指令:

    0xaa  0x55  0x01 0x01

    ESP8266执行以后回复给C#TCP客户端:

    0x55  0xaa  0x01 0x01

     

     

    Android TCP客户端发送给ESP8266TCP服务器控制继电器断开指令:

    0xaa  0x55  0x01 0x00

    ESP8266执行以后回复给C#TCP客户端:

    0x55  0xaa  0x01 0x00

    ESP8266程序编写

    1.处理程序在这节的基础上修改添加

    https://www.cnblogs.com/yangfengwu/p/12543847.html

    2.配置GPIO5为普通引脚

    /*设置GPIO5为普通引脚*/
        PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U , FUNC_GPIO5);

    3.定义用于返回继电器状态的数组

    /*用于返回继电器的状态*/
    u8 RelayOn[4]={0x55,0xaa,0x01,0x01};//继电器吸合
    u8 RelayOff[4]={0x55,0xaa,0x01,0x00};//继电器断开

    4.编写TCP接收处理程序

        if(length>= 4 && pusrdata[0] == 0xaa && pusrdata[1] == 0x55){
            if(pusrdata[2] == 0x01){
                if(pusrdata[3] == 0x01){
                    GPIO_OUTPUT_SET(5, 1);//设置GPIO5输出高电平
                    espconn_send(TCPSendDate,RelayOn,4);
                }
                else if(pusrdata[3] == 0x00){
                    GPIO_OUTPUT_SET(5, 0);//设置GPIO5输出低电平
                    espconn_send(TCPSendDate,RelayOff,4);
                }
            }
        }

    5.先用 TCP调试助手测试(手机连接Wi-Fi模块的无线)

    Android APP程序编写

    1.处理程序在这节的基础上修改添加

    https://www.cnblogs.com/yangfengwu/p/12543923.html

     

    2.页面修改如下:

    页面用了一个ImageButton

    ImageButton imageButtonControl;
    
    
    imageButtonControl = findViewById(R.id.imageButtonControl);
            imageButtonControl.setTag(false);//默认是关闭

    3.点击按钮发送相应的数据,同时切换图片

            imageButtonControl.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    final byte[] bytes = new byte[4];
                    bytes[0] = (byte) 0xaa;
                    bytes[1] = (byte) 0x55;
                    bytes[2] = (byte) 0x01;
                    if ((boolean) (imageButtonControl.getTag()) == false) {
                        imageButtonControl.setImageResource(R.mipmap.switch_button_on);//吸合图片
                        imageButtonControl.setTag(true);
                        bytes[3] = 0x01;
                    } else {
                        imageButtonControl.setImageResource(R.mipmap.switch_button_off);//断开图片
                        imageButtonControl.setTag(false);
                        bytes[3] = 0x00;
                    }
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            try{
                                outputStream.write(bytes,0,4);//发送数据
                            }catch (Exception e){}
                        }
                    }).start();
                }
            });

    4.处理8266返回的数据

                        //提示byte范围是-127 -- 127   &0xFF以后便自动转为int型
                        if ( msg.arg1>=4 && Buffer[0] == 0x55 && (Buffer[1]&0xff) == 0xaa ) {
                            if (Buffer[2] == 0x01) {
                                if (Buffer[3] == 0x01)//继电器吸合
                                {
                                    textViewState.setText("吸合");
                                    imageButtonControl.setImageResource(R.mipmap.switch_button_on);//吸合图片
                                    imageButtonControl.setTag(true);
                                }
                                else if (Buffer[3] == 0x00)//继电器断开
                                {
                                    textViewState.setText("断开");
                                    imageButtonControl.setImageResource(R.mipmap.switch_button_off);//断开图片
                                    imageButtonControl.setTag(false);
                                }
                            }
                        }

     

    测试

    请使用手机APP连接Wi-Fi模块

    IP地址:192.168.4.1  端口号:8080

    1.控制继电器吸合

    2.控制继电器断开

  • 相关阅读:
    使用灰层覆盖UI时,有事发生
    通过自定义ISAPI Filter来禁止敏感文件的访问
    静态链接库LIB和动态链接库DLL的区别 创建和示例
    深入剖析C++中的string类
    .net c# 序列化和反序列
    ASP.NET 状态服务 及 session丢失问题解决方案总结
    IWAM_账号的用途以及如何同步密码
    COM 组件设计与应用(一)起源及复合文件
    两种古老的WEB编程技术 CGI和ISAPI之间的区别
    Send MSMQ Messages Securely Across the Internet with HTTP and SOAP
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/12547009.html
Copyright © 2011-2022 走看看