最近做一个智能家居控制,用STC做控制MCU,ESP8266做网络连接,控制流程是这样的,我的控制板连上路由器WIFI,建立SEVER,8080端口,然后通过花生壳映射到公网,后台通过公网IP来控制控制板。这个测试通过了。
然后领导提出了路由器WIFI会自动变换IP地址,到时候IP地址变了,内网就无法映射公网,所有让我们用控制板做客户端来自动重连后台的服务器IP,因为后台的服务器IP地址是不变的。这样路由器IP地址变了也自动重连后台的服务器IP就好。
但是查了半天资料,都是ESP8266作为服务端映射到公网的资料,好像没有作为客户端去连接公网IP的资料。
请教下大家该如何做?有资料最好。
ESP8266应用最广泛的就是作为客户端去连接公网IP地址的服务器了。具体过程如下
1.发送指令AT+CWMODE=1设置模块Wi-Fi应用模式为Station模式;2.发送指令AT+RST重启模块使应用模式更改生效;3.发送指令AT+CWJAP=“ssid””pwd” 连接AP;4.发送指令AT+CIPMUX=0设置模块为单路连接模式,模块默认为单路连接模式;5.发送指令AT+CIPSTART="TCP""xxx.xxx.xxx.xxx"8888 与服务器建立TCP连接xxx.xxx.xxx.xxx为公网地址。6.发送指令AT+CIPMODE=1设置模块传输模式为透传模式;(此后模块重启后会默认进入透传模式)7.发送指令AT+CIPSEND开启透传模式向服务器发送数据,模块收到此指令后先换行后返回”>“,每包数据以20ms间隔区分,每包最大2048字节;8.结束透传模式则发送+++即可。PS:如果不使用透传模式则使用AT+CIPSEND=x,x表示发送字节数。
如果还有疑问,可以访问安可信官网查看资料,里面有详细的连接实例。
http://wiki.ai-thinker.com/esp8266
现在连上公网的智能家居控制都不会采用映射到公网的方案,因为:
1. 公网IP资源有限,很多时候客户没有公网IP,这样就缩小了用户面
2. 设置、配置管理复杂
现在一般通行的方式是利用公共服务的方式,大致是如下策略
1. 有一个共(公)有服务,提供客户app与受控设备(环境)间的数据桥梁
2. 受控设备用心跳策略(定时器)上报状态和获取指令(向公共服务)
3. app在运行时也用心跳策略获取设备状态和发送指令(这个可以是触发方式)
这里的公共服务其实就是你说的后台服务。