ESP8266 SDK开发: 综合篇-8266TCP服务器与Android TCP客户端实现无线网络通信控制
Posted 优秀不够,你是否无可替代
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ESP8266 SDK开发: 综合篇-8266TCP服务器与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.控制继电器断开
以上是关于ESP8266 SDK开发: 综合篇-8266TCP服务器与Android TCP客户端实现无线网络通信控制的主要内容,如果未能解决你的问题,请参考以下文章