单片机学习小组
直播中

CDCNKA

9年用户 1287经验值
擅长:385288
私信 关注

怎样使ESP8266连接指定名称和密码的Wifi热点呢

NodeMCU的lua开发分别有哪些优缺点呢?
rduino IDE下的开发方式有哪些优缺点呢?
怎样使ESP8266连接指定名称和密码的Wifi热点呢?

回帖(1)

费晨

2022-2-15 14:58:07
##1.开发
###1.1NodeMCU的lua开发:NodeMCU本质也是ESP8266,只是它的固件是与lua脚本语言交互。
优点:节省资源,开发简单,代码量少。
缺点:
1.lua解释器执行效率较低,我最终换成ArduinoIDE开发,就是因为读取传感器数据时,老是漏掉一个数据。2.前期准备比较麻烦。需要准备相应功能的固件,烧录进去,然后使用lua语言和工具与之调试。
###1.2Arduino IDE下的开发方式:
优点:集编程和烧录一体,使用很方便。语言执行效率高,节省资源,开发简单,该有的库也都有。重要的是开发语言,对于我用单片机的人来说,能够很快上手。
缺点:Arduino IDE需要写较长的代码时,不是很方便,如果需要查看底层函数或者方法,非常费劲。

##2.开发操作
点我

##3.固件烧写
这一步,老师可以提前给孩子完成;
点我

##4.案例
###4.1实验一 连接指定Wifi网络

这一段程序将使得ESP8266连接指定名称和密码的Wifi热点,主要流程如下
程序流程:
在Arduino IDE的编辑器界面,开始部分添加头文件
#include
#include
#include
#include

之后设置两个宏定义用于填写Wifi名称和密码
#define WIFINAME “**"
#define WIFIPW "”

点亮一个LED灯用于指示电源,并设定串口波特率用以通信
pinMode(BUILTIN_LED, OUTPUT);
Serial.begin(115200);

设定并连接Wifi,如果没有连接上就会一直重试
WiFi.begin(WIFINAME, WIFIPW);
Serial.print(“Connecting…”);
while (WiFi.status() != WL_CONNECTED)
{undefined
delay(500);
Serial.print(".");
}

整体的代码如下
#include
    #include
    #include
    #include
   
    #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
#include
#include
#include

以宏定义的形式设定地址,端口和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:%dn",Code);
    if(Code == 200)
    {
      String payload = http.getString();
      Serial.println(payload);
    }
    else
{
  Serial.println("Couldn't link to server");
}

实验二整体代码如下

#include
    #include
    #include
    #include
    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:%dn",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
声明各个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
    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具有以下功能:

保证任何IP地址在同一时刻只能由一台DHCP客户机所使用。
DHCP应当可以给用户分配永久固定的IP地址。
DHCP应当可以同用其他方法获得IP地址的主机共存(如手工配置IP地址的主机)。
DHCP服务器应当向现有的BOOTP客户端提供服务。
DHCP有三种机制分配IP地址:
自动分配方式(Automatic Allocation),DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就可以永久性的使用该地址。
动态分配方式(Dynamic Allocation),DHCP服务器给主机指定一个具有时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。
手工分配方式(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 网关
举报

更多回帖

发帖
×
20
完善资料,
赚取积分