这次的话就准备先做个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
这里主要做联网测试也不多强调这些东西哈。有疑问大家评论区一起相互交流学习哈。
我这里主要是分为两个类,一个就是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