精华内容
下载资源
问答
  • 8266自组网
    千次阅读
    2019-12-07 13:40:09

    前言:
    基础篇章中,我们对零知ESP8266的本身的运用大部分局限在基础开发板上的应用,但是,其本身是一个WiFi模块,所以了解和运用它的WiFi功能属于我们的中阶储备。

    之后篇章中,我们会穿插基础入门篇,因为各种模块的更新速度和硬件的支持库都在不断的修改适配和调整,相对的我们也会适应现实的要求更新和完善。请大家继续支持零知实验室!

    1、引述:
    MESH组网技术在IOT领域具有非常大的作用,应用非常广泛,主流的无线技术从最开始的Zigbee,到蓝牙,到这里的WIFI都实现了MESH组网技术。在这里使用零知开源平台演示wifi 组网的使用。
    2、准备
    ①硬件
    我们本次只要使用零知-ESP8266;
    ②软件
    软件使用零知开发工具,自带示例:
    在这里插入图片描述

    3、方法步骤
    (1)先在零知开发工具中打开HelloMesh示例,或者复制下面的代码到零知开发工具中:

    /**********************************************************
    *    文件: x.ino      by 零知实验室([url]www.lingzhilab.com[/url])
    *    -^^- 零知开源,让电子制作变得更简单! -^^-
    *    时间: 2019/05/28 12:22
    *    说明: 
    ************************************************************/
    #include <ESP8266WiFi.h>
    #include <ESP8266WiFiMesh.h>
    #include <TypeConversionFunctions.h>
    #include <assert.h>
      
    const char exampleMeshName[] PROGMEM = "MeshNode_";
    const char exampleWiFiPassword[] PROGMEM = "123456789";//ChangeThisWiFiPassword_TODO
      
    unsigned int requestNumber = 0;
    unsigned int responseNumber = 0;
      
    String manageRequest(const String &request, ESP8266WiFiMesh &meshInstance);
    transmission_status_t manageResponse(const String &response, ESP8266WiFiMesh &meshInstance);
    void networkFilter(int numberOfNetworks, ESP8266WiFiMesh &meshInstance);
      
    /* Create the mesh node object */
    ESP8266WiFiMesh meshNode = ESP8266WiFiMesh(manageRequest, manageResponse, networkFilter, FPSTR(exampleWiFiPassword), FPSTR(exampleMeshName), "", true);
      
    /**
       Callback for when other nodes send you a request
      
       @param request The request string received from another node in the mesh
       @param meshInstance The ESP8266WiFiMesh instance that called the function.
       @returns The string to send back to the other node
    */
    String manageRequest(const String &request, ESP8266WiFiMesh &meshInstance) {
      // We do not store strings in flash (via F()) in this function.
      // The reason is that the other node will be waiting for our response,
      // so keeping the strings in RAM will give a (small) improvement in response time.
      // Of course, it is advised to adjust this approach based on RAM requirements.
      
      /* Print out received message */
      Serial.print("Request received: ");
      Serial.println(request);
      
      /* return a string to send back */
      return ("Hello world response #" + String(responseNumber++) + " from " + meshInstance.getMeshName() + meshInstance.getNodeID() + ".");
    }
      
    /**
       Callback for when you get a response from other nodes
      
       @param response The response string received from another node in the mesh
       @param meshInstance The ESP8266WiFiMesh instance that called the function.
       @returns The status code resulting from the response, as an int
    */
    transmission_status_t manageResponse(const String &response, ESP8266WiFiMesh &meshInstance) {
      transmission_status_t statusCode = TS_TRANSMISSION_COMPLETE;
      
      /* Print out received message */
      Serial.print(F("Request sent: "));
      Serial.println(meshInstance.getMessage());
      Serial.print(F("Response received: "));
      Serial.println(response);
      
      // Our last request got a response, so time to create a new request.
      meshInstance.setMessage(String(F("Hello world request #")) + String(++requestNumber) + String(F(" from "))
                              + meshInstance.getMeshName() + meshInstance.getNodeID() + String(F(".")));
      
      // (void)meshInstance; // This is useful to remove a "unused parameter" compiler warning. Does nothing else.
      return statusCode;
    }
      
    /**
       Callback used to decide which networks to connect to once a WiFi scan has been completed.
      
       @param numberOfNetworks The number of networks found in the WiFi scan.
       @param meshInstance The ESP8266WiFiMesh instance that called the function.
    */
    void networkFilter(int numberOfNetworks, ESP8266WiFiMesh &meshInstance) {
      for (int networkIndex = 0; networkIndex < numberOfNetworks; ++networkIndex) {
        String currentSSID = WiFi.SSID(networkIndex);
        int meshNameIndex = currentSSID.indexOf(meshInstance.getMeshName());
      
        /* Connect to any _suitable_ APs which contain meshInstance.getMeshName() */
        if (meshNameIndex >= 0) {
          uint64_t targetNodeID = stringToUint64(currentSSID.substring(meshNameIndex + meshInstance.getMeshName().length()));
      
          if (targetNodeID < stringToUint64(meshInstance.getNodeID())) {
            ESP8266WiFiMesh::connectionQueue.push_back(NetworkInfo(networkIndex));
          }
        }
      }
    }
      
    void setup() {
      // Prevents the flash memory from being worn out, see: [url]https://github.com/esp8266/Arduino/issues/1054[/url] .
      // This will however delay node WiFi start-up by about 700 ms. The delay is 900 ms if we otherwise would have stored the WiFi network we want to connect to.
      WiFi.persistent(false);
      
      Serial.begin(115200);
      delay(50); // Wait for Serial.
      
      //yield(); // Use this if you don't want to wait for Serial.
      
      // The WiFi.disconnect() ensures that the WiFi is working correctly. If this is not done before receiving WiFi connections,
      // those WiFi connections will take a long time to make or sometimes will not work at all.
      WiFi.disconnect();
      
      Serial.println();
      Serial.println();
      
      Serial.println(F("Note that this library can use static IP:s for the nodes to speed up connection times.\n"
                       "Use the setStaticIP method as shown in this example to enable this.\n"
                       "Ensure that nodes connecting to the same AP have distinct static IP:s.\n"
                       "Also, remember to change the default mesh network password!\n\n"));
      
      Serial.println(F("Setting up mesh node..."));
      
      /* Initialise the mesh node */
      meshNode.begin();
      meshNode.activateAP(); // Each AP requires a separate server port.
    //  meshNode.setStaticIP(IPAddress(192, 168, 4, 22)); // Activate static IP mode to speed up connection times.
    }
      
    int32_t timeOfLastScan = -10000;
    void loop() {
      if (millis() - timeOfLastScan > 3000 // Give other nodes some time to connect between data transfers.
          || (WiFi.status() != WL_CONNECTED && millis() - timeOfLastScan > 2000)) { // Scan for networks with two second intervals when not already connected.
        String request = String(F("Hello world request #")) + String(requestNumber) + String(F(" from ")) + meshNode.getMeshName() + meshNode.getNodeID() + String(F("."));
        meshNode.attemptTransmission(request, false);
        timeOfLastScan = millis();
      
        // One way to check how attemptTransmission worked out
        if (ESP8266WiFiMesh::latestTransmissionSuccessful()) {
          Serial.println(F("Transmission successful."));
        }
      
        // Another way to check how attemptTransmission worked out
        if (ESP8266WiFiMesh::latestTransmissionOutcomes.empty()) {
          Serial.println(F("No mesh AP found."));
        } else {
          for (TransmissionResult &transmissionResult : ESP8266WiFiMesh::latestTransmissionOutcomes) {
            if (transmissionResult.transmissionStatus == TS_TRANSMISSION_FAILED) {
              Serial.println(String(F("Transmission failed to mesh AP ")) + transmissionResult.SSID);
            } else if (transmissionResult.transmissionStatus == TS_CONNECTION_FAILED) {
              Serial.println(String(F("Connection failed to mesh AP ")) + transmissionResult.SSID);
            } else if (transmissionResult.transmissionStatus == TS_TRANSMISSION_COMPLETE) {
              // No need to do anything, transmission was successful.
            } else {
              Serial.println(String(F("Invalid transmission status for ")) + transmissionResult.SSID + String(F("!")));
              assert(F("Invalid transmission status returned from responseHandler!") && false);
            }
          }
        }
        Serial.println();
      } else {
        /* Accept any incoming connections */
        meshNode.acceptRequest();
      }
    }
    

    (2)验证并上传上述代码到零知-ESP8266开发板;
    (3)测试:分别把上述代码上传到两个零知-ESP8266开发板,然后分别连接两个板子的串口调试窗口,然后就可以看到两个节点数据传输信息了:
    在这里插入图片描述

    更多相关内容
  • esp8266 mesh 组网

    2022-05-18 21:22:12
    esp8266 mesh 组网

    一、网状网络,即Mesh Network,有以下特点:

    a.所有节点都可与拓扑中所有节点进行连线而形成一个“局域网路”

    b.所有节点可以透过多次跳跃进行数据通信

    c.即使在拓扑中有节点无法服务或过于忙碌,网络还是可以正常运作

    在乐鑫开发的ESP-MESH协议中,mesh网络节点之间可以组成网络并转发数据包,这样不需要每个模块都接入路由器,就可以达到大量节点连接网络的效果,思路如下图:

    在mesh网络中,esp8266相当于开启了AP热点,让它下面的小分支去连接,也可以同时连接其他节点,相当于AP+STA模式。

    对于mesh中的细节,比如说,两点的连接最大距离、最高支持多少设备、多少级网络等,大家可自行百度。。。。。。。

    二、mesh组网demo

    既然mesh网络在智能家居中应用广泛,我们写一个demo试一下。

    1、自动开灯,比如说家里开门后,客厅灯自动亮起来,无需人手动开灯

    这里我们需要两块esp8266,光电开关或者红外感应模块,小灯(led或者rgd、二极管都行),最主要看自己有啥吧

    程序如下:

    程序一:esp8266+rgb灯部分

    #include <painlessMesh.h>
    #define   MESH_PREFIX     "xiaoqiu"   //设置mesh信息,名字密码随意,一样就行
    #define   MESH_PASSWORD   "bangbangda"
    #define   MESH_PORT       5555
    #define ledr 5 //我用的是rgb共阳极灯,大家灯不一样的话,点灯部分百度一下或者问我
    #define  ledg 4
    #define  ledb  2
    Scheduler userScheduler;
    painlessMesh  mesh;
    void receivedCallback( uint32_t from, String &msg ) {//收消息
      String message = msg.c_str();
      Serial.println(message);
      if (message == "hello") {//8266收到另一块发来的消息后,开灯红色,这里我写了5s关灯
        digitalWrite(ledr, 0);
        digitalWrite(ledg, 255);
        digitalWrite(ledb, 255);
        delay(5000);
        digitalWrite(ledr, 255);
        digitalWrite(ledg, 255);
        digitalWrite(ledb, 255);
        delay(300);
        message="";
      }
    }
    void setup() {
      Serial.begin(115200);
      pinMode(ledr, OUTPUT);//rgb初始化
      pinMode(ledg, OUTPUT);
      pinMode(ledb, OUTPUT);
      digitalWrite(ledr, 255);//此处是关灯
      digitalWrite(ledg, 255);
      digitalWrite(ledb, 255);
      mesh.setDebugMsgTypes( ERROR | STARTUP );
      //只接收不发送
      mesh.init( MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT );
      mesh.onReceive(&receivedCallback);
    }
    void loop() {
    
      mesh.update();
    }

    程序二:esp8266+光电开关、红外感应模块(需要自己调一下程序),我用的是光电开关如图:

     这种红外感应模块我也有,就是用起来不太准,换成了光电开关

    #include <painlessMesh.h>
    #define   MESH_PREFIX     "xiaoqiu"  //设置mesh信息,名字密码随意,一样就行
    #define   MESH_PASSWORD   "bangbangda"
    #define   MESH_PORT       5555
    Scheduler userScheduler;
    painlessMesh  mesh;
    void sendMessage() ;
    Task taskSendMessage( TASK_SECOND * 1 , TASK_FOREVER, &sendMessage );
    //只发送不接收
    void sendMessage() {
      String msg = "hello";//发送消息,不一定是hello,随便一个,两端要写一样呀
      //  msg += mesh.getNodeId();
      mesh.sendBroadcast( msg );
      taskSendMessage.setInterval( random( TASK_SECOND * 1, TASK_SECOND * 5 ));
    }
    void setup() {
      Serial.begin(115200);
      pinMode(5, INPUT);
      mesh.setDebugMsgTypes( ERROR | STARTUP );
      mesh.init( MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT );
    }
    
    void loop() {
      if (digitalRead(5) == LOW) {//如果来人,发一个消息告诉另一块8266,来人了,开灯吧
           delay(2000);//这里我加了延时,太家可以不加试试看,加延时的目的一是稳定光电开关,二是不想人以来立即开灯,吓死了
        userScheduler.addTask( taskSendMessage );
        taskSendMessage.enable();
     
      }
      mesh.update();
      delay(300);
    }

    把两成程序分别上传,在连接对应传感器及灯。

    展开全文
  • 使用ESP8266组网

    千次阅读 2022-01-21 13:34:16
    ESP-01S WiFi 模块组网
    • 一、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

    展开全文
  • 图解Esp32/ESP8266组网所需了解的那些小概念图解日程生活中常见网络操作背后的小概念图解ESP32/ESP8266组网的小概念一个ESP32和ESP8266组网的实列讲解 图解日程生活中常见网络操作背后的小概念 图解ESP32/ESP8266...

    图解日程生活中常见网络操作背后的小概念

    前情提要

    如下图所示,小明同学位于中国,他想要访问澳大利亚墨尔本大学的官网。他需要进行一系列的操作:

    • 打开浏览器输入墨尔本大学网址"https://www.unimelb.edu.au"
      在这里插入图片描述

    • 点击键盘回车,浏览器跳转到墨尔本大学的主页。
      在这里插入图片描述

    过程中涉及的进行组网开发所需的小概念

    • URL(UniformResourceLocator):小明想要访问到墨尔本大学网站的第一步,是必须知道这个网站的网址"https://www.unimelb.edu.au"。这个网址就是URL的俗称,其全称为统一资源定位符。网址的格式如上表所示,其中<协议>://<域名或IP>是必需的,<端口>/<路径>有时可省略。如:"https://www.unimelb.edu.au"就是省略了端口号和路径,省略端口号代表访问的是http协议的默认80端口,省略路径一般访问的就是网站文件目录下的index.html文件,类似默认配置一样。(这个大致了解下就好,后续我们自己动手编写代码的时候就能更清楚地了解啦
      示例2:本机搭建服务器时经常用到的地址,其中127.0.0.1是默认的主机地址。8080则是自定义的通讯端口。因为不是采用的默认的80端口所以不能省略。访问的路径就是Hello.html
      示例3:在这个LIVE MINI ESP32开发板教程系列(一)配置Arduino IDE环境支持ESP32模块实验中,ESP32模块中就建立了一个http服务器,其局域网内分配的IP地址“192.168.3.79”,通过http协议使用默认80端口。路径/L中存放着熄灭板载灯的操作,
    协议://域名/IP端口/路径
    示例1https://www.unimelb.edu.au使用默认80端口时可省略访问主页时可省略
    示例2https://127.0.0.1:8080/Hello.html
    示例3http://192.168.3.79/L
    • IP地址:就像我们生活中为了能准确收到店家寄来的包裹。我们都要书写属于我们的可以识别的地址。这个地址包括国家,省份,城市,街道,门牌号等信息。为了准确访问到internet上的这些主机,他们也都被分配了一个这样的地址,称为IP地址。具体分为A、B、C、D、E、F五类。对每一类都有详细的规定。比如为啥我们家中常用的路由器都是192.168.x.x?这并不是一个巧合,这也是规定的,因为这是一个C类的地址。其掩码为255.255.255.0,具体解释可以参见下面这篇博客
      IP地址划分和子网划分

    • 域名:IP地址毕竟是数字标识不方便大量记忆,因此我们给每个IP地址都配备唯一方便记忆的域名。目前域名已经成为互联网品牌、网上商标保护必备的要素之一,除了识别功能外,还有引导、宣传等作用。但其实这个域名是需要DNS服务商帮助进行翻译为IP地址后才进行访问的。
      如下图,打开电脑的cmd界面。输入“ping www.unimelb.edu.au”,就可以识别出这个域名对应的墨尔本大学主机的服务器IP地址为185.64.253.1
      在这里插入图片描述
      还可以尝试Ping下我们常用的www.baidu.com。发现百度的IP地址为220.181.38.149
      在这里插入图片描述
      接下来我们可以尝试用这个ip地址来访问百度试试,很显然我们也打开了百度的主页。
      在这里插入图片描述
      经过这样的对比我们不难发现www.baidu.com这样的域名比220.181.38.149这样的数字IP地址方便记忆的多了。
      其实对于域名的命名也是有明确的规定的。比如中国常用的后缀就是.cn ,学校常用的后缀就是.edu(这也是为啥学生申请微软的学生免费软件时需要结尾的邮箱验证的原因)。域名的分类就非常严格。比如www.unimelb.edu.au.edu就代表是学校类域名,.au则是澳大利亚的国家标识。
      详情可以参见百度百科https://baike.baidu.com/item/%E5%9F%9F%E5%90%8D

    • www:万维网WWW是World Wide Web的简称,也称为Web、3W等。WWW是基于客户机/服务器方式的信息发现技术和超文本技术的综合。WWW服务器通过超文本标记语言(HTML)把信息组织成为图文并茂的超文本,利用链接从一个站点跳到另个站点。其实就是我们现在访问网页的时候在里面点击某个链接然后在不同页面进行跳转的效果。

    • http协议:(这个部分贼重要,我们使用ESP系列模块组网的时候用到就是HTTP规定的post呀get呀之类的方法,我以前因为没有认真区分http1.1和http1.0两个版本协议的不同,在自己写的http客服端发送GET请求的时候被“/n/r/n/r”折腾的差点疯掉了。)我们自己进行组网通信的时候通常用这个协议传输数据。
      HTTP协议会话过程包括4个步骤。

    1. 建立连接:客户端的浏览器向服务端发出建立连接的请求,服务端给出响应就可以建立连接了。
    2. 发送请求:客户端按照协议的要求通过连接向服务端发送自己的请求。
    3. 给出应答:服务端按照客户端的要求给出应答,把结果(HTML文件)返回给客户端。
    4. 关闭连接:客户端接到应答后关闭连接
      (这里就就简单介绍下,接下来的实验会详细介绍这个协议的使用)
      推荐一本讲的特别好的书《图解http》【日】上野宣著
    • https协议:HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP)数据传输过程是加密的,安全性较好。现在基本上网站都是https协议了。比如我们访问墨尔本大学的时候,那个URL里的https://就表明了我们在访问主机的时候采用的就是https协议。
    • ftp协议:文件传输协议是Internet中用于访问远程机器的一个协议,它使用户可以在本地机和远程机之间进行有关文件的操作。FTP协议允许传输任意文件并且允许文件具有所有权与访问权限。也就是说,通过FTP协议,可以与internet上的FTP服务器进行文件的上传或下载等动作。
    • 端口:上面介绍了IP地址,可以知道,通过IP地址我们可以找到其对应的主机,但是就像我们去到一栋大楼,他总是会有不同楼层房间。可能财务室在203号房间,秘书室在501房间。如果没有进入正确的房间号,我们肯定是找不到想找的人,处理好想要处理的事情(传达室大爷肯定是不会管报账这类业务的)。其实主机也是这样。在做网络服务的时候针对不同的协议会分配不同的默认端口号(当然如果自己搭服务器,,这个端口号也可以自己定义。)
      常见协议端口号:
    协议端口号
    HTTP80
    FTP21
    SSH22
    Telnet23
    SMTP25
    POP3109
    DNS53
    RPC110
    • HTML:小明打开墨尔本大学的网站后能看到一个非常精美的主页,这个主页文件是用HTML(标准通用标记语言下的一个应用)编写的,可在WWW上传输,能被浏览器识别显示的文本文件。其扩展名是.htm和.html。(我很早之前做过一段AS开发,亲历了html5给网页制作带来的惊人巨变~ 嗷嗷~ 很多ASer被迫转行,所以终身学习真的贼重要呀。别指望什么一劳永逸。。。不可能的哇)
    • CSS:层叠样式表(Cascading Style Sheet,CSS)是构建网页的另一种“语言”,HTML语言用来搭建网页的基本结构。而CSS则用来解决结构的字体、颜色、大小等外观样式。
    • JavaScript:JavaScript 是一种脚本,一门编程语言,其语法类似c语言,也有注释符号、循环、条件判断的指令,利用这些语法在网页上实现复杂的功能,使网页展现的不只是简单的静态信息,而是实时的内容更新,交互式的地图,2D/3D 动画,滚动播放的视频等等。
      HTML&CSS&JavaScript三者配合完成了一个网页的基本开发。一般前端开发就是指这个部分
      JQuery:就像c语言里有库一样,javascript也有各种的库,通过对库的调用可以令JavaScript的使用变得简单。这其中比较有名的就是JQuery。其内置淡入淡出、滑上滑下等动画操作。提升了界面的视觉效果。其分为Development和Production两个版本。功能相同,只不过后者删除了代码注释、换行符和空白多余的字符,文件表较小。阅读源码就使用前者。实际使用就下载后者。后者的名字通常为“jquery-x.x.x.min.js”。他的名字当中会有一个min做为标识。
      Ajax:很早以前网页大多采用静态技术。碰上网页报名最崩溃的是填写了满满一页内容后,提交完提示你某一项不对需要重新提交,而之前填写的东西全都消失了。。。你需要再来一次。。导致用户体验特别不好。像四六级报名这种不报不行的还好。要是个购物网站新会员注册的时候发生这个事情,估计也就没啥新用户了。。。但是现在如果你回忆下网站的注册。一般是你写完名字后,页面就提示你名字重复了请换一个。咦?我明明没有主动刷新页面呀?他是怎么读到我页面的信息的呢?这个就Ajax技术。它可以实现在不重新加载页面的情况下,变换某个部分页面的显示内容。它其实时通过JavaScript加载数据,再不刷新网页的情况下,更新了网页内容
      在ESP32模块内建HTTPServer时就可以使用html、css、jquery和ajax实现一个很有趣的页面
    • internet:际标准的互联网写法是internet,字母i一定要小写。因特网是互联网的一种,它使用TCP/IP协议让不同的设备可以彼此通信。但使用TCPP协议的网络并不一定是因特网,一个局域网也可以使用TCP/P协议。判断自己是否接入因特网,首先是看自己电脑是否安装了TCPP协议,其次看是否拥有一个公网地址(所谓公网地址,就是所有私网地址以外的地址,可以查看IP地址解释部分,因为ipv4本身位数的限制导致国内公网ip特别紧张,所以我们家庭宽带一般都没有公网ip,没有公网ip就意味着别人没有办法直接找到你。就像你跟异地淘宝卖家说我家在花花小区201号她肯定是找不到你的。那么这时候如果想让很远的人能访问你的主机可以使用花生壳一类的代理来实现。这是另外一个故事,回头可以详细聊)。国际标准的因特网写法是 Internet,字母I一定要大写。
    • Web客户端(Client): 小明想要访问的墨尔本大学网站地址是"https://www.unimelb.edu.au"。他就要在浏览器的地址栏输入这个网址后回车实现访问。这个用来输入地址并显示网页内容的浏览器其实可以粗暴的理解为客户端。在浏览器中回车其实意味着向墨尔本大学的主机发送了一个Get请求(详见HTTP协议)。然后通过主机发回来的响应数据显示在浏览器的页面里。
      在这里插入图片描述
      在这里插入图片描述
    • Web服务器(Service):小明访问的墨尔本大学的IP地址指向的主机就称为服务器。
    • 前端开发:用于在客户端实现显示而进行的编程称为前端开发。前端开发主要职能就是把网站的界面更好地呈现给用户。
    • 后端(后台)开发:那些看不见的用于实现用户网站操作的开发部分称为后端开发(哈哈 我自己总结的),其多和数据库和系统大家到。比如linux和mysql。搭建一些api给前端的开发人员调用啥的。

    漫画展示

    在这里插入图片描述

    预告:一个基于ESP32和ESP8266模块组网的实列讲解

    针对上面的介绍,搭建了一个ESP32和ESP8266作为STA接入家中路由器的局域网,其中ESP32作为httpServer,ESP8266作为HTTPClient进行http通信,HTTPClient发送GET请求到HTTPServer,HTTPServer对GET请求的内容进行处理并发送响应信息给HTTPClient。(已经调试完成了。。。等我写出来。。。哈哈哈)
    在这里插入图片描述

    参考资料

    【1】百度百科www (万维网缩写)https://baike.baidu.com/item/www/109924?fromtitle=%E4%B8%87%E7%BB%B4%E7%BD%91&fromid=215515
    【2】ip地址、域名、DNS、URL(即网址)的区别与联系https://blog.csdn.net/ParanoidYang/article/details/54288370

    展开全文
  • 多个esp8266连接在同一个 WIFI上,在局域网内部,相互传数据 #include <ESP8266WiFi.h> #define led 2 //发光二极管连接在8266的GPIO2上 const char *ssid = "test";//这里写入网络的ssid const char ...
  • 传感器数据的采集在物联网系统,智慧城市等多种信息产业中扮演着最基础的,最根本的角色。...在众多方式当中,使用wifi 通信模块ESP8266 相对功耗较低,适用场景灵活,成本低廉,逐渐成为多数工程人员的首选方案。
  • ESP-NOW组网(esp8266

    2022-09-04 08:50:21
    ESP-NOW 通信(esp8266版)
  • Esp8266 【高级篇】深入学习esp8266的esp now模式组网,仿机智云做一个小网关,实现无需网络下轻松彼此连接通讯交互数据。(附带Demo) - CSDN博客 https://blog.csdn.net/xh870189248/article/details/80631739
  • ESP8266组网+STM32数据传输项目

    千次阅读 2021-09-27 15:54:11
    ESP8266+STM32数据传输项目实验硬件:项目关键词:项目描述项目涉及知识:1....使用两块ESP8266通过MQTT协议组网并实现数据传输,ESP8266nodemcu采集传感器数据并发送至ESP01s,ESP01s将接收到的信息通过串口打印,STM3.
  • 基于Android studio设计App,通过ESP8266WiFi模块与89C51单片机进行通信,通过移动端App控制终端单片机的LED的亮灭 具有Android程序+89C51单片机程序+设计报告
  • ESP8266MQTTMesh, 基于MQTT协议支持OTA的组装网状网 ESP8266MQTTMesh面向ESP8266协议的组装网格网络网络支持概述代码提供了一个库,它可以在ESP8266设备之间构建一个网状网络,允许所有节点与MQTT代理通信。...
  • ESP8266简介

    千次阅读 2022-05-27 11:43:02
    ESP8266 是一款适用于物联网和家庭自动化项目的 Wi-Fi 模块。本文是 ESP8266 开发板的入门指南
  • 关于ESP8266WIFI模块的介绍

    万次阅读 2022-03-26 00:14:35
    一、ESP8266WIFI模块的介绍 ESP8266是曾经缔造了以低成本引爆物联网是换成那个的佳话,ESP8266模块是单核32位mcuwifi芯片为主。其特点是拥有高性能无线soc,是一个完整且自成体系的wifi网络方案,能够独立运行,也...
  • 一、AP和STA的基本概念 AP:无线接入点,是一个无线网络的创建者,是网络的...Wifi模块包括两种类型的无线网络的拓扑形式:基础网(Infra)和自组网(Adhoc)要说明无线网络的拓扑形式 二、AP和STA工作模式说明 ...
  • 1、 Esp8266之 搭建开发环境,开始一个“hellow world”串口打印。 2、 Esp8266之 利用GPIO开始使用按钮点亮你的“第一盏灯”。 3、 Esp8266之 利用 “软件定时器 ” 定时0.5秒闪烁点亮一盏LED。 4 、Es...
  • 以上就是关于WIFI涉及到的一些可能会让接触esp8266的初学者一头雾水的名词。 . . . 四、IP地址&端口 1、IP地址 IP地址,就是给互联网上每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32位的...
  • 转载于:https://www.cnblogs.com/kekeoutlook/p/8308225.html
  • AT+CWSAP="ESP8266","12345678",1,0 1为通道号,0表示打开 AT+CIPMUX=1 AT+CIPSERVER=1,8080 1表示打开,端口8080 2.设置作为STA的模块(使用串口助手设置) AT+CWMODE=1 AT+CWLAP AT+CWJAP="ESP8266","12345...
  • ESP8266 Mesh 用户指南

    2019-03-15 20:45:02
    esp8266 mash组网用户开发指南,用于8266开发中的多个设备组网文档。
  • 目前,市面上的配网方式多种多样,但其中博主觉得成功率最高,最方便的方式其实还是Web配网(个人看法),因为Web配网从根本来说就是esp8266开启一个web服务器,在此基础上进行信息交互(POST,GET),所以信息的...
  • 基于Android studio设计App,通过ESP8266WiFi模块与89C51单片机进行通信,通过移动端App控制终端单片机的蜂鸣器 具有Android程序+89C51单片机程序
  • 基于Android studio设计App,通过ESP8266WiFi模块与89C51单片机进行通信,通过移动端App控制终端单片机的步进电机 具有Android程序+89C51单片机程序
  • esp8266怎么配置 esp8266和USB转TTL连接 esp8266简单介绍 esp8266连接路由器 esp8266通过路由器连接在同一局域网中的电脑,建立TCP连接 esp8266使用串口发送数据到电脑上的网络调试助手 esp8266使用串口通过局域网...
  • stm32103c8t6ESP8266串口转WIFI模块TCP服务器(STA模式)单片机用两个串口分别给ESP8266发送数据和给电脑打印信息,方便调试和观测
  • 基于LORA自组网的数据采集系统的实现 (智慧茶园项目的一部分:数据采集系统。由于是团队合作完成的项目,我负责的是数据采集系统的搭建,所以仅展示这部分) 主控芯片:STM32L151CBU6 数据传输模块:自组网-LORA...
  • ESP mesh guid 开发向导 已经有二十字了,还要输入吗
  • ESP8266的wifi使用。
  • ESP-MESH 具有自组网修复的特性,也就是说 mesh 网络可以自主地构建和维护。 传统基础设施 Wi-Fi 网络是一个“单点对多点”的网络。这种网络架构的中心节点为接入点 (AP),其他节点 (Station) 均与 AP 直接相连...
  • 简易组网系统_iot_

    2021-09-30 04:12:21
    stm32 iot template esp8266
  • 1.WiFi模块ESP8266模块的使用(针对初学者)

    万次阅读 多人点赞 2018-01-01 22:11:50
    虽然esp8266有很多种,但是对于我们初学者来说,只需要有RXD,TXD,VCC,GND四个引脚,简单入门足够了 1. 引脚说明: VCC连接正极(有些是3.3V,有些是5V,我的这个是5V),GND连接负极 RXD:数据的接收端 (连接单片机或者USB转...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 253
精华内容 101
热门标签
关键字:

8266自组网