9.RT-thread 项目实战--添加wifi和net双网卡

一.ART-PI网络功能

ART-PI中有两种网络连接方式:

1.一个是他自带的wifi模块AP6212,这个模块是蓝牙和wifi一体的,使用的是SDIO接口。

9.RT-thread 项目实战--添加wifi和net双网卡_第1张图片

 

2.一个是通过工业扩展板,的网口,网口芯片使用的是LAN8720A

 

9.RT-thread 项目实战--添加wifi和net双网卡_第2张图片

二.RT-studio中进行网络配置

1.在studio中直接打开开关就可以了。

9.RT-thread 项目实战--添加wifi和net双网卡_第3张图片

 

这时候进行代码编译,下载。

9.RT-thread 项目实战--添加wifi和net双网卡_第4张图片

 

可以看到打印信息,网络初始化成功。

但是此时网络还是没有连接成功的。

2.wifi 网络连接,通过终端命令进行扫描,

9.RT-thread 项目实战--添加wifi和net双网卡_第5张图片

进行网络加入:

之后通过网页进行wifi的扫描和配置。

查看IP,已经能够查看到了。

9.RT-thread 项目实战--添加wifi和net双网卡_第6张图片

ping 下百度。

此时是ping不通的,配置没有配置对?

3.在此,我们先插上网线试一下网口的功能。

9.RT-thread 项目实战--添加wifi和net双网卡_第7张图片

9.RT-thread 项目实战--添加wifi和net双网卡_第8张图片

 

网口功能是正常的。

4.这个时候怀疑,网口作为e0,wifi作为w0,切换的时候需要切换网卡,来指定哪个模块来进行网络连接。

将网口的驱动卸载后,只有一个wifi网卡,

9.RT-thread 项目实战--添加wifi和net双网卡_第9张图片

 

确实是可以ping通了,说明确实是需要切换一下,网卡。那么怎么切换到指定的网卡呢??

注:

看到了大神的文章。

https://blog.csdn.net/sinat_31039061/article/details/104200110

https://club.rt-thread.org/ask/article/2429.html

官网的网卡说明(netdev):

https://www.rt-thread.org/document/site/programming-manual/netdev/netdev/

复习了下RT-thread网络框架。

 

这个时候可以明确通过简单的配置,确实可以实现双网卡,但是需要自己切换网卡,才能确保网络的正常匹配及运行

同时在此基础上,我们还有很多要优化的,例如怎么上电默认连接之前的wifi,   怎么网页配置扫描wifi,  怎么自动切换网卡?

 

三.程序优化

1.对接easyflash,使网络上电默认连接之前的wifi.(查看上节文章

在上面我们的wifi已经能够正常上网了,但是此时断电重启,是不会自动重连到之前的网络,

网络信息是其实并没有存储到flash中,这里我们需要借助easyflash进行网络信息的存储。

参考官方art_pi_wifi实例。

9.RT-thread 项目实战--添加wifi和net双网卡_第10张图片

 

将wifi_config.c拷贝到我们工程的文件夹下。

然后在main.c中添加几行代码:

9.RT-thread 项目实战--添加wifi和net双网卡_第11张图片

 

进行编译:

9.RT-thread 项目实战--添加wifi和net双网卡_第12张图片

下载的时候ef_port_init() 出现了报错。卡死了

通过debug,part = fal_partition_find(FAL_EF_PART_NAME);这个报错

改为这个名称后,正常:

9.RT-thread 项目实战--添加wifi和net双网卡_第13张图片

 

现在我们扫描,加载wifi,使成功入网:

9.RT-thread 项目实战--添加wifi和net双网卡_第14张图片

此时是正常的,看下

9.RT-thread 项目实战--添加wifi和net双网卡_第15张图片

 

自动重连功能也变为了开启状态。此时断电重启下试试:

9.RT-thread 项目实战--添加wifi和net双网卡_第16张图片

发现自动重连了。。。哈哈

 

2.实现多网卡管控,wifi和网口自动切换(网口优先)

有时在一些环境下wifi质量不好,我们想使用网线,那么怎么实现自动切换呢?

这里就需要补充一下知识了:

打开官方的文档:

https://www.rt-thread.org/document/site/programming-manual/netdev/netdev/

netdev 网卡

netdev(network interface device),即网络接口设备,又称网卡。每一个用于网络连接的设备都可以注册成网卡,为了适配更多的种类的网卡,避免系统中对单一网卡的依赖,RT-Thread 系统提供了 netdev 组件用于网卡管理和控制。

9.RT-thread 项目实战--添加wifi和net双网卡_第17张图片

9.RT-thread 项目实战--添加wifi和net双网卡_第18张图片

 

在上面我们也知道,并不是wifi不能联网,只是默认的网卡为网口,但是已经开启了自动切换啊,网卡没有网络,按说就应该切换到wifi,为什么不行呢??

9.RT-thread 项目实战--添加wifi和net双网卡_第19张图片

我们明确几个函数:

9.RT-thread 项目实战--添加wifi和net双网卡_第20张图片

9.RT-thread 项目实战--添加wifi和net双网卡_第21张图片

9.RT-thread 项目实战--添加wifi和net双网卡_第22张图片

9.RT-thread 项目实战--添加wifi和net双网卡_第23张图片

9.RT-thread 项目实战--添加wifi和net双网卡_第24张图片

 

 

 

 

在netdev.c文件中static void netdev_auto_change_default(struct netdev *netdev)这个函数进行了默认网卡的设置。

9.RT-thread 项目实战--添加wifi和net双网卡_第25张图片

自动切换网卡开启之后,只有默认网卡自己的状态发生改变才能从有联网能力的网卡中配置默认网卡,但是发现两个网卡状态一直没有发生改变。

9.RT-thread 项目实战--添加wifi和net双网卡_第26张图片

知道了接口我们可以自己人为的去判断网络状态,通过函数进行状态切换。

下面为切换的代码

直接在main.c中添加如下代码

#include 
#include        /* 当需要网卡操作是,需要包含这两个头文件 */

static int netdev_set_default_test(int argc, char **argv)
{
    struct netdev *netdev = RT_NULL;

    if (argc != 2)
    {
        rt_kprintf("netdev_set_default [netdev_name]   --set default network interface device.\n");
        return -1;
    }

    /* 通过网卡名称获取网卡对象,名称可以通过 ifconfig 命令查看 */
    netdev = netdev_get_by_name(argv[1]);
    if (netdev == RT_NULL)
    {
        rt_kprintf("not find network interface device name(%s).\n", argv[1]);
        return -1;
    }

    /* 设置默认网卡对象 */
    netdev_set_default(netdev);

    rt_kprintf("set default network interface device(%s) success.\n", argv[1]);
    return 0;
}
#include 
/* 导出命令到 FinSH 控制台 */
MSH_CMD_EXPORT_ALIAS(netdev_set_default_test, netdev_set_default, set default network interface device);

 

9.RT-thread 项目实战--添加wifi和net双网卡_第27张图片

这样我们就可以通过网页切换,按键切换等多种方法。

 

其实我们不手动切换,当我们的网线插拔一下,触发了状态切换,也会自动切换到wifi网卡。

但是我们不插拔的情况下,岂不是连不上网。

于是想了个办法:

(1)首先上电默认网卡为e0(网口)

(2)当wifi连接成功后,自动将默认网卡改为wifi.

wlan_dev.c文件,rt_wlan_event_dispatch 函数

9.RT-thread 项目实战--添加wifi和net双网卡_第28张图片

(3)当有网线插入后,然后再将网卡改为e0.

drv_eth.c文件中的static void phy_linkchange()函数

9.RT-thread 项目实战--添加wifi和net双网卡_第29张图片

 

(4)当网线拔掉后,程序的自动切换程序会自动切换到wifi。

这样就可以愉快的进行两个网卡的自由切换。

 

你可能感兴趣的:(#,RT-thread,RT-thread,网络,网口,net,网卡切换)