精华内容
下载资源
问答
  • esp笔记(4)esp8266 连接路由器

    千次阅读 2019-05-15 01:06:40
    本文开发环境: ...esp8266 作为一个WiFi芯片,在Arduino 库的支持下,连接路由器非常的方便,而当我们连接上路由器以后,就可以进一步获取各个网站的接口函数,比如获取天气预报,时间日期等等操作。esp...

    本文开发环境:

    • MCU型号:ESP8266
    • IDE环境 : Arduino IDE

    本文内容:

    1. esp8266 连接路由器

    简介

    esp8266的应用比较多,本文先介绍非常简单的一个例子。esp8266 作为一个WiFi芯片,在Arduino 库的支持下,连接路由器非常的方便,而当我们连接上路由器以后,就可以进一步获取各个网站的接口函数,比如获取天气预报,时间日期等等操作。esp8266的联网程序主要用到了 “ESP8266WiFi.h。其详细信息可从官方完整进一步了解:点击这里访问官方资源。

    示例程序

    首先来看一段连接到路由器的代码示例:

    // Libraries
    #include <ESP8266WiFi.h>
    
    // WiFi settings
    const char* ssid     = "602";          //WiFi名为 602 
    const char* password = "602602602";    //密码为 602602602
    
    void setup() {
      // 初始化串口
      Serial.begin(115200);
      delay(10);
      // We start by connecting to a WiFi network
      
      Serial.print("Connecting to WIFI");
      Serial.println(ssid);
      //启动wifi连接,ssid为wifi名字,password为密码
      WiFi.begin(ssid, password);
      //轮询等待wifi连接完成 即 wifi.status() 状态为 WL_CONNECTED(表示已经连接上了)
      while (WiFi.status() != WL_CONNECTED) {
        delay(1000);
        Serial.print(".");
      }
      Serial.println("");
      Serial.println("WiFi connected");
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());
    }
    
    void loop() {
      Serial.print(".");
      delay(1000);
    }
    

    串口输出

    当我们下载并运行程序以后,可以从串口观察到esp8266的运行情况:
    在这里插入图片描述
    可以看到,串口助手已经显示连接成功,并打印出路由器给分配的IP地址:192.168.0.3

    路由器管理页查看

    我们还可以登陆我们的路由器,来查看无线设备接入的情况,路由器通常IP地址为:192.168.0.1,本文使用的是360路由器,登陆路由器以后,点击“谁在上网”,可查询详情如下所示:
    在这里插入图片描述
    可以看到,有一个名为 ESP_9DE7D9 的设备连接上了,并且IP地址也和我们获取到的一样,这就是我们的模块了,或许你可以尝试拉黑这模块,看看连接时候,串口监视器会有什么提示。

    展开全文
  • ESP8266 连接路由器后无规律重启 手中两块ESP8266 12F的模块, 烧入Micropython 1.14. 连接到WIFI路由器后却不停重新启动, 同样的程序烧入同期入手的ESP32S模块工作正常, 殊为怪异, 不得其解, 网上检索,也没看到相关...

    ESP8266 连接路由器后无规律重启

    手中两块ESP8266 12F的模块, 烧入Micropython 1.14. 连接到WIFI路由器后却不停重新启动, 同样的程序烧入同期入手的ESP32S模块工作正常, 殊为怪异, 不得其解, 网上检索,也没看到相关的资料. 两块的现象一致, 应该不会是器件损坏导致.

    今日写一段ESP32作为WIFI AP的代码, 忽然想到ESP32支持同时作为AP和STA工作, 会不会ESP8266不支持? 一试, 果真如此. ESP8266的Micropython固件默认模块工作在AP模式, 如果作为STA使用, 需要将AP模式置为False, “ap.active(False)”. 之后再作为STA连接路由器就不会不断重启了.

    展开全文
  • 先把源码和资料链接放到这里 源码链接:... 前几篇是介绍的模块建立TCP服务器,不连接路由器,然后进行通信呢,连接路由器最大的好处就是可以实现远程控制 今天呢有喜有悲,...

    http://www.cnblogs.com/yangfengwu/p/8871464.html  

     

    先把源码和资料链接放到这里

    源码链接:https://pan.baidu.com/s/1wT8KAOIzvkOXXNpkDI7E8g 
    提取码:1q9y 

     

    前几篇是介绍的模块建立TCP服务器,不连接路由器,然后进行通信呢,连接路由器最大的好处就是可以实现远程控制

    今天呢有喜有悲,悲喜交加,板子终于开始贴片了....

     

    今天最让人开心的事情是自己刚做的GPRS的板子和51学习的板子虽然自己马虎画错了一个地方起初也不知道...,但是嘉立创的客服今天打电话说自己那个地方有点问题,然后给自己修改了过来,,,现在感觉在嘉立创做板子就是放心,真的.不是打广告哈,感觉人家的服务就是好

    现在看一下自己画的不对的地方

    现在只看机械层和底层

    直接一个打孔就干掉了这条线..................机械层在画板子的时候如果不注意........下次一定要时刻提醒着自己,画完板子单独看一下机械层和顶层或底层,容易忘

     

    现在接着说

    其实连接路由器就一条指令

    其实应该还有配置设置自己的IP地址固定住,一会在说,咱先连接路由器,然后开启TCP,然后看一下模块的IP,然后进行通信

    刚才测试发现一个问题,如果配置了连接无线了(而且保存了),那么上电后模块

     

    那么咱们以前的程序就不能用了,,,不能是等待3s后判断有没有ready,,,,应该是复位以后一直检测有没有回复ready,超过3S没有回复就再发送一次指令,发送的指令超过3次

    那么咱就重新开始

    看一个就行,,,下面的都一样

        /*下面的都是一样的模子,注释就写一个*/
        Cnt = 0;
        CntCnt = 0;
        SendDataFlage = 1;
        while(1)
        {
            if(SendDataFlage == 1)//发送指令
            {
              SendDataFlage = 0;
              printf("8266RST\r\n");//这个不是什么指令,我先用串口调试助手模拟
              P0_0 = 1;//这个灯作为指示灯,发送个指令就亮,
              ESP_Rst();//复位8266
           }
            
            DelayMs(1);
            if(UsartFlage == 1)//串口接收到数据
            {
                UsartFlage = 0;
                if(strstr(UsartReceive, "ready"))//有没有ready
                {
                    P0_0 = 0;//接收到正确的回复就灭
                    DelayMs(500);
                    break;
                }
             }
            
            Cnt ++;
            if(Cnt>=3000)//每间隔3S发送一次数据
            {
                SendDataFlage = 1;//允许发送数据
                Cnt = 0;
                CntCnt++;
             }
            if(CntCnt>=3)//超过三次重新开始
            {
                CntCnt = 0;
                Cnt = 0;
                goto start;
            }
      }

     

     

    所以现在的程序

    #define MAIN_C_
    #include "include.h"
    
    /**
    * 介绍:  主函数
    * 说明:  每间隔1S发送一次温湿度数据
    * 说明:  返回串口接收到的数据,发送方式为中断发送
    * 说明:  None
    * 说明:  None
    * 支持:  QQ946029359 --群 607064330
    * 淘宝:  https://shop411638453.taobao.com/
    * 作者:  小五
    **/
    
    int Cnt = 0;
    unsigned char CntCnt = 0;
    unsigned char SendDataFlage = 0;
    
    unsigned char ConnectID = 0;
    unsigned char i=0;
    unsigned char SendDataValue[6]={0xaa,0x55};
    int ReadDHT11delay = 0;//设置多少时间读一次DHT11;
    void main()
    {
        InitUART(115200);
        InitTimer0();
       
        start:
        
        /*下面的都是一样的模子,注释就写一个*/
        Cnt = 0;
        CntCnt = 0;
        SendDataFlage = 1;
        while(1)
        {
            if(SendDataFlage == 1)//发送指令
            {
                SendDataFlage = 0;
          printf("8266RST\r\n");//这个不是什么指令,我先用串口调试助手模拟
              P0_0 = 1;//这个灯作为指示灯,发送个指令就亮,
              ESP_Rst();//复位8266
        }
            
            DelayMs(1);
            if(UsartFlage == 1)//串口接收到数据
            {
          UsartFlage = 0;
                if(strstr(UsartReceive, "ready"))//有没有ready
                {
                    P0_0 = 0;//接收到正确的回复就灭
                    DelayMs(500);
                    break;
                }
        }
            
            Cnt ++;
            if(Cnt>=3000)//每间隔3S发送一次数据
            {
                SendDataFlage = 1;//允许发送数据
                Cnt = 0;
                CntCnt++;
        }
            if(CntCnt>=3)//超过三次重新开始
            {
                CntCnt = 0;
                Cnt = 0;
                goto start;
            }
            
      }
        
        /*配置连接路由器*/
        Cnt = 0;
        CntCnt = 0;
        SendDataFlage = 1;
        while(1)
        {
            if(SendDataFlage)
            {
                SendDataFlage = 0;
                printf("AT+CWJAP_DEF=\"qqqqq\",\"11223344\"\r\n");//连接路由器
              P0_0 = 1;
            }
            
            DelayMs(1);
            if(UsartFlage == 1)
            {
          UsartFlage = 0;
                if(strstr(UsartReceive, "OK"))
                {
                    P0_0 = 0;
                    DelayMs(500);
                    break;
                }
        }
            
            Cnt ++;
            if(Cnt>=3000)//每间隔3S发送一次数据
            {
                SendDataFlage = 1;//允许发送数据
                Cnt = 0;
                CntCnt++;
        }
            if(CntCnt>=3)//超过三次重新开始
            {
                CntCnt = 0;
                Cnt = 0;
                goto start;
            }
      }
        
        
        /*配置模式*/
      Cnt = 0;
        CntCnt = 0;
        SendDataFlage = 1;
        while(1)
        {
            if(SendDataFlage)
            {
          SendDataFlage = 0;
                printf("AT+CWMODE_DEF=3\r\n");//AP+Station
              P0_0 = 1;
        }
            DelayMs(1);
            if(UsartFlage == 1)
            {
          UsartFlage = 0;
                if(strstr(UsartReceive, "OK"))
                {
                    P0_0 = 0;
                    DelayMs(500);
                    break;
                }
        }
            Cnt ++;
            if(Cnt>=3000)//每间隔3S发送一次数据
            {
                SendDataFlage = 1;//允许发送数据
                Cnt = 0;
                CntCnt++;
        }
            if(CntCnt>=3)//超过三次重新开始
            {
                CntCnt = 0;
                Cnt = 0;
                goto start;
            }
      }
        
        /*多连接*/
        Cnt = 0;
        CntCnt = 0;
        SendDataFlage = 1;
        while(1)
        {
            if(SendDataFlage)
            {
          SendDataFlage = 0;
                printf("AT+CIPMUX=1\r\n");//启动多连接
              P0_0 = 1;
        }
            
            DelayMs(1);
            if(UsartFlage == 1)
            {
          UsartFlage = 0;
                if(strstr(UsartReceive, "OK"))
                {
                    P0_0 = 0;
                    DelayMs(500);
                    break;
                }
        }
            Cnt ++;
            if(Cnt>=3000)//每间隔3S发送一次数据
            {
                SendDataFlage = 1;//允许发送数据
                Cnt = 0;
                CntCnt++;
        }
            if(CntCnt>=3)//超过三次重新开始
            {
                CntCnt = 0;
                Cnt = 0;
                goto start;
            }
      }
        /*创建服务器*/
        Cnt = 0;
        CntCnt = 0;
        SendDataFlage = 1;
        while(1)
        {
            if(SendDataFlage)
            {
                SendDataFlage = 0;
                printf("AT+CIPSERVER=1,1001\r\n");//创建服务器
              P0_0 = 1;
            }
            
            DelayMs(1);
            if(UsartFlage == 1)
            {
          UsartFlage = 0;
                if(strstr(UsartReceive, "OK"))
                {
                    P0_0 = 0;
                    DelayMs(500);
                    break;
                }
        }
            Cnt ++;
            if(Cnt>=3000)//每间隔3S发送一次数据
            {
                SendDataFlage = 1;//允许发送数据
                Cnt = 0;
                CntCnt++;
        }
            if(CntCnt>=3)//超过三次重新开始
            {
                CntCnt = 0;
                Cnt = 0;
                goto start;
            }
      }
        
        /*让小灯闪一闪,算是说明正确执行了把*/
      P0_0 = 0;
      DelayMs(200);
        P0_0 = 1;
        DelayMs(200);
      P0_0 = 0;
      DelayMs(200);
        P0_0 = 1;
        DelayMs(200);
        P0_0 = 0;
        
        
        while(1)
        {
            
            if(TimeCnt>=200)
            {
                TimeCnt = 0;
                DHT11_Receive(); 
            }
            
            
            if(UsartFlage == 1)//返回接收的数据
            {
          UsartFlage = 0;
                
                for(i=0;i<10;i++)//找到开始的数据位置,有的固件数据前头有换行,有的没有
                {
            if(UsartReceive[i]=='+' && UsartReceive[i+1]=='I'&& UsartReceive[i+2]=='P')//判断数据的头
                    {
                        ConnectID = UsartReceive[i+5];//得到是几号连接的
                        if(ConnectID>=0x30 && ConnectID<=0x34)//得到的ID号有没有越界
                        {
                             for(i=6;i<15;i++)//找到 : 在哪里,才知道真实数据在哪里
                             {
                                    if(UsartReceive[i] == ':')
                                    {
                                        if(UsartReceive[i+1]==0xaa  && UsartReceive[i+2]==0x55)
                                        {
                                             switch(UsartReceive[i+3])
                                             {
                                                    case 0x01:  SendDataValue[2] = 0x01;
                                                                            SendDataValue[3] = DHT11Data[0];
                                                                            SendDataValue[4] = DHT11Data[2];
                                                              ESPSendData(ConnectID-0x30,5,SendDataValue,1000);
                                                                            break;//发送温湿度数据
                                                    case 0x02: if(UsartReceive[i+4] == 0x00)
                                                                         {
                                                                             P0_0 = 0;
                                                                         } 
                                                                         else if(UsartReceive[i+4] == 0xff)
                                                                         {
                                                                             P0_0 = 1;
                                                                         }
                                                                         break;
                                                    default:break;                          
                                             }
                                             break;//结束for(i=6;i<15)
                                        }
                                    }
                             }
                             
                             break;//结束for(i=0;i<10;i++)
                        }
                    }
          }
                
        }
        
      }
    }

    多加了一个指令(在复位后执行)

     

     对了\"  在前面介绍了哈  就是代表"

    程序下进去了,现在看一下自己的路由器列表

    现在测试通信

     

     

    用咱做的TCP客户端测试

     

     

     

    既然连接路由器了,就可以实现远程了

    先用花生壳,,不知道还能不能用,花了6块钱都买了一年了.....

    详细的购买花生壳过程,请参考我的这篇文章

    http://www.cnblogs.com/yangfengwu/p/7736296.html#3941866

    先映射

     

     

     

     

     

     对了说一下,其实直接连接模块的无线也是可以通信的....

    现在测试C#TCP客户端

    现在用花生壳连接

     

     

     

    看来是解析域名出了问题直接百度

    咱试一试

    可以啦.....

    接着再修改一下单片机的程序,8266连接路由器之后是不是因为自动分配的IP,所以对于咱来说是不是不方便哈,如果IP地址变了,,,还要查看,然后花生壳还要跟着修改,,,

    现在咱固定模块的IP

    两种方式一种是用模块的指令,另一种是在路由器里面修改

    咱先用指令修改

     

    我先用串口助手配置一下看看回的内容

     

     

     

    现在做单片机程序..其实就是加一个指令

    /*配置连接路由器后分得的IP地址是多少*/
        Cnt = 0;
        CntCnt = 0;
        SendDataFlage = 1;
        while(1)
        {
            if(SendDataFlage)
            {
                SendDataFlage = 0;
                printf("AT+CIPSTA_DEF=\"192.168.1.106\",\"192.168.1.1\",\"255.255.255.0\"\r\n");
              P0_0 = 1;
            }
            
            DelayMs(1);
            if(UsartFlage == 1)
            {
                UsartFlage = 0;
                if(strstr(UsartReceive, "OK"))
                {
                    P0_0 = 0;
                    DelayMs(500);
                    break;
                }
            }
            
            Cnt ++;
            if(Cnt>=3000)//每间隔3S发送一次数据
            {
                SendDataFlage = 1;//允许发送数据
                Cnt = 0;
                CntCnt++;
            }
            if(CntCnt>=3)//超过三次重新开始
            {
                CntCnt = 0;
                Cnt = 0;
                goto start;
            }
      }

     

    现在也设置一下花生壳

    咱用手机远程连接一下

     

    现在用路由器修改

    咱先把程序修改的屏蔽掉,

        /*配置连接路由器后分得的IP地址是多少*/
    //     Cnt = 0;
    //     CntCnt = 0;
    //     SendDataFlage = 1;
    //     while(1)
    //     {
    //         if(SendDataFlage)
    //         {
    //             SendDataFlage = 0;
    //             printf("AT+CIPSTA_DEF=\"192.168.1.106\",\"192.168.1.1\",\"255.255.255.0\"\r\n");
    //           P0_0 = 1;
    //         }
    //         
    //         DelayMs(1);
    //         if(UsartFlage == 1)
    //         {
    //       UsartFlage = 0;
    //             if(strstr(UsartReceive, "OK"))
    //             {
    //                 P0_0 = 0;
    //                 DelayMs(500);
    //                 break;
    //             }
    //     }
    //         
    //         Cnt ++;
    //         if(Cnt>=3000)//每间隔3S发送一次数据
    //         {
    //             SendDataFlage = 1;//允许发送数据
    //             Cnt = 0;
    //             CntCnt++;
    //     }
    //         if(CntCnt>=3)//超过三次重新开始
    //         {
    //             CntCnt = 0;
    //             Cnt = 0;
    //             goto start;
    //         }
    //   }

     

    噢噢噢噢噢噢噢知道原因了

     

    可以先恢复出厂设置

     

     

     

     不过模块有问题了.................

     

     哦哦哦哦哦知道原因了....要先设置模式默认AP模式是不可以连接路由器的................以前的程序全部有BUG...................

    #define MAIN_C_
    #include "include.h"
    
    /**
    * 介绍:  主函数
    * 说明:  每间隔1S发送一次温湿度数据
    * 说明:  返回串口接收到的数据,发送方式为中断发送
    * 说明:  None
    * 说明:  None
    * 支持:  QQ946029359 --群 607064330
    * 淘宝:  https://shop411638453.taobao.com/
    * 作者:  小五
    **/
    
    int Cnt = 0;
    unsigned char CntCnt = 0;
    unsigned char SendDataFlage = 0;
    
    unsigned char ConnectID = 0;
    unsigned char i=0;
    unsigned char SendDataValue[6]={0xaa,0x55};
    int ReadDHT11delay = 0;//设置多少时间读一次DHT11;
    void main()
    {
        InitUART(115200);
        InitTimer0();
       
        start:
        
        /*下面的都是一样的模子,注释就写一个*/
        Cnt = 0;
        CntCnt = 0;
        SendDataFlage = 1;
        while(1)
        {
            if(SendDataFlage == 1)//发送指令
            {
                SendDataFlage = 0;
          printf("8266RST\r\n");//这个不是什么指令,我先用串口调试助手模拟
              P0_0 = 1;//这个灯作为指示灯,发送个指令就亮,
              ESP_Rst();//复位8266
        }
            
            DelayMs(1);
            if(UsartFlage == 1)//串口接收到数据
            {
          UsartFlage = 0;
                if(strstr(UsartReceive, "ready"))//有没有ready
                {
                    P0_0 = 0;//接收到正确的回复就灭
                    DelayMs(500);
                    break;
                }
        }
            
            Cnt ++;
            if(Cnt>=3000)//每间隔3S发送一次数据
            {
                SendDataFlage = 1;//允许发送数据
                Cnt = 0;
                CntCnt++;
        }
            if(CntCnt>=3)//超过三次重新开始
            {
                CntCnt = 0;
                Cnt = 0;
                goto start;
            }
      }
        
        
        /*配置模式*/
      Cnt = 0;
        CntCnt = 0;
        SendDataFlage = 1;
        while(1)
        {
            if(SendDataFlage)
            {
          SendDataFlage = 0;
                printf("AT+CWMODE_DEF=3\r\n");//AP+Station
              P0_0 = 1;
        }
            DelayMs(1);
            if(UsartFlage == 1)
            {
          UsartFlage = 0;
                if(strstr(UsartReceive, "OK"))
                {
                    P0_0 = 0;
                    DelayMs(500);
                    break;
                }
        }
            Cnt ++;
            if(Cnt>=3000)//每间隔3S发送一次数据
            {
                SendDataFlage = 1;//允许发送数据
                Cnt = 0;
                CntCnt++;
        }
            if(CntCnt>=3)//超过三次重新开始
            {
                CntCnt = 0;
                Cnt = 0;
                goto start;
            }
      }
        
        
    //     /*配置连接路由器后分得的IP地址是多少*/
    //     Cnt = 0;
    //     CntCnt = 0;
    //     SendDataFlage = 1;
    //     while(1)
    //     {
    //         if(SendDataFlage)
    //         {
    //             SendDataFlage = 0;
    //             printf("AT+CIPSTA_DEF=\"192.168.1.106\",\"192.168.1.1\",\"255.255.255.0\"\r\n");
    //           P0_0 = 1;
    //         }
    //         
    //         DelayMs(1);
    //         if(UsartFlage == 1)
    //         {
    //       UsartFlage = 0;
    //             if(strstr(UsartReceive, "OK"))
    //             {
    //                 P0_0 = 0;
    //                 DelayMs(500);
    //                 break;
    //             }
    //     }
    //         
    //         Cnt ++;
    //         if(Cnt>=3000)//每间隔3S发送一次数据
    //         {
    //             SendDataFlage = 1;//允许发送数据
    //             Cnt = 0;
    //             CntCnt++;
    //     }
    //         if(CntCnt>=3)//超过三次重新开始
    //         {
    //             CntCnt = 0;
    //             Cnt = 0;
    //             goto start;
    //         }
    //   }
        
        
        /*配置连接路由器*/
        Cnt = 0;
        CntCnt = 0;
        SendDataFlage = 1;
        while(1)
        {
            if(SendDataFlage)
            {
                SendDataFlage = 0;
                printf("AT+CWJAP_DEF=\"qqqqq\",\"11223344\"\r\n");//连接路由器
              P0_0 = 1;
            }
            
            DelayMs(1);
            if(UsartFlage == 1)
            {
          UsartFlage = 0;
                if(strstr(UsartReceive, "OK"))
                {
                    P0_0 = 0;
                    DelayMs(500);
                    break;
                }
        }
            
            Cnt ++;
            if(Cnt>=3000)//每间隔3S发送一次数据
            {
                SendDataFlage = 1;//允许发送数据
                Cnt = 0;
                CntCnt++;
        }
            if(CntCnt>=3)//超过三次重新开始
            {
                CntCnt = 0;
                Cnt = 0;
                goto start;
            }
      }
        
        
        /*多连接*/
        Cnt = 0;
        CntCnt = 0;
        SendDataFlage = 1;
        while(1)
        {
            if(SendDataFlage)
            {
          SendDataFlage = 0;
                printf("AT+CIPMUX=1\r\n");//启动多连接
              P0_0 = 1;
        }
            
            DelayMs(1);
            if(UsartFlage == 1)
            {
          UsartFlage = 0;
                if(strstr(UsartReceive, "OK"))
                {
                    P0_0 = 0;
                    DelayMs(500);
                    break;
                }
        }
            Cnt ++;
            if(Cnt>=3000)//每间隔3S发送一次数据
            {
                SendDataFlage = 1;//允许发送数据
                Cnt = 0;
                CntCnt++;
        }
            if(CntCnt>=3)//超过三次重新开始
            {
                CntCnt = 0;
                Cnt = 0;
                goto start;
            }
      }
        /*创建服务器*/
        Cnt = 0;
        CntCnt = 0;
        SendDataFlage = 1;
        while(1)
        {
            if(SendDataFlage)
            {
                SendDataFlage = 0;
                printf("AT+CIPSERVER=1,1001\r\n");//创建服务器
              P0_0 = 1;
            }
            
            DelayMs(1);
            if(UsartFlage == 1)
            {
          UsartFlage = 0;
                if(strstr(UsartReceive, "OK"))
                {
                    P0_0 = 0;
                    DelayMs(500);
                    break;
                }
        }
            Cnt ++;
            if(Cnt>=3000)//每间隔3S发送一次数据
            {
                SendDataFlage = 1;//允许发送数据
                Cnt = 0;
                CntCnt++;
        }
            if(CntCnt>=3)//超过三次重新开始
            {
                CntCnt = 0;
                Cnt = 0;
                goto start;
            }
      }
        
        /*让小灯闪一闪,算是说明正确执行了把*/
      P0_0 = 0;
      DelayMs(200);
        P0_0 = 1;
        DelayMs(200);
      P0_0 = 0;
      DelayMs(200);
        P0_0 = 1;
        DelayMs(200);
        P0_0 = 0;
        
        
        while(1)
        {
            
            if(TimeCnt>=200)
            {
                TimeCnt = 0;
                DHT11_Receive(); 
            }
            
            
            if(UsartFlage == 1)//返回接收的数据
            {
          UsartFlage = 0;
                
                for(i=0;i<10;i++)//找到开始的数据位置,有的固件数据前头有换行,有的没有
                {
            if(UsartReceive[i]=='+' && UsartReceive[i+1]=='I'&& UsartReceive[i+2]=='P')//判断数据的头
                    {
                        ConnectID = UsartReceive[i+5];//得到是几号连接的
                        if(ConnectID>=0x30 && ConnectID<=0x34)//得到的ID号有没有越界
                        {
                             for(i=6;i<15;i++)//找到 : 在哪里,才知道真实数据在哪里
                             {
                                    if(UsartReceive[i] == ':')
                                    {
                                        if(UsartReceive[i+1]==0xaa  && UsartReceive[i+2]==0x55)
                                        {
                                             switch(UsartReceive[i+3])
                                             {
                                                    case 0x01:  SendDataValue[2] = 0x01;
                                                                            SendDataValue[3] = DHT11Data[0];
                                                                            SendDataValue[4] = DHT11Data[2];
                                                              ESPSendData(ConnectID-0x30,5,SendDataValue,1000);
                                                                            break;//发送温湿度数据
                                                    case 0x02: if(UsartReceive[i+4] == 0x00)
                                                                         {
                                                                             P0_0 = 0;
                                                                         } 
                                                                         else if(UsartReceive[i+4] == 0xff)
                                                                         {
                                                                             P0_0 = 1;
                                                                         }
                                                                         break;
                                                    default:break;                          
                                             }
                                             break;//结束for(i=6;i<15)
                                        }
                                    }
                             }
                             
                             break;//结束for(i=0;i<10;i++)
                        }
                    }
          }
                
        }
        
      }
    }

     

     

     

     

    花生壳刚才检测原因关了,现在重新用花生壳映射

     

     电脑端就不测试了,,,

    其实这篇就改了一下单片机和C#的程序

     

     

    今天...以前的源码全有BUG.............唉

    补充:

    如果路由器不能上网,可以这样

     

     注意点:

    路由器桥接手机的WIFI信号后,如果没有注意到路由器分得的IP就登录不进路由器了,因为我们登录不进路由器,所以映射的时候怎么知道WIFI的IP地址,咱们可以设置WiFi固定住IP,但是网关和子网掩码呢可以看电脑的

     

     

     

     然后花生壳映射

     

     另一个手机或者本机连接这个就可以

     

    下一篇链接

    https://www.cnblogs.com/yangfengwu/p/8970580.html

    https://yq.aliyun.com/articles/585610

     

    转载于:https://www.cnblogs.com/yangfengwu/p/8887909.html

    展开全文
  • 之前,我已经将MicroPython固件烧写进了ESP8266的开发板中,现在给开发板供电后,通过手机搜索无线局域网,能够发现一个以MicroPython-xxxxxx(xxxxxx是你esp8266芯片的MAC地址)为名的WIFI热点,可以通过手机连接此...

    之前,我已经将MicroPython固件烧写进了ESP8266的开发板中,现在给开发板供电后,通过手机搜索无线局域网,能够发现一个以MicroPython-xxxxxx(xxxxxx是你esp8266芯片的MAC地址)为名的WIFI热点,可以通过手机连接此热点,不过现在8266里只是最基本的MicroPython在运行,连上也没什么用,这次我要让开发板连接路由,以使它能够收发网络信号。

    如果把MicroPython比作一个操作系统,我现在要做的就是给这个操作系统上开发一个软件,软件需要安装到操作系统上才能够被运行,那怎么样给8266安装软件呢?方法有很多种,我使用MicroPython File Uploader 将写好的代码上传至ESP8266开发板。

    接下来先来开发软件,实现的功能是让ESP8266在启动后,自动连接我的无线路由器,以方便后续开发。

    MicroPython在启动时,会先后查找boot.py与main.py文件,当这两个文件存在时,会自动运行这两个文件内的代码。

    新建一个文件,命名为boot.py,编辑代码如下:

    import network

    sta_if = network.WLAN(network.STA_IF)

    if not sta_if.isconnected():

    print('connecting to network...')

    sta_if.active(True)

    sta_if.connect('', '')

    while not sta_if.isconnected():

    pass

    print('network config:', sta_if.ifconfig())

    其中与分别替换为路由器名称与密码,保存后使用MicroPython File Uploader将boot.py上传至开发板,开发板会自动进行软重启,成功连接网络后会显示当前获取的IP地址。

    到这我的第一个基于MicroPython for ESP8266的软件折腾完了,下一次将使用WebREPL使ESP8266不用连接电脑也可以上传软件。

    作者:四十方知

    链接:https://www.jianshu.com/p/27bd7173d89e

    展开全文
  • ESP8266 物联网 局域网 station
  • ESP8266作为客户端通过路由器连接服务器的简单实现

    万次阅读 多人点赞 2018-03-17 14:28:02
    ESP8266这个WiFi模块即可以作为服务器,发出WiFi供其他的客户端连接;也可以作为客户端连接服务器。 接下来就简单的演示ESP8266通过...8266连接路由器发出的WiFi: AT+CWJAP=”WiFi名”,”WiFi密码” 启动多连...
  • esp8266(一)esp8266和电脑在同一局域网中传输数据

    万次阅读 多人点赞 2017-10-12 20:55:44
    esp8266连接路由器 esp8266通过路由器连接在同一局域网中的电脑,建立TCP连接 esp8266使用串口发送数据到电脑上的网络调试助手 esp8266使用串口通过局域网发送到电脑上自己写的Java程序 esp8266的透传模式 esp8266...
  • 连接路由器的lua脚本, 用于ESP8266硬件, NODEMCU环境, 需要其它资源,可下载我的其它源文件
  • ESP8266连接手机

    千次阅读 2020-02-16 13:53:04
    1为Station 模式:ESP8266 模块通过路由器连接互联网,手机或电脑通过互联网实现对设备的远程控制。 2为AP 模式:ESP8266 模块作为热点,手机或电脑直接与模块连接,实现局域网无线控制。 3为STA+AP 模式:两种模式...
  • ESP8266-使用浏览器动态连接路由器

    千次阅读 2018-07-06 23:02:44
    乐鑫的ESP8266,不仅具有单片机的绝大部分功能,还能无线上网,是一款非常强大的物联网WIFI模块。ESP8266的开发环境有很多,在此我推荐使用arduino IDE for ESP8266。网上有很多的配置教程,不想找也可以打开以下链接...
  • 1. 设置模块连接路由器,并打印路由器分配的ip:Init.lua文件:tmr.alarm(0,4000,0,function()&nbsp; &nbsp; dofile("tcpclient.lua") end)Init.lua文件结束tcpclient.lua文件:wifi.setmode(wifi...
  • 之前,我已经将MicroPython固件烧写进了ESP8266的开发板中,现在给开发板供电后,通过手机搜索无线局域网,能够发现一个以MicroPython-xxxxxx(xxxxxx是你esp8266芯片的MAC地址)为名的WIFI热点,可以通过手机连接此...
  • 使用esp8266实现STM32联网(最简单USART方法)

    万次阅读 多人点赞 2017-10-18 15:41:57
    esp8266连接路由器 esp8266通过路由器连接在同一局域网中的电脑,建立TCP连接 esp8266使用串口发送数据到电脑上的网络调试助手 esp8266使用串口通过局域网发送到电脑上自己写的Java程序 esp8266的透传模式 esp8266...
  • //ESP8266 固件版本1.0.0 flash 512K #include SoftwareSerial ESP8266(6, 7); String myIPAddress, myMACAddress; String wifiSSID = "Evgni0n", wifiPassword = "19961001"; String serverIPAddress = "195.168.
  • 基于stm32f103ze的正点原子ATK-esp8266TCP传输数据,esp8266连接路由器作为客户端与电脑相连实现远程局域联网控制
  • esp8266实现STM32联网(最简单USART方法)

    万次阅读 多人点赞 2018-02-01 21:34:08
    esp8266连接路由器 esp8266通过路由器连接在同一局域网中的电脑,建立TCP连接 esp8266使用串口发送数据到电脑上的网络调试助手 esp8266使用串口通过局域网发送到电脑上自己写的Java程序 esp8266的透传模式 esp8266...
  • esp8266和stm32之五,能连接路由器,使得stm32可以和电脑通信,并且添加增加RFID的读写功能,可以再显示屏上显示。rfid为RC522
  • 家用路由难免会有断开网络情况,为方便大家,提高模块连接贝壳网的稳定性,补充原来的例程,提供2个函数一个是路由器的 WIFI 连接函数voidwificonnect(){WiFi.begin(ssid,password);//ssid你的路由名,password你的...
  • ESP8266连接TCP

    千次阅读 2017-06-13 10:37:19
    AT+GMR查看固件版本。 v1.0以上固件命令如下 //恢复到初始状态 AT+RESTORE //设置WiFi应用模式为Station和Server共存模式 ...//连接路由器 SSID为路由器用户名,Password为密码 AT+CWJAP="SSID","Password" ...
  • ESP8266连接 TCP

    千次阅读 2017-03-12 21:50:49
    v1.0以上固件命令如下  //恢复到初始状态 AT+RESTORE  //设置WiFi应用模式为Station和Server共存模式  AT+CWMODE=3  //连接路由器 SSID为路由器用户名,Password为密码  AT+CWJAP="SSID","Password
  • 这个月也快结束了,时间真快,我服务器知识自学依然在路途中,这几天听到热点网页配置`esp8266`连接路由器,那么我想这个不是很复杂,不过需要一些通讯协议的基础,以及对`esp8266`的`SDK`开发的熟悉,这几天撸了几...
  • 答:我们可以把手机、单片机通过esp8266模块和路由器建立联系,组成局域网(路由能上网的话,亦可于外网通信)。具体来说: 把单片机和wifi模块通过串口进行连接 通过单片机内部编程由单片机的串口发送AT指令设置...
  • esp8266和stm32驱动之二实现无线通信

    热门讨论 2015-10-16 21:39:45
    可以使得esp8266连接路由器,实现网络下和 电脑 等无线设备的 tcp/ip通信, esp8266 和 stm32的案例,无线通信,如果没有电脑端的tcp/ip软件,可以下载我的另外一个java写的tcp/ip通信小案例,实现和esp8266的通信。
  • 几周前,有网友就问我esp8266重新上电无法自动连接之前配置的路由器。这确实是目前DEMO最缺的一个功能,当首次将设备接入wifi之后,设备应该保存住SSID和PWD,在后续上电时能自己去连接wifi,而不是例程中每次上电都...
  • 二、esp8266+手机端同处一个路由器下组成局域网进行 tcp通信的工作模式设定方法 ...这样的好处是,手机不需要每次连接esp8266模块产生的WIFI,而是手机直接连接路由器,不影响手机正常上网。 ...
  • 学习ESP8266④基于STM32的开发实例

    千次阅读 多人点赞 2018-09-18 21:28:01
    ESP8266基于STM32的开发实质上就是AT开发,这里以ESP8266连接路由器为例,为了证明是否连接上了,这里我是开手机热点来验证的。当然,你也可以ESP8266作为AP热点,这样可能现象更明显,只要配置成功了,打开手机WiFi...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 263
精华内容 105
关键字:

esp8266连接路由器