本片博文基于《物联网——嵌入式开发实战》和《物联网系统开发:从0到1构建IoT平台》编写,推荐想要学习IoT的老哥参考这两本书
物联网核心技术有以下几种:
传感器
组网技术
用于短距离和远程无线通讯,包括
嵌入式
云计算
边缘计算
物联网产业目前形成了用、云、边、管、端五大部分:
需要注意,物联网并不是简单的“连上网的嵌入式设备”,它的实现形式有很多——可以将数据当场采集、当场处理,再输出到云端,这就是“边缘计算”;也可以将数据采集后传输到多个计算设备,再将结果统一发送到云端或回传数据结果,这就是“分布式计算”;当场采集数据——传输到云端——云端计算——返回结构这样的体系架构仅仅是物联网的实现形式之一
USN架构
即国际电信联盟ITU-T制定的泛在感应器体系结构
将物联网设备分成
传感器网络层
泛在传感器网络接入层
和传感器网络层合并成为物联网感知层,负责采集环境中的数据信息
骨干网络层
该层的实际应用为互联网,并很可能被下一代网络NGN取代
网络中间件层
USN网络应用层
和网络中间件层共同成为应用层,用于实现物联网的智能计算和管理
M2M架构
这是USN的简化版本,由欧洲电信标准化协会M2M技术委员会给出
将物联网设备分成
应用层
由服务支撑平台等软件应用中间件和物联网具体应用软硬件构成
主要解决计算、处理和决策问题,负责将网络层传输而来的数据分析处理后再以有效信息或具体运动的方式传输到应用端
包括
等诸多方向
网络层
由网络管理中间件构成
涉及互联网、移动通信网、无线传感器网络等多种无线数据传输关键技术,该层主要负责将感知层获取的信息安全可靠地传输到应用层
常见的网络层实现有
感知层
由数据采集和组网技术组成,是物联网的基础
应该包括如下结构:
公共技术层
该层的技术包括标志识别、安全管理、QoS管理、网络管理等可以被同时应用在物联网技术框架其他三个层次的技术
要实现物联网,那就离不开嵌入式开发。嵌入式开发是一个很长的技术栈,涉及从底层电路、计算机原理到操作系统,从蓝牙、WiFi到TCP/IP等大量知识,概括来讲可以分成以下几种:
单片机技术
这里单片机开发指以汇编、寄存器、C/C++、库函数等为基础技术的裸机单片机开发,开发者需要掌握单片机基本开发技巧和基础的物联网组网技术
嵌入式RTOS技术
在对系统实时性很严格或性能限制的应用场景中处理多任务一般使用实时操作系统增加系统稳定性
常见的RTOS有:
FreeRTOS(4KB-9KB ROM)、RT-Thread(2.5KB ROM、1KB RAM)、uCOS(收费)、Keil RTX(专用于Cortex-M内核)等
嵌入式Linux技术
在对系统实时性要求相对较低且芯片性能较高的场景,嵌入式Linux具有快速部署、开发简单、复用性强的特点。并且嵌入式Linux具有多种发行版——从带图形界面的到只有串口调试的版本应有尽有,并且代码风格统一、易于修改、裁剪,所以当前有50%的项目选择Linux作为嵌入式操作系统
物联网的另一个核心技术就是组网,常见的组网方法有以下几种:
蓝牙
由爱立信、诺基亚、东芝、IBM和英特尔在1998年5月联合发布,并经过多次升级迭代沿用至今
蓝牙技术多用于终端和手机等移动设备之间组网,因为它存在以下缺点:
因此较少用于纯物联网设备
WiFi
全称为Wireless Fidelity,在无线局域网的范畴指“无限相容性认证”,实质上是一种商业认证,同时也是一种无线联网的技术,其专利由澳大利亚政府享有,请不要在FSF支持者身边提及这个东西(笑)
WiFi连接由AP(Access Point无线接入点)或称为“热点”(hotspot)的设备与Station(接入设备)组成,AP在媒体存取控制层MAC中作为无线工作站和有线局域网络的桥梁,接入设备通过连接到AP来接入有线网络
ZigBee
也称为紫蜂,是一种短距离传输的无线网上协议,低速、低功耗、低成本、可靠、安全
分成四层
物理层
作为ZigBee协议的底层,为上层提供数据接口等服务,由IEEE 802.15.4协议定义
MAC层
负责不同设备之间无线数据链路的建立、维护、结束和确认的数据传送、接收功能,由IEEE 802.15.4协议定义
网络/安全层
保证数据传输和完整性,同时可选对数据加密,由ZigBee联盟定义
应用/支持层
根据设计目的和需求使多个元器件之间可以进行通信,由ZigBee联盟定义
ZigBee最突出的优势就是低功耗和低成本,但是相应它的速率很低,只有250kb/s,不过完全能够传递传感器数据了
3G/4G/5G
主要用于设备上网,但一般需要使用SIM卡并向运营商付费
用途专一
NB-IoT
Narrow Band Internet of Things即“窄带物联网”,只需消耗180kHz的带宽即可部署于GSM网络或LTE网络,支持低功耗设备在广域网的蜂窝数据连接,因此也被称为低功耗广域网(LPWAN),支持待机时间长、对网络连接要求高的设备的高效连接
主要缺点在于其通信速率较低
LoRa
最大优势就是同功率下的穿透性能更好,无限传播距离更远,实现了低功耗和远距离的统一,城镇传输距离可达2-5km,郊区可达15km,且基于IEEE 802.15.4g标准
众所周知,TCP/IP协议簇构成了互联网的基础,要了解TCP/IP必须从OSI七层模型开始,这个模型描述了一层一层对物理网络连接的“封装”——虽然已经品鉴过无数次,但还是再介绍一下OSI模型:
物理层:定义电气、机械、信号时序等,利用传输介质为数据链路层提供物理连接,实现比特流在相连计算机节点间的透明传输,并对具体传输介质和物理设备进行抽象,数据链路层只需要了解节点地址即可
集线器HUB工作在这一层
数据链路层:定义如何格式化数据并支持错误检测,通过各种控制协议将有差错的物理信道变成无差错能可靠传输数据的数据链路。数据链路层常常被分成介质访问控制(MAC)和逻辑链路控制(LLC)两个子层:MAC子层的主要任务是解决共享网络中多用户竞争信道的问题,并完成网络介质的访问控制;LLC子层 主要任务是建立和维护网络连接。总体上讲数据链路层封装了主机设备的概念并将其转换成MAC地址提供给上一层
交换机Switcher工作在这一层——交换机是一种基于MAC地址识别,能完成封装转发数据包功能的网络设备,它可以记录MAC地址并在数据帧发送者和接收者之间建立临时的交换路径,派发对应的数据帧
网络层:控制数据链路层与传输层之间的信息转发,IP、IPX、ICMP、ARP、IARP等协议构成了这一层。这层可以建立、维持和终止网络连接,这层的最核心功能就是选择最佳路径传输路由数据包。网络层封装了主机MAC地址,使得设备可以通过IP地址互相通讯
路由器(Router)工作在这一层,路由器的基础功能就是寻找数据传输目标的IP地址并向其转发数据帧
传输层:用于提供可靠和尽力而为的传输,TCP、UDP等我们耳熟能详的网络协议都是传输层的基础。传输层会管理连接和处理传输错误。该层会在网络层的基础上为高层提供可选的是否面向连接的服务,如果提供面向连接服务,这层传输的数据会由目标设备进行确认,如果指定的时间内未收到确认信息,数据会被重发。从传输层开始,OSI模型进入了纯软件的领域,这一层将所有硬件通讯都抽象成同一种通讯方式,根据“是否进行确认”分成了两类,供上层应用选择
会话层:负责会话建立,提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。这层抽象了传输发起和结束的过程,上层程序只需要通过会话层提供的接口即可实现获取许可-发起传输的过程。
服务器验证用户登录这个过程是由会话层完成的
表示层:该层用于格式化数据,转换为适合OSI系统内部使用的传送语法——这被称为提供格式化的表示和转换数据服务;除此之外表示层还负责了数据压缩和解压缩、加密和解密工作。这一层虽然是很靠近顶层的,但是有一些工作也会被交给特殊的硬件设备——加密和解密十分耗费计算力资源,所以通常使用对应的算法硬件加速设备来进行快速加密和解密。该层抽象了网络通讯的底层数据结构,使得开发者能够以简明的方式向数据帧中写入数据或使用各种协议提供的API
诸如ASCII、JPEG、PNG、MP3、WAV、AVI等多种多媒体数据传输协议都是在这层定义的
应用层:为操作系统或网络应用程序提供访问网络服务的接口,完成用户希望的各种工作。网络应用开发者最常接触的就是应用层,这一层实现了TELNET、SSH、HTTP、FTP、SMTP、RIP等面向实际应用的协议,并定义了相关API,开发者只要了解需要使用到的API就可以开发需要的网络程序或实现网络功能。该层将所有底层的网络实现都抽象出来变成一个个API供程序员调用,在嵌入式-物联网开发中开发者会和应用层打交道,也会和底层打交道
事实上OSI七层模型并不经常被使用,因为它是以理论的角度解释网络底层原理,TCP/IP协议栈的内容并不能被OSI精准描述,但是OSI模型可以概括地定义TCP/IP协议的封装过程
TCP/IP协议将网络分成5层,大多数情况下使用的TCP/IP是四层架构——物理层、网络IP层、运输层、应用层,在某些场合会把物理层拆分成物理层和数据链路层
MAC地址(Media Access Control Address)即媒体存取控制地址,也常被称为局域网地址(LAN Address)、以太网地址(Ethernet Address)或物理地址(Physical Address),他是一个用于确认网络设备位置的地址
IP地址位于网络层,MAC地址位于数据链路层,每个设备(实际上是网卡)都必须有唯一的MAC地址——IP地址就是对于MAC地址某种意义上的抽象,IP地址基于逻辑,比较灵活,用户可以任意更改,而网卡的MAC地址则与其物理绑定,无法更改
使用ARP协议把MAC地址和IP地址一一对应。当有发送给本地局域网内一台主机的数据包时,交换机首先将数据包接收下来,然后把数据包内的IP地址按照交换表中的对应关系映射成MAC地址,再将数据包转发到对应的MAC地址的主机上。
IP(Internet Protocol)网际协议,负责Internet之上网络之间的通信,并规定了将数据从一个网络传输到另一个网络应遵循的规则,是TCP/IP的核心,该协议分为IPv4和IPv6两个版本
IPv4使用32位二进制数来表示计算机的IP地址,一般分成四组数字来表示,每组数字在0到255。网络中通信的主机都必须有一个唯一的IP地址,网络数据包通过IP地址实现数据准确地发送到目标主机,但是由于IPv4规定的地址数量太少,所以使用NAT协议和子网掩码来在有限的二进制数内表示出所有的IP地址;IPv6则解决了IPv4的问题,将地址长度变为128位,能够为足够的设备提供IP地址支持,特别地,IPv6地址使用8个16位无符号整数表示,这些数之间用冒号分开
还有一个被称为端口号的东西,它并不属于IP协议,但通常端口号和IP地址成对出现,端口号一般用四位整数表示,在同一主机上不能出现重复的端口号,它用于标明主机上用于提供网络服务的端口,一般21表示FTP、23表示Telnet、25表示SMTP、80表示HTTP
NAT协议即网络地址转换(Network Address Translation)协议
NAT协议是由于IPv4地址不够用问题而诞生的,他将整个互联网划分为公网和局域网,公网上的每台主机都分配有唯一的IP地址,局域网内的主机想访问互联网就必须使用路由器进行地址转换,把局域网IP转换成公网IP。NAT协议使用A、B、C、D四个网段来划分网络属性,使用子网掩码来划分局域网和局域网内的子网。
同一局域网内的主机可以直接通信,但不同局域网内的主机无法直接通信,需要使用路由器进行转发
传输控制协议(TCP,Transmission Control Protocol)是面向连接的传输层通信协议,TCP消息需要双方建立连接,发出的消息需要得到对方应答
用户数据报协议(UDP,User Datagram Protocol)是面向应用的、无连接的传输层通信协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地抓取来自应用程序的数据并尽可能快地将其扔到网络上。在这个协议下,传输数据的速度仅仅受应用程序生成数据的速度、计算机的能力和传输带宽的限制;接收端UDP则会将每个信息段放在队列中,应用程序每次会从队列中读取一个消息段,UDP没有客户端和服务端的概念,所以两节点之间通信也不需要建立连接
因为UDP并不提供数据传输的保证机制,如果在从发送方到接收方的传递过程中出现数据包丢失,协议本身并不能作出任何检测或提示,因此人们通常将UDP协议称为不可靠的传输协议
一般TCP应用较为广泛,但在需要实时性的场合一般使用UDP;但物联网应用强调实时性,所以大部分需要使用UDP,少部分使用TCP
HTTP协议位于应用层,是一个简单的请求-响应协议,通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息及得到什么样的响应。HTTP适用于从WWW服务器传输超文本到本地浏览器的传输协议。
该协议具有典型的CS(Client-Server)通信架构,由客户端主动发起连接,向服务器请求XML或者JSON数据,然而该协议并不完全适用于物联网,有三个原因:
MQTT即消息队列遥测传输协议(Message Queuing Telemetry Transport Protocol)是一种基于发布-订阅模式的轻量级消息协议
MQTT非常适合物联网应用,详细信息可以参考MQTT协议相关的教程和文章
发送
接收
以上内容以TCP协议下的数据帧传输为例,实际上所有网络数据的传输都是封装-传输-转发-再传输-解封装的过程
java eclipse 清除所有断点欢迎使用Markdown编辑器欢迎使用Markdown编辑器在DEBUG模式下,从右上角找到breakpoint选项(三个选项中的中间一个)。会看到一排图标,一个X号的表示取消选择的debug断点,两个X号的是取消所有断点。选择两个X号的,点击。弹出来的对话框,点击yes,就可以取消所有的断点了。在javaee等编辑界面,直接使用run–>remo...
Python3入门机器学习9.2 Soft Margin SVM和SVM的正则化一个一般的例子,如下图,此时我们的数据是线性不可分的,hard Margin SVM无法应用。这时我们需要一个具有容错能力的SVM,这种SVM就叫做Soft Margin SVM。注意:ζ它不是一个固定的值,而是对于每一个样本数据 i 都有一个相应的 ζi 。只有ζi >= 0是不够的,如果它取正无穷,很显然对于所有的数据点都将满足这样的条件,此时容错的范围就太大了。ζ要做的事情是,希望它有一定的容错空间,但是容
pytest:基于unittest之上的单元测试框架
function(result):result即从servlet响应回传的param其中result可以命名其他的名字,如data
apache工具包common-lang中有一个很有用的处理字符串的工具类,其中之一就是StringEscapeUtils,这个工具类是在2.3版本以上加上的去的,利用它能很方便的进行html,xml,Java等的转义与反转义,而且还能对关键字符串进行处理预防SQL注入,不过好像common-lang3.0以后我看着好像没这个处理SQL语句的方法了,想用的话前提时引入对应的jar包,以下为它的部分
本来打算重新回去看并发编程的,之前看过一遍,现在基本忘完了,然后因为考虑到项目的需要,就先看ES了然后再B站上看到一个视屏比较火,就看这个吧给大家推荐一下https://www.bilibili.com/video/BV17a4y1x7zq听了前两节课,我觉得他有句话说的特别对,只要学不死,就往死里学,本身现在的社会就在高速发展,不向前走终究要被淘汰.ElasticSearch概...
pandas contact 之后,一定要记得用reset_index去处理index,不然容易出现莫名的逻辑错误重置索引不是很懂,跟着做就是了
实验目的和要求理解Iridium和Teledexic卫星网络的基础原理利用NS2仿真实现Iridium和Teledesic卫星系统实验内容一.Iridium仿真分析输入“cd /home/wnt/WNTLab/experiments/exp10”进入实验十脚本所在目录然后输入cd Iridium进入Iridium文件夹输入“ns sat-Iridium.tcl”命令运行本实验将北京-上海延迟分析的awk脚本Delay.awk复制到Iridium文件夹下,即脚本文件夹下。采用”awk
VirtualBox 虚拟 CentOS 7 磁盘扩容之前已经按照以上操作挂载到了 /data02,格式是 EXT4现在希望按照下面方式,重新挂载并扩充 root 和 homeVirtualBox 虚拟CentOS7新增虚拟盘,并扩充 root和home 目录容量报错 Device /dev/sdb excluded by a filter.pvcreate 创建逻辑卷报错pvcreate /dev/sdb Device /dev/sdb excluded by a filter.
HttpCommon源码下载地址: http://hc.apache.org/httpclient-3.x/scm-usage.htmlHttpClient源代码下载地址[常用到HttpClient 4.3 (GA)和HttpCore 4.3 (GA)]: http://hc.apache.org/downloads.cgi 正文内容摘自: http
一. 前言在开发过程中经常遇到json解析和生成的问题,所以用自己也一直用fastjson来实现这个功能。但是,最近遇到一个问题:json字符串里面的数据很多都是"_"下划线的比如,op_id。而在java里面,很多都是驼峰的写法,如opId那这两种可以匹配然后解析吗?二. http请求的解决方法http请求有个@JsonProperty的注解,但是这个注解,fastjso...
SPSS科普 |统计描述统计描述的目的就是了解数据的基本特征和分布规律,为进一步合理地选择统计方法提供依据。常用的有Frequencies、Descriptives和Explore过程。一、Frequencies过程该过程用于产生数据的频数表,输出描述集中位置、离散趋势及分布形状等的指标,并能给出百分位数、绘制频数图等。操作步骤:依次点击分析---描述统计---频率...