四、esp8266+手机端+路由器(路由可上网)组成物联网与广域网建立tcp通信的工作模式设定方法

前言:esp8266模块和手机同时接入在一个路由下,通过路由器建立二者之间的tcp通信,模块设置为客户端,手机设置为服务器端,路由器为网关,同时由于路由器能上网,所以8266模块可以通过路由器与广域网上的服务器进行远程长连接的tcp通信。

实例:

实现功能概述:,8266工作在station模式下,接入到能上网的实验室路由上,手机也连的是实验室同一个路由,然后把8266连接到查询天气的知心天气网站的(api接口: ip: 地址:116.62.81.138 端口:80)服务器上,模块同时还连接到手机端的tcp server上(开放的端口与天气网站的服务器端口不同),进而实现通过手机能控制8266和外网通信,触发执行http协议的GET请求动作,向知心天气网站请求天气信息。

(一)前期准备:

Wifi模块:esp8266

手机:安装有有人网络助手的手机一部(便于设置tcp服务器用)

路由器:实验室路由器  热点名称:TP-LINK_5D3BDE  密码:saibei216216

8266模块功能设置方式: AT命令

(二)设置步骤

(1)8266初始化功能配置,设置STA模式+连接路由

1)设置8266模块工作在STA模式:

发送指令:

AT+RST        //重启

AT+CWMODE=1   //或AT+CWMODE=3   1-Station模式  3-AP兼Station模式

AT+RST        //重启

2)查看当前无线路由器列表

发送指令:AT+CWLAP

3)加入当前无线网络

发送指令:AT+CWJAP="TP-LINK_5D3BDE","saibei216216"

//搜索并连接路由器,第一个引号内容为路由器名,第二个引号内容为密码

(2)设置8266位客户端建立tcp通信,进行Client方法收发

 

1)设置8266模块:开启多连接模式(因为模块要连接多个服务器,所以选择多连接模式,如果模块只与一个服务器通信时选择单连接模式即可)

发送指令:AT+CIPMUX=1

//设置指令   1-多路连接模式   0-单路连接模式

2)建立tcp连接

知心天气网站服务器:

发送指令:AT+CIPSTART=1,"TCP","116.62.81.138",80

//8266模块连接心知天气网站服务器  ip地址:116.62.81.138

//第一个1为多连接模式下的设备id号,

//进行tcp通信时要先指定要通信的设备id

手机端服务器:

准备:先打开手机上的有人网络助手,新建TCP server——端口号8081,

记住手机产生的本地IP,下面模块作为tcp client进行连接手机tcp server要用。

发送指令:AT+CIPSTART=2,"TCP"," 192.168.1.112",8081

//8266模块连接手机端服务器  ip地址:192.168.1.112

//第一个2为多连接模式下的设备id号,

//进行tcp通信时要先指定要通信的设备id

(建立tcp通信时,下图命令不要在再发送给模块,否则前面建立的tcp连接将会失效,这里只为验证说明用)

手机端服务器:

发送指令:AT+CIPSEND=2,100  //选择需要用于传输连接的id号

//这里选的“2”为手机端服务器

// length:100  表示要发送数据的长度为100,最大长度为2048

知心天气网站服务器:

发送指令:AT+CIPSEND=1,1024  //选择需要用于传输连接的id号

//这里选的“1”为知心天气网站服务器

// length:1024  表示要发送数据的长度为1024,最大长度为2048

请求天气信息:

方法:http协议的GET方法

发送内容:

GET https://api.seniverse.com/v3/weather/now.json?key=S4bQnu5_rNi_kbNJZ&location=hangzhou&language=en&unit=c

返回信息:

正常情况下应该返回的信息:

{"results":[{"location":{"id":"WTMKQ069CCJ7","name":"Hangzhou","country":"CN","path":"Hangzhou,Hangzhou,Zhejiang,China","timezone":"Asia/Shanghai","timezone_offset":"+08:00"},"now":{"text":"Light rain","code":"13","temperature":"22","feels_like":"21","pressure":"1005","humidity":"97","visibility":"1.8","wind_direction":"N","wind_direction_degree":"20","wind_speed":"3.96","wind_scale":"1","clouds":"95","dew_point":""},"last_update":"2019-04-21T20:50:00+08:00"}]}

实际情况:提交GET请求后,知心天气网站的服务器关闭了,如下图,并且8266模块死机了。我上网查找了不少资料,了解到很少有人用AT固件下的多路连接这种方式去实现多路连接下的GET功能,原因大多数解释为:esp8266在多路连接模式下不能进入透传模式,而实现类似功能的解决方案都是基于SDK实现的,所以这种实现方案失败了,如有大佬晓得什么原因及解决方案,欢迎留言评论。

另一种建立手机+wifi+路由器实现与外网进行通信的方案:上述设置不变,就是把上面esp8266的多路连接改成设置esp8266模块为单路连接,然后设置esp8266模块为透传方式工作,就可以正常返回天气信息了,不过这种方案在实现手机端与8266模块进行通信,即用手机端去触发8266向天气网站服务器提交GET请求时要借助单片机来实现,先让手机与8266模块建立tcp通信,再让手机给wifi发送消息去触发单片机的内部编程,即通过单片机的串口向esp8266模块发送AT指令,使8266模块与天气网站服务器建立tcp通信,通信建立后触发单片机提交GET请求,向天气网站服务器索要天气信息,请求部分指令如下:

AT+CIPMUX=0  //设置单链接

AT+CIPSTART="TCP","116.62.81.138",80  //连接知心天气网站服务器

AT+CIPMODE=1  //设置透传模式

AT+CIPSEND  //进入透传

信息提取出来是这样子的:

{"results":[{"location":{"id":"WTMKQ069CCJ7","name":"Hangzhou","country":"CN","path":"Hangzhou,Hangzhou,Zhejiang,China","timezone":"Asia/Shanghai","timezone_offset":"+08:00"},"now":{"text":"Cloudy","code":"4","temperature":"21","feels_like":"21","pressure":"1005","humidity":"97","visibility":"1.7","wind_direction":"NW","wind_direction_degree":"334","wind_speed":"7.56","wind_scale":"2","clouds":"50","dew_point":""},"last_update":"2019-04-21T21:25:00+08:00"}]}

一般物联网的远程控制的通信方案:

1、要实现远程控制就必须得租用一个服务器,可以租用云服务器,比如阿里云的ECS

2、手机与服务器建立tcp长连接

3、esp8266与服务器建立tcp长连接

4、手机发送数据到云服务器,使用json数据的网络通信,云服务器接收到手机发的数据后,继续把手机发送过来数据转发给esp8266

5、esp8266发送数据到云服务器,云服务器接收到esp8266发过来的数据后,继续把数据推送给手机app

6、如上所述方式,实现手机+esp8266的双向通信的远程控制。

以小米智能台灯为例:

  1. 有一台自己的服务器:小米云服务器
  2. 终端设备:小米台灯  自身带有wifi,作为tcp客户端可以连接小米云服务器
  3. 手机APP  该APP作为tcp 客户端能够连接小米云服务器
  4. 通信过程概述:小米智能台灯和app同时接入小米云服务器,用户在app上选择要执行的功能,如开灯,则当用户触发按键时,app会向小米云服务器发送该消息,小米云服务器会对这条消息进行转发(或者在服务器中做解析处理),解析知道了用户想要执行开灯动作,则有小米云服务器向小米智能台灯发送开灯指令,电亮台灯,即app和小米智能台灯之间的通信,由小米云服务器来中转完成,app、小米智能台灯与小米云服务器之间均为tcp长连接通信。

esp8266系列学习(四)——esp8266+手机端+路由器(路由可上网)组成物联网与广域网建立tcp通信的工作模式设定方法相关推荐

  1. html5 手机端分页,哪位大神可以提供个移动端h5下拉分页的方法

    例如,京东的分页效果 $PageIndex = 1; var $uzaiProducts = $doc.getElementsByClassName('uzai-products')[0]; // 产 ...

  2. 手机端返回上一级代码php,(转)移动端自定义返回上一页的方法:history

    在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的需求. 那在代码中怎样监听当点击微信.支付宝.百度糯米.百度钱包 ...

  3. 手机端扫描证件识别SDK

    手机端扫描证件识别SDK 一.手机端扫描证件识别SDK应用背景 这些年,随着移动互联网的的发展,越来越多的公司都推出了自己的移动APP,这些APP多数都涉及到个人身份证信息的输入认证(即实名认证),如 ...

  4. OCR识别算法深入分析手机端车牌识别

    一.手机端车牌识别OCR识别流程 车牌识别是基于OCR识别的一用应用.手机端车牌识别过程包括图像采集.图像预处理.车牌定位.字符分割.字符识别.输出结果等一系列算法运算,其流程如下图所示: 其中图像采 ...

  5. 【技术分享】手机端代理网络共享至win电脑端

    [技术分享]手机端代理网络共享至win电脑端 使用前提 工具准备 具体步骤 1. 打开并实现安卓模拟器内的v'P|n 2. 打开并配置安卓模拟器内的Proxy Server 3. 配置win的代理 4 ...

  6. 路由器工作模式 history和hash 以及重定向问题

    1.路由器工作模式有history和hash模式. history模式:路由跳转时,路径没有 # hash模式: 路由跳转时,路径带有 # #以及后边的内容,叫做hash值,hash值不被服务器接收. ...

  7. ESP8266模块手机端和电脑端网络调试助手

    ESP8266模块手机端和电脑端网络调试助手 使用方法比较简单,如下界面所示: 电脑端:确定"协议类型","IP地址"和"端口",然后点击连 ...

  8. esp8266手机端app_OKEX手机端APP提币教程(附视频)

    OKEX手机端APP提币教程(附视频) 相信很多币圈资深小伙伴都知道OKEX交易所都可以提币,那么提币到底是什么意思呢?提币简单来说就是资金转账,也就是把你现有的币转账到其他平台,这里就需要一个转账平 ...

  9. 手机端(APP点灯blinker)-PC端(Node-red)-设备端(ESP32)-客户端(MQTTX客户端)四者之间的通信——通过MQTT通信(上)

    手机端(APP点灯blinker)-PC端(Node-red)-设备端(ESP32)-客户端(MQTTX客户端)四者之间的通信--通过MQTT通信(上) 前言: 本次实验是通过MQTT来进行手机端-设 ...

最新文章

  1. 面板panel与窗口frame的区别
  2. 前端一HTML:八:css中与文本相关的属性
  3. Flask的Context(上下文)
  4. react table里跳转页面_如何在react中实现一个table切换?
  5. y sinx matlab,有一个函数 f(x,y)=x^2+sinxy+2y ,用matlab写一个程序 输入自变量的值,输出函数的值....
  6. 用matlab简单电路模型,基于MATLAB的电路模型仿真应用
  7. 我国快递年业务量首次突破千亿件大关
  8. 吕鑫MFC就业培训宝典学习笔记—创建一个简单的win32应用程序(2-1)
  9. UML统一建模语言快速入门
  10. 进制转换方法总结——摘自百度
  11. 手把手教你使用R语言做竞争风险模型并绘制列线图
  12. ncsi信号测试软件,02-附录
  13. uint32 t java_数据类型 -- uint32_t 类型
  14. 记忆拼图·心灵风暴·黑洞生死书
  15. python调用foxmail 发邮件_foxmail 收取已发送邮件
  16. 浅谈CAPM和因子模型
  17. CCHTTP后端与diygw前端完美结合,开发前端后端-教程1
  18. 怕麻烦的人,过不了好生活,好真实
  19. ideapad720s在接通电源情况下,关机后自动重启的解决办法
  20. Burpsuite字符偏移修正

热门文章

  1. css设置笼罩层透明(兼容所有浏览器)
  2. Google Chrome浏览器设置默认应用出现两个Google Chrome,及设置默认浏览器打不开第三方应用内链接
  3. 制作Windows与ESXi的系统安装工具U盘
  4. ROS之socket通信---TCP/UDP
  5. SimSiam:Exploring Simple Siamese Representation Learning
  6. 全球各地区MODIS影像对应行列号
  7. R语言解决package ‘MODIS’ is not available (for R version 3.6.3) 的问题
  8. 编译GPU版本Matconvnet
  9. 经纬度度与度分格式转化
  10. Delphi中设置定时器