第一节 初识nodemcu 点亮led wifi热点

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014624241/article/details/81750171

这里写图片描述

这里写图片描述

1.开发

1.1NodeMCU的lua开发:NodeMCU本质也是ESP8266,只是它的固件是与lua脚本语言交互。

优点:节省资源,开发简单,代码量少。
缺点:
1.lua解释器执行效率较低,我最终换成ArduinoIDE开发,就是因为读取传感器数据时,老是漏掉一个数据。2.前期准备比较麻烦。需要准备相应功能的固件,烧录进去,然后使用lua语言和工具与之调试。

1.2Arduino IDE下的开发方式:

优点:集编程和烧录一体,使用很方便。语言执行效率高,节省资源,开发简单,该有的库也都有。重要的是开发语言,对于我用单片机的人来说,能够很快上手。
缺点:Arduino IDE需要写较长的代码时,不是很方便,如果需要查看底层函数或者方法,非常费劲。

2.开发操作

点我

http://arduino.esp8266.com/stable/package_esp8266com_index.json
arduino ide这块,8266的固件,需要翻墙;
官方开发手册:https://arduino-esp8266.readthedocs.io/en/latest/
esp8266/arduino:https://github.com/esp8266/Arduino
arduino wifi库:https://www.arduino.cc/en/Reference/WiFi
NodeMCU-with-the-Arduino-IDE
https://www.codeproject.com/Articles/1073160/Programming-the-ESP-NodeMCU-with-the-Arduino-IDE

3.固件烧写

这一步,老师可以提前给孩子完成;
点我

4.案例

4.1实验一 连接指定Wifi网络

这一段程序将使得ESP8266连接指定名称和密码的Wifi热点,主要流程如下

程序流程:

在Arduino IDE的编辑器界面,开始部分添加头文件
#include

 #include <Arduino.h>
    #include <ESP8266WiFi.h>
    #include <ESP8266WiFiMulti.h>
    #include <ESP8266HTTPClient.h>

    #define WIFINAME "******"
    #define WIFIPW   "****"

    void setup() {
      // put your setup code here, to run once:
      pinMode(BUILTIN_LED, OUTPUT);
      Serial.begin(115200);
      Serial.println("");
      WiFi.begin(WIFINAME, WIFIPW);
      Serial.print("Connecting..");
      while (WiFi.status() != WL_CONNECTED)
      {
        delay(500);
        Serial.print(".");
      }
      Serial.println();
      Serial.print("Connected,IP Address:");
      Serial.println(WiFi.localIP());



    }

    void loop() {
      // put your main code here, to run repeatedly:

    }

如果成功连接,串口将输出连接成功提示,并且可以通过PC端PING通ESP8266(在同一网段)

4.2实验二 网页客户端

ESP8266可以直接作为一个网页客户端来使用,封装的库中提供函数以快速配置ESP8266为一个网页客户端,能够直接获取网页服务端的代码。例如打开百度首页,通过串口返回所有html代码。这里暂未设置DNS服务因此需要通过IP直接访问。

程序流程:

添加头文件

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>

以宏定义的形式设定地址,端口和wifi名称,密码

#define HTTPIP      "14.215.177.37"   //baidu的ip
#define HTTPPORT    80
#define WIFINAME    "你的wifi名称"
#define WIFIPW      "wifi密码"

配置串口并尝试连接Wifi

 Serial.begin(115200);
  Serial.println();
  Serial.println("Connecting");
  WiFiMulti.addAP(WIFINAME,WIFIPW);
  while(WiFiMulti.run()!=WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("Connected!");

连接指定的网页服务器IP,这里的”/”是指页面文件名称,例如”index.jsp”“main.php”等

http.begin(HTTPIP,HTTPPORT,”/”);

获取代码,如果返回值为200则表示请求网页成功,打印页面

int Code = http.GET();
if(Code)
{
    Serial.printf("HTTP Code:%d\n",Code);
    if(Code == 200)
    {
      String payload = http.getString();
      Serial.println(payload);
    }
    else
{
  Serial.println("Couldn't link to server");
}

实验二整体代码如下

#include <Arduino.h>
    #include <ESP8266WiFi.h>
    #include <ESP8266WiFiMulti.h>
    #include <ESP8266HTTPClient.h>
    ESP8266WiFiMulti WiFiMulti;

    #define HTTPIP      "14.215.177.37"//baidu
    #define HTTPPORT    80
    #define WIFINAME    "*******"
    #define WIFIPW      "*****"


    void setup() {
      // put your setup code here, to run once:
      Serial.begin(115200);
      Serial.println();
      Serial.println("Connecting");
      WiFiMulti.addAP(WIFINAME,WIFIPW);
      while(WiFiMulti.run()!=WL_CONNECTED)
      {
        delay(500);
        Serial.print(".");
      }
      Serial.println("Connected!");

    }

    void loop() {
      // put your main code here, to run repeatedly:
    HTTPClient http;
    Serial.println("Try link to http.");
    http.begin(HTTPIP,HTTPPORT,"/");
    int Code = http.GET();
    if(Code)
    {
        Serial.printf("HTTP Code:%d\n",Code);
        if(Code == 200)
        {
          String payload = http.getString();
          Serial.println(payload);
        }
        else
    {
      Serial.println("Couldn't link to server");
    }
    }

     delay(5000);
    }

4.3实验三 设置ESP8266为软热点

将ESP8266设置为一个热点,可供其他设备连接并交换数据,主要使用的函数:WiFi.softAP(ssid, password, channel, hidden)

参数说明:

ssid:Wifi热点名称,支持最大63个英文字符

password:密码设置,可选参数,也就是可以没有密码,如果设定为WPA2-PSK

channel:信道设置,可选参数,1-13,没有填写则默认为1

hidden:是否隐藏SSID,可选参数,如果设置为true则隐藏

ESP8266开启的默认IP地址为192.168.4.1,可以使用softAPConfig (local_ip, gateway, subnet) 函数进行修改

参数说明:

local_ip:软热点的地址

gateway:网关地址

subnet:子网掩码

程序流程:

头文件

#include <ESP8266WiFi.h>

声明各个IP地址

IPAddress local_IP(192,168,4,4);
IPAddress gateway(192,168,4,1);
IPAddress subnet(255,255,255,0);

配置软AP参数
WiFi.softAPConfig(local_IP, gateway, subnet);

启动AP
WiFi.softAP(“SoftAP001”,”999999999”);

获取IP地址
Serial.print(“Soft-AP IP address = “);
Serial.println(WiFi.softAPIP());
下载完成后,在笔记本上Wifi可以搜到设置的AP
实验三整体代码如下

 #include <ESP8266WiFi.h>
    IPAddress local_IP(192, 168, 4, 4);
    IPAddress gateway(192, 168, 4, 1);
    IPAddress subnet(255, 255, 255, 0);
    void setup() {
      // put your setup code here, to run once:
      Serial.begin(115200);
      WiFi.softAPConfig(local_IP, gateway, subnet);
      WiFi.softAP("SoftAP001", "999999999");
      Serial.print("Soft-AP IP address = ");
      Serial.println(WiFi.softAPIP());

    }

    void loop() {
      // put your main code here, to run repeatedly:

    }

5.知识点补充

5.1ip

5.2mac

5.3子网掩码

5.4DHCP

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。
DHCP协议采用客户端/服务器模型,主机地址的动态分配任务由网络主机驱动。当DHCP服务器接收到来自网络主机申请地址的信息时,才会向网络主机发送相关的地址配置等信息,以实现网络主机地址信息的动态配置。DHCP具有以下功能:
1. 保证任何IP地址在同一时刻只能由一台DHCP客户机所使用。
2. DHCP应当可以给用户分配永久固定的IP地址。
3. DHCP应当可以同用其他方法获得IP地址的主机共存(如手工配置IP地址的主机)。
4. DHCP服务器应当向现有的BOOTP客户端提供服务。
DHCP有三种机制分配IP地址:
1) 自动分配方式(Automatic Allocation),DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就可以永久性的使用该地址。
相关图片
相关图片
2) 动态分配方式(Dynamic Allocation),DHCP服务器给主机指定一个具有时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。
3) 手工分配方式(Manual Allocation),客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。
三种地址分配方式中,只有动态分配可以重复使用客户端不再需要的地址。
DHCP消息的格式是基于BOOTP(Bootstrap Protocol)消息格式的,这就要求设备具有BOOTP中继代理的功能,并能够与BOOTP客户端和DHCP服务器实现交互。BOOTP中继代理的功能,使得没有必要在每个物理网络都部署一个DHCP服务器。RFC 951和RFC 1542对BOOTP协议进行了详细描述。

5.6网关

5.7路由

5.8终结者让你明白 ip mac dns 网关

计算机主机网关的作用是什么?

假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大爷就是你的网关。当你想跟院子里的某个小伙伴玩,只要你在院子里大喊一声他的名字,他听到了就会回应你,并且跑出来跟你玩。

经典:小明趣解什么叫网关?

但是你不被允许走出大门,你想与外界发生的一切联系,都必须由门口的李大爷(网关)用电话帮助你联系。假如你想找你的同学小明聊天,小明家住在很远的另外一个院子里,他家的院子里也有一个看门的王大爷(小明的网关)。但是你不知道小明家的电话号码,不过你的班主任老师有一份你们班全体同学的名单和电话号码对照表,你的老师就是你的DNS服务器。于是你在家里拨通了门口李大爷的电话,有了下面的对话:

小不点:李大爷,我想找班主任查一下小明的电话号码行吗?

李大爷:好,你等着。(接着李大爷给你的班主任挂了一个电话,问清楚了小明的电话)问到了,他家的号码是211.99.99.99

小不点:太好了!李大爷,我想找小明,你再帮我联系一下小明吧。

李大爷:没问题。(接着李大爷向电话局发出了请求接通小明家电话的请求,最后一关当然是被转接到了小明家那个院子的王大爷那里,然后王大爷把电话给转到小明家)

就这样你和小明取得了联系。

至于DHCP服务器嘛,可以这样比喻:

你家院子里的居民越来越多了,传达室李大爷那里的电话交换机已经不能满足这么多居民的需求了,所以只好采用了一种新技术叫做DHCP,居民们开机的时候随机得到一个电话号码,每一次得到的号码都可能会不同。

你家门口的李大爷:就是你的网关

你的班主任:就是你的DNS服务器

传达室的电话交换机:就是你的DHCP服务器

同上,李大爷和王大爷之间的对话就叫做路由。

另:如果还有个小朋友叫做小暗,他住的院子看门的是孙大爷,因为小暗的院子刚盖好,孙大爷刚来不久,他没有李大爷和王大爷办公室的电话(李大爷和王大爷当然也没有他的电话),这时会有两种情况:

1、居委会的赵大妈告诉了孙大爷关于李、王两位大爷的电话(同时赵大妈也告诉了李、王关于孙的电话),这就叫静态设定路由

2、赵大妈病了,孙大爷自己到处打电话,见人就说:“我是小暗他们院子管电话的”,结果被李、王二位听到了,就记在了他们的通讯录上,然后李、王就给孙大爷回了个电话说:“我是小明(小不点)他们院子管电话的”,这就叫动态设定路由

然后有一天小不点要找小暗,结果自然是小不点给李大爷打电话说:“大爷,我找小暗”(这里省略了李大爷去查小暗电话的过程,假设他知道小暗的电话),李大爷一找通讯录:“哦,小暗的院子的电话是孙大爷管着的,要找小暗自然先要通知孙大爷,我可以通知王大爷让他去找孙大爷,也可以自己直接找孙,那当然是自己直接找孙方便了”,于是李大爷给孙大爷打了电话,然后孙大爷又把电话转到了小暗家。

这里李大爷的通讯录叫做路由表。

李大爷选择是自己直接找孙大爷还是让王大爷帮忙转接叫做路由选择。

李大爷之所以选择直接找孙大爷是有依据的,因为他直接找孙大爷就能一步到位,如果要王大爷转接就需要两步才能完成,这里的“步”叫做“跳数”,李大爷的选择遵循的是最少步骤(跳数)原则(如果他不遵守这个原则,小不点可能就会多等些时间才能找到小暗,最终结果可能导致李大爷因工作不力被炒鱿鱼,这叫做“延时太长,选路原则不合理,换了一个路由器”)

当然,事情总是变化的,小不点和小明吵架了,这些天小不点老是给小暗打电话,小明心里想:“操,他是不是在说我坏话啊?”于是小明决定偷听小不点和小暗的通话,但是他又不能出院子,怎么办呢?小明做了这样一个决定:

首先他告诉自己院里管电话的王大爷说:“你给李大爷打个电话说小暗搬到咱们院子了,以后凡是打给他的电话我来接”,王大爷没反映过来(毕竟年纪大了啊!)就给李大爷打了电话,说:“现在我来管理小暗的电话了,孙已经不管了”,结果李大爷就把他的通讯录改了,这叫做路由欺骗。

以后小不点再找小暗,李大爷就转给王大爷了(其实应该转给孙大爷的),王大爷收到了这个电话就转给了小明(因为他之前已经和小明说好了),小明收到这个电话就假装小暗和小不点通信。因为小明作贼心虚,害怕明天小不点和小暗见面后当面问他,于是通信断了之后,又自己以小不点的名义给小暗通了个电话复述了一遍刚才的话,有这就叫数据窃听

再后来,小不点还是不断的和小暗联系,而零落了小明,小明心里嘀咕啊:“我不能总是这样以小暗的身份和小不点通话啊,外一有一天露馅了怎么办!”于是他想了一个更阴险的招数:“干脆我也不偷听你们的电话了,你小不点不是不给我打电话吗!那我让你也给小暗打不了,哼哼!”,他怎么做的呢?我们来看:

他联系了一批狐朋狗友,和他们串通好,每天固定一个时间大家一起给小暗院子传达室打电话,内容什么都有,只要传达室的孙爷爷接电话,就会听到“打雷啦,下雨收衣服啊!”、“人是人他妈生的,妖是妖他妈生的”、“你妈贵姓”等等,听的脑袋都大了,不听又不行,电话不停的响啊!终于有一天,孙爷爷忍不住了,大喊一声:“我受不了拉!!!!”,于是上吊自杀了!

这就是最简单的DDOS攻击,孙爷爷心理承受能力弱的现象叫做“数据报处理模块有BUG”,孙爷爷的自杀叫做“路由器瘫痪”。如果是我,就会微笑着和他们拉家常,例如告诉他们“我早就听了天气预报,衣服10分钟前已经收好了”或者“那你妈是人还是妖”或者“和你奶奶一个姓”等等,我这种健全的心理叫做“健壮的数据报处理,能够抵御任何攻击”

孙爷爷瘫了之后,小不点终于不再给小暗打电话了,因为无论他怎么打对方都是忙音,这种现象叫做“拒绝服务”,所以小明的做法还有一个名字叫做“拒绝服务攻击”。

小明终于安静了几天,…

几天后,小明的院子来了一个美丽的女孩,名字叫做小丽,小明很喜欢她(小小年纪玩什么早恋!)可是小丽有个很帅的男朋友,小明干瞪眼没办法。当然这里还是要遵循上面的原则:小丽是不能出院子的。那个男的想泡小丽自然只能打电话,于是小明又蠢蠢欲动了:

还记得王爷爷是院子的电话总管吗?他之所以能管理电话是因为他有一个通讯录,因为同一个院子可能有2个孩子都叫小明,靠名字无法区分,所以通讯录上每一行只有两项:

门牌电话

一号门1234567(这个是小明的)

二号门7654321(这个是小丽的)

……

王爷爷记性不好,但这总不会错了吧(同一个院子不会有2个“二号门”吧)?每次打电话人家都要说出要找的电话号码,然后通过通讯录去院子里面敲门,比如人家说我找“1234567”,于是王爷爷一比较,哦,是一号门的,他就去敲一号门“听电话”,如果是找“7654321”,那他就找二号门“听电话”。

这里的电话号码就是传说中的“IP地址”

这里的门牌号就是传说中的网卡的’MAC‘地址(每一块网卡的MAC地址都是不一样的,这是网卡的制造商写死在网卡的芯片中的)

小明心里想“奶奶的,老子泡不到你也别想泡”,于是他打起了王爷爷通讯录的主意,经过细心的观察,周密的准备,他终于发现王爷爷有尿频的毛病(毕竟是老人啊…),终于在一个月黑风高的白天,王爷爷去上厕所了,小明偷偷的摸进传达室,小心翼翼的改了王爷爷的通讯录……

过了几天,小丽的男朋友又给小丽打来了电话,对方报的电话是“7654321”,王爷爷一看通讯录,靠:

门牌电话

一号门1234567(这个是小明的)

一号门7654321(注意:这个原来是小丽的,但是被小明改了)

……

王爷爷不知道改了啊,于是就去找一号门的小明了,小明心里这个美啊,他以小丽父亲的口吻严厉的教训了那个男的和小丽之间不正当的男女关系,结果那个男的恭恭敬敬的挂了电话。当然小丽并不知道整个事情的发生…

这里小明的行为叫做“ARP欺骗”(因为在实际的网络上是通过发送ARP数据包来实现的,所以叫做“ARP欺骗”),王爷爷的通讯录叫做“ARP表”

这里要注意:王爷爷现在有两个通讯录了,一个是记录每个院子传达室电话的本本,叫做“路由表”,一个是现在说的记录院子里面详细信息的本本,叫做“ARP表”。

有句命言是“人们总是在追求完美的,尽管永远也做不到”(请记住这句话,因为这是一个大名人–也就是我,说的)

王爷爷的制度中有一条是这么写的“每个月要重新检查一下门牌号和电话的对应本(也就是ARP表)”,这个动作叫做“刷新ARP表”,每个月的时间限制叫做“刷新ARP表的周期”。这样小明为了让那个男的永远不能找到小丽,之后每个月都要偷偷改一次那个通讯录,不过这样也是不得不做的事啊!

补充一点,小明是很聪明的,如果通讯录(ARP表)被改成了这样:

门牌(MAC)电话(IP)

一号门1234567(这个是小明的)

二号门1234567(注意:这个被小明改了,但是他一时头晕改错了)

……

就会是计算机就会弹出一个对话框提示“出现重复的IP地址”,最终会导致王爷爷不知所措,于是通知一号门和二号门,你们的电话重复了。这样小丽就知道有人在破坏她的好事,这个现象叫做“骗局被揭穿了”

小不点知道了小明偷听他和小暗的电话,于是就和小暗约定好了密码。小不点在家里把要说的加密了之后告诉小暗。土豆-〉星期三,地瓜-〉请客,笨蛋-〉小不点家。于是小不点告诉小暗:土豆笨蛋地瓜。小明听了???不懂。。。。郁闷了。。。这是加密。

除此之外,小丽也知道了小明改他家的电话号码了。于是王爷爷就登门一个一个把电话和门牌号记下来。并且藏起来不允许外人修改,只能自己有钥匙(密码)。这是ip地址和MAC地址绑定。当有人改了电话号码的时候,就得找王爷爷改。麻烦是麻烦了,但是安全了。不过小明偷偷的把王爷爷的钥匙偷配了一把(盗窃密码成功),于是他还可以修改。这样么,就这样了。

6.官网参考

https://github.com/esp8266/Arduino

7.扩展模块

esp8266-oled-ssd1306
这里写图片描述

8. 延伸阅读

Who is Who

Devices that connect to Wi-Fi network are called stations (STA). Connection to Wi-Fi is provided by an access point (AP), that acts as a hub for one or more stations. The access point on the other end is connected to a wired network. An access point is usually integrated with a router to provide access from Wi-Fi network to the internet. Each access point is recognized by a SSID (Service Set IDentifier), that essentially is the name of network you select when connecting a device (station) to the Wi-Fi.

ESP8266 module can operate as a station, so we can connect it to the Wi-Fi network. It can also operate as a soft access point (soft-AP), to establish its own Wi-Fi network. Therefore we can connect other stations to such ESP module. ESP8266 is also able to operate both in station and soft access point mode. This provides possibility of building e.g. mesh networks.
ESP8266 operating in the Station + Soft Access Point mode
这里写图片描述
The ESP8266WiFi library provides wide collection of C++ methods (functions) and properties to configure and operate an ESP8266 module in station and / or soft access point mode. They are described in the following chapters.
Class Description

The ESP8266WiFi library is broken up into several classes. In most of cases, when writing the code, user is not concerned with this classification. We are using it to break up description of this library into more manageable pieces.
Index of classes of ESP8266WiFi library

Chapters below describe all function calls (methods and properties in C++ terms) listed in particular classes of ESP8266WiFi. Description is illustrated with application examples and code snippets to show how to use functions in practice. Most of this information is broken up into separate documents. Please follow to access them.
Station
这里写图片描述
Station (STA) mode is used to get ESP module connected to a Wi-Fi network established by an access point.
ESP8266 operating in the Station mode

Station class has several features to facilitate management of Wi-Fi connection. In case the connection is lost, ESP8266 will automatically reconnect to the last used access point, once it is again available. The same happens on module reboot. This is possible since ESP is saving credentials to last used access point in flash (non-volatile) memory. Using the saved data ESP will also reconnect if sketch has been changed but code does not alter the Wi-Fi mode or credentials.

Station Class documentation

Check out separate section with examples.
Soft Access Point

An access point (AP) is a device that provides access to Wi-Fi network to other devices (stations) and connects them further to a wired network. ESP8266 can provide similar functionality except it does not have interface to a wired network. Such mode of operation is called soft access point (soft-AP). The maximum number of stations connected to the soft-AP is five.
这里写图片描述
ESP8266 operating in the Soft Access Point mode

The soft-AP mode is often used and an intermediate step before connecting ESP to a Wi-Fi in a station mode. This is when SSID and password to such network is not known upfront. ESP first boots in soft-AP mode, so we can connect to it using a laptop or a mobile phone. Then we are able to provide credentials to the target network. Once done ESP is switched to the station mode and can connect to the target Wi-Fi.

Another handy application of soft-AP mode is to set up mesh networks. ESP can operate in both soft-AP and Station mode so it can act as a node of a mesh network.

Scan

To connect a mobile phone to a hot spot, you typically open Wi-Fi settings app, list available networks and pick the hot spot you need. Then enter a password (or not) and you are in. You can do the same with ESP. Functionality of scanning for, and listing of available networks in range is implemented by the Scan Class.

Scan Class documentation

Check out separate section with examples.
Client
这里写图片描述
The Client class creates clients that can access services provided by servers in order to send, receive and process data.
ESP8266 operating as the Client

Check out separate section with examples / list of functions
Client Secure
这里写图片描述
The Client Secure is an extension of Client Class where connection and data exchange with servers is done using a secure protocol. It supports TLS 1.1. The TLS 1.2 is not supported.
ESP8266 operating as the Client Secure

Secure applications have additional memory (and processing) overhead due to the need to run cryptography algorithms. The stronger the certificate’s key, the more overhead is needed. In practice it is not possible to run more than a single secure client at a time. The problem concerns RAM memory we can not add, the flash memory size is usually not the issue. If you like to learn how client secure library has been developed, access to what servers have been tested, and how memory limitations have been overcame, read fascinating issue report #43.

Check out separate section with examples / list of functions
Server
这里写图片描述
The Server Class creates servers that provide functionality to other programs or devices, called clients.
ESP8266 operating as the Server

Clients connect to sever to send and receive data and access provided functionality.

Check out separate section with examples / list of functions.
UDP

The UDP Class enables the User Datagram Protocol (UDP) messages to be sent and received. The UDP uses a simple “fire and forget” transmission model with no guarantee of delivery, ordering, or duplicate protection. UDP provides checksums for data integrity, and port numbers for addressing different functions at the source and destination of the datagram.

Check out separate section with examples / list of functions.
Generic

There are several functions offered by ESP8266’s SDK and not present in Arduino WiFi library. If such function does not fit into one of classes discussed above, it will likely be in Generic Class. Among them is handler to manage Wi-Fi events like connection, disconnection or obtaining an IP, Wi-Fi mode changes, functions to manage module sleep mode, hostname to an IP address resolution, etc.

Check out separate section with examples / list of functions.

猜你喜欢

转载自blog.csdn.net/u014624241/article/details/81750171