zoukankan      html  css  js  c++  java
  • 25-ESP8266 SDK开发基础入门篇--控制WIFI连接路由器

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

    说个事情,现在SDK的版本已经出到3.0了,但是我还是使用2.0

    如果只是为了学习研究   选择3.0吧!

    如果要做产品或者项目   选择2.0或者更低版本

    大家应该都明白为什么要这样.如果你不明白,那说明你还是小白.

    前面几节都是连接Wi-Fi发出的无线,然后实现通信.后面的章节咱都是让模块连接路由器,然后实现通信

    大家首先要明确,WIFI模块和手机同时连接路由器通信,实际上以前的所有网络通信代码都可以使用,只不过通信的IP不再是

    192.168.4.1  需要换成路由器分得的IP,     WIFI模块连接路由器.路由器会分给模块一个IP地址

    这节咱写个让模块连接路由器的程序

    学了这么长时间了,不知道大家自己写实现的功能的代码是怎么写的(看官方API自己组合 或者 百度 ???),我给大家说个可靠的地方!(绝对的稳定可靠)

    大家都知道有个团队嵌入了lua,使得WIFI可以用lua 开发,如果大家看过我写过的关于lua 的一些文章,大家应该知道实际上lua 只不过是在咱SDK开发的基础上又进行了一次封装(实际上lua的源码就是写好了SDK的各种功能了,而且lua版本的也是使用的2.0的,咱可以直接拷贝使用)

    首先需要lua 的源码,大家可以

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

     

     我下载了,放到了这节了

     然后导入到工程里面

    lua的源码本身就是使用的make指令编译的,所以选择这个

     

     

     

     

     咱现在这节是控制WIFI连接路由器,我给大家说怎么找

    还记得咱lua开发的时候,连接路由器是

    https://nodemcu.readthedocs.io/en/master/modules/wifi/#wifistaconfig

     

     

     

     

     

     知道步骤之后呢,最好把用到的函数在API文档里面看一下,看看有没有特殊要求的

     

     介绍说,如果这个函数放到user_init里面,那么就不需要调用wifi_station_connect,而且还是自动重连

    所以

    #define APssid "qqqqq"
    #define APpassword "11223344"
    struct station_config stationConf;

     

    stationConf.bssid_set = 0;
        memcpy(stationConf.ssid,APssid,strlen(APssid));
        memcpy(stationConf.password,APpassword,strlen(APpassword));//热点密码设置
        wifi_station_disconnect();
        wifi_station_set_config(&stationConf);

    下载进去

     不过这是源码自带的打印,咱呢想自己打印

    这样就需要监控下WIFI的连接状态

    看lua 的源码

     

     

     咱先拷贝这个函数

    static void wifi_event_monitor_handle_event_cb(System_Event_t *evt)
    {
    
    }

     

    wifi_set_event_handler_cb(wifi_event_monitor_handle_event_cb);

     其实这样看过去就是注册一个回调函数

    回调信息肯定靠这个读取

     

     那就是说

    static void wifi_event_monitor_handle_event_cb(System_Event_t *evt)
    {
        switch (evt->event_id)
        {
        case EVENT_STAMODE_CONNECTED://连接上路由器
          break;
    
        case EVENT_STAMODE_DISCONNECTED://和路由器断开
    
          break;
    
        case EVENT_STAMODE_AUTHMODE_CHANGE://这个是 啥..
    
          break;
    
        case EVENT_STAMODE_GOT_IP://连接上路由器,并获取了IP
    
          break;
    
        case EVENT_STAMODE_DHCP_TIMEOUT://连接上路由器,但是路由器给WIFI模块分配IP等信息超时了
    
          break;
    
        case EVENT_SOFTAPMODE_STACONNECTED://AP模式下,有设备连接WIFI模块的无线
    
          break;
    
        case EVENT_SOFTAPMODE_STADISCONNECTED://AP模式下,有设备断开和WIFI模块的无线连接
    
          break;
    
        case EVENT_SOFTAPMODE_PROBEREQRECVED://这是啥??
    
          break;
    
        default://其它错误
    
          break;
        }
    }

     打印点东西,这样吧,一次性说完吧!

    其实现在直接可以看lua版本的那个程序,肯定有现成的可以借鉴

     

     需要稍微改改,只留下自己用的

     

     我就直接大刀阔斧的复制粘贴

    static void wifi_event_monitor_handle_event_cb(System_Event_t *evt)
    {
      switch (evt->event_id)
      {
        case EVENT_STAMODE_CONNECTED://连接上路由器
            printf("
    	STAMODE_CONNECTED
    ");
    
            printf("	Connected to SSID %s, Channel %d
    ",
              evt->event_info.connected.ssid,
              evt->event_info.connected.channel);
          break;
    
        case EVENT_STAMODE_DISCONNECTED://和路由器断开
            printf("
    	STAMODE_DISCONNECTED
    ");
    
            printf("	Disconnect from SSID %s, reason %d
    ",
              evt->event_info.disconnected.ssid,
              evt->event_info.disconnected.reason);
          break;
    
        case EVENT_STAMODE_AUTHMODE_CHANGE://这个是 啥..
            printf("
    	STAMODE_AUTHMODE_CHANGE
    ");
    
            printf("	Authmode: %u -> %u
    ",
              evt->event_info.auth_change.old_mode,
              evt->event_info.auth_change.new_mode);
          break;
    
        case EVENT_STAMODE_GOT_IP://连接上路由器,并获取了IP
            printf("
    	GOT_IP
    ");
    
            printf("	IP:" IPSTR ",Mask:" IPSTR ",GW:" IPSTR "
    ",
              IP2STR(&evt->event_info.got_ip.ip),
              IP2STR(&evt->event_info.got_ip.mask),
              IP2STR(&evt->event_info.got_ip.gw));
          break;
    
        case EVENT_STAMODE_DHCP_TIMEOUT://连接上路由器,但是路由器给WIFI模块分配IP等信息超时了
            printf("
    	STAMODE_DHCP_TIMEOUT
    ");
          break;
    
        case EVENT_SOFTAPMODE_STACONNECTED://AP模式下,有设备连接WIFI模块的无线
            printf("
    	SOFTAPMODE_STACONNECTED
    ");
    
            printf("	Station: " MACSTR "join, AID = %d
    ",
              MAC2STR(evt->event_info.sta_connected.mac),
              evt->event_info.sta_connected.aid);
          break;
    
        case EVENT_SOFTAPMODE_STADISCONNECTED://AP模式下,有设备断开和WIFI模块的无线连接
            printf("
    	SOFTAPMODE_STADISCONNECTED
    ");
    
            printf("	station: " MACSTR "leave, AID = %d
    ",
              MAC2STR(evt->event_info.sta_disconnected.mac),
              evt->event_info.sta_disconnected.aid);
          break;
    
        case EVENT_SOFTAPMODE_PROBEREQRECVED://这是啥??,,,信号强度改变了
            printf("
    	SOFTAPMODE_PROBEREQRECVED
    ");
    
            printf("Station PROBEREQ: " MACSTR " RSSI = %d
    ",
              MAC2STR(evt->event_info.ap_probereqrecved.mac),
              evt->event_info.ap_probereqrecved.rssi);
          break;
    
        default://其它错误
            printf("
    	switch/case default
    ");
          break;
      }
    }

    下载进去

     好了,自己消化吧,如果想通过路由器实现以前的功能,只需要把IP地址修改为 上面打印的就可以 我的是192.168.0.100  (根据自己的修改哈)

    下节咱用SmartConfig/Airkiss 来配网

    大家一开始可能感觉看lua的不如直接看官方给的API文档,怎么说呢!站在不同的层次上,眼光和思想不一样....

    站在巨人的肩上!

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

  • 相关阅读:
    Linux下新建服务
    查看MYSQL日志(包含最近锁表日志)
    Linux后台运行进程
    MYSQL分析慢查询
    Linux下打开超大文件方法
    通过文件列表打包文件
    linux学习笔记<基本知识普及>
    虚拟机的安装
    Android NDK编程,引入第三方.so库
    linux下软件安装与卸载
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/11427504.html
Copyright © 2011-2022 走看看