物联网到底如何实现万物互联?

news2024/11/19 13:37:16

前言:作为计算机相关专业的你,绝对听说过物联网这个词,它的解释相比你也听过,叫万物互联,也就是所谓的IOT,但是说实话它到底如何实现的万物互联的你可能还真不知道。不是每个物体都有一个网络接口或者实体接口,等着你把网络连进来,今天你看完这篇文章哪怕你不会实际操作但是起码总体的原理流程你就知道了。

一.EPC与物联网

1.EPC的产生与发展

EPC的产生和发展1999年美国麻省理工学院成立Auto-ID中心,进行RFID技术研发,通过创建RFID标准,并利用网络技术,形成EPC系统。

EPC统一对全球物品的编码方法,直到编码至单个物品 (猪肉德和罐头 10万箱 每箱产品的条码是相同的,但是每箱产品的RFID标签是不一样的)。

EPC规定了将此编码以数字信息的形式存储于附着在物品上的应答器(在EPC中常称为标签)中。

阅读器通过无线空中接口读取标签中的EPC码,并经计算机网络传送至信息控制中心,进行相应的数据处理 。

看完是不是一头雾水,别急,这里给你总结一下:

  • 1.EPC是电子产品编码技术的缩写。这是一种基于RFID技术的新技术。(是什么?)
  • 2.EPC统一了对全球物品的编码方法,可以编码至单个物体。(做什么?)

实际过程:

​ EPC规定了将此编码以数字信息的形式存储于附着在物品上的应答器(在EPC中常称为标签)中,阅读器通过无线空中接口读取标签中的EPC码,并经过计算机网络传送至信息控制中学,进行相应的数据处理、存储、显示和相互。

这么解释你是不是感觉好多了?

2.EPC系统的组成

EPC系统是在计算机互联网(Internet)的基础上,利用RFID、EPC编码、数据通信等技术,构造的一个覆盖全球万事万物的实物互联网(Internet of Things)IOT,亦称物联网

在RFID和Internet的基础上,实物互联网可以将数量更为庞大的物品建立起信息联接,为商业、物流、仓储、生产、家庭等行业和用户提供了信息化的先进管理理念和手段。

9Z8x.jpg

EPC系统的组成: 通过EPC就能找到该EPC号的web地址

  • 应答器装载有EPC编码,它应附着在物品上,亦称为标签(后面称为EPC标签或标签)。

  • 阅读器用于读或读写EPC标签,并能连接于本地网络之中。

  • Savant是连接阅读器和应用程序的软件,亦称为中间件,它是物联网中的核心技术,可认为是该网络的神经系统,故称为Savant。

  • 对象名称解析服务(ONS)的作用类似于Internet中的域名解析服务(DNS),它给Savant指明了存储产品有关信息的服务器(EPCIS)。

    知道DNS服务吗,它相当于因特网中的DNS服务: ONS:EPC—>IP DNS: 域名—>IP

  • 系统中EPC信息描述采用实体标记语言(PML),PML是在可扩展标记语言(XML)基础上发展而成,用于描述有关物品信息的一种计算机语言。

3.PML和XML

PML你不知道,但你或多或少应该知道一些XML吧,不知道可以翻看我学习XML 的笔记

XML基础学习笔记

PML (Probabilistic Modeling Language) 是一种用于描述概率模型的语言,它通常被用于机器学习和人工智能领域中。PML可以用于描述各种类型的概率模型,包括贝叶斯网络、隐马尔可夫模型、高斯混合模型等。

XML (Extensible Markup Language) 是一种用于描述数据的标记语言,它是一种可扩展的语言,可以用来创建自定义的标记。XML通常被用于存储和传输数据,例如在Web服务中使用XML格式的数据进行交换。

虽然PML和XML都被用于描述数据,但它们的目的和使用场景有所不同。PML主要用于表示概率模型,并帮助我们进行推理和预测。而XML主要用于存储和传输数据,并提供了一种结构化的方式来组织数据。

这边建议可以不管,反正和今天的主要内容关系不大,你学到后面这些就都知道了。

4.ESP系统的特点

EPC系统的主要特点如下 :

  • 采用了EPC编码方法,可以识别物品到个件
  • 信息系统的网络基础是Internet网络,将企业的Intranet,RFID和Internet有机的结合起来
  • 着眼于全球的系统
  • 目前仍需要较多的投入,对于低价值的识别对象,必须考虑由此引进的成本

二.EPC编码

1.GTIN

GTIN是全球商品条码标准,代表全球贸易项目代码(Global Trade Item Number)。它是一种数字编码,用于唯一识别商品和服务。GTIN由数字组成,长度可以是8、12、13或14个数字。其中最常见的是13位的GTIN,也被称为EAN(欧洲文章编号)或UPC(统一产品代码)。

GTIN码通常被印刷在商品包装上,可以通过扫描条形码或QR码进行读取。这使得全球范围内的供应链管理和物流变得更加高效和精确。同时,GTIN码还可以帮助消费者快速识别并比较不同品牌和型号的商品。

除了GTIN码之外,还有其他一些全球贸易项目代码,如GLN(全球定位码)、SSCC(序列运输集装箱代码)等,它们也都是为促进全球贸易和物流而设计的标准化编码系统。

要知道两点:

  • GTIN是唯一的、无含义的、多行业的、全球认可的代码。
  • GTIN有4种编码结构:EAN · UCC-13(EAN 13)、EAN · UCC-8(EAN 8)、UCC-12和EAN · UCC-14

2.平时生活的使用

  • EAN · UCC-13(标准版原印码)由厂商识别代码、商品项目代码和检验码3部分组成

9CGH.jpg

  • EAN • UCC-8由8位组成,左三位是EAN分配的前缀码,接着4位是分配给厂商的特定商品代码,最后一位是检验位

9UuG.jpg

3.EPC编码的类型和方法

目前,EPC编码有64位、96位和256位三种。 EPC编码由版本号、域名管理、对象分类和序列号四个字段组成:

  • 版本号字段标识EPC的版本号,它给出EPC编码的长度;
  • 域名管理字段标识相关的生产厂商信息;
  • 对象分类字段编码物品精确类型;
  • 序列号用于编码出唯一物品。

9iPz.jpg

4.EPC编码的性能

EPC编码的性能:

  • 唯一性:足够的编码容量和组织保证可以保证对某一个物品实现唯一编码

  • 简单性:编码简单且能实现物品的唯一标识,不包含物品的其他相关信息

  • 可扩展性:为未来的发展提供了充足的备用空间

  • 安全性:EPC编码和加密、认证技术相结合

三.EPC标签与阅读器

1.标签分类

EPC标签是一种被广泛应用于物联网领域的RFID标签。根据不同的分类方式,EPC标签可以分为以下几种类型:

  1. 按工作频率分类:EPC标签通常在低频(LF)、高频(HF)和超高频(UHF)三个频段工作。其中,低频标签通常在125KHz左右;高频标签通常在13.56MHz左右;超高频标签通常在840MHz到960MHz之间。
  2. 按存储容量分类:EPC标签的存储容量通常从几十比特到数千比特不等,因此可以按照其存储容量来分类。目前,最常见的EPC标签存储容量为96位或128位。
  3. 按封装形式分类:EPC标签可以采用多种封装形式,如贴纸式、硅片式、卡式、手环式等。
  4. 按功能分类:EPC标签还可以按照其功能进行分类。例如,有一些标签具有温度、湿度、压力、震动等传感器功能,可以用于监测物品的环境条件。还有一些标签具有加密、防伪等安全功能,可以用于确保产品的真实性和安全性。

2.Class与Gen(代)

  • Class描述的是标签的基本功能,譬如说它里面存储器情况或有无电池。

  • Gen是指标签规范的主要版本号。通常所说的第二代EPC,实际上是第二代EPC Class 1,这表明它是规范的第二个主要版本,针对拥有一次写入内存的标签。

  • EPC Class的目的是为了提供一种模块化结构,涵盖一系列众多的可能类型的标签功能。

3.EPC阅读器

应该具有下述功能和特征:

  • 空中接口功能
  • 阅读器防碰撞
  • 与计算机网络的连接

9TpT.jpg

  • 空中接口电路包括收发两个通道,包含编码、调制、解调、解码等功能,射频功率由天线辐射,并接收从标签返回的信息,空中接口电路是阅读器和标签之间交换信息的纽带。
  • 控制器可以采用微控制器(MCU)或数字信号处理器(DSP)。
  • 网络接口应具有支持以太网、无线局域网(IEEE 802.11)等网络联接方式,这也是EPC阅读器的重要特点。

4.中间件

核心功能是屏蔽不同厂家的RFID阅读器等硬件设备、应用软件系统以及数据传输格式之间的异构性,从而可以实现不同的硬件(阅读器等)与不同应用软件系统间的无缝连接与实时动态集成。

  • 程序模块集成器:由多个程序模块组成。
  • 阅读器接口:阅读器接口提供与阅读器的连接方法,并采用相应的通信协议。
  • 应用程序接口:程序模块和应用程序的接口。
  • 程序模块之间的接口:用自己定义的API(应用程序接口)函数实现。
  • 网络访问接口

四.ONS(对象名称解析服务)

1.对象名称解析服务

ONS: EPC<–>EPCIS(IP) DNS:域名<–>WEB(IP)

1.2.24.400 <----> 24.21.1.ONSROOT.ORG

在EPC系统中,需要将EPC编码与相应的商品信息相匹配,而相应的商品信息存储在对应的EPCIS服务器中,ONS服务提供与EPC编码对应的EPCIS服务器的地址,它的作用类似于因特网的域名解析服务。

9u74.jpg

阅读器将读到的EPC编码通过本地局域网上传至本地服务器,由本地服务器所带Savant软件对这些信息进行集中处理,然后由本地服务器通过查找本地ONS服务或通过路由器到达远程ONS服务器查找所需EPC编码对应的EPCIS服务器地址,本地服务器就可以和找到的EPCIS服务器进行通信了。

2.具体实现过程

96tv.jpg

通过EPC号找到该EPC号商品信息存放的web地址(EPC号转换成一个物联网上可以寻址的网址)

五.编码预备知识

1.join()函数

join() 是 Python 字符串对象的内置方法,用于将一个可迭代对象(例如列表、元组等)中的元素连接成一个字符串。其语法如下:

str.join(iterable)

其中,str是指定要使用的分隔符,即要把可迭代对象中的元素连接起来的字符串;iterable则是指定要连接的可迭代对象。

具体来说,join() 方法会在 iterable 中的每个元素之间插入 str 分隔符,并返回连接起来的新字符串。需要注意的是,这里的元素必须都是字符串类型,否则程序会因为数据类型不匹配而出错。

举个例子,如果我们有一个列表 my_list,它包含若干个字符串类型的元素,那么可以像下面这样使用 join() 方法将它们连接成一个新的字符串:

my_list = ['hello', 'world', 'how', 'are', 'you']
new_string = '-'.join(my_list)
print(new_string)  # 输出:"hello-world-how-are-you"

在上面的例子中,join() 方法使用了 - 作为分隔符,把列表中的所有字符串连成了一个新字符串。

2.split()函数

split() 函数是 Python 内置的字符串方法,用于将字符串按照指定的分隔符分割成一个列表。

它的语法如下:

str.split(sep=None, maxsplit=-1)

其中,sep 参数是可选的分隔符,默认为 None,表示使用空白字符(空格、制表符、换行符等)作为分隔符。如果指定了分隔符,则会按照该分隔符来对字符串进行分割。

maxsplit 参数也是可选的,表示最多分割几次。默认为 -1,表示不限制分割次数。

例如:

s = "Hello,world!"
print(s.split())      # ['Hello,world!']
print(s.split(','))   # ['Hello', 'world!']
print(s.split('o'))   # ['Hell', ',w', 'rld!']
print(s.split('l', 1))# ['He', 'lo,world!']

以上代码中,第一个 split() 没有指定分隔符,因此返回包含整个字符串的列表;第二个 split() 使用逗号作为分隔符,返回两个元素的列表;第三个 split() 使用字母 o 作为分隔符,返回四个元素的列表;第四个 split() 使用字母 l 作为分隔符,并且最多只分割一次,返回两个元素的列表。

3.反转列表

reversed_numbers = int_number[:-1][::-1]

反转列表在LeetCode题目中经常用到,[::-1]表示反转列表的用法,不要问为什么,当作一个函数使用就行,这个“函数”的返回值是一个反转后的新列表,前面的[:-1]不解释了,表示切片,不要最后一个元素。

六.完整编码及结果

1.python编码

# 判断epc类型并转化为点十进制格式返回
def judgment(epc0b, code_type):
    length = len(epc0b)
    #version_type表示版本号
    version_type1 = int(epc0b[:2], 2)
    version_type2 = int(epc0b[:8], 2)
    if length == 64 and version_type1 == 1:
        return transform(epc0b, code_type[0])
    if length == 64 and version_type1 == 2:
        return transform(epc0b, code_type[1])
    if length == 64 and version_type1 == 3:
        return transform(epc0b, code_type[2])
    if length == 96:
        return transform(epc0b, code_type[3])
    if length == 256 and version_type2 == 1:
        return transform(epc0b, code_type[4])
    if length == 256 and version_type2 == 2:
        return transform(epc0b, code_type[5])
    if length == 256 and version_type2 == 3:
        return transform(epc0b, code_type[6])


# 根据epc类型返回十进制格式
def transform(epc0b, code_type):
    results = []
    flag = 0
    # 按位置和位数将二进制转多个十进制,并用.隔开
    for i in code_type:
        temp = int(epc0b[flag:flag + i], 2)           #指定这是2进制形式表示的字符串
        flag += i
        results.append(temp)
    return ".".join(str(i) for i in results)    #str(i)表示把每个整数元素变为字符串型


# 根据十进制格式返回最后的URL
def address(class_ip, suffix_name):
    str_numbers = class_ip.split('.')
    int_number = [int(num) for num in str_numbers]
    print(f"序列号:{int_number[-1]}")
    # 去除序列号,并将整个列表反转
    reversed_numbers = int_number[:-1][::-1]
    # 合并后缀为最终URL地址
    string = ".".join(str(temp) for temp in reversed_numbers) + suffix_name
    return string


# --------------------------------------------数据准备------------------------------------------
code = (
    (2, 21, 17, 24), (2, 15, 13, 34), (2, 26, 13, 23), (8, 28, 24, 36), (8, 32, 56, 160), (8, 64, 56, 128),
    (8, 128, 56, 64))
test = '0100000000000000000001000000000000011000000000000000000110010000'
suffix = ".onsroot.org"
# ----------------------------------------------测试----------------------------------------------
result = judgment(test, code)
url = address(result, suffix)
print(result)
print("ONS解析得到URL:",url)


2.运行结果

9XKq.jpg

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

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

相关文章

蓝牙客户端QBluetoothSocket的使用——Qt For Android

了解蓝牙 经典蓝牙和低功耗蓝牙差异 经典蓝牙&#xff08;Bluetooth Classic&#xff09;&#xff1a;分为基本速率/增强数据速率(BR/EDR)&#xff0c; 79个信道&#xff0c;在2.4GHz的(ISM)频段。支持点对点设备通信&#xff0c;主要用于实现无线音频流传输&#xff0c;已成…

响应式数据大屏开发rem、%、vh/vm

前言 响应式数据大屏开发rem、%、vh/vm 我们在开发数据大屏的时候难免会需要解决响应式问题 &#xff0c;那么响应式是什么呢&#xff1f; 响应式&#xff1a;响应式布局是元素随着屏幕发生宽高大小变化 盒子布局发生变化 通俗的来说&#xff1a; 自适应&#xff1a;元素随着…

设置全局loading

为什么要设置全局loading&#xff1f; 在项目开发过程中&#xff0c;请求接口的时候延迟没有数据&#xff0c;页面感觉狠卡顿&#xff0c;这个时候就要用loading来做一个延迟界面。 但是每个界面都写loading的话就会很复杂&#xff0c;所以今天给大家带来了一个全局loading的…

吴恩达471机器学习入门课程2第2周——手写数字识别(0到9)

手写数字识别的神经网络0-9 1、导包2、ReLU激活函数3 - Softmax函数4 - 神经网络4.1 问题陈述4.2 数据集4.2.1 可视化数据 4.3 模型表示批次和周期损失 (cost) 4.4 预测 使用神经网络来识别手写数字0-9。 1、导包 import numpy as np import tensorflow as tf from keras.mod…

人工智能时代已经开启,它是40年来最重大的技术革命

重读比尔盖茨关于AI的长文《The Age of AI has begun —— Artificial intelligence is as revolutionary as mobile phones and the Internet. 》&#xff08;开启AI时代&#xff1a;人工智能&#xff0c;比肩智能手机和互联网的革命&#xff09;&#xff0c;有了新的见解&…

电脑卡怎么办?4个方法让电脑流畅运行!

案例&#xff1a;我的电脑刚买的时候使用起来很流畅&#xff0c;但用久了之后就越来越卡&#xff0c;有没有办法可以让电脑流畅运行&#xff1f; 电脑是我们日常生活中必不可少的工具&#xff0c;但有时我们会遇到电脑卡顿的问题&#xff0c;这不仅会影响工作效率&#xff0c;…

VS2017 如何引入动态库(图文教程:libwebsocket为例)

目录 1、把想要的库放进适当的位置&#xff1b;&#xff08;以libwebsocket动态库为例&#xff09; 2、将库的头文件包含进来 3、添加对应的库目录 4、链接器——输入中&#xff0c;添加具体的依赖项 5、看当前的动态库&#xff0c;还会依赖其他什么动态库 1、把想要的库放进…

有了这些开源 Icon 库,妈妈再也不担心我的 UI 太丑啦!

Remix Icon Remix Icon 是一套面向设计师和开发者的开源图标库&#xff0c;所有的图标均可免费用于个人项目和商业项目。 与拼凑混搭的图标库不同&#xff0c;Remix Icon 的每一枚图标都是由设计师按照统一规范精心绘制的&#xff0c;在拥有完美像素对齐的基础上&#xff0c;…

分享两个转为数字艺术从业者服务的网站

01 地的数字艺术师、3D设计师、动画制作师和游戏开发人员等人才&#xff0c;为他们提供了多种服务和解决方案。 首先&#xff0c;NewCGer为数字艺术从业者提供了一个交流和学习的平台。该网站上有丰富的行业资讯、技术文章和研究报告等内容&#xff0c;能够及时了解到最新的数…

深度学习应用篇-推荐系统[11]:推荐系统的组成、场景转化指标(pv点击率,uv点击率,曝光点击率)、用户数据指标等评价指标详解

【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍&#xff1a;【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化…

Socket TCP/IP协议数据传输过程中的粘包和分包问题

Socket TCP/IP协议数据传输过程中的粘包和分包问题 一&#xff1a;通过图解法来描述一下分包和粘包&#xff0c;这样客户更清晰直观的了解&#xff1a; 下面对上面的图进行解释&#xff1a; 1.正常情况&#xff1a;如果Socket Client 发送的数据包&#xff0c;在Socket Server…

PowerBI 开发 第23篇:共享数据集

Power BI共享数据集的优点是&#xff1a;只要数据集刷新&#xff0c;那么引用该数据集的报表都会自动刷新&#xff0c;节省了报表数据刷新的时间和算力&#xff0c;缺点是&#xff1a;使用共享数据集的报表&#xff0c;虽然可以新增Measure(Measure仅存在于本地报表中&#xff…

The baby-bust economy “婴儿荒”经济 | 经济学人20230603版社论双语精翻

2023年6月3日《经济学人》&#xff08;The Economist&#xff09;封面文章暨社论&#xff08;Leaders&#xff09;精选&#xff1a;《“婴儿荒”经济》&#xff08;“The baby-bust economy”&#xff09;。 baby-bust即“婴儿荒”&#xff08;生育低谷&#xff09;&#xff0c…

Unity Shader Graph Ase三者分别有什么不一样的地方?

什么是Shader&#xff1f; 着色器 (Shader) 应用于计算机图形学领域&#xff0c;指一组供计算机图形资源在执行渲染任务的时使用的指令&#xff0c;用于计算机图形的颜色或明暗。但近来&#xff0c;它也能用于处理一些特殊的效果&#xff0c;或者视频后处理。通俗的说&#xf…

机器学习:基于AdaBoost算法模型对信用卡是否违约进行识别

系列文章目录 作者&#xff1a;i阿极 作者简介&#xff1a;数据分析领域优质创作者、多项比赛获奖者&#xff1a;博主个人首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞&#x1f44d;收藏&#x1f4c1;评论&#x1f4d2;…

低代码开发重要工具:jvs-form(表单引擎)2.1.7功能清单及新增功能介绍

jvs-form 2.1.7 版本功能清单 在低代码开发平台中&#xff0c;表单是用于收集和编辑数据的页面。它通常用于创建、更新或查看单个记录的详细信息。 jvs-form是jvs快速开发平台的8大引擎的其中之一&#xff0c;它的特点&#xff1a; 与动态模型联动&#xff0c;支持动态的调整…

Python心经(6)

目录 callable super type&#xff08;&#xff09;获取对应类型 isinstance判断对象是否是某个类或者子类的实例 issubclass&#xff0c;判断对象是不是类的子孙类 python3的异常处理 反射&#xff1a; 心经第三节和第五节都写了些面向对象的&#xff0c;这一节补充一…

黑苹果 或者 Mac 因 mds资源占用过高,导致频繁死机

开机后不久&#xff0c;风扇狂转&#xff0c;温度升高&#xff0c;然后死机&#xff0c;关机。 1. 使用 “Apple 诊断”测试 Mac 先看看硬件层面是否有问题。 使用“Apple 诊断”测试 Mac。 这款 Mac 的处理器是 Intel &#xff0c;开启 Mac&#xff0c;然后在 Mac 启动时立…

java的File

一、File &#xff08;一&#xff09;新建File对象 File对象表示一个路径&#xff0c;可以是文件路径&#xff0c;也可以是文件夹路径&#xff1b;这个路径可以是存在的&#xff0c;也可以是不存在的。 File类常见的构造方法&#xff1a; 例如&#xff1a; 注意&#xff1a;因…

母线差动保护(一)

与其他的主设备保护相比&#xff0c;母线保护的要求更为苛刻。当变电站母线发生故障时&#xff0c;如不及时切除故障&#xff0c;将会损坏众多电力设备&#xff0c;破坏系统的稳定性&#xff0c;甚至导致电力系统瓦解。如果母线保护拒动&#xff0c;也会造成大面积的停电。因此…