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

四、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长连接通信。
  • 16
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
WLAN是英文WirelessLAN的缩写,就是无线局域网的意思。无线以太网技术是一种基于无线传输的局域网技术,与有线网络技术相比,具有灵活、建网迅速、个人化等特点。将这一技术应用于电信网的接入网领域,能够方便、灵活地为用户提供网络接入,适合于用户流动性较大、有数据业务需求的公共场所、高端的企业及家庭用户、需要临时建网的场合以及难以采用有线接入方式的环境等 作为全球公认的局域网权威,IEEE802工作组建立的标准在过去二十年内在局域网领域独领风骚。这些协议包括了802.3Ethernet协议、802.5TokenRing协议、802.3z100BASE-T快速以太网协议。在1997年,经过了7年的工作以后,IEEE发布了802.11协议,这也是在无线局域网领域内的第一个国际上被认可的协议。  在1999年9月,他们又提出了802.11b"HighRate"协议,用来对802.11协议进行补充,802.11b在802.11的1Mbps和2Mbps速率下又增加了5.5Mbps和11Mbps两个新的网络吞吐速率。利用802.11b,移动用户能够获得同Ethernet一样的性能、网络吞吐率、可用性。这个基于标准的技术使得管理员可以根据环境选择合适的局域网技术来构造自己的网络,满足他们的商业用户和其他用户的需求。802.11协议主要工作在ISO协议的最低两层上,并在物理层上进行了一些改动,加入了高速数字传输的特性和连接的稳定性。
您可以使用ESP8266模块作为WiFi模块,将其与Arduino一起使用,通过手机ESP8266模块进行通信。以下是一些基本的步骤: 1. 安装Arduino IDE和ESP8266库。在Arduino IDE中,选择“文件”>“首选项”并在“附加开发板管理器网址”中添加“http://arduino.esp8266.com/stable/package_esp8266com_index.json”。然后,选择“工具”>“开发板”>“开发板管理器”,搜索“esp8266”并安装相应的库。 2. 连接ESP8266模块到Arduino。将ESP8266模块连接到Arduino的串口(RX-TX)引脚,以便它可以通过串口与Arduino通信。还需要将ESP8266的GPIO0引脚连接到Arduino的地引脚,以便可以将其放入固件更新模式。 3. 编写Arduino代码。使用Arduino IDE编写代码来控制ESP8266模块和与手机通信。您可以使用ESP8266WiFi库来配置ESP8266模块的WiFi连接,并使用Serial库来与ESP8266模块进行通信。 4. 编写手机应用程序。使用您选择的移动应用程序开发框架(如React Native或Flutter)编写应用程序,以便它可以通过WiFi与ESP8266模块进行通信。您可以使用HTTP请求或WebSocket通信协议来与ESP8266模块进行通信。 5. 测试通信。将Arduino和ESP8266模块连接到计算机,并上传您的Arduino代码。将ESP8266模块与WiFi网络连接,并使用您的手机应用程序与其进行通信。测试通信是否正常。 希望这可以帮助您开始使用手机,Arduino和ESP8266进行通信

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xw-何妨吟啸且徐行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值