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 = ;
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文档,怎么说呢!站在不同的层次上,眼光和思想不一样....
站在巨人的肩上!
https://www.cnblogs.com/yangfengwu/p/11429007.html
25-ESP8266 SDK开发基础入门篇--控制WIFI连接路由器的更多相关文章
- 26-ESP8266 SDK开发基础入门篇--编写WIFI模块 SmartConfig/Airkiss 一键配网
https://www.cnblogs.com/yangfengwu/p/11427504.html SmartConfig/Airkiss 配网需要APP/微信公众号,这节大家先使用我做好的APP/ ...
- 28-ESP8266 SDK开发基础入门篇--编写wifi模块TCP 客户端程序(官方API版,非RTOS版)
https://www.cnblogs.com/yangfengwu/p/11432795.html 注:这节实现的功能是WIFI模块作为TCP 客户端,连接咱的TCP服务器,然后实现透传 本来想着做 ...
- 21-ESP8266 SDK开发基础入门篇--C# TCP客户端 , 控制LED亮灭
https://www.cnblogs.com/yangfengwu/p/11192603.html 由于是台式机,,没有插无线网卡...所以呢我就用调试助手监控下数据 后期让WIFI连接路由器的时候 ...
- 18-ESP8266 SDK开发基础入门篇--TCP 服务器 RTOS版,串口透传,TCP客户端控制LED
https://www.cnblogs.com/yangfengwu/p/11112015.html 先规定一下协议 aa 55 02 01 F1 4C 控制LED点亮 F1 4C为CRC高位和低位 ...
- 13-ESP8266 SDK开发基础入门篇--上位机串口控制 Wi-Fi输出PWM的占空比,IEEE754规约
https://www.cnblogs.com/yangfengwu/p/11100552.html 这节做个上位机控制Wi-Fi引脚输出的PWM占空比信号,灯的亮度就可以用上位机控制了 大家可以自己 ...
- 1-ESP8266 SDK开发基础入门篇--开发环境搭建
因为今天终于做好了自己的另一块工控板,所以我就开始写基础公开篇的内容,希望自己小小的努力能够帮到大家 自己做的另一块板子 https://www.cnblogs.com/yangfengwu/cate ...
- 29-ESP8266 SDK开发基础入门篇--编写TCP 客户端程序(Lwip RAW模式,非RTOS版,精简入门)
https://www.cnblogs.com/yangfengwu/p/11456667.html 由于上一节的源码长时间以后会自动断开,所以再做这一版非RTOS版的,咱直接用lua源码里面别人写的 ...
- 12-ESP8266 SDK开发基础入门篇--PWM,呼吸灯
https://www.cnblogs.com/yangfengwu/p/11094085.html PWM其实没有什么,就是看着官方给的API,,,然后就是用呗 对了,其实对于RTOS SDK版本的 ...
- 16-ESP8266 SDK开发基础入门篇--TCP 服务器 非RTOS运行版,串口透传(串口回调函数处理版)
https://www.cnblogs.com/yangfengwu/p/11105466.html 其实官方给的RTOS的版本就是在原先非RTOS版本上增加的 https://www.cnblogs ...
随机推荐
- JMX远程监控JVM
远程监控JVM状态需要在JVM启动的时候需要加上一段代码开启这个功能.(以下全部以ubuntu-14-04-server.jdk1.8.tomcat7.0环境为基础) 配置的时候分两种情况:1.无需配 ...
- 关于ElasticSearch的堆内存设置与优化
1.什么是堆内存?Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象.在 Java 中,堆被划分成两个不同的区域:- 新生代 ( Young ).- 老年代 ( Ol ...
- 24H玩转 Grafana 被工程师称相当专业,如何做到?
国庆假期发生了两件小事,其一是我默默度过 35 周岁生日,其二是玩了下grafana `并在节后第一天被工程师 M 称赞:相当专业. 1.我为什么要玩 grafana 呢? 数月前我提交了一份数据后台 ...
- C#实现RSA加密解密
RSA介绍 RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。 RSA的缺点: 产生密钥 ...
- Nikitosh 和异或(trie树)
题目: #10051. 「一本通 2.3 例 3」Nikitosh 和异或 解析: 首先我们知道一个性质\(x\oplus x=0\) 我们要求\[\bigoplus_{i = l}^ra_i\]的话 ...
- MySQL中的JSON类型
前言(废话) 昨天抽了点时间在网上搜列了一个开源项目,项目挺完整的,前后台分离还带有微信小程序,我Clone下代码,经过一番倒腾,嘿~还真就跑起来了.在这个过程中,体验了一把VUE项目工程细节,因为之 ...
- Win 10 无法锁屏,快捷键win+L失效
快捷键win+L 一直在使用,忽然之间不知道按错了什么 Win 10 无法锁屏,快捷键win+L失效,按win+L后出来的是输入法 应该是键盘的Windows键锁住了,按Fn+windows键解锁
- poll_wait阻塞/唤醒
1. 应用阻塞 应用程序使用 select() 或 poll() 调用设备驱动程序的 poll() 函数,该函数把输入输出复用处理的等待队列追加到由内核管理的进程的 poll_table()上 #in ...
- PHP 两个比较运算符 [??] [?:] 差别
1.[??] NULL 合并操作符$a ?? $b即isset($a) ? $a : $b; 注:isset() 已设置并且不为NULL 2.[?:] 三元运算符的简写形式$a ?: $b即$a ? ...
- Flask--配置文件
配置文件 配置文件的方式有很多,下面介绍两种: 第一种:根据全局变量实现 App.py from flask import Flask, session app = Flask(__name__) # ...