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("\n\tSTAMODE_CONNECTED\n");

        printf("\tConnected to SSID %s, Channel %d\n",
          evt->event_info.connected.ssid,
          evt->event_info.connected.channel);
      break;

    case EVENT_STAMODE_DISCONNECTED://和路由器断开
        printf("\n\tSTAMODE_DISCONNECTED\n");

        printf("\tDisconnect from SSID %s, reason %d\n",
          evt->event_info.disconnected.ssid,
          evt->event_info.disconnected.reason);
      break;

    case EVENT_STAMODE_AUTHMODE_CHANGE://这个是 啥..
        printf("\n\tSTAMODE_AUTHMODE_CHANGE\n");

        printf("\tAuthmode: %u -> %u\n",
          evt->event_info.auth_change.old_mode,
          evt->event_info.auth_change.new_mode);
      break;

    case EVENT_STAMODE_GOT_IP://连接上路由器,并获取了IP
        printf("\n\tGOT_IP\n");

        printf("\tIP:" IPSTR ",Mask:" IPSTR ",GW:" IPSTR "\n",
          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("\n\tSTAMODE_DHCP_TIMEOUT\n");
      break;

    case EVENT_SOFTAPMODE_STACONNECTED://AP模式下,有设备连接WIFI模块的无线
        printf("\n\tSOFTAPMODE_STACONNECTED\n");

        printf("\tStation: " MACSTR "join, AID = %d\n",
          MAC2STR(evt->event_info.sta_connected.mac),
          evt->event_info.sta_connected.aid);
      break;

    case EVENT_SOFTAPMODE_STADISCONNECTED://AP模式下,有设备断开和WIFI模块的无线连接
        printf("\n\tSOFTAPMODE_STADISCONNECTED\n");

        printf("\tstation: " MACSTR "leave, AID = %d\n",
          MAC2STR(evt->event_info.sta_disconnected.mac),
          evt->event_info.sta_disconnected.aid);
      break;

    case EVENT_SOFTAPMODE_PROBEREQRECVED://这是啥??,,,信号强度改变了
        printf("\n\tSOFTAPMODE_PROBEREQRECVED\n");

        printf("Station PROBEREQ: " MACSTR " RSSI = %d\n",
          MAC2STR(evt->event_info.ap_probereqrecved.mac),
          evt->event_info.ap_probereqrecved.rssi);
      break;

    default://其它错误
        printf("\n\tswitch/case default\n");
      break;
  }
}

下载进去

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

下节咱用SmartConfig/Airkiss 来配网

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小勇DW3

openresty+lua+kafka方案与Tomcat接口并发度对比分析

  之前的项目基于nginx反向代理后转发到Tomcat的API接口进行业务处理,然后将json数据打入kafka中,但是随着业务的扩大,访问量越来越大,并发数...

12920
来自专栏poslua

浅谈 KONG key-auth 插件 token 的生成

最近我在 KONG 的 Blog 上看了一篇文章:That’s So Random: (Pseudo)Random Data Generation in Kon...

13630
来自专栏poslua

Kong 的事件和缓存

Kong 从 0.11.0 版本开始节点之间的消息通信改为了数据库轮训机制(原先是通过 serf 实现的),通过最终一致性实现了节点的无状态,任何时候节点只需连...

15520
来自专栏poslua

Kong 0.12.3 的一处内存泄漏分析

Kong 0.12.3 是最后一个以 API 形式组织接口的版本,后续的版本中 Kong 新增了 Service 和 Route 的概念,对于插件的应用规则更加...

9610
来自专栏wordpress建站吧

免费版Linux宝塔面板开启免费waf防火墙遇到的坑-wordpress上传http错误

今天按照网上的教程开启了宝塔隐藏的免费waf,结果导致了wordpress上传http错误大概流程如下:

9620
来自专栏Unity游戏开发

Unity-资源引用自动化工具

需求: 在实际项目中,往往我们需要在代码中引用一些子节点的GameObject或者Component,这些引用在代码中是写死的,然而在项目开发中美工人员需要在...

15310
来自专栏poslua

也谈 ngx.ctx 继承问题

在前一阵子的 OpenResty Con 2018 上,来自又拍云的 @tokers 分享了他们对 ngx.ctx 的 hack,以确保在发生内部跳转后 ngx...

10930
来自专栏TBOOX开源工程

制作和上传C/C++包到xmake的官方仓库

xmake集成了内置的远程包依赖管理,用户只需要简单地在项目中添加自己所需要的包和版本,即可自动下载和集成对应的包到项目中,并且实现编译和链接。

10520
来自专栏WeTest质量开放平台团队的专栏

腾讯UnLua正式开源了!

? 腾讯UnLua正式开源了! 欢迎到:https://github.com/Tencent/UnLua下关注、加星和加Fork。 UnLua是Unreal ...

49230
来自专栏poslua

Kong 插件开发指南

Kong 的插件使用了一个叫 Classic 的 class 机制。所有的插件都是从 base_plugin.lua 基类上继承而来。base_plugin.l...

26220

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励