esp8266的TCP通信基础教程(结合手机APP)
最新版安卓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);//开始连接wifiSerial.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("客户端断开");elseData_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 {@Overridepublic 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)相关推荐
- python爬虫之app数据抓取_Python爬虫入门教程 29-100 手机APP数据抓取 pyspider
1. 手机APP数据----写在前面 继续练习pyspider的使用,最近搜索了一些这个框架的一些使用技巧,发现文档竟然挺难理解的,不过使用起来暂时没有障碍,估摸着,要在写个5篇左右关于这个框架的教程 ...
- 阿里云IOT入门教程(三)阿里云IOT Studio自建手机App控制Wemos D1 Mini( ESP8266 )板载灯亮灭
阿里云IOT入门教程(一)阿里云IOT Studio自建手机App控制Wemos D1 Mini( ESP8266 )板载灯亮灭 概述 所需材料 Mqtt预备知识 hacklab端开发 * 硬件端上报 ...
- (开源)STC89c51结合ESP8266制作物联网环境监测系统+APP inventor制作手机App实时显示
STC89c51结合ESP8266制作物联网环境监测系统+APP inventor制作手机App实时显示 第一 .先上效果图 第二.原理讲解 第三.c51读取各种传感器数值 第四.传感器数据推送到云端 ...
- stm32f103c8t6控制ESP8266与手机APP通信
stm32f103c8t6控制ESP8266与手机APP通信 之前已经发表过利用stm32控制蓝牙模块与手机APP通信的文章,那么现在我就来说说用WIFI模块来控制与手机APP的通信 首先需要的器件如 ...
- 最简单DIY基于ESP8266的智能彩灯③(在网页用按钮+滑动条+手机APP控制RGB灯)
ESP8266和ESP32智能彩灯开发系列文章目录 第一篇:最简单DIY基于ESP8266的智能彩灯①(在网页用按钮点亮普通RGB灯) 第二篇:最简单DIY基于ESP8266的智能彩灯②(在网页用按键 ...
- ESP8266实现WIFI局域网连接手机APP监控
主要功能 STM32采集温湿度信息. 人体红外感应模块, 检测到有人活动, LED3亮. 手机APP通过WIFI连接, 可查看温湿度信息, 可控制LED1, LED2, 蜂鸣器. STM32与电脑上位 ...
- 手机app+esp8266控制小区大门门锁,实现远程开门
近日笔者自己动手修理自家的门铃时,发现只要接通开门的电源线,就可以打开楼宇的大门了,突发奇想:在门铃引出线加装继电器就可以用esp8266连上互联,实现远程开门了.(我家门铃比较老旧,不知其他牌子门铃 ...
- 爬虫之手机APP抓包教程-亲测HTTP和HTTPS均可实现
当下很多网站都有做自己的APP端产品,一个优秀的爬虫工程师,必须能够绕过难爬取点而取捷径,这是皆大欢喜的.但是在网上收罗和查阅了无数文档和资料,本人亲测无数次,均不能正常获取HTTPS数据,究其原因是 ...
- 易安卓手机APP教程
易安卓简介: E4A-[易安卓]是一款于 2013 年 06 月 01 日正式发布的.定位于为企业.站长.开发者.网络公司.各种手持设备等等基于安卓系统下的 APP 开发的全中文安卓编程语言,本语言的 ...
最新文章
- (转载)一种根据纠偏数据对火星坐标进行完美拟合的方法
- VMware三种网络模式根本区别(图)
- http如何像tcp一样实时的收消息?
- 【初赛】概率与期望学习笔记
- DIV+CSS—菜鸟分享学习心得!导航篇
- 国内外物联网平台初探(篇五:机智云平台)
- 两条信号之间加电容_模电总结:第七章、波形的发生和信号的转换,正弦波振荡的电路...
- Java数据结构的知识体系
- 16种oracle查询日期语句
- centos安装rabbitmq_SpringCloud之RabbitMQ安装
- Rstudio图片保存方式
- 单片机继电器控制实验程序C语言,继电器控制实验
- 青海电大随学随考计算机,[青海电大]17秋随学随考中国现当代文学名著导读(1)作业4资料...
- android 自动调节音量,Android 音量调节
- opencv应用实例-金圣韬-专题视频课程
- 什么是RS485总线?
- 金链盟成员纷纷“自立山头”,中国联盟式区块链开源平台路在何方
- 倍加福编码器THI40N-0SAK2R6TN-01024
- 王怀南:从谷歌之父到育儿专家
- 基于差异演化的寄生樽海鞘群算法
热门文章
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的调色板palette属性和字体font属性设置
- Fiddler配合夜神模拟器进行抓包
- 疯狂java——集合、泛型、Stream
- Incomplete chess boards 有趣.
- UliPad常用技巧小贴士
- java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
- solr基本操作步骤
- 【C++】 STL库的stack容器
- adb操作提示Read-only file system问题
- FileZilla Server报错Could not load TLS libraries 的解决方法