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 进行开发的优势所在。

相关文章
若依修改,若依部署在本地运行时的注意事项,后端连接了服务器,本地的vue.config.js要先改成localhost:端口号与后端匹配,部署的时候再改公网IP:端口号
若依修改,若依部署在本地运行时的注意事项,后端连接了服务器,本地的vue.config.js要先改成localhost:端口号与后端匹配,部署的时候再改公网IP:端口号
|
6天前
|
网络协议 安全 Linux
在IntelliJ IDEA中使用固定公网地址远程SSH连接服务器环境进行开发
在IntelliJ IDEA中使用固定公网地址远程SSH连接服务器环境进行开发
9 2
|
14天前
|
Java Android开发
Java Socket编程示例:服务器开启在8080端口监听,接收客户端连接并打印消息。
【6月更文挑战第23天】 Java Socket编程示例:服务器开启在8080端口监听,接收客户端连接并打印消息。客户端连接服务器,发送&quot;Hello, Server!&quot;后关闭。注意Android中需避免主线程进行网络操作。
36 4
|
12天前
|
NoSQL Redis 数据安全/隐私保护
连接测试服务器redis
连接测试服务器redis
21 1
|
2天前
|
数据安全/隐私保护
xshell通过堡垒机连接服务器和winscp 通过堡垒机传输文件
【7 月更文挑战第 3 天】xshell通过堡垒机连接服务器和winscp 通过堡垒机传输文件
|
25天前
|
IDE 物联网 网络性能优化
什么是MQTT?如何使用ESP12F芯片连接到MQTT服务器
通过上述步骤,你可以成功地使用ESP12F模块连接到MQTT服务器,发布和订阅消息。MQTT的轻量级和高效性使其非常适合各种物联网应用,而ESP12F模块的强大功能和低成本使其成为实现这些应用的理想选择。
76 0
|
5天前
|
Windows
Win10或Win11更新补丁后导致360随身wifi提示USB设备驱动异常,创建Wifi网络失败
Win10或Win11更新补丁后导致360随身wifi提示USB设备驱动异常,创建Wifi网络失败
|
1月前
|
监控 安全 Linux
Linux服务器如何管理sshd的连接
【6月更文挑战第6天】Linux服务器如何管理sshd的连接
21 4
|
1月前
|
弹性计算 Ubuntu Linux
为什么要学习去使用云服务器,外网 IP能干什么,MAC使用Termius连接阿里云服务器。保姆级教学
为什么要学习去使用云服务器,外网 IP能干什么,MAC使用Termius连接阿里云服务器。保姆级教学
|
9天前
|
存储 弹性计算 Serverless
函数计算产品使用问题之是否可以连接Ecs进行使用
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。