概述
最新版安卓TCP助手Android studio工程分享:Android studio TCP网络调试助手应用开发(支持TCP Server与Client切换) 原创
在上一期教程中,我们完成了基于TCP协议的物联网安卓应用开发,本期我们使用Arduino IDE对esp8266进行编程,完成对esp8266设备在TCP协议下的控制。
此次实验的配置是将esp8266配置为TCP的服务器模式,手机APP作为客户端进行通信,如果大家有需要调整配置,将esp8266配置为TCP的客户端,手机APP作为服务器端,可以进入公众号进行私信,有需求的话会再更新一期。下面先带大家看一下最终效果:
【8266TCP测试APP下载】:
http://www.funiot.xyz:8888/down/9H4I3mk0kQfd
(复制链接后在浏览器打开,或见文章末尾获取源码等资源)
开发过程:
1. 连接wifi
void WIFI_Init(char* wifi_ssid,char* wifi_password)
{
uint8_t times = 0; //用于记录单次连接WiFi的超时时间
WiFi.begin(wifi_ssid, wifi_password);//开始连接wifi
Serial.println("");
Serial.print("正在连接wifi:");
Serial.print(wifi_ssid);
while (WiFi.status()!= WL_CONNECTED && times++ < 51)//检查连接情况,等待WiFi连接成功,超时跳出
{
delay(200);
Serial.print(".");
}
if(times == 51)//10s内未连接成功
{
Serial.print("WIFI:");
Serial.print(wifi_ssid);
Serial.println(" 连接失败,请检查WiFi是否开启,或WIFI名称和密码是或否匹配,或按复位键重新尝试连接。");
times=0;
while(1) delay(500); //阻塞
}
Serial.println("");
Serial.print("连接成功,IP地址:");
Serial.println(WiFi.localIP());//获取IP
}
2. 创建TCP服务器
#define MAX_TCPSERVICE_CLIENTS_NUM 2 //可连接的客户端数量最大值,标号从0开始
WiFiServer server(SERVICE_PORT); //绑定服务器端口号
WiFiClient serverClients[MAX_TCPSERVICE_CLIENTS_NUM]; //记录最大数量的客户端
server.begin(); //启动服务器
server.setNoDelay(true); //禁用Nagle算法,即消息直接发送,不合并小消息
Serial.println("等待客户端接入......");
3. 等待客户端连接与数据接收
void loop() {
uint8_t i;
if (server.hasClient()) //如果有客户端接入
{
Serial.println("客户端接入");
for(i = 0; i < MAX_TCPSERVICE_CLIENTS_NUM; i++)//遍历连接的客户端
{
if ((!serverClients[i])|| (!serverClients[i].connected()))//启用连接的客户端
{
if(serverClients[i])
serverClients[i].stop();
serverClients[i] = server.available();
//客户端接入后发送客户端一个“Connected!”,客户端接收到可用于验证是否接入成功
serverClients[i].print("Connected!");
continue;
}
}
WiFiClient serverClient = server.available(); //如果未检查到客户端,则停止连接
serverClient.stop();
}
for(i = 0; i < MAX_TCPSERVICE_CLIENTS_NUM; i++) //处理客户端发送的数据
{
if (serverClients[i] && serverClients[i].connected())
{
if(serverClients[i].available()){
while(serverClients[i].available()) //通道有数据,逐一读取并合并成字符串
{
rec_str += char(serverClients[i].read());
}
Serial.print("接收到客户端的数据:");
Serial.print(rec_str); //串口发送接收的数据
Serial.println(""); //换行
serverClients[i].print(rec_str); //向客户端回传接收的数据,以检验通信完整性
//客户端断开时会发送一个”Disconnect!“,设备可由此及时判断掉线
if(rec_str=="Disconnect!")
Serial.println("客户端断开");
else
Data_Handle(rec_str); //数据处理
rec_str=""; //清空接收数据缓存
}
}
}
}
4. 数据处理
void Data_Handle(String strdata)
{
Serial.println("开始数据处理");
if(strdata=="LEDON")
{
Serial.println("灯光:打开");
digitalWrite(LEDPin, LOW);
}
else if(strdata=="LEDOFF")
{
Serial.println("灯光:关闭");
digitalWrite(LEDPin, HIGH);
}
Serial.println("数据处理完成");
}
2、 安卓部分
android源码与上一期的内容基本相似,只是在数据接收处理部分由字节改为字符串。
基于TCP/IP协议的物联网安卓应用开发基础教程(Android Studio开发)
TCPService:
//非阻塞式连接
while(conn){
//接收网络数据
if( (len2 = inputstream.read(buffer)) != -1){
receiveData = new String(buffer, 0, len2);
Intent CMDintent = new Intent();
CMDintent.setAction("com.example.communication.data");
//上一期采用下面的字节形式,注释下行,采用下下行的字符模式
//CMDintent.putExtra("data", buffer);//buffer为数组,receivedata为文本
CMDintent.putExtra("data", receiveData);//buffer为数组,receivedata为文本
sendBroadcast(CMDintent);
}else{
break;
}
}
接收处理部分:
private class cmdReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//取消字节字符串转换,直接读取
String recieveData=intent.getStringExtra("data");
if(recieveData!=null)
{
textView_ctrl_rec.setText("接收到数据:"+recieveData);
}
}
}
3、源码获取:
非常简短的一个项目,上面的源码可以实现本次实验的功能,如果需要上述资源,公众号“IOT趣制作”回复关键字“8266tcp”即可获取Arduino和Android Studio工程源码以及安卓APK安装包。
最后
以上就是淡定楼房为你收集整理的esp8266的TCP通信基础教程(结合手机APP)的全部内容,希望文章能够帮你解决esp8266的TCP通信基础教程(结合手机APP)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复