《嵌入式系统 – 玩转ART-Pi开发板(基于RT-Thread系统)》第8章 APT-Pi双网络实现自动切换

本文主要是介绍《嵌入式系统 – 玩转ART-Pi开发板(基于RT-Thread系统)》第8章 APT-Pi双网络实现自动切换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ART-Pi中有多种联网方式,最常用有两种:一个是自带的Wifi模块AP6212,另外一个是以太网,ART-Pi使用的PHY芯片是LAN8720A

笔者在前面的文章已经讲解了Wifi的使用。

Wifi的移植使用

关于以太网的讲解请看笔者以前文章:

详解以太网(一)

详解以太网(二)

接下来将讲解以太网的使用。



8.1以太网硬件介绍

在讲解移植步骤之前,有必须先介绍我们的实验硬件设计,主要是 LAN8720A 通过 RMII 和 SMI接口与 ART-Pi控制器连接,见下图。

在这里插入图片描述
在这里插入图片描述

LAN8720A与ART-Pi之间的引脚连接如下表所示。

在这里插入图片描述

ART-Pi通过RMII 接口连接PHY芯片LAN8720A,然后经过百兆网络变压器到RJ45接口。因为 LAN8720A只有 RMII 接口,因此这里与开发板的连接采用了 RMII 接口。电路设计时,将 nINTSEL 引脚通过下拉电阻拉低,也就是REF_CLK Out 模式,设置 nINT/FEFCLKO 为输出 50MHz 时钟,当然前提是在 XTAL1 和 XTAL2 接入了 25MHz 的时钟源。

PHY芯片LAN8720A的nRST复位引脚连接到了ART-Pi的PA3引脚。



8.2 RT-studio配置以太网

继续在上一节的程序中修改。

在这里插入图片描述

勾选Industry-IO,Ethernet就默认使能了,看一看到复位的引脚是PA3。当然啦,如果是自己的开发板这里的复位引脚可能不一样,更换一下就可以了。

接下来保存,重新编译即可。



8.3双网卡手动切换实现

既然有了双网络,必然就会有网络切换,可类比我们的笔记本,可接以太网和WiFi,当WiFi信号不好就使用以太网,当以太网断了,就自动切换到WiFi。ART-Pi也是一样的。

RT-Thread提供了网卡管理和控制的网路组件netdev 网卡。netdev 组件主要作用是解决设备多网卡连接时网络连接问题,用于统一管理各个网卡信息与网络连接状态,并且提供统一的网卡调试命令接口。

Netdev官网地址

关于Netdev的原理和API请参看官方手册。笔者这里给出网卡切换的代码。

如下示例,导出命令用于切换默认网卡:

#include <arpa/inet.h>
#include <netdev.h>       /* 当需要网卡操作是,需要包含这两个头文件 */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;
}
#ifdef FINSH_USING_MSH
#include <finsh.h>
/* 导出命令到 FinSH 控制台 */
MSH_CMD_EXPORT_ALIAS(netdev_set_default_test, netdev_set_default, set default network interface device);
#endif /* FINSH_USING_MSH */

重点代码就两句,一句是netdev_get_by_name获取网卡,另外一句是netdev_set_default设置获取的网卡作为默认网卡。这两句在后面也会使用。

接下来编译下载。

默认关闭wifi的自动连接功能,连接网线,打印信息如下:

在这里插入图片描述

接下来查看网络连接状态:

在这里插入图片描述

可以看到默认使用的是以太网。接着看看是否连网。

在这里插入图片描述

说明网络是正常的。

我们通过netdev_set_status_test命令切换网络。

在这里插入图片描述

可以看到网络切换到WiFi,只是WiFi没有连接而已。

关于WiFi配置有两种方式,不清楚的请参看笔者以前的文章。

Wifi的移植使用

笔者这是使用的时蓝牙配置,联网后打印信息如下:

在这里插入图片描述



8.4双网卡自动切换

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

在这里插入图片描述

当然,要想实现这个功能,需要配置如下选项,可使能默认网卡自动切换功能:

在这里插入图片描述

多网卡模式下,如果开启默认网卡自动切换功能,当前默认网卡状态改变为 down 或 link_down 时,默认网卡会切换到网卡列表中第一个状态为 up 和 link_up 的网卡。这样可以使一个网卡断开后快速切换到另一个可用网卡,简化用户应用层网卡切换操作。如果未开启该功能,则不会自动切换默认网卡。
但是这个自动切换是由缺陷的,默认板子是使用以太网,不管网线插上与断开与否,当没有插网线时,尽管连接了WiFi,还是不会自动切换,需要手动切换,当WiFi连接后,默认也不会切换到以太网。

我们根据实际应用需求,我们知道:
1.默认使用以太网,如果断开以太网,当连接WiFi后,会自动切换到WiFi,WiFi可通过蓝牙配置,并且记录在Flash中,以便下次使用;
2.如果连接了WiFi,再插上网线,则会自动切换到以太网。

因此需要修改两处代码:

第一处:增加WiFi联网自动切换到WiFi
在这里插入图片描述

这是在rt_wlan_event_dispatch函数中,当WiFi连接后,就切换到WiFi。

第二处:增加以太网联网自动切换到以太网
在这里插入图片描述

这是在phy_linkchange()函数中添加的,当以太网插上后,就切换到以太网。

好了,最后的编译下载即可。开启easyflash记住WiFi账号密码,将会自动联网。自动切换网卡。

在这里插入图片描述

最后总结下,有以太网就使用以太网,连接了WiFi就切换到WiFi,WiFi可自动保存账号密码。断开以太网后,如果WiFi已经连接,就会切换到WiFi

Wifi联网比较复杂,大体流程如下:

在这里插入图片描述






代码获取方法

1.长按下面二维码,关注公众号[嵌入式实验楼]
2.在公众号回复关键词[Art-Pi]]获取资料
在这里插入图片描述




欢迎访问我的网站

BruceOu的哔哩哔哩
BruceOu的主页
BruceOu的博客
BruceOu的CSDN博客
BruceOu的简书

这篇关于《嵌入式系统 – 玩转ART-Pi开发板(基于RT-Thread系统)》第8章 APT-Pi双网络实现自动切换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1120825

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor