ESP8266 SDK开发篇(二)——连接wifi

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Dream_cc/article/details/77148111

上一节我讲了搭建SDK开发环境以及烧录方式,那么从这一节开始就进入正题——如何进行SDK开发,既然ESP8266是wifi模块,那么我就从如何连接wifi开始讲起。


一、建立工程

我开发的时候比较早,用的是NONOS_v1.5.0的sdk,最新的v2.1.0的sdk烧录好固件后,上电会一直出Fatal exception 28的错误,搞了一天没弄清楚,所以用还留着的v1.5.3的sdk讲解,具体使用方法不会有很大改变,详细也可以参考API文档。
打开解压sdk包,将example文件夹下的IOT_Demo复制替换到app文件夹下,并将driver_lib/include/driver下的uart.h、uart_register.h复制到app/include下,driver_lib/driver下uart.c复制到app/driver下,同时将driver_lib下Makefile文件改名或者删除,懂makefile的朋友可以自行修改makefile文件否则会出现编译错误,目录结构如下。


这里写图片描述 这里写图片描述
目录结构

我们主要修改的是user_main.c这个文件,将user_init()函数是程序入口,里的内容全删了
此外头文件修改为

#include "ets_sys.h"
#include "osapi.h"
#include "user_interface.h"
#include "uart.h"

user_rf_pre_init()这个函数不要删除,放着即可,这样user_main.c文件只有void user_rf_pre_init(void)、void user_init(void)这两个函数,以及4个头文件。


二、连接wifi

要连接wifi首先要指定要连接的wifi账号和密码,则需要定义两个变量来存放它们,同时还需要定义一个结构体用于存放:Wi-Fi Station 接口参数。

struct station_config station_cfg;
uint8 ssid[]="xxx";         //wifi名
uint8 password[]="xxx";     //wifi密码

新买到的模块默认是作为AP,这里我们需要将它修改作为Station,这样才能连wifi,这里我将这几个操作放入一个函数里面。

void ICACHE_FLASH_ATTR
user_set_station_config(void)
{
    wifi_set_opmode(STATION_MODE);              //设置为STATION MODE
    os_strcpy(station_cfg.ssid, ssid);          //ssid名称
    os_strcpy(station_cfg.password, password);  //密码
    wifi_station_set_config(&station_cfg);      //设置WIFI帐号和密码
}

注:添加ICACHE_FLASH_ATTR宏定义是因为8266的iRam空间有限,所以上电启动时不能把所有数据都放入iRam,只有在需要用到的时候才载入,因此推荐一般的函数都加ICACHE_FLASH_ATTR。
这样我们就能把这个函数放到user_init()中了,如下所示。

void user_init(void)
{
    uart_init(BIT_RATE_115200,BIT_RATE_115200);  //设置波特率为115200
    os_printf("SDK version:%s\n", system_get_sdk_version());  //打印sdk版本
    user_set_station_config();  //set STATION config
    //user_set_station_config()中调用wifi_station_set_config(&station_cfg)
    //底层会自动连接对应路由,不需要调用 wifi_station_connect 来进行连接。
}

编译通过后烧入固件就能查看效果了。


这里写图片描述
串口输出
这里写图片描述
路由器后台

这样最简单的连接wifi就完成了,为后续要跟服务器进行TCP/UDP协议的通信打下基础,那么问题来了, 连上wifi是否意味着一定能上网?假设能通过这个路由器上网,但是如果节点很多,超过了DHCP分配范围的话,这样芯片就获取不了ip,因此需要判断芯片是否分配到了ip地址,这个就作为本讲作业,给刚入门的朋友思考一下(提示:多看API文档)。
本讲用到的sdk和文档可以从此处 下载

猜你喜欢

转载自blog.csdn.net/Dream_cc/article/details/77148111