热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

共享单车IOT物联网系统是怎么设计的?

共享单车IOT物联网系统是怎么设计的?无敌码农无敌码农前言物联网(IOT)的概念很早就有了,只是在共享单车普及之前物联网并不被多数人所熟知,因此听起来很神秘。今天文章的主题就和大家

共享单车IOT物联网系统是怎么设计的?

无敌码农 无敌码农
共享单车IOT物联网系统是怎么设计的?


前言



物联网(IOT)的概念很早就有了,只是在共享单车普及之前物联网并不被多数人所熟知,因此听起来很神秘。今天文章的主题就和大家一起聊一聊关于物联网(IOT)相关的话题,并从技术的角度解析下大家每天会使用到的共享单车在系统技术层面的运行原理,希望能够给大家的生活带来点小乐趣。


什么是IOT



对于从事互联网技术相关工作的朋友来说,IOT这个词多多少少应该都听说过,其实IOT这个词的就是英文“Internet Of Things”的简称,即我们所说的物联网。那么什么是物联网?它与我们现在使用的互联网是个什么关系呢?

从概念上来说物联网是指通过信息传感设备、按照约定的协议,将物品与互联网连接起来从而实现信息交换和通信,以实现传统物品设备的智能化。我们现在经常说的智能硬件,实质上就是物联网概念的落地与应用。例如,在实际生活中的很多场景,如通过手机控制空调的开关、电灯的开关以及各种智能跑步机、学习机等等都是IOT的应用场景。

通过上述阐述,也可以看出实际上物联网本质上也是依托互联网的,没有互联网特别是移动互联网3G、4G、WI-FI及未来5G网络的支撑,物联网也是玩不起来的。相对于传统互联网设备电脑、手机而言,由于物联网设备种类繁多,因此硬件部分定制化开发的场景会比较多,当然这一点并不用太担心,在我国的深圳做硬件嵌入式开发的公司非常多,只要你有需求和钱一切都不是问题!

关于硬件部分主要涉及电路板设计及嵌入式软件开发相关的工作,设备通过嵌入式软件逻辑与移动网络连接,例如蓝牙、WI-FI及移动互联网,一部分特殊场景还会通过物联网短信进行连接,如有些共享单车就会通过短信进行指令补偿传输之类,这里就不多说了,大家稍微知道下就行。


IOT协议之MQTT



接下来重点和大家讨论下IOT物联网协议的知识,MQTT是物联网中的一个基础性协议,英文全称是"Message Queue Telemetry Transport",翻译过来也称为遥测传输协议。MQTT是一个基于客户端-服务器端的消息发布/订阅传输协议,这种方式非常适合物联网的场景,在网络信号及稳定性不高的地方也可以有效的实现设备与网络服务的交互通信。

在MQTT协议中有三种身份:发布者(Publish)、代理服务器(Broker)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端、只有消息代理是服务器,消息的发布者也可以同时是消息的订阅者。从这几点看MQTT协议似乎与我们日常系统中使用的消息中间件类似,只是消息的发布及订阅被嵌入到设备的逻辑中了。在MQTT中传输的消息主要分为:主题(topic)和负载(payload)两部分。Topic可以理解为消息的类型,而payload则可以理解为消息的内容。MQTT设备与服务器端的交互示意图如下:
共享单车IOT物联网系统是怎么设计的?
在MQTT协议中,每个设备根据协议都有自己作为消息消费方而订阅的Topic以此来接收服务器端下发的操作指令;与此同时每个设备也会作为消息发布方向服务器端指定订阅的Topic发送消息,以此来实现设备与服务器端的通信交互。


共享单车IOT系统



通过上面的基本描述,相信你对IOT及IOT中设备与服务端交互的MQTT协议已经有了一些认识,那么日常使用的共享单车IOT系统是如何设计的呢?通过一张图来解析,如下:

共享单车IOT物联网系统是怎么设计的?

在共享单车中当你拿起手机扫码二维码进行开锁后,手机端会调用后台服务接口,之后会通过IOT连接服务,向具体的设备以MQTT协议的方式下发开锁消息,锁设备通过SIM卡会保持与物联网消息服务器的连接监听,对自己设备所约定的Topic实现消息订阅,如果收到开锁消息,则会触发自身的嵌入式软件逻辑完成机械马达动作从而实现开锁。

由于基于MQTT协议的开锁指令与设备收到指令完成开锁是一个异步的过程,所以锁设备在执行完开锁指令后会通过约定的上行Topic向IOT服务发送开锁状态上报信息,服务端通过监听制定Topic队列,感知锁的开关状态,从而触发后续的骑行相关的业务逻辑,如创建骑行订单、开始进行骑行计费等等。关锁及其他流程与此类似。

以上就是共享单车通过IOT物联网开关锁的基本逻辑,原理上就是通过消息队列来实现的,而在真实的场景中出于对网络不稳定性的补充,现在主流的共享单车还会以蓝牙及物联网短信作为补充,以提高开锁成功率,因为不是主要涉及IOT的逻辑所以大家理解下就行。

另外关于IOT系统的方案选择问题,现在各大云计算公司都已经提供了IOT云服务,如阿里云、AWS-IOT等,基于现有的IOT服务会减少设备管理及连接资源的负担。而如果想自己搭建物联网服务,也可以通过消息队列进行封装(如使用RocketMQ),只是如果设备量大,还需要考虑连接资源及系统性能问题,除此以外也需要考虑设备管理相关的内容。对于初创公司而言,在资源不是特别丰富的时候,通过成熟的云计算服务实现IOT也是一个不错的选择!

从内容上看,共享单车所采用的技术并没有什么特别之处,技术方案均为目前已经比较成熟的方案,本质上只是物联网技术结合移动支付场景的一个商业模式创新。不过我们也不得不承认,共享单车的出现的确改变了很多人的出行方式,方便了我们的生活!

推荐阅读:
分布式事务之如何基于RocketMQ的事务消息特性实现分布式系统的最终一致性?

—————END—————


推荐阅读
  • 本文提供了 RabbitMQ 3.7 的快速上手指南,详细介绍了环境搭建、生产者和消费者的配置与使用。通过官方教程的指引,读者可以轻松完成初步测试和实践,快速掌握 RabbitMQ 的核心功能和基本操作。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • RocketMQ在秒杀时的应用
    目录一、RocketMQ是什么二、broker和nameserver2.1Broker2.2NameServer三、MQ在秒杀场景下的应用3.1利用MQ进行异步操作3. ... [详细]
  • 本文介绍了Spring 2.0引入的TaskExecutor接口及其多种实现,包括同步和异步执行任务的方式。文章详细解释了如何在Spring应用中配置和使用这些线程池实现,以提高应用的性能和可管理性。 ... [详细]
  • 本文介绍了 Java 中 io.netty.channel.kqueue.KQueueStaticallyReferencedJniMethods.evfiltSock() 方法的使用及其代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 本文详细介绍了如何使用Python中的smtplib库来发送带有附件的邮件,并提供了完整的代码示例。作者:多测师_王sir,时间:2020年5月20日 17:24,微信:15367499889,公司:上海多测师信息有限公司。 ... [详细]
  • 本文深入解析了通过JDBC实现ActiveMQ消息持久化的机制。JDBC能够将消息可靠地存储在多种关系型数据库中,如MySQL、SQL Server、Oracle和DB2等。采用JDBC持久化方式时,数据库会自动生成三个关键表:`activemq_msgs`、`activemq_lock`和`activemq_ACKS`,分别用于存储消息数据、锁定信息和确认状态。这种机制不仅提高了消息的可靠性,还增强了系统的可扩展性和容错能力。 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
  • 修复一个 Bug 竟耗时两天?真的有那么复杂吗?
    修复一个 Bug 竟然耗费了两天时间?这背后究竟隐藏着怎样的复杂性?本文将深入探讨这个看似简单的 Bug 为何会如此棘手,从代码层面剖析问题根源,并分享解决过程中遇到的技术挑战和心得。 ... [详细]
  • 2019年斯坦福大学CS224n课程笔记:深度学习在自然语言处理中的应用——Word2Vec与GloVe模型解析
    本文详细解析了2019年斯坦福大学CS224n课程中关于深度学习在自然语言处理(NLP)领域的应用,重点探讨了Word2Vec和GloVe两种词嵌入模型的原理与实现方法。通过具体案例分析,深入阐述了这两种模型在提升NLP任务性能方面的优势与应用场景。 ... [详细]
author-avatar
awetyjdgtjkt_933
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有