700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > stm32通过ESP8266连接互联网服务器 手机通过网页实现远程控制灯亮灭

stm32通过ESP8266连接互联网服务器 手机通过网页实现远程控制灯亮灭

时间:2023-03-13 15:24:15

相关推荐

stm32通过ESP8266连接互联网服务器 手机通过网页实现远程控制灯亮灭

一、实验结果

最终实验结果如上图所示,由于csdn限制gif图像大小,所以模糊了点,但是还是可以看清的。

图中是手机在网页中进行操作,然后发送请求到php服务器,php服务器建立tcp链接,该链接通过一个JAVA写的TCP请求转发器,把tcp请求转发到stm32中,stm32中代码对请求进行解析,解析到不同的指令,譬如灯亮/灭,就执行对应的操作。

二、实验图解

下面用一张图来说明:

步骤A:stm32通过手机热点连接到TCP SERVER,由于tcp协议的特性,可以保持持久连接

步骤B1:手机通过互联网访问控制页面,接入到TCP SERVER

步骤B2:手机通过发送请求,告知TCP SERVER:帮我把请求转发给STM32

步骤C1:TCP SERVER 把请求转发给了STM32,STM32中解析请求并执行(灯亮灭)

步骤C2:STM32执行了请求之后,进行回馈,通过步骤A中建立的TCP连接,告知TCP SERVER:帮我告诉手机B端,我已经做完了任务

步骤D:TCP SERVER 把请求转发给手机B,B收到信息,进行弹窗提示。步骤结束。

三、实验分析

执行以上操作的前提是stm32已经提前通过ESP8266模块连接到手机的热点上,然后通过热点发送TCP请求到TCP请求转发器中。

其中TCP请求转发器的工作原理类似于websocket,即建立一个TCP SERVER,然后把连接到该TCP SERVER的TCP 连接以KEY-VALUE的形式放入到一个MAP中。

后期其他TCP连接就可以通过在请求中说明KEY值,然后通过KEY找到对应的TCP链接,再转发给相应的TCP链接.

举个例子:STM32链接到转发器中,以A - SOCKET(key-value)的形式保存在MAP中,然后手机端B发送TCP请求给SERVER,在请求中说明:请帮我把请求转发给一个叫做A的TCP链接去,然后TCP SERVER就把B 发送的请求内容转发给A,从而实现B控制A。

同样,STM32也可以直接请求TCP SERVER 把stm32采集到的数据转发给手机B端

重点说明:该实验中,只要STM32 连接到一个能上网的手机热点中,就可以连接到服务器(TCP SERVER),该TCP SERVER是通过花生壳进行内网穿透暴露出来的端口,所以没有距离的限制,只要手机能上网,STM32就可以连接到TCP SERVER。

同理,只要手机端B端可以上网,就可以访问控制端的页面,从而通过网页控制STM32。

四、具体实现

1.STM32端通过串口给ESP8266模块发送AT指令,进行连接手机热点、发送TCP请求;

设置ESP8266对应的USART3的中断,接收数据并保存到一个字符数组中。解析字符数组,执行指令(灯亮灭)

也可以直接发送stm32采集的信息(温湿度),直接发送到TCP SERVER,或者转发到手机端B

图1 图2

其中图1 是通过AT指令进行连接热点

图2 是设置串口3的中断进行TCP请求的接收

具体操控ESP8266的代码太长了就不放出来了٩(๑❛ᴗ❛๑)۶,一般淘宝买ESP8266都会有附赠。

2.TCP SERVER端,采用JAVA实现,编写了一个基于TCP 的server,这个server的内容其实很简单,做了两件事:

1.就是把每一个连接到TCP SERVER的socket以KEY-VALUE的形式保存到MAP中。

2.解析每一个TCP请求,若TCP请求中有说明要求进行转发,则在MAP中找到对应要转发的SOCKET,进行转发

值得说明的是,TCP server所监听的端口要使用花生壳进行内网穿透,如监听8089端口,就要通过花生壳软件将该端口映射到外网,如下图示范:这样处于外网的机器就可以通过访问172XXXX.:31253 ,从而访问到本地的127.0.0.1:8089端口

上图是TCP SERVER的截图,写的比较简陋,后期写一个GUI界面会好看点

3.由于本人只有一台花生壳账号,所以在同一台电脑上同样适用花生壳对外开放了80端口进行PHP服务器的架设

4.手机访问页面

通过手机访问页面后,然后点击按钮,就可以控制stm32

本次说明到此结束。希望下次做的更好。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。