Wifi-nodeMCU-esp8266 建立热点同时作为服务器完成设备连接控制 | 学习笔记

简介: 快速学习 Wifi-nodeMCU-esp8266 建立热点同时作为服务器完成设备连接控制

开发者学堂课程【嵌入式之 RFID 开发与应用2020版:Wifi-nodeMCU-esp8266 建立热点同时作为服务器完成设备连接控制】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/665/detail/11209


Wifi-nodeMCU-esp8266 建立热点同时作为服务器完成设备连接控制

内容介绍

一、代码展示

二、演示

 

一、代码展示

该服务器是一个 80 端口的 web 服务器。可以接收客户端的请求,把发送的数据打印出来。实际接收到的数据比所看到的要更加复杂。演示收到的实际数据。

发送如下请求:192.168.1.17/xxx,最后结果是匹配失败,匹配失败之后,会把收到的所有请求打印。数据较多,是 HTTP 的请求,没有匹配上的效果如下:

image.png

将所有数据打印,最终结果不是 Close 或 open 中的内容,匹配失败。打开关闭是从以上信息当中寻找是否有 Close 或者 open。但该方法并不是长久之计,假如头部包括关键字信息就会出现错误。所以,能否通过 Close 或 open 准确的找到信息,还存在疑问,但基本模型存在。 Web AP 将设备当做热点,是软路由的方式。之前的方式是存在路由器和 8266,8266 作为服务器,手机和电脑作为客户端,同时连接上路由器,但手机和电脑是连接到8266服务器中的,此时所做的工作,就是将路由器省略,将 8266 作为服务器和路由器,也能实现点对点通信。连接上之后直接发送信息 Hello World,表示连接成功,同时连接了热点。较为复杂的例子

Web_AP_ server_light:

wifi.setmode (wifi.SOFTAP)

print(wifi.getmode ())

softap_cfg={ ssid="qfedu" ,pwd="123456789"}

wifi.ap.config (softap_cfg)

print ( "AP_Ip is "..wifi.ap.getipi))

首先,io 口的初始化与之前相同,但不同的是,先建立了 AP。之前,首先建立的是 STA,属于普通客户,此时建立的是热点,只需要将热点的 SSID 取名为 QFEdu,密码设置为 123456789。此时不是连接热点,而是创建热点。创建完热点之后,以下代码是获取自己的IP地址:

print ( "AP_Ip is "..wifi.ap.getip())

也就是创建成功之后,会生成服务器的IP,相当于一个网关。设置完毕之后,使用net 接口创建 Server,与之前操作相同。代码如下:

srv=net. createServer (net. TCP)

建立好之后,直接连接80端口监听。监听的事件包括接收数据,接收数据的逻辑较为麻烦。代码如下:

Srv: li sten (80 , function (conn)

conn:on("rergeive",function (cl ient , payload)

-- print ("receive:". .payload)

local buf = "",

local_,_,method, path, vars = string. find (payload,

" ([A-Z]+) (.+)?(.+) HTTP") ;

if (method == nil) then

_,_

method, path = string. find (payload, " ([A-Z]+) (.+)

HTTP") ;

end

local GET = {}

if (vars ~= nil) then

for k,V in string. gmatch (vars," (号w+)=(号w+) &*") do

GET[k] = V

end

一开始并没有接收到数据,正常情况下,建立了一个热点之后,就需要连接热点,连接完毕之后,由于既是热点也是服务器,所以就会获取服务器的网页信息,所以一开始将网页信息放到 BUF 中。B UF..后就是连接内容,第二次 BUF..就将后面所有内容连接。代码如下:

buf = buf. ."<h1>开关</h1>" ;

buf = buf. ."<p><a href=\"?pin=ON\"><button

style=\"font-size: 50px;height: 100px;width: 180px; \">ON</button>

/a> <a href=\"?pin=OFF\"><button

style=\" font-size: 50px;height: 100px;width: 180px; \ ">OFF</button>

</a></p>";

此时的判断条件都不满足。 以下代码就是将网页发送:

client : send(buf) ;

对网页进行加工如下:

{ ssid="ChinaNet- fTVU" , pwd="hgd4de5a"}

<h1> 开关</h1>

<p>

<a href=\ "?pin=ON\">

<button style=\" font-size: 50px; height: 100px;width: 180px; \">

ON

</button>

</a>

<a href=\"?pin=OFF\">

<button style=\" font-size: 50px;height: 100px;width: 180px; \">

OFE

</button>

</a>

</p>

P 标签中有一个 A 标签。 A 标签当中存在 2 个 button。通过手机或浏览器访问服务器时。首先得到的是一个网页,网页存在标题是开关。内容有 2 个 A 标签,A 标签当中内嵌了 button。 Button 的名字叫做 on。以下为内嵌风格:

<button style=\" font-size: 50px; height: 100px;width: 180px; \">

如果点击 on 就会产生超链接。正常情况下,超链接连接到另外一个网站。但此时连接到的内容如下:

?pin=ON\

其中双引号指内容。

另一个按钮按下,得到的内容如下:

?pin=OFF\

当在手机中点击 on 或 off 时,就会将内容发送给服务器。发送给服务器,服务器接收到之后,就会产生几个变量:

Local _,_,method, path, vars = string. find (payload,

([A-Z]+) (.+)?(.+) HTTP") ;

_表示变量。其中 payload 收到的就是发送的内容如下:

?pin=ON\

?pin=OFF\

但收到的内容不止于如上代码。收到的内容是包含所有 HTTP 请求的信息如下:

recv:GET /xxxx HTTP/1.1

包括方法和路径:

payload = GET / ?pin=ON

以上为 payload 的真正收到的内容。之后的匹配方法类似于正则表达式,但并不是标准正则表达式。所以最终得到的方法就是 get,路径就是/,值就是 PIN=2。解析出的是以下 3 个变量:

method=GET

path=/

vars=pin

如果不存在就不需要理会。如果存在,就需要进行解析。 Get 相当于定义了一个表,从 VARS 中提取 pin 和值,类似于键值对。 提取出之后判断 键是否等于指定的值, 从而决定是否要开灯、关灯,之后再将网页进行发送,重复操作,最后释放资源。客户端的浏览器请求都是单次,每次请求完毕,都会发送关闭客户端的请求,以上就是服务器的结构。

 

二、演示

首先需要关闭之前的代码,重新打开。建议将之前的代码删除,重新进行下载。加载完毕之后,效果如下

image.png

接下来进行运行。以下代码表示热点已经创建好:

> dofile("05_ _web_ ap_ server_ light.lua")

2

AP_ Ip is 192.168.4.1

>

下载完成之后,手机上直接登录创建好的热点。首先热点必须连接 QFEdu,在浏览器中输入 192.168.4.1,点击 on,就打开了热点,点击 off,就关闭了热点:

image.png

以上就是设备作为热点的同时又是服务器的演示。如果电脑上的浏览器也可以连接热点,也可以通过电脑浏览器控制,前提是电脑 WiFi 需要连接到热点上。连接热点之后,电脑可能无法上网。打开电脑的浏览器。效果如下:

image.png

以上是 8266 作为热点,同时作为服务器的代码演示。

Node做业务开发较为简单,一方面提供了较为简单方便的接口,另一方面提供了许多案例。开关的例子也能从案例中找到,官方部件当中除了模块之外,还有Example。Example 当中就是许多案例,例如本课程所叙述的 web AP 也在其中,只需要将其简单修改即可。以上就是使用 node MCU 进行开发的优势所在。

相关文章
|
3月前
|
传感器 数据采集 移动开发
基于STM32的智能手环wifi连接手机APP(下)
基于STM32的智能手环wifi连接手机APP(下)
159 0
|
3月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
196 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
3月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
219 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
3月前
|
IDE 网络安全 开发工具
IDE之vscode:连接远程服务器代码(亲测OK),与pycharm链接服务器做对比(亲自使用过了),打开文件夹后切换文件夹。
本文介绍了如何使用VS Code通过Remote-SSH插件连接远程服务器进行代码开发,并与PyCharm进行了对比。作者认为VS Code在连接和配置多个服务器时更为简单,推荐使用VS Code。文章详细说明了VS Code的安装、远程插件安装、SSH配置文件编写、服务器连接以及如何在连接后切换文件夹。此外,还提供了使用密钥进行免密登录的方法和解决权限问题的步骤。
1524 0
IDE之vscode:连接远程服务器代码(亲测OK),与pycharm链接服务器做对比(亲自使用过了),打开文件夹后切换文件夹。
|
3月前
|
IDE 网络安全 开发工具
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
本文介绍了如何在PyCharm专业版中连接远程服务器并配置远程Python环境解释器,以便在服务器上运行代码。
645 0
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
|
3月前
|
Python
Flask学习笔记(二):基于Flask框架上传图片到服务器端并原名保存
关于如何使用Flask框架上传图片到服务器端并以其原名保存的教程。
122 1
|
3月前
|
Python
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
这篇博客文章是关于如何使用Flask框架上传特征值数据到服务器端,并将其保存为txt文件的教程。
43 0
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
|
3月前
|
存储 网络协议 Java
【网络】UDP回显服务器和客户端的构造,以及连接流程
【网络】UDP回显服务器和客户端的构造,以及连接流程
73 2
|
3月前
|
前端开发 Java
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
文章介绍了如何使用SpringBoot创建简单的后端服务器来处理HTTP请求,包括建立连接、编写Controller处理请求,并返回响应给前端或网址。
72 0
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
|
3月前
|
Apache 数据中心 Windows
将网站迁移到阿里云Windows系统云服务器,访问该站点提示连接被拒绝,如何处理?
将网站迁移到阿里云Windows系统云服务器,访问该站点提示连接被拒绝,如何处理?

热门文章

最新文章