【STM32单片机】基于语音识别的智能分类垃圾桶,ld3320语音识别模块如何使用,mp3播放模块如何使用

news2024/9/24 15:26:20

文章目录

  • 需求
  • 语音识别模块
  • MY1690 播放模块
  • 舵机
  • 源码

需求

对于“可回收物”“有害垃圾”“厨余垃圾”“其它垃圾”,不能分清扔到哪个垃圾桶怎么办?

基于语音识别的智能分类垃圾桶,识别到关键词就打开对应的垃圾桶,完全没有分不清的烦恼。
在这里插入图片描述

//可回收物:塑料瓶、玻璃瓶、铝罐、纸张、纸板、报纸、纸质包装盒、金属罐头等。
//有害垃圾:废电池、废灯管、废荧光灯、废油漆、废杀虫剂、废药品、废电子产品等。
//厨余垃圾:剩菜剩饭、果皮果核、蔬菜瓜果的残余、茶叶渣、咖啡渣等。
//其他垃圾:烟蒂、一次性纸杯、一次性餐具、尘土、一次性尿布、卫生纸、旧衣物、陶瓷碎片等。

硬件:单片机,语音识别模块ld3320,4个舵机(垃圾桶),4个LED灯,4个按键,my1690和喇叭 。
软件:
1、 4个舵机对应 可回收物、有害垃圾、厨余垃圾、其它垃圾, 舵机为0度表示垃圾桶盖关闭,舵机为90度表示垃圾桶盖打开。视频里的垃圾桶那些东西属于手工活了,技术大老粗做手工不行,技术这边用舵机做了之后,客户需要自己把舵机安装在垃圾桶盖上。
2、 开机后语音播报“欢迎使用智能语音分类垃圾箱”
3、唤醒词“扔垃圾”,成功唤醒后,回复语音“请说出所扔垃圾种类或者垃圾名称”,客户说出物品名称,单片机打开对应舵机。 这里需要设定一些常见垃圾词和对应类别。
4、唤醒词“扔垃圾”,成功唤醒后,直接说“可回收物”“有害垃圾”“厨余垃圾”“其它垃圾”也可以打开对应垃圾箱。
5、唤醒后20秒无语音命令,则语音提示“操作完毕,如需重新操作请说扔垃圾”退出唤醒状态。
6、对应垃圾桶打开后,对应小灯应打开。对应垃圾桶关闭后,对应小灯应熄灭。
7、对应按键按下,则垃圾桶打开。对应按键松开,则垃圾桶关闭。

语音识别模块

使用STM32单片机。

5V给这个模块供电,这个模块是3.3V的ttl电平。

需要给这个模块下载程序,使用冷启动方式。

识别效果优化:比如“牛奶”,可以添加 niu nai 和 liu nai。

在这里插入图片描述

MY1690 播放模块

使用百度翻译或者其他软件获取 语音合成的声音mp3文件,将文件放入tf卡,命名是0001到9999。

5V供电,3.3v的ttl输出。

功放电流大,可能导致单片机失效,在程序最开始可以设置模块的声音小一点,1到33个等级。

对应代码:

void uart_send(u8 data) {
	while (USART_GetFlagStatus(USART2, USART_FLAG_TC) != SET); //等待发送结束
  USART_SendData(USART2, data);//向串口2发送数据
    
}

void bofang(void) {
    uart_send(0x7E);
    uart_send(0x03);
    uart_send(0x11);
    uart_send(0x12);
    uart_send(0xEF);
}

void tingzhi(void) {
    uart_send(0x7E);
    uart_send(0x03);
    uart_send(0x1e);
    uart_send(0x1d);
    uart_send(0xEF);
}
void set_volume( unsigned char volume )
{
 unsigned char jiaoyan;
 unsigned char cmd = 0x31;
 
 if(volume<5)
 {
  volume=5;
 }
 if(volume>30)
 {
  volume=30;
 }
 jiaoyan = 0x04 ^ cmd;
 jiaoyan = jiaoyan ^ volume;
 
 //uart_send( 0x7E ); 
 
 uart_send( 0x7E );       
 uart_send( 0x04 );       
 uart_send( cmd );        
 uart_send( volume );        
 uart_send( jiaoyan );    
 uart_send( 0xEF );       
}


void select_song_number(unsigned char cs2) {
    unsigned char jiaoyan;
    unsigned char cmd = 0x41;
    unsigned char cs1 = 0;

    jiaoyan = 0x05 ^ cmd;
    jiaoyan = jiaoyan ^ cs1;
    jiaoyan = jiaoyan ^ cs2;
	
	//uart_send(0x7E);
	
    uart_send(0x7E);
    uart_send(0x05);
    uart_send(cmd);
    uart_send(cs1);
    uart_send(cs2);
    uart_send(jiaoyan);
    uart_send(0xEF);

}

舵机

舵机20ms 的pwm驱动,1ms到2ms的高电平时间对应了不同的角度。

源码

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
void motor_contorl(u8 motor, u8 open) {
    //https://qq742971636.blog.csdn.net/article/details/115017052
    //手册可能写的是高电平是1ms到2ms,其实给0.5ms到2.5ms
    if (motor == 1) {
        if (open) {
            TIM_SetCompare1(TIM3, 50);//舵机打开,意味着垃圾桶1打开
            LED1 = 0;//小灯打开
        } else {
            TIM_SetCompare1(TIM3, 100);//舵机关闭,意味着垃圾桶1关闭
            LED1 = 1;//小灯关闭
        }
    } else if (motor == 2) {
        if (open) {
            TIM_SetCompare2(TIM3, 50);//舵机打开,意味着垃圾桶2打开
            LED2 = 0;//小灯打开

        } else {
            TIM_SetCompare2(TIM3, 100);//舵机关闭,意味着垃圾桶2关闭
            LED2 = 1;//小灯关闭
        }
    } else if (motor == 3) {
        if (open) {
            TIM_SetCompare3(TIM3, 50);//舵机打开,意味着垃圾桶3打开
            LED3 = 0;//小灯打开

        } else {
            TIM_SetCompare3(TIM3, 100);//舵机关闭,意味着垃圾桶3关闭
            LED3 = 1;//小灯关闭
        }
    } else if (motor == 4) {
        if (open) {
            TIM_SetCompare4(TIM3, 50);//舵机打开,意味着垃圾桶4打开
            LED4 = 0;//小灯打开
        } else {
            TIM_SetCompare4(TIM3, 100);//舵机关闭,意味着垃圾桶4关闭
            LED4 = 1;//小灯关闭
        }
    }
}

void uart_send(u8 data) {
	while (USART_GetFlagStatus(USART2, USART_FLAG_TC) != SET); //等待发送结束
  USART_SendData(USART2, data);//向串口2发送数据
    
}

void bofang(void) {
    uart_send(0x7E);
    uart_send(0x03);
    uart_send(0x11);
    uart_send(0x12);
    uart_send(0xEF);
}

void tingzhi(void) {
    uart_send(0x7E);
    uart_send(0x03);
    uart_send(0x1e);
    uart_send(0x1d);
    uart_send(0xEF);
}
void set_volume( unsigned char volume )
{
 unsigned char jiaoyan;
 unsigned char cmd = 0x31;
 
 if(volume<5)
 {
  volume=5;
 }
 if(volume>30)
 {
  volume=30;
 }
 jiaoyan = 0x04 ^ cmd;
 jiaoyan = jiaoyan ^ volume;
 
 //uart_send( 0x7E ); 
 
 uart_send( 0x7E );       
 uart_send( 0x04 );       
 uart_send( cmd );        
 uart_send( volume );        
 uart_send( jiaoyan );    
 uart_send( 0xEF );       
}


void select_song_number(unsigned char cs2) {
    unsigned char jiaoyan;
    unsigned char cmd = 0x41;
    unsigned char cs1 = 0;

    jiaoyan = 0x05 ^ cmd;
    jiaoyan = jiaoyan ^ cs1;
    jiaoyan = jiaoyan ^ cs2;
	
	//uart_send(0x7E);
	
    uart_send(0x7E);
    uart_send(0x05);
    uart_send(cmd);
    uart_send(cs1);
    uart_send(cs2);
    uart_send(jiaoyan);
    uart_send(0xEF);

}

u8 sec_auto_close = 0;//自动关闭垃圾桶的计时器
u8 sec_auto_close_flag = 0;//自动关闭垃圾桶的计时器的标志位

u8 no_command_flag = 0;//没有指令的标志位
u8 no_command = 0;//没有指令的计时器

int main(void) {
    u8 key = 1;

    delay_init();             //延时函数初始化
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);     //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
    uart_init(9600);
    USART2_Init(9600);
	  USART3_Init(9600);
	
    LED_Init();                 //LED端口初始化
    KEY_Init();


    TIM3_PWM_Init(1000, 71 * 20);     //50HZ  20ms<-->1000 1ms<-->50  2ms<-->100
    motor_contorl(1, 0);//关闭垃圾桶舵机1
    motor_contorl(2, 0);//关闭垃圾桶舵机2
    motor_contorl(3, 0);//关闭垃圾桶舵机3
    motor_contorl(4, 0);//关闭垃圾桶舵机4

    TIM4_Int_Init(1000, 71 * 20);//20ms
		
		
		//delay_ms(200);
		set_volume(10);
	
		//delay_ms(200);
    select_song_number(0x01);//播放0001 欢迎使用智能语音分类垃圾箱
		

    while (1) {
        delay_ms(10);
        key = KEY_Scan(1);//得到键值

        if (key) {//有按键按下
            if (key == 1) {
                motor_contorl(1, 1);//打开垃圾桶舵机1
            } else if (key == 2) {
                motor_contorl(2, 1);//打开垃圾桶舵机2
            } else if (key == 3) {
                motor_contorl(3, 1);//打开垃圾桶舵机3
            } else if (key == 4) {
                motor_contorl(4, 1);//打开垃圾桶舵机4
            }
            while (KEY_Scan(1));
            motor_contorl(1, 0);//关闭垃圾桶舵机1
            motor_contorl(2, 0);//关闭垃圾桶舵机2
            motor_contorl(3, 0);//关闭垃圾桶舵机3
            motor_contorl(4, 0);//关闭垃圾桶舵机4
        }


    }
}

//软件:
//1、 4个舵机对应 可回收物、有害垃圾、厨余垃圾、其它垃圾, 舵机为0度表示垃圾桶盖关闭,舵机为90度表示垃圾桶盖打开。视频里的垃圾桶那些东西属于手工活了,技术大老粗做手工不行,技术这边用舵机做了之后,客户需要自己把舵机安装在垃圾桶盖上。
//2、 开机后语音播报“欢迎使用智能语音分类垃圾箱”
//3、唤醒词“扔垃圾”,成功唤醒后,回复语音“请说出所扔垃圾种类或者垃圾名称”,客户说出物品名称,单片机打开对应舵机。  这里需要设定一些常见垃圾词和对应类别(客户补充一下)。
//4、唤醒词“扔垃圾”,成功唤醒后,直接说“可回收物”“有害垃圾”“厨余垃圾”“其它垃圾”也可以打开对应垃圾箱。
//5、唤醒后20秒无语音命令,则语音提示“操作完毕,如需重新操作请说扔垃圾”退出唤醒状态。
//6、对应垃圾桶打开后,对应小灯应打开。对应垃圾桶关闭后,对应小灯应熄灭。
//7、对应按键按下,则垃圾桶打开。对应按键松开,则垃圾桶关闭。

//存放在my1690的sd卡的歌曲如下
//0001 欢迎使用智能语音分类垃圾箱
//0002 请说出所扔垃圾种类或者垃圾名称
//0003 操作完毕,如需重新操作请说扔垃圾

//如果收到语音模块发过来的指令,每个指令需要对应操作
//指令1  0x00  成功唤醒
//指令2  0x02  识别到"可回收物"
//指令3  0x03  识别到"有害垃圾"
//指令4  0x04  识别到"厨余垃圾"
//指令5  0x05  识别到"其它垃圾"
//指令6  0x06  识别到"塑料瓶"
//指令7  0x07  识别到"电池"
//指令8  0x08  识别到"剩菜剩饭"
//指令9  0x09  识别到"烟头"


//ld3320
void USART1_IRQHandler(void)                    //串口1中断服务程序
{
    u8 Res;

    if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
    {
        Res = USART_ReceiveData(USART1);    //读取接收到的数据

        if (Res == 0x00) {
            //select_song_number(0x01);//播放0001 欢迎使用智能语音分类垃圾箱

            no_command_flag = 1;//20秒无语音命令标志位   是唤醒状态!!!!!!!!!!!
            no_command = 20;//20秒自动关闭标志位

            select_song_number(0x02);//播放0002 请说出所扔垃圾种类或者垃圾名称

        }
        if (no_command_flag == 1)//是唤醒状态
        {
            if (Res == 0x02) {
                motor_contorl(1, 1);//打开垃圾桶舵机1
                sec_auto_close_flag = 1;//开启20秒自动关闭
                sec_auto_close = 20;//20秒自动关闭

                no_command_flag = 0;//有指令则无需再计时回答
            } else if (Res == 0x03) {
                motor_contorl(2, 1);//打开垃圾桶舵机2
                sec_auto_close_flag = 1;//开启20秒自动关闭
                sec_auto_close = 20;//20秒自动关闭

                no_command_flag = 0;//有指令则无需再计时回答
            } else if (Res == 0x04) {
                motor_contorl(3, 1);//打开垃圾桶舵机3
                sec_auto_close_flag = 1;//开启20秒自动关闭
                sec_auto_close = 20;//20秒自动关闭

                no_command_flag = 0;//有指令则无需再计时回答
            } else if (Res == 0x05) {
                motor_contorl(4, 1);//打开垃圾桶舵机4
                sec_auto_close_flag = 1;//开启20秒自动关闭
                sec_auto_close = 20;//20秒自动关闭

                no_command_flag = 0;//有指令则无需再计时回答
            } else if (Res == 0x06) {
                motor_contorl(1, 1);//打开垃圾桶舵机1
                sec_auto_close_flag = 1;//开启20秒自动关闭
                sec_auto_close = 20;//20秒自动关闭

                no_command_flag = 0;//有指令则无需再计时回答
            } else if (Res == 0x07) {
                motor_contorl(2, 1);//打开垃圾桶舵机2
                sec_auto_close_flag = 1;//开启20秒自动关闭
                sec_auto_close = 20;//20秒自动关闭

                no_command_flag = 0;//有指令则无需再计时回答
            } else if (Res == 0x08) {
                motor_contorl(3, 1);//打开垃圾桶舵机3
                sec_auto_close_flag = 1;//开启20秒自动关闭
                sec_auto_close = 20;//20秒自动关闭

                no_command_flag = 0;//有指令则无需再计时回答
            } else if (Res == 0x09) {
                motor_contorl(4, 1);//打开垃圾桶舵机4
                sec_auto_close_flag = 1;//开启20秒自动关闭
                sec_auto_close = 20;//20秒自动关闭

                no_command_flag = 0;//有指令则无需再计时回答
            }
        }
    }

}

//my1690
void USART2_IRQHandler(void) {
    u8 res;
    if (USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) /* 接收到数据 */
    {
        res = USART_ReceiveData(USART2);


    }
}

//定时器4中断服务程序
void TIM4_IRQHandler(void)   //TIM4中断
{
    static u8 cnt = 0;
    if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
    {
        TIM_ClearITPendingBit(TIM4, TIM_IT_Update);  //清除TIMx的中断待处理位:TIM 中断源
        cnt++;
        if (cnt == 50)//1秒
        {
            cnt = 0;
            if (sec_auto_close_flag)//开启20秒自动关闭
            {
                if (sec_auto_close) {
                    sec_auto_close--;//20秒自动关闭计时
                } else {
                    sec_auto_close_flag = 0;//关闭20秒自动关闭

                    motor_contorl(1, 0);//关闭垃圾桶舵机1
                    motor_contorl(2, 0);//关闭垃圾桶舵机2
                    motor_contorl(3, 0);//关闭垃圾桶舵机3
                    motor_contorl(4, 0);//关闭垃圾桶舵机4

                }
            }


            if (no_command_flag)//开启20秒自动关闭
            {
                if (no_command) {
                    no_command--;//20秒自动关闭计时
                } else {
                    no_command_flag = 0;//关闭20秒自动关闭

                    select_song_number(0x03);//播放0003 没有听到您的指令.  操作完毕,如需重新操作请说扔垃圾

                }
            }

        }
    }
}



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/611050.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

echarts中彻底清除所有实例和相关数据

单个实例 dispose销毁实例&#xff0c;销毁后实例无法再被使用。 myChart.dispose();实例比较多的时候 获取Dom元素 let doms document.getElementsByClassName(my-chart)销毁所有实例 if(doms && doms.length) {for (let i 0; i < doms.length; i) {let chartIn…

Jumpserver 2.28.8使用分享

目录 一、Jumpserver 介绍 1、跳板机和堡垒机理解 1.1、跳板机 1.2、堡垒机 2、jumpserver简介 二、Jumpserver 安装部署 2.1、部署规划 2.2 、安装要求 JumpServer 环境要求: 2.3、安装方法介绍 官方提供了多种安装方法 三、Jumpserver平台使用 3.1、Admin登录 3.…

bug(Tomcat):StandardContext.startInternal 由于之前的错误,Context[/day01]启动失败

引出 项目启动失败&#xff0c;一个困扰了一上午的bug 报错信息 org.apache.catalina.core.StandardContext.startInternal 一个或多个筛选器启动失败。完整的详细信息将在相应的容器日志文件中找到 org.apache.catalina.core.StandardContext.startInternal 由于之前的错误…

骨传导是哪个意思,推荐几款性能优的骨传导耳机

​骨传导耳机是通过头部骨迷路传递声音&#xff0c;而不是直接通过耳膜的振动来传递声音。与传统的入耳式耳机相比&#xff0c;骨传导耳机不会堵耳朵&#xff0c;在跑步、骑车等运动时可以更好的接收外界环境音&#xff0c;保护听力&#xff0c;提升安全性。此外&#xff0c;骨…

图解LeetCode——114. 二叉树展开为链表

一、题目 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。 二…

公式+ChatGPT:为你的标题创作注入新鲜活力

大家是不是经常遇到文章已经写好了&#xff0c;但是标题却还空着&#xff0c;不是不会写&#xff0c;就是写得平淡无奇&#x1f602;。自己都觉得无趣的标题又怎么能吸引有趣的灵魂呢&#xff1f;何不让chatGPT来试试呢&#xff1f; 首先&#xff0c;我们要明白一个基础理念&am…

微软 AD 已成过去式,这个身份领域国产化替代方案你了解吗?

随着全球互联网和数字化浪潮的不断发展&#xff0c;信息安全已成为不可忽视的问题&#xff0c;并随着日益复杂的国内外市场格局&#xff0c;其重要性更加凸显。我国政府也相继印发和实施了《数字中国建设整体布局规划》、《全国一体化大数据体系建设指南》等一系列政策&#xf…

【JavaEE】Servlet的API详解

Servlet的API详解O(∩_∩)O~&#xff1a; 文章目录 JavaEE & Servlet的API详解1. HttpServlet抽象类1.1 init方法1.2 destroy方法1.3 service方法 2. HttpRequest接口2.1 在浏览器上显示请求首行2.2 在浏览器上显示请求header2.3 getParameter方法 - 最常用的API之一2.4 js…

Stable Didffusion 学习笔记经验总结

值的概念 在Stable Diffusion中&#xff0c;有很多要设置的参数&#xff0c;这些参数起到的作用非常重要&#xff0c;直接决定了出图的各种样子和质量&#xff0c;经过实践&#xff0c;我大概搞明白他们遵循的规律&#xff0c;因为程序员是要与AI对话的&#xff0c;所以所谓的…

【CMake 入门与进阶(3)】 CMakeLists.txt 语法规则基础及部分常用指令(附使用代码)

在上两篇中&#xff0c;笔者通过几个简单地示例向大家演示了 cmake 的使用方法&#xff0c;由此可知&#xff0c;cmake 的使用方法其实还是非常简单的&#xff0c;重点在于编写 CMakeLists.txt&#xff0c;CMakeLists.txt 的语法规则也简单&#xff0c;并没有 Makefile 的语法规…

操作系统复习2.3.4-进程同步问题

生产者-消费者 系统中有一组生产者进程和一组消费者进程 两者共享一个初始为空&#xff0c;大小为n的缓冲区 缓冲区没满&#xff0c;生产者才能放入 缓冲区没空&#xff0c;消费者才能取出 互斥地访问缓冲区 互斥要在同步之后&#xff0c;不然会导致想要同步&#xff0c;但由…

39从零开始学Java之面向对象的继承到底是怎么回事?

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在上一篇文章中&#xff0c;壹哥给大家讲解了面向对象三大特征之一的封装&#xff0c;现在我们还有另…

JWT strings must contain exactly 2 period characters. Found: 0

登录接口异常报错&#xff1a; 这是登录接口报错&#xff0c;实际上他不走登录接口&#xff0c;直接走的拦截器&#xff0c;拦截器应配置好了登录接口的放行&#xff0c;登录接口写的也没有问题&#xff0c;拦截器解析也没有问题&#xff0c;因为之前都是好用的&#xff0c;本…

人车网租赁软件开发|人车网租赁系统|租赁系统源码功能

经过租赁小程序不只可以使物品得到充沛的运用&#xff0c;还能减少一些资源的浪费&#xff0c;租赁行业这两年因为互联网技术的完善&#xff0c;发展也在不断进步&#xff0c;租赁系统定制开发功能也在不断完善&#xff0c;那么企业想要开发租赁小程序的时分需求留意哪些方面呢…

深入了解Java虚拟机之高效并发

目录 Java内存模型与线程 概述 硬件的效率与一致性 Java内存模型 主内存与工作内存 内存间交互操作 对于volatile型变量的特殊规则 原子性、可见性与有序性 先行发生原则 Java与线程 线程实现 线程调度 状态切换 小结 线程安全与锁优化 概述 线程安全 Java中…

HDR显示技术

什么是HDR? HDR&#xff08;High-Dynamic Range&#xff0c;简称HDR&#xff09;是指高动态范围图像&#xff0c;是一种能够显示更大的亮度范围和对比度的图像技术。HDR可以让暗部的细节变亮&#xff0c;亮部的细节不失真&#xff0c;呈现出更自然、更真实的画面&#xff0c;…

记一次618军演压测TPS上不去排查及优化 | 京东云技术团队

本文内容主要介绍&#xff0c;618医药供应链质量组一次军演压测发现的问题及排查优化过程。旨在给大家借鉴参考。 背景 本次军演压测背景是&#xff0c;2B业务线及多个业务侧共同和B中台联合军演。 现象 当压测商品卡片接口的时候&#xff0c;cpu达到10%&#xff0c;TPS只有…

Tomcat基本原理

1.Tomcat核心&#xff1a; Http服务器Servlet容器 组件分工&#xff1a; 连接器Connector&#xff1a;处理 Socket 连接&#xff0c;负责网络字节流与 Request 和 Response 对象的转化。容器Container&#xff1a;加载和管理 Servlet&#xff0c;以及具体处理 Request 请求。 …

静态杂波滤波算法

静态杂波滤波算法 1.零速通道置零法2.动目标显示&#xff08;MTI&#xff09;3.相量均值相消算法&#xff08;平均相消算法&#xff09;4.总结 1.零速通道置零法 零速通道置零法&#xff0c;是指在2D-FFT&#xff08;速度维FFT&#xff09;后直接将R-V谱矩阵&#xff08;RD图&…

计算机网络学习笔记-传输层

目录​​​​​​​ 概述 与网络层的区别 端口号 概述 分类 重要功能&#xff1a;复用分用 两个重要协议&#xff1a;UDPTCP UDP用户数据报协议 概述 主要特点 首部格式 TCP传输控制协议 主要特点 首部格式 运输连接管理 概述 运输层提供应用进程间的逻辑通信通…