物联网的通信协议
物联网的通信协议
目录
- 物联网的通信协议
- 一、UART串口通信
- 1.1 串口通信
- 1.2 异步收发
- 1.3 波特率
- 1.4 串口通信协议的数据帧
- 1.5 优缺点
- 1.5.1 优点
- 1.5.2 缺点
- 二、I^2^C
- 2.1 I^2^C
- 2.2 I^2^C
- 2.3 数据有效性
- 2.4 起始条件S和停止条件P
- 2.5 数据格式
- 2.6 协议数据单元PDU
- 2.7 优缺点
- 2.7.1 优点
- 2.7.2 缺点
- 三、SPI
- 3.1 SPI
- 3.2 通信原理
- 3.3 数据有效性
- 3.4 优缺点
- 3.4.1 优点
- 3.4.2 缺点
- 四、Socket通信
- 4.1 Socket
- 4.2 TCP和UDP
- 4.2.1 流格式套接字SOCK_STREAM
- 4.2.2 数据报格式套接字SOCK_DGRAM
- 4.3 Socket通信过程
- 4.4 优缺点
- 4.4.1 优点
- 4.4.2 缺点
- 五、MQTT
- 5.1 消息队列遥测传输MQTT
- 5.2 MQTT的发布和订阅模型
- 5.3 通信协议流程
- 5.3 优缺点
- 5.3.1 优点
- 5.3.2 缺点
- 六、总结
- 6.1 有线与无线
- 6.2 授权与非授权
- 6.3 蓝牙和Zigbee
- 6.4 RFID和NFC
- 6.5 MQTT和COAP
通信的目的是为了传递信息
由于要实现设备之间的数据传输,寻找物物之间最合适的连接方式是我们必须要考虑的。这些通信方式各有优劣,适用于不同的应用场景。
物联网的通信方式可大致分为如下几类

物联网的有线通信也就是以太网、光缆等有实体线路的通信方式,IEEE802.3标准制定了以太网的标准,以太网使用双绞线作为媒介,在没有中继的情况下,可以覆盖200米的范围。有线通信可以保证通信的质量、时延和成本,还可以在恶劣的环境下正常运行,但通信范围小、不便于携带的问题也无法解决。
物联网的无线通信技术很多,主要分为两类:一类是Zigbee、WiFi、蓝牙、Z-wave等短距离通信技术;另一类是LPWAN(low-power Wide-Area Network,低功耗广域网),即广域网通信技术。LPWA又可分为两类:一类是工作于未授权频谱的LoRa、SigFox等技术;另一类是工作于授权频谱下,3GPP支持的2/3/4G蜂窝通信技术,比如EC-GSM、LTE Cat-m、NB-IoT等。高速率业务主要使用3G、4G技术;中等速率业务主要使用GPRS技术。低速率业务目前还没有很好的蜂窝技术来满足,而它却有着丰富多样的应用场景,很多情况下只能使用GPRS技术勉力支撑。

这里可以看到Lora和NB-IOT是比较像的,区别主要是Lora频谱在部分段免费(可自建),而NB-IOT是要在运营商上运行的。对于需要视频流的远距离传输需求,组网的只有4G+WIFI合适了。
无线通信还可分为非授权频谱无线连接和授权频谱无线连接,也就是花钱租网络。
授权频谱无线连接就是我们常见的蜂窝通信,也就是运营商的网络
1G:AMPS
2G:TDMA,CDMA,GSM…
3G:UMTS,HSDPA,WCDMA…
4G:LTE,EC-GSM,eMTC…
非授权频谱无线连接又可以进一步划分为短程通信,和广域通信
短程通信
超宽带:UWB
宽带:WIFI(永远在线)
窄带:蓝牙(高功耗),NFC(近距离通信),zigBee(节点阻塞)
广域通信
Lora
一、UART串口通信
串口通信的英文缩写是UART(Universal Asynchronous Receiver Transmitter) 全称是通用异步收发器。
1.1 串口通信

两个设备用一根线串起来,发送方在线的一头将数据转换为二进制序列,用高低电平按照顺序依次发送01信号,接收方在线的另一头读取这根信号线上的高低电平信号,对应转化为二进制的01序列。这就是最基本的串口通信的概念,
1.2 异步收发

如果给上图的两个设备再加一根线,让左边的设备也可以成为接收方,右边的设备也可以成为发送方,那么对于左右两个设备而言,发送和接受便可以在两根线上同时进行,这时,发送和接收是异步的。
1.3 波特率
波特率就是每秒传输的0和1的二进制数,接收方和发送方波特率必须相同,不然会发生乱码的情况。
因为每次都要保证收发方的波特率一致很不方便,所以一些基于时钟的通信协议如I2C总线协议、SPI总线协议,都是以时钟线来保证信息的收发同步的。
1.4 串口通信协议的数据帧
在串口通信中,最基本的一帧数据,至少包含了 起始位+数据位+停止位(校验帧可有可无)。
数据的传输方向一般是最高有效位MSB.
在UART串口中,RX 代表信息接收端,TX 代表信息发送端。
1.5 优缺点
1.5.1 优点
(1)硬件简单
(2)低延时
(3)直接连接
1.5.2 缺点
(1)点对点通信,不适合复杂网络通信
(2)通信距离和速率受限于串口线缆的长度和质量
(3)缺乏协议,通信双方需要自行定义消息格式和解析规则
二、I2C
2.1 I2C
I²C(Inter-integrated Circuit)最早是飞利浦在1982年开发设计的一种总线协议。I²C总线支持设备之间的短距离通信,用于处理器和一些外围设备之间的接口,它只需要两根信号线来完成信息交换。
2.2 I2C

I²C最少只需要两根线,和异步串口类似,但可以支持多个从(slave)设备,和SPI不同的是,I²C可以支持多主机(mul-master)系统,允许有多个master并且每个master都可以与所有的slaves通信(master之间不可通过I²C通信,并且每个master只能轮流使用I²C总线)。master是指启动数据传输的设备并在总线上生成时钟信号以驱动该传输,而被寻址的通信设备都作为slaves。
I²C通讯只需要2条双向总线:串行数据线SDA和串行时钟线SCL
2.3 数据有效性
SDA 线上的数据必须在时钟的高电平周期保持稳定,SDA的高或低电平状态只有在 SCL 线的时钟信号是低电平时才能改变。
2.4 起始条件S和停止条件P
起始条件S:当SCL高电平时,SDA由高电平向低电平转换;
停止条件P:当SCL高电平时,SDA由低电平向高电平转换。
起始和停止条件一般由主机产生。总线在起始条件后处于busy的状态,在停止条件的某段时间后,总线才再次处于空闲状态。
2.5 数据格式
I2C传输的数据以字节为单位,每个字节必须为8位,可以传输任意多个字节,I2C的数据格式具有以下特点:
(1)每个字节后必须跟一个响应位 ACK
的SCL上ACK),因此实际上传输一个字节(8位)的数据需要花费9位的时间。
(2)SDA上首先传输字节的最高位,从上图中我们可以看出,位数编号的发送顺序从左至右 是 Bit7-Bit0
数据接收方收到传输的一个字节数据后,需要给出响应,此时处在第九个时钟,发送端释放SDA线控制权 ,将SDA电平拉高,由接收方控制。接收方表示成功的接收到了8位一个字节的数据,便将SDA拉低为低电平,即ACK信号,表示应答
2.6 协议数据单元PDU

2.7 优缺点
2.7.1 优点
(1)I2C总线可以连接多个设备,使用唯一的地址进行寻址
(2)适用于中等速率的通信需求
(3)硬件资源占用少
2.7.2 缺点
(1)I2C通信受距离限制,适用于近距离通信
(2)需要配置设备的I2C地址
(3)实时性较差
三、SPI
3.1 SPI
SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一 种同步串行接口技术,是一种高速的,全双工,同步的通信总线。SPI协议主要用于短距离的通信系统中,特别是嵌入式系统,很多芯片的外围设备,比如LED显示驱动器、I/O接口芯片、UART收发器等都广泛的采用SPI总线协议。
3.2 通信原理
SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多
个从设备。在英文中,通常把主设备称作为 Master, 从设备称作为 Slave.

SPI理论上需要4根线才能进行双向数据传输,3根线可以进行单向传输:
SPI理论上的4根接线分别是以下四种:

3.3 数据有效性

3.4 优缺点
3.4.1 优点
(1)支持全双工通信,发送数据和接收数据可以同时进行。
(2)通信简单
(3)数据传输速率快
3.4.2 缺点
(1)接线繁杂,需要至少四根接线
(2)在多个从机的情况下,每个从机都需要接入一根CS片选信号线,浪费芯片的IO资源。
四、Socket通信
4.1 Socket
Socket 是在应用层和传输层之间的一个抽象层,它把 TCP/IP 层复杂的操作抽象为几个简单的接口,供应用层调用实现进程在网络中的通信。Socket 起源于 UNIX,在 UNIX 一切皆文件的思想下,进程间通信就被冠名为文件描述符(file descriptor),Socket 是一种“打开—读/写—关闭”模式的实现,服务器和客户端各自维护一个“文件”,在建立连接打开后,可以向文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。
另外我们经常说到的Socket 所在位置如下图:

4.2 TCP和UDP
世界上有很多种套接字(socket),比如 DARPA Internet 地址(Internet 套接字)、本地节点的路径名(Unix套接字)、CCITT X.25地址(X.25 套接字)等。我们只介绍第一种套接字——Internet 套接字,它是最具代表性的,也是最经典最常用的。以后我们提及套接字,指的都是 Internet 套接字。根据数据的传输方式,可以将 Internet 套接字分成两种类型。
4.2.1 流格式套接字SOCK_STREAM
流格式套接字(Stream Sockets)也叫“面向连接的套接字”,是一种可靠的、双向的通信数据流,数据可以准确无误地到达另一台计算机,如果损坏或丢失,可以重新发送。其特点:
(1)数据在传输过程中不会消失;
(2)数据是按照顺序传输的;
(3)数据的发送和接收不是同步的(有的教程也称“不存在数据边界”)。
它使用了 TCP 协议(The Transmission Control Protocol,传输控制协议),TCP 协议会控制你的数据按照顺序到达并且没有错误。
浏览器所使用的 http 协议就基于面向连接的套接字,因为必须要确保数据准确无误,否则加载的 HTML 将无法解析。
4.2.2 数据报格式套接字SOCK_DGRAM
数据报格式套接字(Datagram Sockets)也叫“无连接的套接字”。计算机只管传输数据,不作数据校验,如果数据在传输中损坏,或者没有到达另一台计算机,是没有办法补救的。也就是说,数据错了就错了,无法重传。因为数据报套接字所做的校验工作少,所以在传输效率方面比流格式套接字要高。有以下特点:
(1)强调快速传输而非传输顺序;
(2)传输的数据可能丢失也可能损毁;
(3)限制每次传输的数据大小;
(4)数据的发送和接收是同步的
数据报套接字也使用 IP 协议作路由,但是它不使用 TCP 协议,而是使用 UDP 协议(User Datagram Protocol,用户数据报协议)。
QQ 视频聊天和语音聊天就使用 SOCK_DGRAM 来传输数据,因为首先要保证通信的效率,尽量减小延迟,而数据的正确性是次要的,即使丢失很小的一部分数据,视频和音频也可以正常解析,最多出现噪点或杂音,不会对通信质量有实质的影响。
4.3 Socket通信过程
Socket 保证了不同计算机之间的通信,也就是网络通信。对于网站,通信模型是服务器与客户端之间的通信。两端都建立了一个 Socket 对象,然后通过 Socket 对象对数据进行传输。通常服务器处于一个无限循环,等待客户端的连接。下面是面向连接的 TCP 时序图:

4.4 优缺点
4.4.1 优点
(1)适用于网络通信,可以在不同设备间进行通信
(2)TCP套接字提供可靠的数据传输,确保数据准确性和顺序性
(3)支持多种编程语言
4.4.2 缺点
(1)编程较为复杂,需要处理连接、断开等情况
(2)涉及IP地址和端口的配置,需要正确配置才能建立通信连接
(3)需要在网络环境中使用,不适合直接连接在物理硬件上
五、MQTT
MQTT是应用层协议,和超文本传输协议(HTTP)等是一个层次。
5.1 消息队列遥测传输MQTT
原始的socket通信,并不能保障信息可以到达接收方,数据的可靠性包括实时性都会有一定的影响, 所以这个时候就需要一种网络通信协议Protocal 来保障信息的传递, 保障服务质量。互联网的基础网络协议是 TCP/IP。MQTT(消息队列遥测传输) 是基于 TCP/IP 协议栈而构建的,已成为 IoT 通信的标准。
5.2 MQTT的发布和订阅模型
在基于MQTT协议的IOT网络里面里面有这么几个角色:
(1)发布者 Publisher 负责发布消息, 例如传感器采集数据,然后发送当前传感器的信息
(2)订阅者 Subscriber 订阅消息,根据获得的传感器数据做出对应的动作。
(3)*服务器 Server * 信息的中转站,负责将信息从发布者传递到订阅者。
MQTT在客户端实现叫MQTT Client,在服务器端实现叫MQTT Broker。
每个单片机(Client)仅与PC(Server)保持一个长连接, 有什么数据就告诉Server, 如果有其他单片机或者PC跟这个单片机通信, 也只能通过这个Server来获取, 同时也要注意,这个数据获取的过程是被动的, 单片机没有主动轮询, 整个过程是异步的, 数据传过来,自动调用回调函数, 所以Server就成了这个单片机与这个周边设备通信的唯一的渠道,这个机制使得整个过程更加轻量级与高效 。
5.3 通信协议流程

通信所用的数据帧 Data Frame主要由主题编号 Topic ID 还有信息 Message 两部分组成。
发布者与订阅者之间是没办法直接感知到对方的存在的, 订阅者与发布者之间通过数据帧 Data Frame 里面的主题编号Topic ID 来获取自己想要的数据。
举一个远程控制LED灯亮灭的例子:
(1)ESP32与PC连入同一个局域网下, 获取PC 的IP地址
(2)PC开启 MQTT Broker, 开启Server模式
(3)ESP32传入PC的IP地址还有端口号,创建一个MQTT_Client
(4)ESP32的MQTT_Client与PC上的MQTT_Server创建一个长连接
(5)ESP32的MQTT_Client 订阅Topic LED_CONTROL
(6)PC上创建一个CLIENT, Client里面传入本地IP与MQTT Broker服务的端口号, 与PC上面的Server建立一个长连接
(7)PC上的Client, 发送数据帧 Topic ID + 指令, Topic ID为LED Control
(8)数据发送给Server, Server发现ESP32开发板订阅了LED_CONTROL 这个主题, 然后就通过ESP32与Server创建的连接发送该数据帧。
(9)ESP32接收到这个数据帧,发现TOPIC_ID: LED_CONTROL, 于是知道这个是跟LED控制相关的指令,读取到MESSAGE是LED_ON, ESP32执行指令led.on() , LED打开。
5.3 优缺点
5.3.1 优点
(1)异步消息协议
(2)面向长连接
(3)双向数据传输
(4)协议轻量级
(5)被动数据获取
5.3.2 缺点
(1)需要搭建MQTT服务器,增加了系统复杂性
(2)不适合大规模网络
(3)通信有一定的开销,可能会影响实时性需求较高的应用
六、总结
6.1 有线与无线
能用有线就用有线,数据质量是第一保证。
6.2 授权与非授权
如果两种无线通线方式效果差别不大都能完成需求时,能不花钱就不花钱,这样可以降低后期成本。
6.3 蓝牙和Zigbee
为什么现在基本手机等设备都是标配蓝牙,而不是zigbee,一个是成本,一个是zigbee大哥飞利浦建的生态系统。但Zigbee得响应速度更快,如果有这个需求的话可以考虑上Zigbee。
6.4 RFID和NFC
RFID是射频识别技术,是识别;NFC是近场通信技术,是通信。
6.5 MQTT和COAP
MQTT和HTTP是基于TCP的协议,CoAP(约束应用协议)是基于UDP的协议。
MQTT是长连接,CoAP协议是无连接。
MQTT通过中间代理传递消息的多对多协议,CoAP协议是Server和Client之间消息传递的单对单协议。
MQTT不支持带有类型或者其它帮助Clients理解的标签消息,CoAP内置内容协商和发现支持,允许设备彼此窥测以找到交换数据的方式。
参考文章:http://wiki.1zlab.deepsenserobot.com/wiki/micropython-esp32/mqtt/,https://www.cnblogs.com/myitnews/p/13790067.html
https://zhuanlan.zhihu.com/p/510549726
https://club.gizwits.com/thread-7555-1-1.html
相关文章:
物联网的通信协议
物联网的通信协议 目录 物联网的通信协议一、UART串口通信1.1 串口通信1.2 异步收发1.3 波特率1.4 串口通信协议的数据帧1.5 优缺点1.5.1 优点1.5.2 缺点 二、I^2^C2.1 I^2^C2.2 I^2^C2.3 数据有效性2.4 起始条件S和停止条件P2.5 数据格式2.6 协议数据单元PDU2.7 优缺点2.7.1 优…...
【业务功能篇56】SpringBoot 日志SLF4J Logback
3.5.1 日志框架分类与选择 3.5.1.1 日志框架的分类 日志门面 (日志抽象)日志实现JCL(Jakarta Commons Logging) SLF4J(Simple Logging Facade for Java)Jul(Java Util Logging) , Log4j , Log4j2 , Logback 记录型日志框架 Jul (Java Util Logging):JDK中的日志…...
leetcode 53. 最大子数组和
2023.7.28 要求找最大和的 连续子数组, 我的思路是用一个temp记录局部最优值,用ans记录全局最优值。 然后在每次for循环进行一个判断:当前遍历元素temp值 是否大于当前遍历元素的值,如果大于,说明temp值是帮了正忙的&a…...
js 下载url返回的excel数据,并解析为json
XLSX GitHub地址:https://github.com/SheetJS/sheetjs/blob/github/dist/xlsx.full.min.js 需要先引入:XLSX.full.min.js // 下载文件的请求 fetch(downloadFileUrl).then(response > {return rsp.blob() }).then(data > {let reader new FileR…...
图文教程:使用 Photoshop、3ds Max 和 After Effects 创建被风暴摧毁的小屋
推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 1. 在 Photoshop 中设置图像 步骤 1 打开 Photoshop。 打开 Photoshop 步骤 2 我已经将小屋的图像导入到Photoshop中以演示 影响。如果您愿意,可以使用其他图像。 图片导入 步骤 3 由于小…...
学习Maven Web 应用
Maven Web 应用 本章节我们将学习如何使用版本控制系统 Maven 来管理一个基于 web 的项目,如何创建、构建、部署已经运行一个 web 应用。 创建 Web 应用 我们可以使用 maven-archetype-webapp 插件来创建一个简单的 Java web 应用。 打开命令控制台,…...
page allocation stalls for 问题调研
一.现象分析和内存管理基本概念介绍 最近有一台linux出现卡死的状态,系统不反应,无法ssh登录,只能通过电源关机重启操作恢复,重启后登录系统后台,拉取kernel日志,如下 Jul 12 18:48:06 kernel: [141294.374983] send process: page allocation stalls for 10108ms, orde…...
JUC并发工具类
一、ReentrantLock 特点:独占、可重入、公平/非公平、可中断、支持多个条件变量 1、常用api ReentrantLock实现了Lock接口,Lock类规范定义了如下方法 lock():获取锁,调用该方法的线程会获取锁,当锁获得后࿰…...
【雕爷学编程】MicroPython动手做(10)——零基础学MaixPy之神经网络KPU
早上百度搜“神经网络KPU”,查到与非网的一篇文章《一文读懂APU/BPU/CPU/DPU/EPU/FPU/GPU等处理器》,介绍各种处理器非常详细,关于“KPU”的内容如下: KPU Knowledge Processing Unit。 嘉楠耘智(canaan)号…...
MySQL~SQL语句
一、SQL 1.什么是SQL? Structured Query Language:结构化查询语言 每一种数据库操作的方式存在不一样的地方,称为“方言”。 2.SQL通用语法 SQL 语句可以单行或多行书写,以分号结尾 可使用空格和缩进来增强语句的可读性 MyS…...
从零开始构建基于YOLOv5的目标检测系统
本博文从零开始搭建基于YOLOv5模型的目标检测系统(具体系统参考本博主的其他博客),手把手保姆级完成环境的搭建。 (1)首先Windows R输入cmd命令后打开命令窗口,进入项目目录,本博文以野生动物…...
PDF尺寸修改:等比绽放(标准面单100*150mm)
PDF修改尺寸 需要注意:第一个方法返回的是转换后PDF的base64。第二个方法返回的是文件流,这个方法才是转的核心。 /*** 修改PDF尺寸** param pdfUrl PDF链接* param pdfWidthInMillimeters 指定宽 mm* param pdfHeightInMillimeters 指…...
C++ - list介绍 和 list的模拟实现
list介绍 list 是一个支持在常数范围内,任意位置进行插入删除的序列式容器,且这个容器可以前后双向迭代。我们可以把 list 理解为 双向循环链表的结构。 于其他结构的容器相比,list在 任意位置进行插入和函数的效率要高很多;而li…...
干翻Dubbo系列第四篇:Dubbo3第一个应用程序细节补充
前言 不从恶人的计谋,不站罪人的道路,不坐亵慢人的座位,惟喜爱耶和华的律法,昼夜思想,这人便为有福!他要像一棵树栽在溪水旁,按时候结果子,叶子也不枯干。凡他所做的尽都顺利。 如…...
深度学习初探
1.深度学习模型训练过程 1)数据(数据清洗标注) 2)模型(模型的构建和初始化) 3)损失(前向传播的过程,得到模型的输出和真实标签的差异值,称之为损失&#x…...
nn.BCELoss与nn.CrossEntropyLoss
BCELoss与CrossEntropyLoss都是用于分类问题。可以知道,BCELoss是Binary CrossEntropyLoss的缩写,BCELoss是CrossEntropyLoss的一个特例,只用于二分类问题,而CrossEntropyLoss可以用于二分类,也可以用于多分类…...
CSDN浏览如何解决
一、对于平时我们苦恼csdn数据不够好看 当面试等各个场合需要我们装*或者秀技术无法拿出亮眼的时候,刚好我闲时间编译的在线模块适合你 二、如何操作(虚拟平台我已给大家放到最后直接使用即可) 重点:pc端必须拥有python环境 win…...
web前端开发小知识
当今互联网技术迅猛发展,web前端开发也成为了非常热门的职业之一。作为一个web前端开发者,不仅需要掌握各种前端开发技术,还需要了解一些小技巧和小知识。下面,我们将介绍一些web前端开发小知识,希望对你的工作有所帮助…...
Java泛型的简单认识
泛型的认识 自定义泛型,定义了String类型,随后这个泛型就是String类型 于是他的方法都是字符串的类型 泛型接口 泛型方法 所有车可以进行比赛,定义了一个BMW和BENZ两个车类,都继承car,当使用泛型的 如果你顶一个狗对象…...
视频转化为图片或灰度视频
1.视频转化为图片 import cv2video_pathr"D:\Dataset\video/7.mp4" capturecv2.VideoCapture(video_path) # print(capture.get(5))if capture.isOpened():ret,imgcapture.read()index0while ret:if index%200:imgidr"D:\Dataset\image/6/""%07d&quo…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
