使用ESP8266组网

  • 一、ESP8266 01简介   

        ESP-01 WiFi 模块是一款低功耗高性价比的嵌入式无线网络控制模块。 该模块核心处理器 ESP8266 在较小尺寸封装中集成了业界领先的 Tensilica L106 超低功耗 32 位微型 MCU,带有 16 位精简模式,主频支持 80 MHz 和 160 MHz,支持 RTOS,集成 Wi-Fi MAC/ B/RF/PA/LNA,板载天线。 该模块支持标准的 IEEE802.11 b/g/n 协议,完整的 TCP/IP 协议栈。用户可以使用该模块为现有的设备添加联网功能,也可以构建独立的网络控制器。

图1-1 ESP8266-01模块

(1) 模块供电电压为直流3.0~3.6V(典型3.3V)、供电电流大于500mA;
(2) Wi-Fi模块IO最大输出电流为12mA;
(3) Wi-Fi模块NRST管脚低电平有效;EN使能管脚高电平有效;
(4) Wi-Fi模块进入升级模式:GPIO0处于低电平,然后模块复位上电;Wi-Fi模块进入正常工作模式: GPIO0处于高电平,模块复位上电;
(5)Wi-Fi模块的RXD接外部MCU的TXD,Wi-Fi模块的TXD接外部MCU的RXD。

 

  • 二、使用AT指令组网

        联网的方式有很多种,例如通过网线联网WIFI 路由器联网、GPRS 联网(SIM 流量业务) 。这常用的三种方式只不过是硬件层不同而已,其内置的都是 TCP/IP 网络协议。ESP8266作为WIFI射频模块支持SDK开发AT指令开发。两种开发各有优势,其中采用AT指令开发开发周期短,但相应的成本较高,乐鑫官方的 AT 指令有将近 100 条,但经常使用的就十几条而已,采用这几条指令,我们可以通过TCP实现模块间的组网。

      在组网之前先简单熟悉下AT指令的格式以及组网方式和拓扑:

  1. AT指令格式
表2-1 AT指令格式
类型指令格式描述
测试指令AT+<X>=?该命令用于查询设置命令的参数取值及其范围
查询指令AT+<X>?该命令用返回参数的当前值
设置命令AT+<X>=<X.....>该命令用于设置用户自定义的参数值
执行命令AT+<X>

该命令用于执行模块内部定义的不可变更的功能            

(注:<X>、<X....>为命令关键字和参数)

     2.组网方式和拓扑

        ESP8266 支持Station 模式SoftAP 模式SoftAP + Station 共存模式三种。

表2-2 ESP8266组网方式与拓扑
模式拓扑描述
Station模式(客户端)   ESP8266 作为 Station,通过路由器(AP)连入 internet ,可向云端服务器上传、下载数据。用户可随时使用移动终端(手机、笔记本等),通过云端监控 ESP8266 模块的状况,向 ESP8266 模块发送控制指令。
SoftAP 模式(服务器、热点)ESP8266 作为 SoftAP,手机、电脑、用户设备、其他 ESP8266 station 接口等均可以作为 Station 连入ESP8266,组建成一个局域网
Station+SoftAP模式(混合模式)ESP8266 支持 softAP+station 共存的模式,用户设备、手机等可以作为station 连入 ESP8266 的 softAP 接口,同时,可以控制 ESP8266 的 station 接口通过路由器(AP)连入 internet

       

        好了,熟悉了一些基本概念之后我们进入正题,组网!!


  1. 建立AP(服务器、热点)   

        先将ESP8266与CH340按照图2-1的方式进行连线,然后打开串口调试助手,波特率选择115200(ESP8266默认波特率是115200),发送AT测试模块是否正常,若模块返回AT OK则说明模块正常。

 图2-1 ESP8266接线

        ①发送 AT+CWMODE=2 ,设置为SoftAP 模式(服务器、热点)。

        ②发送 AT+CWSAP="ESP8266-AP","123456789",5,3  ,设置AP热点属性。

           具体含义:"ESP8266-AP"为热点名;“123456789”为密码;5指通道为5(1~14任选);3指加密方式为WPA2-PSK。这时我们重新插拔下ESP8266的电源线,在电脑的WIFI连接设置里便可以找到我们建立的热点了。

 图2-2PC端 WIFI热点查看

        ③发送 AT+CIPMUX=1 ,设置为多连接模式。

        ④发送 AT+CIPSERVER=1,8080 ,设置为服务器,其中1为设置为服务器,8080为端口号。

        ⑤发送 AT+CIFSR ,查询本机IP地址。串口助手返回下列数据

AT+CIFSR

+CIFSR:APIP,"192.168.4.1"
+CIFSR:APMAC,"96:b9:7e:14:39:63"

OK

        OK!到这里我们的AP就建立成功了。接下来我们检验一下成果,通过手机与ESP8266通信。

        ①打开手机WIF,连接名称为"ESP8266-AP"的热点,输入密码“123456789”连接。

        ②打开手机APP:“TCP连接”,进入该软件点击右上角连接,点击其他主机(APP用三个点表示了),之后输入刚刚查询到的地址,即"192.168.4.1",端口“8080”,点击连接串口助手返回下列数据即连接成功。其中0代表介入的序号,当有其他设备接入时顺延。

0,CONNECT

        ③在聊天页面通过键盘输入文本,点击发送,在电脑的串口助手上即可看到手机端发送的内容了,效果如下。其中0代表是设备0发送的数据,13代表接受到的数据长度为13个字节(因为这里我们设置的是非透明传输所以会有+IPD,< len >的前缀)。

+IPD,0,13:The send text

        ④通过串口助手让ESP8266发送数据,发送AT指令 AT+CIPSEND=0,5  ,该指令首先指定要发送的设备为0设备,发送的数据长度为6个字节内容为“I send”。APP聊天界面即可收到串口助手发送的数据了。

       2.建立Station模式(客户端)

        另找一块ESP8266与CH340连接,再打开一个串口调试助手窗口。

        ①发送 AT+CWMODE=1 ,设置为Station模式(客户端)。

        ②发送 AT+CWJAP="ESP8266-AP","123456789" ,连接刚刚建立的AP。

        ③发送 AT+CIPSTA? ,查询路AP分配给 ESP8266的局域网IP以及网关地址和子网掩码。

AT+CIPSTA?

+CIPSTA:ip:"192.168.4.3"
+CIPSTA:gateway:"192.168.4.1"
+CIPSTA:netmask:"255.255.255.0"

OK

        ④发送 AT+CIPSTART="TCP","192.168.4.1",8080 ,建立TCP连接。

Station模式下的ESP8266返回:

AT+CIPSTART="TCP","192.168.4.1",8080

CONNECT

OK

SoftAP模式下的ESP8266返回:

1,CONNECT

        OK!到这里我们的Station就建立成功了。接下来我们检验一下成果,让两块ESP8266通信。

        ①AP发送 AT+CIPSEND=1,5 ,表示AP模式下的ESP8266要发送给1设备5个字节的数据。再在AP的串口助手输入“I send”,点发送。Station模式下的ESP8266便可接受到这5个字节的数据如下。

+IPD,5:I send

       ②Station发送 AT+CIPSEND=5 ,表示Station模式下的ESP8266要发送给AP 5个字节的数据。再在Station的串口助手输入“I have”,点击发送。AP模式下的ESP8266便可接受到这5个字节的数据如下。

+IPD,1,5:I have

        OK! 至此两块ESP8266便建立起一张组网了。但是似乎总觉得有些麻烦,前面在使用 TCP 进行数据发送时,在每次发送数据之前都要指定发送数据的长度,而且在接收到数据之后,还会有+IPD,< len>的前缀,这样很不方便进行数据的处理。

        因此我们可以使用AT+CIPMODE=1指令开启透传模式,开启透传模式后只需要在第一次发送数据时使用ATD +CIPSEND指令来使Station模式下的ESP8266开始透传发送,随后我们直接发送想要的数据即可,在接收到数据时,也没有了+IPD,< len >前缀。

透传模式下:

        ①发送 AT+CWMODE=1 ,设置为Station模式(客户端)。

        ②发送 AT+CWJAP="ESP8266-AP","123456789" ,连接刚刚建立的AP。

        ③发送 AT+CIPSTART="TCP","192.168.4.1",8080 ,建立TCP连接。

        ④发送 AT+CIPMODE=1 ,开启透传。

        ⑤发送 AT+CIPSEND ,开始透传。 

        ⑥发送要发送的内内容即可

        ⑦若要退出透传发送 AT+CIPMODE=0 指令或者+++(0x2B 0x2B 0x2B),后者没有换行符。

注意:在非透传模式下,客户端每次向服务端发送数据之前都要先发送AT+CIPSEND=<len>来告诉服务端我接下来要发送数据的长度,否则在发送之后会返回EEROR。

           在透传模式下,客户端每次向服务端发送数据之前不需要发送AT+CIPSEND=<len>来告诉服务端我接下来要发送数据的长度。在设置好透传模式(即发送了AT+CIPMODE=1和AT+CIPSEND)后,直接发送数据就可以了。

           在非透传模式下和透传模式下。只有客服端向服务端发送数据之前需要先发送最对应的命令,然后再发送数据。而服务端向客户端发送数据之前不需要向客户端先发送任何命令,直接就是发送数据。另外,所有AT指令(除了退出透传的+++指令)和数据在发送时都需要勾选发送新行或AT指令自动回车,也就是说命令和数据发送之前都需要回车换行,否则不能发送成功。

参考文章链接:

STM32物联网实战教程(一)—ESP8266的AT指令集详解【附源码】_果果小师弟_51CTO博客https://blog.51cto.com/u_14114084/3897868

玩转ESP8266-01——AT指令集_Allenzhu的博客-CSDN博客_at指令集https://blog.csdn.net/qq_45104817/article/details/105834987

esp8266介绍和使用_世界著名CV工程师的博客-CSDN博客_esp8266介绍https://blog.csdn.net/weixin_44178250/article/details/97614719

  • 18
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
ESP-MESH是一个用于创建自组织mesh网络的协议,可以在ESP8266和ESP32设备上运行。以下是使用ESP8266 01S和ESP8266开发板进行组网的步骤和示例代码: 1. 首先,需要将ESP-MESH固件烧录到ESP8266 01S和ESP8266开发板上。可以使用ESP8266 Flasher工具完成该过程。 2. 然后,在Arduino IDE中打开ESP-MESH库的示例代码:File -> Examples -> ESP-MESH -> Mesh_Kit_Light。 3. 在代码中,修改以下参数以适应你的网络环境: - WIFI_SSID - 你的WiFi网络名称 - WIFI_PASSWORD - 你的WiFi网络密码 - MESH_PREFIX - Mesh网络前缀名称 - MESH_PASSWORD - Mesh网络密码 4. 然后,将ESP8266 01S和ESP8266开发板连接到电脑上,并选择正确的开发板和端口。 5. 编译和上传代码到两个设备。 6. 当设备启动并连接到WiFi和Mesh网络时,它们将相互通信并自动组成一个mesh网络。 示例代码: ```C++ #include <ESP8266WiFi.h> #include <ESPAsyncUDP.h> #include <ESPAsyncTCP.h> #include <ESPAsyncWebServer.h> #include <Esp.h> #include <ESPAsyncWiFiManager.h> #include <DNSServer.h> #include <esp8266mesh.h> // WiFi网络名称和密码 #define WIFI_SSID "your_wifi_ssid" #define WIFI_PASSWORD "your_wifi_password" // Mesh网络前缀名称和密码 #define MESH_PREFIX "mesh_network_prefix" #define MESH_PASSWORD "mesh_network_password" // Mesh网络最大节点数 #define MAX_NODE 10 const uint8_t channel = 10; // Mesh网络的频道 esp8266mesh mesh; void setup() { Serial.begin(115200); Serial.println(); // 连接WiFi网络 WiFi.begin(WIFI_SSID, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } // 初始化Mesh网络 mesh.init(MESH_PREFIX, MESH_PASSWORD, channel, MAX_NODE); } void loop() { // 处理Mesh网络消息 mesh.update(); // Mesh网络状态 Serial.println("Mesh network status:"); Serial.println("Node ID: " + String(mesh.getNodeId())); Serial.println("Parent ID: " + String(mesh.getParentNodeId())); Serial.println("Root ID: " + String(mesh.getRootNodeId())); Serial.println("Layer: " + String(mesh.getLayer())); Serial.println("Nodes: " + String(mesh.getNodeCount())); Serial.println("Connections: " + String(mesh.getConnectionCount())); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值