Wifi-nodeMCU-esp8266tcp 服务器创建并通过 tcp 调试助手远程控制 LED | 学习笔记

简介: 快速学习 Wifi-nodeMCU-esp8266tcp 服务器创建并通过 tcp 调试助手远程控制 LED

开发者学堂课程【嵌入式之 RFID 开发与应用2020版:Wifi-nodeMCU-esp8266tcp 服务器创建并通过 tcp 调试助手远程控制 LED】学习笔记,与课程紧密联系,让用户快速学习知识。

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


Wifi-nodeMCU-esp8266tcp 服务器创建并通过 tcp 调试助手远程控制 LED

接下来进入 8266 的核心功能,8266 主要是 wifi 模块那么基于 wifi 的网络编程是比较重要的部分。接下来不按 ppt 讲解,主要讲解一下内容:第一个是模块作为服务器,第二个是是模块作为客户端,第三个是模块作为热点,最后是模块作为普通家用节点或者热点和普通的终端兼容的功能。

 

一、模块作为服务器

首先做模块作为服务器的内容,这部分内容比较简单。打开代码,首先配置了 IO 接口,配置成输出并且配置为高电平根硬件电路有关,GPIO16 连接 IO,VDD3V3连接高电平它是共阳的,共阳意味着低电平灯亮高电平灯灭。使用代码中开始是设置高电平使灯灭,wifi.setmode (wifi.STATIONAP) 设置 wifi 的工作模式STATIONAP(混合模式)既可以做热点又可以做客户端。

image.png

设置 Wifi 工作模式:wifi.STATIONAP,I 混合模式,软路由即热点和客户端共存模式,既要连接服务器又要给客户提供连接服务器。最简单的模:wifi.STATION,客户端模式,只能搜索别的 wifi 信号进行接入。wifi.SOFTAP,软路由或支持热点,自己当做路由建立热点,等待其它设备连接。

代码中使用 wifi.STATIONAP,I混合模式;而下面语句 connect 意思是连接别人,连接别人可以使用客户端模式。station_cfg {ssid="huiyi",pwd="huiyi..."} 服务器的 ssid 和服务器密码,ssid 更改为 ChinaNet-fTVU,密码改为 hgd4de5a,然后继续配置,其中不明白的可以参考手册中的 wifi 模块。设置模式后需要获取模式,有关联网不属于 wifi 需要查找子模块中的内容. wifi.sta.config(station cfg)

wifi.sta.connect () 配网后进行连接,怎么知道是否连接成功需要创建一个定时器t tmr.create()。然后给定时器注册一个回调函数,定时器以毫秒为单位,t:register (1000,tmr.ALARM AUTO,function ()一秒钟的定时器以闹钟的形式自动触发,到时间会调用函数 function()。

函数定义: function 关键字,然后是函数名 create_srv,这个函数是无参的可以在括号中添加参数。之前讲过不管是函数题还是循环体或者是条件语句后都需要加上 end。

image.png

代码中的第一个 end 是回调函数的,第二个 endt 类中是 register方法。如果代码看着不习惯,可以进行拆分:

function conn_back()

if wifi.sta.getip()==nil then

print ("connecting...")

else

print("connected,Ip is "..wifi.sta.getip())

t:stop()

create_srv()

end

end

I

t tmr.create()

t:register (1000,tmr.ALARM_AUTO,conn_back)

t:start()

t:register (1000,tmr.ALARM AUTO,function 一秒钟的定时器以闹钟的形式自动触发,到时间会调用函数 function()。函数中 if wifi.sta.getip()==nil then通过 WiFi 的子模块获取 ip 如果获取 ip 为空表示还在连接即未连接,然后继续获取 IP。如果得到 IP 执行 else 后的语句把 IP 打印出来,打印后执行 t:stop()关闭闹钟,关闭闹钟表示已经连上 WiFi,连上 WiFi 后创建服务器 create_srv 。第一个函数中 print 指打印数据到终端,print("connected,Ip is "..wifi.sta.getip())中的..表示字符串连接即前后字符串连接,wifi.sta.getip()为 IP 地址,把两个字符串连接成一个字符串(在 python 中使用加号进行字符串的连接)然后调用函数 create_srv。

函数 create_srv 创建服务器,使用 net 模块创建服务器。srv=net.create

Server (net.TCP,30) 创建 TCP 服务器,30 是指延迟的时间。srv:listen (8888,function(conn) 调用 listen 监听 8888;监听时假设发生一些事件例如收到数据还有其他事件,这里只处理一个接受到数据。conn:on ("receive",function(client,pyload) 然后有是一个回调,监听到后把参数传递过来,然后连接客户端,客户端发送数据,pyload 即发来的数据。

if (string.find(payload,"open")~=nil)then 如果从发来的数据中可以找到 open,~=nil 表示能够找到 open,string.find 字符串查找,如果找到 open 执行apio.write(led,qpio.LOW) 把灯点亮。

elseif (string.find(payload,"close")~=nil)then 如果找到 close,把灯关闭 gpio.write(led,gpio.HIGH)。如果即找不到 open 又找不到 close 把传递的内容输出,print("recv:"..payload)。client:send (payload.."...oK\n");给客户端回复 OK,如关灯 OK,开灯 OK。最后 collectgarbage();表示垃圾回收,一般加上collectgarbage();回收网络资源。

image.png

在工具 ESPlorer 中点击 open 打开文档, reload 刷新代码,然后点击 CTRL+S保存代码后点击 Save 加载代码,下载完成后模块开始连接,连接到 IP 为192.168.1.17 已经连接到热点并获取到 IP。接下来访问服务器,需要使用一个网络调试助手,可以在网上下载。首先,注意是 TCP 的客户端,服务器 IP 为192.168.1.17, 服务器端口号为 8888,然后点击 【连接】

image.png

连接后开发板灯亮,因为默认的是亮灯。在网络调试助手中发送 close,服务器回了 OK 但是灯并没有灭,服务器发送 OK 表示已经收到指令。重新在网络调试助手中发送 open,开发板上面的灯亮,那么刚才没有出错,是操作开发板上面的灯。

image.png

那么关于网络 server 讲解到这,下节课讲解如何同继电器连接起来或者是如何通过网页,手机如何控制。

相关文章
|
4天前
|
Linux
Linux(5)WIFI/BT调试笔记
Linux(5)WIFI/BT调试笔记
20 0
|
2月前
|
网络协议 安全 测试技术
手撕测试tcp服务器效率工具——以epoll和io_uring对比为例
手撕测试tcp服务器效率工具——以epoll和io_uring对比为例
41 2
|
3月前
|
存储 网络协议
TCP服务器 IO多路复用的实现:select、poll、epoll
TCP服务器 IO多路复用的实现:select、poll、epoll
35 0
|
3月前
|
网络协议 Linux C++
Linux C/C++ 开发(学习笔记十二 ):TCP服务器(并发网络编程io多路复用epoll)
Linux C/C++ 开发(学习笔记十二 ):TCP服务器(并发网络编程io多路复用epoll)
57 0
|
5月前
|
安全 Java 持续交付
Java本地远程服务器debug调试
Java本地远程服务器debug调试
129 0
|
3月前
|
网络协议
网络编程【TCP单向通信、TCP双向通信、一对多应用、一对多聊天服务器】(二)-全面详解(学习总结---从入门到深化)(下)
网络编程【TCP单向通信、TCP双向通信、一对多应用、一对多聊天服务器】(二)-全面详解(学习总结---从入门到深化)
35 2
|
3月前
|
网络协议 Linux C++
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
39 0
|
4月前
|
网络协议 Java API
基于UDP/TCP实现客户端服务器的网络通信程序
基于UDP/TCP实现客户端服务器的网络通信程序
|
1月前
|
网络协议 Java
【开源视频联动物联网平台】J2mod库写一个Modbus TCP 服务器
【开源视频联动物联网平台】J2mod库写一个Modbus TCP 服务器
66 0
|
2月前
|
网络协议 Java API
【JavaEE初阶】 TCP服务器与客户端的搭建
【JavaEE初阶】 TCP服务器与客户端的搭建