精华内容
下载资源
问答
  • 请注意:以下问题一和问题二写的是路由器的设置问题,问题三写的是手机上的设置,笔者亲身试验这3种方法,最终成功解决多位手机用户能连接上wifi但不能上网的问题。 请在操作之前或之后都重启一次路由器,取...
    对于无线路由器原理方面相信介绍多了大家头更痛,所以下面直接给大家说说解决方法。请注意:以下问题一和问题二写的是路由器的设置问题,问题三写的是手机上的设置,笔者亲身试验了这3种方法,最终成功解决了多位手机用户能连接上wifi,但不能上网的问题。

    请在操作之前或之后都重启一次路由器,取下路由器电源再插上就可以了,这是最简单的,解决方法一,但笔者公司无限WIFI网络并非笔者所能控制,所以笔者近期手机解决连上wifi不能上网采用的是方法三.

    问题一::手机以前能连上wifi上网,什么都没有改动,过几天就不能连接wifi了

    解决办法: 设置路由器的DHCP服务,分配静态地址!

    详细操作: 登陆路同器设置页面,如在浏览器中输入"192.168.1.1"登陆,用户名与密码默认一般是admin(不同的品牌路由器地址不一样,不知道的可以查看下无线路由器表面的标注),进入无线路由器后选择"DHCP服务器"的"静态地址分配"那一项,MAC地址填写手机wifi的MAC地址(一共12位数,如: 43:9u:d3:ff:21:du 或 43-9u-d3-ff-21-du ,不同品牌格式不一样),IP地址填写你想分配的地址(如:192.168.1.199 , 其中199可以随便换成1到255里任何一个数),状态选择生效,保存设置,手机立马就可以上网了.

    温馨提示:手机wifi的MAC地址,在手机设置里的关于手机里可以查到。

    问题二:手机能连上wifi,但是上不了网,打不开网页

    解决办法:路由器设置中DHCP服务器的NDS没有设置! 填写自己地区的DNS

    依然是首先登陆路由器设置界面,然后进入DHCP服务器设置,将DHCP服务器设置为启动,之后将地址信息填写如下:

    地址池开始地址:192.168.1.100

    地址池结束地址:192.168.1.199

    地址租期:任意

    网关:192.168.1.1(这个根据路由器登陆地址而定,一般不是192.168.1.1就是192.168.0.1,路由器表面标签会明确标注,看来看就知道了)

    缺省域名:不用填

    主DNS服务器:202.96.128.96

    备用DNS服务器: 202.96.128.166

    注意:主DNS和备用DNS填自己城市的电信或网通的,你用的电信就填电信DNS,不容地方这个地址是不一样的,首先是判断网络是电信还是联通,然后在看下自己的地方是哪里,以上2个DNS地址是电信的,因为我们用的是电信网络,另外我们这里是广东东莞,所以通过百度搜索“东莞电信DNS”就可以找到以上结果,也可以打电话询问网络商获取。

    不熟悉的朋友也可以Google下:你所用网络提供商的DNS服务器地址。

    问题三:前面2个问题的解决方法都用过了还是只能连上wifi但上不了网的话,下面我们就要用到手动设置IP了

    解决办法:手机不能自动分配IP或解析DNS,需要在手机wifi设置里手动设置静态IP,必须跟路由器设置相同,会以上设置,下面这部设置也就简单了。

    这里我也自己手机为例,笔者购买的是摩托罗拉戴妃ME525智能手机,手动设置IP与DNS地址方法如下:

    ⒈)首先打开无线网络,让手机连接上wifi,连好后还是不能上网,不要急,我们再进入如下操作:

    ⒉)选择"无线和网络设置"--选择WLAN设置"-然后点击手机下面虚拟按键上的"田"字按键(图标:田,房子,返回,放大镜),底部会升起来灰色的工作栏,会看到有两项"扫描"和"高级",这里我们选择"高级"出现高级设置选项,然后再点对点(Ad-hoc)信道 选自己无线信号相同的频道,这个一般默认即可,然后在wifi休眠策略,这里也可以随便,笔者选择跟随屏幕关闭而进入休眠。

    ⒊)MAC地址灰色的不能改,这里不用修改,最后就是IP地址了,由于连接上WIFI不能上网说明自动获取IP失败,所以这里我们要吧启用自动IP勾去去掉,将“使用静态IP”前的勾打上。在IP地址里输入:192.168.1.199 (跟第一问题里的路由器分配给手机的IP设置一样),以下可以参考上面的:
    网关:192.168.1.1
    网络掩码:255.255.255.0
    域名1(DNS): 202.96.128.86 (这就是本问题的重点了,这里的域名意思其实就是DNS,很多同学都不明白这里该填什么.)
    域名2(备用DNS) :202.96.128.166 (可填可不填,备用的就是前面填的那个DNS出了问题,就由后面这个来解析,域名1填了也不行的,可以在2上填192.168.1.1试试)

    设置好后,记得再按下图标(田,房子,返回,放大镜)之后会弹出保存对话框,我们选保存,关闭WIFI,再重新启动WIFI即可,只要设置正确保证可以上网,如果依然不行,请检查设置问题,这里会涉及到的是设置路由器本地IP地址,不是很熟悉的朋友可以参考电脑百事网的路由器设置文章。

    -------------------------------------------------------------------------
    PS解决办法4: 无线路由器里有设置无线上网标准的设置.最好是选择自动,如以前是"11bgn模式",可以改成"11bg模式"试试,各种模式自己测试.
    PS解决办法5: 无线安全设置,加密方式请先选择关闭(WWW.PC841.COM电脑百事网),能上网后再设置密码.
    PS解决办法6: 以上操作都设置好后还是不能上网的,试一下把无线高级选项里的 WMM项的勾去掉 ,然后重启路由器 (网友aitww的方法) ,但去掉勾后可能对网络媒体支持有影响,如无必要,还是把勾打上.
    展开全文
  • 今天家里的WiFi突然能上网手机显示已连接可上网),经过多次断点测试,终于找到原因,成功解决WiFi不能上网问题。 1、首先,查看光纤入户装置光猫,若光猫指示灯亮着,说明线路没有问题。也可通过将...

    今天家里的WiFi突然不能上网了,手机显示已连接(不可上网),经过多次断点测试,终于找到了原因,成功解决WiFi不能上网问题。

    1、首先,查看光纤入户装置光猫,若光猫指示灯亮着,说明线路没有问题。也可通过将光猫的网线直接插入笔记本电脑,选择拨号上网方式,登录宽带账号,测试是否能上网,若能上网,则说明光猫没有问题。那么问题则出现在路由器上。

    2、若手机能连上WiFi,但不能上网,则说明路由器没有出现故障。此时,重启路由器,登录192.168.1.1(不同路由器可能地址不同),重新设置密码,即可成功上网!

    展开全文
  • 电脑安装ESET/NOD杀毒软件后,wifi共享精灵成功开启,但手机无法连接wifi,经过本人多次尝试,终于发现是杀毒软件防火墙的问题,该文档实现如何设置ESET/NOD,使手机成功连接wifi
  • 目前,市面的配方式多种多样,其中博主觉得成功率最高,最方便的方式其实还是Web配(个人看法),因为Web配从根本来说就是esp8266开启一个web服务器,在此基础进行信息交互(POST,GET),所以信息的...

    前言

    1.Web配网概述

    在应用到esp8266的场景,往往与wifi是离不开的,但用户的wifi账号密码又无从知晓,于是乎有了配网。
    目前,市面上的配网方式多种多样,但其中博主觉得成功率最高,最方便的方式其实还是Web配网(个人看法),因为Web配网从根本来说就是esp8266开启一个web服务器,在此基础上进行信息交互(POST,GET),所以信息的传输较为稳定,配网成功率高。

    2.强制门户概述

    强制门户:连接上wifi以后,手机会自动打开一个网页,这就是强制门户。
    相信大家遇见过很多拥有免费wifi的地方,连接上wifi以后,就会自动弹出认证界面,在Web配网的基础上,我们加上强制门户,就可以实现连接wifi以后自动打开配网界面,方便用户操作。

    Web配网详解

    想要实现Web配网,就需要让esp8266开启一个WebServer服务器,需要用到以下函数。

    ESP8266WebServer();//创建WebServer
    begin();//启动WebServer
    on();//请求响应回调
    onNotFound();//无法响应的请求的回调函数
    send();//发送响应数据
    hasArg();//是否存在某个参数
    args();//获取参数个数
    

    具体WebServer实现代码

    const char* AP_NAME = "配网WIFI";//wifi名字
    //html网页源码
    const char* page_html = "\
    <!DOCTYPE html>\r\n\
    <html lang='en'>\r\n\
    <head>\r\n\
      <meta charset='UTF-8'>\r\n\
      <meta name='viewport' content='width=device-width, initial-scale=1.0'>\r\n\
      <title>Document</title>\r\n\
    </head>\r\n\
    <body>\r\n\
      <form name='input' action='/' method='POST'>\r\n\
            wifi名称: <br>\r\n\
            <input type='text' name='ssid'><br>\r\n\
            wifi密码:<br>\r\n\
            <input type='text' name='password'><br>\r\n\
            <input type='submit' value='保存'>\r\n\
        </form>\r\n\
    </body>\r\n\
    </html>\r\n\
    ";
    
    IPAddress apIP(192, 168, 4, 1);//esp8266-AP-IP地址
    ESP8266WebServer server(80);//创建WebServer
    
    void initBasic(void){//初始化基础
      Serial.begin(115200);
      WiFi.hostname("Smart-ESP8266");//设置ESP8266设备名
    }
    
    void initSoftAP(void){//初始化AP模式
      WiFi.mode(WIFI_AP);
      WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
      if(WiFi.softAP(AP_NAME)){
        Serial.println("ESP8266 SoftAP is right");
      }
    }
    
    void handleRoot() {//访问主页回调函数
      server.send(200, "text/html", page_html);
    }
    
    void handleRootPost() {//Post回调函数
      Serial.println("handleRootPost");
      if (server.hasArg("ssid")) {//判断是否有账号参数
        Serial.print("got ssid:");
        strcpy(sta_ssid, server.arg("ssid").c_str());//将账号参数拷贝到sta_ssid中
        Serial.println(sta_ssid);
      } else {//没有参数
        Serial.println("error, not found ssid");
        server.send(200, "text/html", "<meta charset='UTF-8'>error, not found ssid");//返回错误页面
        return;
      }
      //密码与账号同理
      if (server.hasArg("password")) {
        Serial.print("got password:");
        strcpy(sta_password, server.arg("password").c_str());
        Serial.println(sta_password);
      } else {
        Serial.println("error, not found password");
        server.send(200, "text/html", "<meta charset='UTF-8'>error, not found password");
        return;
      }
    
      server.send(200, "text/html", "<meta charset='UTF-8'>保存成功");//返回保存成功页面
      delay(2000);
      //连接wifi
      connectNewWifi();
    }
    
    void initWebServer(void){//初始化WebServer
      server.on("/", HTTP_GET, handleRoot);//设置主页回调函数
      server.on("/", HTTP_POST, handleRootPost);//设置Post请求回调函数
      server.begin();//启动WebServer
      Serial.println("WebServer started!");
    }
    
    void connectNewWifi(void){
      WiFi.mode(WIFI_STA);//切换为STA模式
      WiFi.setAutoConnect(true);//设置自动连接
      WiFi.begin();//连接上一次连接成功的wifi
      Serial.println("");
      Serial.print("Connect to wifi");
      int count = 0;
       while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      if(WiFi.status() == WL_CONNECTED){//如果连接上 就输出IP信息 防止未连接上break后会误输出
        Serial.println("");
        Serial.println("WIFI Connected!");
        Serial.print("IP address: ");
        Serial.println(WiFi.localIP());
        server.stop();
      }
    }
    
    void setup() {
      initBasic();
      initSoftAP();
      initWebServer();
    }
    
    void loop() {
      server.handleClient();
      dnsServer.processNextRequest();
    }
    

    强制门户详解

    要想实现强制门户,就要在以上的普通Web配网的基础上加上DNS服务。
    具体实现思路:当手机连接上一个无需密码的wifi后(看上面的initSoftAP就可以发现设置的是无需密码的AP),会访问一个手机内部的网址去查看是否可以上网,在访问此网址的时候会先发起DNS请求,向服务器问域名的IP地址。然后再发起HTTP请求,请求想要的内容。
    在这里插入图片描述

    esp8266充当AP的角色,会收到手机发来的DNS请求,这时将请求的IP地址指向esp8266的地址就可以了。这时手机就会向esp8266发送http请求,esp8266不管收到什么http请求,都将html页面回复过去,就可以实现强制门户功能了。
    将请求IP指向esp8266地址代码:
     

    DNSServer dnsServer;//创建dnsServer实例
    IPAddress apIP(192, 168, 4, 1);//esp8266-AP-IP地址
    const byte DNS_PORT = 53;//DNS端口号
    
    dnsServer.start(DNS_PORT, "*", apIP)
    

    不管收到什么http请求,都将html页面回复过去

      ESP8266WebServer server(80);//创建WebServer
      
      //server.on("/",handleRoot);
      //上面那行必须在第二个参数上添加上HTTP_GET才能不影响强制门户,防止有些设备无法弹出强制门户,要用域名访问,如果不加第二个参数,就只能实现域名访问而无法强制门户
      //在无法响应的http请求响应回调设置为主页的回调函数,才可以强制门户
      server.on("/", HTTP_GET, handleRoot);//设置主页回调函数
      server.onNotFound(handleRoot);//设置无法响应的http请求的回调函数
      server.on("/", HTTP_POST, handleRootPost);//设置Post请求回调函数
      server.begin();//启动WebServer
    

    完整代码

    #include <ESP8266WiFi.h>
    #include <DNSServer.h>
    #include <ESP8266WebServer.h>
    
    const char* AP_NAME = "配网WIFI";//wifi名字
    //暂时存储wifi账号密码
    char sta_ssid[32] = {0};
    char sta_password[64] = {0};
    //配网页面代码
    const char* page_html = "\
    <!DOCTYPE html>\r\n\
    <html lang='en'>\r\n\
    <head>\r\n\
      <meta charset='UTF-8'>\r\n\
      <meta name='viewport' content='width=device-width, initial-scale=1.0'>\r\n\
      <title>Document</title>\r\n\
    </head>\r\n\
    <body>\r\n\
      <form name='input' action='/' method='POST'>\r\n\
            wifi名称: <br>\r\n\
            <input type='text' name='ssid'><br>\r\n\
            wifi密码:<br>\r\n\
            <input type='text' name='password'><br>\r\n\
            <input type='submit' value='保存'>\r\n\
        </form>\r\n\
    </body>\r\n\
    </html>\r\n\
    ";
    
    const byte DNS_PORT = 53;//DNS端口号
    IPAddress apIP(192, 168, 4, 1);//esp8266-AP-IP地址
    DNSServer dnsServer;//创建dnsServer实例
    ESP8266WebServer server(80);//创建WebServer
    
    void handleRoot() {//访问主页回调函数
      server.send(200, "text/html", page_html);
    }
    
    void handleRootPost() {//Post回调函数
      Serial.println("handleRootPost");
      if (server.hasArg("ssid")) {//判断是否有账号参数
        Serial.print("got ssid:");
        strcpy(sta_ssid, server.arg("ssid").c_str());//将账号参数拷贝到sta_ssid中
        Serial.println(sta_ssid);
      } else {//没有参数
        Serial.println("error, not found ssid");
        server.send(200, "text/html", "<meta charset='UTF-8'>error, not found ssid");//返回错误页面
        return;
      }
      //密码与账号同理
      if (server.hasArg("password")) {
        Serial.print("got password:");
        strcpy(sta_password, server.arg("password").c_str());
        Serial.println(sta_password);
      } else {
        Serial.println("error, not found password");
        server.send(200, "text/html", "<meta charset='UTF-8'>error, not found password");
        return;
      }
    
      server.send(200, "text/html", "<meta charset='UTF-8'>保存成功");//返回保存成功页面
      delay(2000);
      //连接wifi
      connectNewWifi();
    }
    
    void initBasic(void){//初始化基础
      Serial.begin(115200);
      WiFi.hostname("Smart-ESP8266");//设置ESP8266设备名
    }
    
    void initSoftAP(void){//初始化AP模式
      WiFi.mode(WIFI_AP);
      WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
      if(WiFi.softAP(AP_NAME)){
        Serial.println("ESP8266 SoftAP is right");
      }
    }
    
    void initWebServer(void){//初始化WebServer
      //server.on("/",handleRoot);
      //上面那行必须以下面这种格式去写否则无法强制门户
      server.on("/", HTTP_GET, handleRoot);//设置主页回调函数
      server.onNotFound(handleRoot);//设置无法响应的http请求的回调函数
      server.on("/", HTTP_POST, handleRootPost);//设置Post请求回调函数
      server.begin();//启动WebServer
      Serial.println("WebServer started!");
    }
    
    void initDNS(void){//初始化DNS服务器
      if(dnsServer.start(DNS_PORT, "*", apIP)){//判断将所有地址映射到esp8266的ip上是否成功
        Serial.println("start dnsserver success.");
      }
      else Serial.println("start dnsserver failed.");
    }
    
    void connectNewWifi(void){
      WiFi.mode(WIFI_STA);//切换为STA模式
      WiFi.setAutoConnect(true);//设置自动连接
      WiFi.begin();//连接上一次连接成功的wifi
      Serial.println("");
      Serial.print("Connect to wifi");
      int count = 0;
       while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        count++;
        if(count > 10){//如果5秒内没有连上,就开启Web配网 可适当调整这个时间
          initSoftAP();
          initWebServer();
          initDNS();
          break;//跳出 防止无限初始化
        }
        Serial.print(".");
      }
      Serial.println("");
      if(WiFi.status() == WL_CONNECTED){//如果连接上 就输出IP信息 防止未连接上break后会误输出
        Serial.println("WIFI Connected!");
        Serial.print("IP address: ");
        Serial.println(WiFi.localIP());//打印esp8266的IP地址
        server.stop();
      }
    }
    
    void setup() {
      initBasic();
      connectNewWifi();
    }
    
    void loop() {
      server.handleClient();
      dnsServer.processNextRequest();
    }
    

    实验效果

    在这里插入图片描述

     

     

     

     

     

     

    展开全文
  • 目前,市面的配方式多种多样,其中博主觉得成功率最高,最方便的方式其实还是Web配(个人看法),因为Web配从根本来说就是esp8266开启一个web服务器,在此基础进行信息交互(POST,GET),所以信息的...

    前言

    1.Web配网概述
    在应用到esp8266的场景,往往与wifi是离不开的,但用户的wifi账号密码又无从知晓,于是乎有了配网。
    目前,市面上的配网方式多种多样,但其中博主觉得成功率最高,最方便的方式其实还是Web配网(个人看法),因为Web配网从根本来说就是esp8266开启一个web服务器,在此基础上进行信息交互(POST,GET),所以信息的传输较为稳定,配网成功率高。
    2.强制门户概述
    强制门户:连接上wifi以后,手机会自动打开一个网页,这就是强制门户。
    相信大家遇见过很多拥有免费wifi的地方,连接上wifi以后,就会自动弹出认证界面,在Web配网的基础上,我们加上强制门户,就可以实现连接wifi以后自动打开配网界面,方便用户操作。

    Web配网详解

    想要实现Web配网,就需要让esp8266开启一个WebServer服务器,需要用到以下函数

    ESP8266WebServer();//创建WebServer
    begin();//启动WebServer
    on();//请求响应回调
    onNotFound();//无法响应的请求的回调函数
    send();//发送响应数据
    hasArg();//是否存在某个参数
    args();//获取参数个数
    

    具体WebServer实现代码

    const char* AP_NAME = "配网WIFI";//wifi名字
    //html网页源码
    const char* page_html = "\
    <!DOCTYPE html>\r\n\
    <html lang='en'>\r\n\
    <head>\r\n\
      <meta charset='UTF-8'>\r\n\
      <meta name='viewport' content='width=device-width, initial-scale=1.0'>\r\n\
      <title>Document</title>\r\n\
    </head>\r\n\
    <body>\r\n\
      <form name='input' action='/' method='POST'>\r\n\
            wifi名称: <br>\r\n\
            <input type='text' name='ssid'><br>\r\n\
            wifi密码:<br>\r\n\
            <input type='text' name='password'><br>\r\n\
            <input type='submit' value='保存'>\r\n\
        </form>\r\n\
    </body>\r\n\
    </html>\r\n\
    ";
    
    IPAddress apIP(192, 168, 4, 1);//esp8266-AP-IP地址
    ESP8266WebServer server(80);//创建WebServer
    
    void initBasic(void){//初始化基础
      Serial.begin(115200);
      WiFi.hostname("Smart-ESP8266");//设置ESP8266设备名
    }
    
    void initSoftAP(void){//初始化AP模式
      WiFi.mode(WIFI_AP);
      WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
      if(WiFi.softAP(AP_NAME)){
        Serial.println("ESP8266 SoftAP is right");
      }
    }
    
    void handleRoot() {//访问主页回调函数
      server.send(200, "text/html", page_html);
    }
    
    void handleRootPost() {//Post回调函数
      Serial.println("handleRootPost");
      if (server.hasArg("ssid")) {//判断是否有账号参数
        Serial.print("got ssid:");
        strcpy(sta_ssid, server.arg("ssid").c_str());//将账号参数拷贝到sta_ssid中
        Serial.println(sta_ssid);
      } else {//没有参数
        Serial.println("error, not found ssid");
        server.send(200, "text/html", "<meta charset='UTF-8'>error, not found ssid");//返回错误页面
        return;
      }
      //密码与账号同理
      if (server.hasArg("password")) {
        Serial.print("got password:");
        strcpy(sta_password, server.arg("password").c_str());
        Serial.println(sta_password);
      } else {
        Serial.println("error, not found password");
        server.send(200, "text/html", "<meta charset='UTF-8'>error, not found password");
        return;
      }
    
      server.send(200, "text/html", "<meta charset='UTF-8'>保存成功");//返回保存成功页面
      delay(2000);
      //连接wifi
      connectNewWifi();
    }
    
    void initWebServer(void){//初始化WebServer
      server.on("/", HTTP_GET, handleRoot);//设置主页回调函数
      server.on("/", HTTP_POST, handleRootPost);//设置Post请求回调函数
      server.begin();//启动WebServer
      Serial.println("WebServer started!");
    }
    
    void connectNewWifi(void){
      WiFi.mode(WIFI_STA);//切换为STA模式
      WiFi.setAutoConnect(true);//设置自动连接
      WiFi.begin();//连接上一次连接成功的wifi
      Serial.println("");
      Serial.print("Connect to wifi");
      int count = 0;
       while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      if(WiFi.status() == WL_CONNECTED){//如果连接上 就输出IP信息 防止未连接上break后会误输出
        Serial.println("");
        Serial.println("WIFI Connected!");
        Serial.print("IP address: ");
        Serial.println(WiFi.localIP());
        server.stop();
      }
    }
    
    void setup() {
      initBasic();
      initSoftAP();
      initWebServer();
    }
    
    void loop() {
      server.handleClient();
      dnsServer.processNextRequest();
    }
    

    强制门户详解

    要想实现强制门户,就要在以上的普通Web配网的基础上加上DNS服务。
    具体实现思路:当手机连接上一个无需密码的wifi后(看上面的initSoftAP就可以发现设置的是无需密码的AP),会访问一个手机内部的网址去查看是否可以上网,在访问此网址的时候会先发起DNS请求,向服务器问域名的IP地址。然后再发起HTTP请求,请求想要的内容。
    在这里插入图片描述
    esp8266充当AP的角色,会收到手机发来的DNS请求,这时将请求的IP地址指向esp8266的地址就可以了。这时手机就会向esp8266发送http请求,esp8266不管收到什么http请求,都将html页面回复过去,就可以实现强制门户功能了。
    将请求IP指向esp8266地址代码:

    DNSServer dnsServer;//创建dnsServer实例
    IPAddress apIP(192, 168, 4, 1);//esp8266-AP-IP地址
    const byte DNS_PORT = 53;//DNS端口号
    
    dnsServer.start(DNS_PORT, "*", apIP)
    

    不管收到什么http请求,都将html页面回复过去

      ESP8266WebServer server(80);//创建WebServer
      
      //server.on("/",handleRoot);
      //上面那行必须在第二个参数上添加上HTTP_GET才能不影响强制门户,防止有些设备无法弹出强制门户,要用域名访问,如果不加第二个参数,就只能实现域名访问而无法强制门户
      //在无法响应的http请求响应回调设置为主页的回调函数,才可以强制门户
      server.on("/", HTTP_GET, handleRoot);//设置主页回调函数
      server.onNotFound(handleRoot);//设置无法响应的http请求的回调函数
      server.on("/", HTTP_POST, handleRootPost);//设置Post请求回调函数
      server.begin();//启动WebServer
    

    完整代码

    #include <ESP8266WiFi.h>
    #include <DNSServer.h>
    #include <ESP8266WebServer.h>
    
    const char* AP_NAME = "配网WIFI";//wifi名字
    //暂时存储wifi账号密码
    char sta_ssid[32] = {0};
    char sta_password[64] = {0};
    //配网页面代码
    const char* page_html = "\
    <!DOCTYPE html>\r\n\
    <html lang='en'>\r\n\
    <head>\r\n\
      <meta charset='UTF-8'>\r\n\
      <meta name='viewport' content='width=device-width, initial-scale=1.0'>\r\n\
      <title>Document</title>\r\n\
    </head>\r\n\
    <body>\r\n\
      <form name='input' action='/' method='POST'>\r\n\
            wifi名称: <br>\r\n\
            <input type='text' name='ssid'><br>\r\n\
            wifi密码:<br>\r\n\
            <input type='text' name='password'><br>\r\n\
            <input type='submit' value='保存'>\r\n\
        </form>\r\n\
    </body>\r\n\
    </html>\r\n\
    ";
    
    const byte DNS_PORT = 53;//DNS端口号
    IPAddress apIP(192, 168, 4, 1);//esp8266-AP-IP地址
    DNSServer dnsServer;//创建dnsServer实例
    ESP8266WebServer server(80);//创建WebServer
    
    void handleRoot() {//访问主页回调函数
      server.send(200, "text/html", page_html);
    }
    
    void handleRootPost() {//Post回调函数
      Serial.println("handleRootPost");
      if (server.hasArg("ssid")) {//判断是否有账号参数
        Serial.print("got ssid:");
        strcpy(sta_ssid, server.arg("ssid").c_str());//将账号参数拷贝到sta_ssid中
        Serial.println(sta_ssid);
      } else {//没有参数
        Serial.println("error, not found ssid");
        server.send(200, "text/html", "<meta charset='UTF-8'>error, not found ssid");//返回错误页面
        return;
      }
      //密码与账号同理
      if (server.hasArg("password")) {
        Serial.print("got password:");
        strcpy(sta_password, server.arg("password").c_str());
        Serial.println(sta_password);
      } else {
        Serial.println("error, not found password");
        server.send(200, "text/html", "<meta charset='UTF-8'>error, not found password");
        return;
      }
    
      server.send(200, "text/html", "<meta charset='UTF-8'>保存成功");//返回保存成功页面
      delay(2000);
      //连接wifi
      connectNewWifi();
    }
    
    void initBasic(void){//初始化基础
      Serial.begin(115200);
      WiFi.hostname("Smart-ESP8266");//设置ESP8266设备名
    }
    
    void initSoftAP(void){//初始化AP模式
      WiFi.mode(WIFI_AP);
      WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
      if(WiFi.softAP(AP_NAME)){
        Serial.println("ESP8266 SoftAP is right");
      }
    }
    
    void initWebServer(void){//初始化WebServer
      //server.on("/",handleRoot);
      //上面那行必须以下面这种格式去写否则无法强制门户
      server.on("/", HTTP_GET, handleRoot);//设置主页回调函数
      server.onNotFound(handleRoot);//设置无法响应的http请求的回调函数
      server.on("/", HTTP_POST, handleRootPost);//设置Post请求回调函数
      server.begin();//启动WebServer
      Serial.println("WebServer started!");
    }
    
    void initDNS(void){//初始化DNS服务器
      if(dnsServer.start(DNS_PORT, "*", apIP)){//判断将所有地址映射到esp8266的ip上是否成功
        Serial.println("start dnsserver success.");
      }
      else Serial.println("start dnsserver failed.");
    }
    
    void connectNewWifi(void){
      WiFi.mode(WIFI_STA);//切换为STA模式
      WiFi.setAutoConnect(true);//设置自动连接
      WiFi.begin();//连接上一次连接成功的wifi
      Serial.println("");
      Serial.print("Connect to wifi");
      int count = 0;
       while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        count++;
        if(count > 10){//如果5秒内没有连上,就开启Web配网 可适当调整这个时间
          initSoftAP();
          initWebServer();
          initDNS();
          break;//跳出 防止无限初始化
        }
        Serial.print(".");
      }
      Serial.println("");
      if(WiFi.status() == WL_CONNECTED){//如果连接上 就输出IP信息 防止未连接上break后会误输出
        Serial.println("WIFI Connected!");
        Serial.print("IP address: ");
        Serial.println(WiFi.localIP());//打印esp8266的IP地址
        server.stop();
      }
    }
    
    void setup() {
      initBasic();
      connectNewWifi();
    }
    
    void loop() {
      server.handleClient();
      dnsServer.processNextRequest();
    }
    

    实验效果

    在这里插入图片描述
    在这里插入图片描述

    如果有什么不懂的可以评论咨询,看到会回复,欢迎讨论!

    展开全文
  • 我们的5800也例外拥有Wi-Fi(5800国行没有这一功能,但是以后新出的国行机器已经开始配备无线局域网功能,这里介绍的这篇文章适合所有自带无线局域网功能的手机使用),拥有这一功能就可以直接连接无线路由器...
  • 在使用WIFI共享有以下问题时,请尝试升级无线网卡驱动:在WIN7系统下AP启动失败,手机连接成功连接稳定。注意,如果你现在使用的WIFI共享功能一切正常时,请不要升级驱动。如果你的电脑系统是XP,并且你的手机...
  • win7电脑变wifi热点

    2012-06-07 11:27:27
    key:无线网密码,八个以上字符(要记住呀,不然客户端就上不了网了,呵呵)。 在命令行窗口接着输入:netsh wlan start hostednetwork,这个命令是开启虚拟AP(如图8)。 (将start改为stop即可关闭该无线网,以后...
  • 本来没有打算详细整理这些东西,在Win7旗舰版搭建Wifi是比较容易的事,每个人在搭建过程中都会遇到各种各样的问题,敝人就是那位遇到很奇葩的问题的悲惨人士。经过百般挣扎,终于成功实现笔记本作为无线路由器...
  • 在openwrt实现用手机进行3G拨号

    千次阅读 2015-12-11 14:51:54
    实现通过wifi控制机器人后觉得过瘾,想试试远距离控制,听说可以用openwrt进行3G拨号,获取到公网IP后,用其他客户端(手机、电脑等)连接openwrt,实现远程控制机器人,搜索论坛发现成功案例较少,手头又没有3G...
  • 1、手机首先连接openwrt的wifi,如果已经设置dhcp,那就会自动获得IP! 2、苹果手机直接打开 https://192.168.1.1:8080(像电脑一样,可以直接连接摄像头) 2、安卓手机下载app连接吧 APP下载:...
  • 手机当电脑摄像头这个功能,其实在S60和WM时代就已经有相应的软件来实现以前的效果都比不上传统摄像头。DroidCamX给我们带来希望,支持高分辨率,支持多种方式,在使用wifi与USB连接时传输图像都很流畅,...
  • 最近几天准备春招来到学校图书馆,却发现连接上了wifi,也显示internet连接就是上不了网。上次来也是这样,当时我朋友说能上网,但是我却一直不行,当时可能图馆人多导致手机没有信号,想开热点也不行。(Ps:...
  • 路由器的故事(一)

    2020-01-26 12:09:39
    是那种显示wifi但不能连接的情况。 本来自己有点想弄,但是今天是除夕夜,在姐姐的要求下还是来尝试一下。 首先要先进入一个网站。 手机连接该网络,手机要去登录一个TP-link的网站(路由器背面有),192....
  • adb1.0.26包含fastboot.exe

    2019-03-05 15:11:03
    如果连接不了,请确认 Android 设备与电脑是连接到了同一个 WiFi,然后再次执行 adb connect <device-ip-address> 那一步; 如果还是不行的话,通过 adb kill-server 重新启动 adb 然后从头再来一次试试。 断开...
  • 错误处理:以上的功能很多都是基于网络链接,但是网络链接有时候并不是很稳定的,因此我们在编写软件的过程中也着重对这一块进行处理,发生断开连接时,手表会自动进行重连,当重连失败时,手边会重启WIFI模块再...
  • 如果连接不了,请确认 Android 设备与电脑是连接到了同一个 WiFi,然后再次执行 adb connect <device-ip-address> 那一步; 如果还是不行的话,通过 adb kill-server 重新启动 adb 然后从头再来一次试试。 ...
  • 荣欣路由器开发版

    2015-12-02 22:07:43
    但是上不了网。)支持13频道,支持上级SSID空格。 N2.7.4 添加打印机服务器(成功运行),添加了无线叠加软件(测试中,可能需要更换),无线自身脚本稍微更改,N2的 系列的RT3070L脚本也更改了(可能会出现链接不...
  • MyWifiAP_2.3.1.221

    2013-08-07 18:15:06
    您的无线路由服务正常启用着,某时却忽然发现客户端连接正常但上不了网, 您可以快速重启该服务以解决此问题,操作如下图, 点击软件图标→“重启”,客户端等待重新连接成功即可上网! Windows 虚拟路由器软件...
  • AirPlayer录屏大师

    2018-12-14 09:28:54
    苹果录屏大师(AirPlayer)是一款很实用的工具,苹果录屏大师(AirPlayer)操作简单,功能强大,能够将苹果手机设备中的视频、游戏、照片等内容投射到电脑电视屏幕,只需通过WiFi就能够让用户体验到更好的视频、音乐...
  • 服务请求控制,首先VA直接提供一些服务请求的拦截,您可以在集成VA的时候方便的定制这些服务请求,包括限于(App请求安装apk/App请求打开某些文件/App请求定位数据/App请求手机信息等等) 2. 系统API控制,...
  • 在StackOverflow发现有很多人遇到这个错误,不过解决方法却各相同。有的建议Clean然后Rebuild,有的建议修改使用内存,有的说是代码问题,也有的说是资源问题,比如本来是jpg图片或者.9图片,文件后缀却是png...
  • CVE-2020-7471-django1.11-1.11.282.2-2.2.103.0-3.0.3 StringAgg(delimiter)使用了不安全的数据会造成SQL注入漏洞环境和POC CVE-2019-17564 : Apache Dubbo反序列化漏洞 CVE-2019-2725(CNVD-C-2019-48814、WebLogic...

空空如也

空空如也

1 2
收藏数 27
精华内容 10
关键字:

手机连接wifi成功但上不了网