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

相关文章
|
1月前
|
SQL 分布式计算 DataWorks
DataWorks常见问题之dataworks连接FTP服务器失败如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
|
1月前
|
弹性计算 Linux 网络安全
连接并管理ECS
连接并管理ECS
61 4
|
1月前
|
存储 边缘计算 监控
【MODBUS】Modbus主站云端服务器和边缘设备部署区别
【MODBUS】Modbus主站云端服务器和边缘设备部署区别
36 0
|
3月前
|
Android开发 Python
Python封装ADB获取Android设备wifi地址的方法
Python封装ADB获取Android设备wifi地址的方法
61 0
|
3月前
|
缓存 网络协议 Linux
Linux C/C++ 开发(学习笔记十三):百万并发的服务器实现
Linux C/C++ 开发(学习笔记十三):百万并发的服务器实现
54 0
|
1月前
|
运维 Linux Nacos
nacos常见问题之远程访问不报错放到服务器上nacos连接超时如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
59 1
|
18天前
|
网络协议 Python
pythonTCP客户端编程连接服务器
【4月更文挑战第6天】本教程介绍了TCP客户端如何连接服务器,包括指定服务器IP和端口、发送连接请求、处理异常、进行数据传输及关闭连接。在Python中,使用`socket`模块创建Socket对象,然后通过`connect()`方法尝试连接服务器 `(server_ip, server_port)`。成功连接后,利用`send()`和`recv()`进行数据交互,记得在通信完成后调用`close()`关闭连接,确保资源释放和程序稳定性。
|
27天前
|
弹性计算 DataWorks Kubernetes
ECS独立站问题之建立独立站如何解决
ECS(Elastic Compute Service,弹性计算服务)是云计算服务提供商提供的一种基础云服务,允许用户在云端获取和配置虚拟服务器。以下是ECS服务使用中的一些常见问题及其解答的合集:
281 2
|
5天前
|
网络协议 安全 Linux
IDEA通过内网穿透实现固定公网地址远程SSH连接本地Linux服务器
IDEA通过内网穿透实现固定公网地址远程SSH连接本地Linux服务器
|
22天前
|
弹性计算 关系型数据库 MySQL
阿里云数据库服务器价格表,数据库创建、连接和使用教程
阿里云数据库使用流程包括购买和管理。选择所需数据库类型如MySQL,完成实名认证后购买,配置CPU、内存和存储。确保数据库地域与ECS相同以允许内网连接。创建数据库和账号,设置权限。通过DMS登录数据库,使用账号密码连接。同一VPC内的ECS需添加至白名单以进行内网通信。参考官方文档进行详细操作。
123 3