物联网开发_物联网开发平台 - CSDN
精华内容
参与话题
  • (在课程中,资深开发专家和你聊物联网开发,分析物联网行业的前景,手把手教你如何从零开始做物联网场景,适合入式开发者、软件开发者、物联网行业从业者学习) 【物联网定义】: 物联网(英语:Internet of ...

    物联网是当今时代的热词,虽然大家众所周知,但还是有些人对物联网还是一知半解,本文主要讲述的是物联网。

    首先,小编推荐课程:大咖带你聊物联网

    (在课程中,资深开发专家和你聊物联网开发,分析物联网行业的前景,手把手教你如何从零开始做物联网场景,适合入式开发者、软件开发者、物联网行业从业者学习)

    【物联网定义】:

    物联网(英语:Internet of Things,缩写IoT)是互联网、传统电信网等信息承载体,让所有能行使独立功能的普通物体实现互联互通的网络。物联网一般为无线网,而由于每个人周围的设备可以达到一千至五千个,所以物联网可能要包含500兆至一千兆个物体。在物联网上,每个人都可以应用电子标签将真实的物体上网联结,在物联网上都可以查出它们的具体位置。通过物联网可以用中心计算机对机器、设备、人员进行集中管理、控制,也可以对家庭设备、汽车进行遥控,以及搜索位置、防止物品被盗等,类似自动化操控系统,同时透过收集这些小事的数据,最后可以聚集成大数据,包含重新设计道路以减少车祸、都市更新、灾害预测与犯罪防治、流行病控制等等社会的重大改变,实现物和物相联。

    物联网将现实世界数字化,应用范围十分广泛。物联网拉近分散的信息,统整物与物的数字信息,物联网的应用领域主要包括以下方面:运输和物流领域、工业制造、健康医疗领域范围、智能环境(家庭、办公、工厂)领域、个人和社会领域等,具有十分广阔的市场和应用前景。

    物联网是新一代信息技术的重要组成部分,IT行业又叫:泛互联,意指物物相连,万物万联。其英文名称是“The Internet of things”。由此,“物联网就是物物相连的互联网”。这有两层意思:第一,物联网的核心和基础仍然是互联网,是在互联网基础上的延伸和扩展的网络;第二,其用户端延伸和扩展到了任何物品与物品之间,进行信息交换和通信。因此,物联网的定义是通过射频识别(RFID)、红外感应器、全球定位系统、激光扫描器等信息传感设备,按约定的协议,把任何物品与互联网相连接,进行信息交换和通信,以实现对物品的智能化识别、定位、跟踪、监控和管理的一种网络。 

    物联网的核心和基础仍将是互联网。但互联网需要一系列技术升级才能满足物联网的需求,例如IPv6、Web_3.0。

    【物联网原理】:

    物联网是在计算机互联网的基础上,利用RFID、无线数据通信等技术,构造一个覆盖世界上万事万物的“Internet of Things”。在这个网络中,物品(商品)能够彼此进行“交流”,而无需人的干预。其实质是利用射频自动识别(RFID)技术,通过计算机互联网实现物品(商品)的自动识别和信息的互联与共享。而RFID,正是能够让物品“开口说话”的一种技术。在“物联网”的构想中,RFID标签中存储着规范而具有互用性的信息,通过无线数据通信网络把它们自动采集到中央信息系统,实现物品(商品)的识别,进而通过开放性的计算机网络实现信息交换和共享,实现对物品的“透明”管理。

    【物联网基础技术】:

    1. 互联网技术,物联网是互联网的延伸和扩展,因此互联网技术是物联网发展的核心技术,在互联网发展的过程中,主要包含以下几方面的技术:局域网技术、广域网技术、Internet技术、传输控制协议/网间协议(TCP/IP)及后期发展起来的云计算技术。

    2. 信息采集技术,物联网的发展需要信息采集、信息传递和信息处理这三个方面的完全融合,而信息采集是物联网发展的关键基础,物联网要获得发展,必须突破信息采集技术的瓶颈。

    3. 网络通信技术,剥去物联网的神秘外衣,其实物联网实质上就是在诸多行业和领域已有应用的无线传感网,无线传感网通过节点中内置的不同传感器检出被测环境中的温度、湿度、噪声、光强度、压力、土壤成分,移动物体的速度和方向等信息,并通过内置的数据处理及通信单元完成相关处理与通信任务。

    4. 物品编码技术,物品编码是物联网的基石,是物联网信息交换内容的核心和关键字,是物品、设备、地点、属性等的数字化名称。

    5. 数据库技术,在物联网时代,作为代表物品的标签数量是万亿数量级。如此大量的数据需要通过数据库管理。数据存储在当地数据库中,标签阅读器与当地数据库相连接。经过授权,数据库可以经由网络存取。

    更多关于loT课程:

    阿里云大学官网(阿里云大学 - 官方网站,云生态下的创新人才工场

    展开全文
  • 本代码是利用python进行物联网开发的python源码,供大家参考学习。
  • 物联网APP开发简介

    千次阅读 2019-06-24 14:54:45
    物联网 物联网(IoT Internet of Things,缩写IoT),核心的基础仍然是互联网,任何物品与物品之间的信息交换和通信,物联网通过射频识别(RFID),红外感应器,全球定位系统,激光扫描器等,把任何物体与互联网相...
    物联网

    物联网(IoT Internet of Things,缩写IoT),核心的基础仍然是互联网,任何物品与物品之间的信息交换和通信,物联网通过射频识别(RFID),红外感应器,全球定位系统,激光扫描器等,把任何物体与互联网相连接,进行信息交缓和通信,以实现物体的智能化识别,定位,跟踪和监控等。

    物联网关键技术
    • 物联网的产业链:标识,感知,信息传送和数据处理
    • 关键技术:RFID射频识别技术、二维条码、传感器技术、短剧通信技术、IPV6、云服务、云计算等
    • 核心技术:传感器技术、RFID射频识别技术、网络与通信技术、云计算技术和嵌入式系统技术
    核心技术 定义
    传感器技术 物联网系统工作的基础
    RFID(射频识别技术) 一种无线通信技术,可以通过无线电信号识别特定的目标并读写数据,广泛应用于自动识别、物品物流管理等场景
    网络通信技术 涉及近程和远程通信技术,近程通过包括蓝牙、RFID等
    云计算技术 它是分布式计算、并行计算、效用计算、网络存储、虚拟化、负载均衡、热备份冗余等技术融合的产物
    嵌入式系统 是融合了传感器技术、集成电路技术、计算机软硬件、电子应用技术为一体的复杂技术
    • 总结:传感器像是物联网的感官,网络是物联网的神经系统,嵌入式是物联网的大脑
    技术体系架构
    • 物联网的系统架构可以分为三个层次:
    层次 定义
    感知层 利用RFID、传感器、二维码等随时谁的获取物体的信息
    网络层 通过 各种电信网络与互联网的融合,将物体的信息实时准确的传递出去
    应用层 把感知层的得到的信息进行处理,实现智能化识别,定位,跟踪,监控和管理等实际应用
    应用领域
    • 智能家居,智慧医疗 ,智慧农业,智慧物流等
    物联网云平台

    1.在这里插入图片描述

    • 服务引擎:云后台的亮点部分:
      • 通信采用HTTP/MQTT
      • 数据库根据业务特点采用了关系型数据库和非关系性数据库,关系型数据库强调数据的结构化,适合交易型事务处理,非关系型数据库 采用了分布式存储技术,适合大规模并发,非结构化数据存储
      • 任务调度:开发者可以进行自定义,配置时间计划
      • 开放的API接口,其通过Swagger可视化,可供Web、App和硬件调用,后台接口十分的丰富,为传统硬件商家和物联网开发者提供统一的开发平台

    2.物联网云平台三大核心:云后台、智能硬件、移动APP

    云后台
    • 云后台处于物联网核心层次中的应用层,其位于物联网三层结构中的最顶层,功能是通过云后台进行信息处理
    • 云后台的核心功能围绕:
      • 数据:后台需要完成数据的存储、管理和处理
      • 应用:将数据和各行各业的应用相结合(通过魔种协议和设备进行互联,对设备产生的数据进行分析,采取措施)
      • 三大核心的关系:
        • 在这里插入图片描述
    云后台的技术实现
    • 云后台采用面向对象的Java语言开发,采用SSM框架;数据库采用MySQL和MongoDb;API采用Swagger可视化;接口统一使用token加密验证。
    智能硬件
    • 智能硬件属于物联网的感知层,其位于物联网的三层结构中的最底层,是信息采集的关键部分。感知层通过传感网络获取环境信息,包括二维码标签和识读器,RFID标签和的读写器、摄像头、GPS、传感器、M2M终端、传感器等,其主要功能是识别物体、采集信息。
    • MQTT(消息队列遥测传输协议)协议:是一种基于客户端-服务器的消息发布/订阅传输协议,构建与TCP/IP之上,最大的优点是轻量、简单、开放、易于实现。可以实现在极少的代码和有限的带宽的情况下,为连接 远程的设备提供实时可靠的服务,使其在物联网、小型设备、移动应用等方面有较为广泛的应用。
    移动APP
    • APP的特点是可通用,可定制化,用户体验行强,主要包括:设备模块,消息模块、场景模块、个人中心模块四大模块
    模块 作用
    设备模块 实现设备的统一管理、控制、历史数据可视化
    消息模块 实现设备的实时预警,查看历史消息
    场景模块 自定义场景包括智能家居,智能医疗 ,智能交通等
    个人中心 统一管理个人信息,提交反馈意见,利于平台版本优化
    展开全文
  • 物联网开发入门+项目实战,百度网盘地址,分享给大家谢谢
  • 9个顶级开发IoT项目的开源物联网平台

    万次阅读 多人点赞 2018-05-24 13:19:23
    我们收集了一些最有名的物联网平台,帮助您以受控方式开发物联网项目。物联网平台是帮助设置和管理互联网连接设备的组件套件。 一个人可以从一个系统远程收集数据,监控和管理所有连接互联网的设备。 物联网平台上...

    物联网(IoT)是帮助人工智能(AI)以更好的方式控制和理解事物的未来技术。 我们收集了一些最有名的物联网平台,帮助您以受控方式开发物联网项目。

    物联网平台是帮助设置和管理互联网连接设备的组件套件。 一个人可以从一个系统远程收集数据,监控和管理所有连接互联网的设备。 物联网平台上有很多可用的在线平台,但为公司构建物联网解决方案都依赖于物联网平台主机和支持质量。

    在这里,我们编译了一些最好的和着名的开源物联网(IoT)平台。 大多数这些平台都提供API来支持Linux开发板,如Raspberry Pi,Arduino和BeagleBone。


    Kaa IoT Platform 

    https://www.kaaproject.org/

    它是功能丰富的开放和高效的物联网云平台。 任何物联网公司,物联网系统集成商或个人都可以免费实现其智能产品概念。 通过提供服务器和端点SDK组件,Kaa可以为连接的对象和后端基础架构提供数据管理。
    Kaa关键物联网功能:

    • 管理无限数量的连接设备
    • 建立跨设备互操作性
    • 执行A/B服务测试 (随机将测试用户群分为2部分用户群1使用A方案,用户群2使用B方案,经过一定测试时间根据收集到的两方案样本观测数据,根据显著性检验结果选取最好方案。
    • 执行实时设备监控
    • 执行远程设备准备和配置
    • 收集并分析传感器数据
    • 分析用户行为可提供有针对性的通知
    • 为智能产品创建云服务


    SiteWhere: Open Platform for the Internet of Things

    http://www.sitewhere.org/


    Sitewhere的工作架构和整合的东西

    它是提供设备数据的摄取,存储,处理和集成的另一个开源IoT平台。 SiteWhere运行在Apache Tomcat提供的核心服务器上。 它提供高度调整的MongoDB和HBase实现。 它可以轻松与黑客板集成。
    SiteWhere关键的物联网功能:

    • 在单个SiteWhere实例上运行任意数量的IoT应用程序
    • Spring提供了核心配置框架
    • 用MQTT,AMQP,Stomp和其他协议连接设备
    • 通过自注册,REST服务或批量添加设备
    • 与第三方集成框架(如Mule AnyPoint)集成
    • 默认的数据库存储是MongoDB
    • Eclipse Californium进行CoAP消息传递
    • InfluxDB用于事件数据存储
    • Grafana可视化SiteWhere数据
    • HBase用于非关系数据存储


    ThingSpeak: An open IoT platform with MATLAB analytics

    https://thingspeak.com/


    ThingSpeak是物联网(IoT)平台,可让您在不从Mathworks购买许可证的情况下分析和可视化MATLAB中的数据。 IT允许您收集和存储传感器数据并开发物联网应用程序。 它适用于Arduino,Particle PhotonElectron,ESP8266 Wifi模块,BeagleBone Black,Raspberry Pi,移动和网络应用,Twitter,Twilio和MATLAB,以将传感器数据传到ThingSpeak。 ThingSpeak主要关注传感器记录,位置跟踪,触发和警报以及分析


    ThingSpeak开放源码物联网平台关键物联网特性

    • 在私人渠道收集数据
    • 与公共频道共享数据
    • RESTful和MQTT API
    • MATLAB分析和可视化
    • 警报
    • 事件调度
    • 应用程序集成
    • 全球社区

    DeviceHive: IoT Made Easy

    https://www.devicehive.com/



    DeviceHive是另一种功能丰富的开源IoT平台,它在Apache 2.0许可下分发。 DeviceHive可以自由使用和更改。它提供了Docker和Kubernetes部署选项。您可以下载并使用公共云和私有云,也可以将单个虚拟机扩展到企业级群集。它可以通过REST API,WebSockets或MQTT连接到任何设备或黑客板。你甚至可以连接ESP8266这样的低端Wi-Fi设备。

    DeviceHive开放源代码物联网平台的关键特性:

    • 直接与Alexa整合
    • 您选择的可视化仪表板
    • 通过运行自定义JavaScript代码来自定义DeviceHive行为。
    • 它支持大数据解决方案,如ElasticSearch,Apache Spark,Cassandra和Kafka,用于实时和批处理。
    • 通过REST API,WebSockets或MQTT连接任何设备。
    • 它带有Apache Spark和Spark Streaming支持。
    • 支持用各种编程语言编写的库,包括Android和iOS库
    • 它允许在设备数据之上运行批量分析和机器学习。


    Zetta: API-First Internet of Things Platform

    http://www.zettajs.org/

    Zetta API-First Internet of Things Platform combines REST APIs, WebSockets and reactive programming

    Zetta是一个基于Node.js构建的面向服务器的开源IoT平台。 Zetta结合了REST API,WebSockets和反应式编程。 它可以在单板计算机,个人电脑或云上运行,并且能够将诸如Linux,BeagleBones,Raspberry Pis,Arduino开发板和PC等不同平台与Heroku等云平台连接在一起,以创建地理分布式网络。 您还可以将数据传输到Splunk等机器分析平台。
    Zetta开源的物联网平台的关键特性:
    • 基于Node.js,REST,WebSockets和基于流的“响应式编程”构建。
    • 支持广泛的开发板
    • Zetta允许您组装智能手机应用程序,设备应用程序和云应用程序


    DSA: Open Source Platform & “Toolkit” for Internet Of Things Devices

    http://www.iot-dsa.org/

    DSA Open Source Platform & Toolkit for Internet Of Things Devices


    分布式服务体系结构(DSA)是一个开源的物联网平台,它将结构化和实时数据模型中的各个设备,服务和应用程序统一起来。它有利于分散设备的互通,逻辑和应用程序。 DSA社区构建了一个图书馆分布式服务链接,允许协议翻译和数据集成到第三方数据源和从第三方数据源进行数据集成所有DSA模块都很轻便,可以将DSBroker,多个DSLink和客户端Web应用程序连接到相同的低功率设备上,例如Raspberry PI,Beaglebone black或任何其他类似的计算平台。这个基于NodeAPI,DSLink和DSBroker的开源IoT平台。计划为第三方处理系统提供Analytics(分析)支持的DSA社区包括R Project,RDBMS,JDBC SQL passthrough和预准备语句,Haystack DSLink,Niagara DSLink,OS X DSLink,Windows DSLink和nix DSLink

    DSA开源IoT平台的关键特性:

    • 指定M2M授权生命周期
    • 公开WebSocket / HTTP端点以订阅来自代理的节点和值更改
    • 实施DSA查询DSL
    • 硬件集成支持:Dreamplug,Beaglebone,Raspberry PI,Android DSLink,OS X DSLink,Windows DSLink和nix DSLink
    • 该平台建立在三个
    • 轻量级模块


    Thingsboard.io Open-source IoT Platform

    https://thingsboard.io/

    Thingsboard是100%开源的IoT平台,可以作为SaaS或PaaS解决方案托管它。 IT为您的物联网项目提供设备管理,数据收集,处理和可视化。 它支持提供设备连接的标准协议是MQTT,CoAP和HTTP,并支持云和本地部署。 它提供了30多个可自定义的小部件,允许您为大多数物联网用例构建最终用户自定义仪表板。

    thingsboard.io开源的物联网平台主要特点:

    • 实时数据可视化和远程设备控制
    • 自定义仪表板的30个可定制小部件
    • 可定制的规则,插件,小部件和传输实现
    • 允许监视客户端和提供服务器端设备属性。
    • 支持多租户安装即装即用。
    • 支持MQTT和HTTP协议的传输加密。
    • 失败的节点可以在没有停机的情况下进行更换


    Thinger.io: The Opensource Platform for Internet of things

    https://thinger.io/


    Thinger.io是IoT的开源平台,可为连接设备或物品提供可扩展的云基础架构。 您可以使用管理控制台轻松控制它们,或使用其REST API将它们集成到项目逻辑中。 IT支持所有类型的黑客板,如Arduino,ESP8266,Raspberry Pi,Intel Edison。


    Thinger.io开源的物联网平台主要特点:

    • 实时仪表板
    • Docker和IFTT集成
    • 云准备好了
    • 将服务器安装在您自己的云中,并使用开放源代码库连接您的设备。

    WSo2- Open source platform for Internet of Things and mobile projects

    https://wso2.com/iot

    WSO2 IOT flexibility of open source to your Internet of Things and mobile projects

    WSo2 Build允许公开API来为移动应用提供支持,允许用户监控和控制他们的设备。 您可以将其与现有的身份系统集成,或使用他们的身份系统。 该物联网平台还支持几乎所有已知的开发板设备,如Raspberry Pi,Arduino Uno等。边缘计算由WSO2 Siddhi提供支持。

    设备通信支持的协议包括MQTT,HTTP,Websockets和XMPP协议以及用于添加更多协议和数据格式的IoT Server Framework扩展。

    WSo2开源的物联网平台主要特点:

    • 通过WSO2数据分析服务器(DAS),它支持批量,交互式,实时和预测性分析。
    • 基于位置的服务(地理围栏)和警报作为可重用的功能
    • MQTT,HTTP,Websockets和XMPP协议
    • 为多个注册设备配置/取消配置应用程序
    • 为iOS,Android和Windows设备实施自助设备注册和管理
    • 分配和管理设备的应用程序/固件
    • 分组,管理和监视连接的设备
    • API驱动的设备类型定义
    • 查看单个或多个设备的即时可视化统计信息
    • Stats-API编写您自己的可视化文件
    • 预制的普通传感器图


    开源的物联网平台比较表

    IoT 软件平台 设备管理? 集成 安全 数据收集协议 分析 支持可视化? 数据库
    Kaa IoT Platform Yes Portable SDK available to integate any particular platfrom, REST API Link Encryption (SSL), RSA key 2048 bits,  AES key 256 bits MQTT, CoAP, XMPP, TCP, HTTP 通过Kaa,Apache Cassandra和Apache Zappelin进行实时物联网数据分析和可视化 Yes MongoDB, Cassandra, Hadoop, Oracle NoSQL
    SiteWhere Yes REST API, Mule AnyPoint, and more Link Encryption (SSL), Spring Security MQTT, AMQP, Stomp, WebSockets, and direct socket connections Real-time analytics (Apache Spark) No MongoDB, HBase , InfluxDB
    ThingSpeak No REST and MQTT APIs Basic Authentication HTTP MATLAB Analytics No MySQL
    DeviceHive *Unknown  REST AP, MQTT APIs Basic Authentication using JSON Web Tokens (JWT) REST API, WebSockets or MQTT Real-time analytics (Apache Spark) Yes PostgreSQL ,SAP Hana DB
    Zetta No REST APIs Basic Authentication HTTP Using Splunk No Unknown
    Distributed Services Architecture (DSA) NO REST APIs Basic Authentication HTTP No No ETSDB – Embedded Time Series
    Thingsboard.io Yes REST APIs Basic Authentication MQTT, CoAP and HTTP Real time analytics(Apache Spark, Kafka) No Cassandra
    Thinger.io Yes REST APIs Link Encryption (SSL/TLS) and basic authentication MQTT, CoAP and HTTP Yes No MongodB
    WSo2 Yes REST APIs Link Encryption (SSL) and basic authentication HTTP, WSO2 ESB, MQTT Yes, WSO2 Data Analytics Server Yes Oracle, PostgreSQL, MySQL, or MS SQL


    展开全文
  • 物联网开发技术栈

    万次阅读 多人点赞 2019-07-05 10:04:31
    作为互联网技术的进化,物联网开发并非孤立的技术栈,而是向上承接了互联网,向下统领了嵌入式硬件开发的一个承上启下的全栈开发技术。 虽然我们并不能预测物联网技术栈最终的样子:统一的开发语言是 JavaScript ...

    内容简介

    作为互联网技术的进化,物联网开发并非孤立的技术栈,而是向上承接了互联网,向下统领了嵌入式硬件开发的一个承上启下的全栈开发技术。

    虽然我们并不能预测物联网技术栈最终的样子:统一的开发语言是 JavaScript 还是 Python 亦或者其他编程语言;HTTP、WebSockets、MQTT、CoAP 等协议谁会是最后的赢家,并且随着物联网的不断进化,甚至我们可能都无法预测其最终形态,也许根本就没有一个最终的形态。但是,我们仍然可以看清物联网发展的轨迹与必然趋势——开发技术栈必然向全栈化方向发展。

    互联网的核心是数据的流动,数据的流动为我们带来了难以想象的价值,而物联网又将这一核心推到了更高的高度,打破了互联网原有的边界让千千万万节点设备中的数据流动了起来。全栈化的开发正是顺应了这种趋势,打破了在开发层面中那些阻碍数据流动的技术壁垒,将芯片、嵌入式、网络、大数据、人工智能、信息安全等诸多领域纳入到物联网的全栈开发中来,实现端到端的完整解决方案,真正实现数据的流动并让数据为人类服务,让我们以更高效更智慧的方式来发掘数据的价值,实现数据的价值。

    本书内容

    物联网技术现状与新可能

    文/罗未

    不管是从商业模式导出的业务模型,还是从技术发展的角度看,文本都倾向于将物联网技术构架看作是互联网技术构架的延展。而与这个观念对立的,是传统嵌入式软件开发的视角。

    在互联网技术基础上长出来的物联网构架

    简单来说,目前的互联网技术构架主流是大前端与后端两个世界:大前端包括 Web 的 JavaScript 技术、Android 和 iOS 技术,着眼于解决用户交互;后端包括数据库、服务构架、运维等,着眼于解决存储、业务逻辑、安全与效率等。当然,现在前后端技术争相更新,比如业务逻辑前置化、微服务构架、JavaScript 全栈化等新的解决方案也开始模糊前后端的差异。而物联网设备端的引入,着实让这些技术有点难以归类,从业务性质上物联网是另外一种前端或是前端的延伸,比如共享单车应用中,自行车端的应用显然是跟人交互的另一个业务场景,也在为后端源源不断地提供着数据,但是自行车又不像网页或者 App 完全是在解决可视化 UI 的事情。而且,现在的设备端开发技术跟前端技术太不像了,由于目前设备端的开发技术都还偏底层,一般来说计算资源如处理能力、本地存储都非常有限,反而像后端一样要考虑资源效率。

    那么,我们只好为物联网单独命名一个端,不如我们暂时就叫它设备端。

    图1  整体架构图

    图1 整体架构图

    新后端

    MQTT

    新后端核心问题在于加入了面向设备的接入服务,实际上在这里,除类似视频对讲或是安防监控的多媒体实时通道外,这个接入服务已经基本事实化为 MQTT。

    消息队列遥感传输协议是在TCP/IP协议之上使用的,基于发布/订阅的“轻量级”消息协议,目前为 ISO 标准(ISO/IEC PRF 20922)。它被设计用于轻量级和低带宽的远程连接,发布/订阅消息传递模式需要消息代理,消息代理负责根据消息的主题向需要的端发布消息。

    如果需要连接的设备没有超过10万台,使用 8GB 内存的云主机跑 Mosquitto 就可以;如果设备量是几十万台,可以考虑 Mosquitto 做集群负载均衡;如果设备量是大几十万台乃至百万台以上,那你需要专业的团队或专门的投入来维护这件事情,这个细节就不在本文讨论范围了。

    OTA

    固件组件在线升级是必须要做的事情,MQTT传 大文件不靠谱,所以一般传过去一个带 Token 的 URL,设备端去下载就好,HTTP 或者 HTTPS 都可以。业务比较简单,设备端几十万以内没有什么特别的地方。

    数据存储与服务

    Mosquitto 作为 MQTT 的引擎,需要后端按照业务逻辑去调用,这里按照业务需求写好后端逻辑即可。在各种后端语言中调用 Mosquitto 都非常简单。

    设备端

    设备端是物联网领域最五花八门并且正在发展中的地方。其他领域,后端或者前端,经过十几年的发展,已经出现每个细节的主流技术,基本没有碎片化的情况,但是在设备端,开发技术的碎片化是应用发展还不到位的充分表现。举例讲,选用不同的芯片,就要用不同的操作系统,不同的 C 库封装,各家 IDE 也不尽相同,编译工具链更是从芯片原厂给出。开发起来呢,寄存器、内存分配、硬件中断都要深入进去。这就是传统嵌入式开发的现状,也是物联网设备端开发的现状。

    到目前为止,真正生产环境中用到的语言就是 C/C++,极个别会在设备端用到 Python,基本没有其他语言。操作系统超过50种,主流的也有10种以上,其中嵌入式 Linux 份额并不大,各种实时操作系统各具特色,各有一片天地。

    简单总结一下相对于物联网开发,传统嵌入式开发的方式主要有以下几个问题:

    1. 需要考虑中断、寄存器、内存分配等过于底层的工作;
    2. 编译、烧写、观察、借助调试设备进行调试的开发生命周期;
    3. 不同 SoC 和系统的差异过大;
    4. 缺乏代码复用与开源的习惯;
    5. 开发者在开发环境和固件编译上花费的时间过多。

    所以我们看到设备端的开发是基于芯片选型完成的。当设备端产品面临一个需求时,现有的流程是判断产品的各项技术参数,从而确定一个芯片,进而使用这个芯片的一整套开发技术。这也是早期嵌入式场景使用的芯片自生技术特性所决定:计算资源(CPU 主频、存储)、外围接口、使用温度、通讯协议等核心参数的不同导致芯片碎片化,芯片碎片化导致嵌入式开发碎片化。

    目前这个领域的大趋势是:物联网芯片有望走向趋同,物联网开发环境与技术有望趋同。

    物联网芯片

    早期由于成本所限,物联网领域使用的芯片总是表现得非常缺资源,很难找到一个各方面(计算资源、外围接口、使用温度、通讯协议等)都比较合适的芯片去适应普遍的场景。随着半导体门槛逐步降低,中国半导体制造业逐步成型,芯片资源开始走向富余,其中的代表芯片是 MTK 的 MT7697、MT7688 和乐鑫的 ESP32。

    MT7697 主要参数为:ARM Cortex M4 CPU,带浮点单元,最大主频 192Mhz,内存为 256KB SRAM,可配置 4MB 以上的存储空间,芯片内嵌 WiFi 和 BLE 4.2,有足够的外围接口,并能够适应工业级的使用温度。

    MT7688 主要参数为:MIPS 580Mhz CPU,内存最大支持 256MB,可配置 16GB 级别的存储空间,芯片内嵌 WiFi,接口除模拟接口之外数字接口丰富,价格在几十元人民币,功耗较高不适于电池长期使用。但是非常有优势的是其提供的 Linux 开发环境,能够让开发者有一种在普通 x86 机器上使用 linux CLI 的体验,Node.js、MySQL、OpenCV、Nginx 等等在阿里云上怎么用,在这个几十块的物联网小模块上也怎么用。稳定性超强,几年不死机也是正常的。

    ESP32 的主要参数为:Tensilica LX6 CP,主频 240 MHz,内存为 520KB SRAM,可配置 4MB 以上的存储空间,芯片内嵌 WiFi 和蓝牙以及 BLE,有足够的外围接口,并能够适应工业级的使用温度。

    这几颗芯片共同的特征是计算资源和通讯能力以及接口资源相对于传统 MCU 来说有足够的富余,并保持在同样的价位。因此,在这类芯片上,有足够的资源做抽象化的封装和开发框架实施。我们看到除了这几颗芯片原厂提供的传统嵌入式开发包之外,社区和其他厂商已经在这几颗芯片上加快了新开发技术的实现。

    开发技术

    物联网设备端开发技术目前有两个比较大的发展方向,一是统一化的物联网操作系统,二是统一化的物联网开发框架。他们共同的目的是形成“软件定义物联网”,与传统从芯片选型开始的,着陆于原厂 SDK 中完成应用开发,与需求和产品设计汇合的流程完全相反,希望从需求和产品设计入手,通过公开统一的软件构架完成开发,再根据开发使用到的资源去落地芯片和外围设备。这样做的好处主要在于提高开发效率和形成可以复用的应用代码。

    操作系统

    虽然市场上存在的设备端操作系统有数十种之多,但是我们看到活跃的,明显向“软件定义物联网”方向发展的有三家:

    • Zephyr

    Zephyr 是 Linux 基金会于2016年2月发布的物联网操作系统,背后主要的支持力量来自于 ARM 和 Linaro,具有目前嵌入式小型实时操作系统的普遍特征,比如:轻量到 KB 级的最小系统内存占用,支持多种芯片构架:从 ARM Cortex-M、Intel x86、ARC(DSP 内核)、NIOS II(FPGA 软核)到开源的 RISC V 等,跟 Linux 一样的模块化内核组织方式,如图2所示。

    Zephyr 目前已经升级到 V1.7 版本,逐步向一个可以用到生产环境的系统靠拢了。Zephyr 最大的特色并不在于其完备性而在于其开发理念完全来自于“软件定义物联网”,并且有很好的资源支持,在未来应该会有自己的位置。

    图2  Zephyr物联网操作系统

    图2 Zephyr 物联网操作系统

    • RTthreadRTthread 是纯国产的小型操作系统,植根于中国的各种使用场景,10年来已经确立了自己的地位,在很多行业有自己的一席之地,目前社区非常活跃,核心团队以创业公司的形式推进,非常专注。技术上的特征作为一个成熟的系统,没有什么可以吐槽的地方。Zephyr 有的技术优势 RTT 都有,而且 RTT 在生产环境的装机量较为可观。

    • 华为 LiteOS

    华为是全球范围内物联网技术的根源厂商之一,LiteOS 是一个华为内部很多产品都在用的系统,目前也以开源的形式在全力推广。LiteOS 最大的优势在于华为很多根源技术将利用 LiteOS 进行输出,目前最大的例子就是即将全面商用的 NB-IoT 技术,设备端的开发包将会用 LiteOS 输出。

    以上几个系统一致的特点包括小型化、芯片适应范围广、通信协议适配比较广泛等,他们也都是开源的系统,研发或推动力量比较活跃。有可能在物联网领域里的类似 Linux 地位的主流操作系统会是其中某个,也或许会一直都存在下去但是在技术上越来越趋同。

    开发框架

    首先解释一下开发框架,开发框架可以小到是一个细节的工具,也可以大到规定开发的全部边界。最典型的例子是 Android,纯粹操作系统意义上,Android 是 Linux 的一个分支,但是从 App 开发角度,除 NDK 之外,没有任何与 Linux 打交道的地方,所以也把 Android 叫做操作系统。再广泛地看,Android 除了面向手机应用的开发框架,还准备了 Google play 这样的应用分发渠道,这是开发者生态建设。同理,我们看 Node.js 在后端的种种开发模式,也是将所有后端资源都封装到 JavaScript 里,开发时可以随时 npm install 各种包来 require,解决了代码复用问题。

    因此我的观点是,开发框架以及背后的代码复用和开发者生态才是真正的操作系统。

    目前在物联网领域,正在尝试向生产环境演进的开发框架基本都基于 JavaScript,而在小型实时操作系统上使用的 JavaScript runtime 目前也基本集中到了 JerryScript 上。JerryScript 是三星开发和开源的一个小资源占用的引擎,内存需要 64KB,存储需要 200KB 即可,能够实现完整的事件驱动,符合 ECMAScript 5.1。

    如同前文所说,开发框架或是操作系统在当下需要包括以代码复用为目的的开发者生态,甚至需要包括应用分发,所以我们看到在 JerryScript 的基础上,有两家做这类工作的团队值得关注:

    • WRTnodeWRTnode 是一个北京的开源硬件团队,提供从开发到硬件交付的全流程服务。他们最近开放的 node.system 和 noyun.io 即是着眼于实现物联网 JavaScript 的开发框架和开发者生态。在 WRTnode 的实现里,设备端的 JavaScript 开发已经变得像 cloud9.io 一样全案在线开发,为开发者屏蔽了嵌入式开发的繁琐编译烧写工作。

    • RuffRuff 是位于上海的创业公司,2015年开始一直在演进基于物联网设备端 JavaScript 的开发者生态,提供了较为可行的代码复用框架。目前他们已经开始服务商业客户,为物联网应用的快速实现提供了可能。

    同时,Zephyr 和华为 LiteOS 也都有各自的 JavaScript runtime 发布计划。

    以上我们看到了设备端开发的一些新的发展,目前这些新的设备端开发技术,已经逐步面向交付转移了。有理由相信经过一段时间的发展,面向效率的商业模式驱动下的物联网开发技术将迎来一大波更新,从而导向物联网应用的真正大发展。

    基于 JavaScript 语言的快速物联网开发架构

    文/黄峰达

    随 JavaScript 语言的流行,及物联网领域的崛起,我们能看到它们结合的可能性,同时也发现它特别适合于物联网开发。因此,在这篇文章里,笔者将主要从以下三个方面进行介绍:

    1. 典型的物联网架构,及多种语言带来的问题;
    2. 只使用 JavaScript 语言的物联网架构;
    3. 详解基于 JavaScript 语言的物联网不同层级结构。

    那么,先让我们看看典型的物联网架构是怎样的吧。

    典型的物联网架构

    我们甚至还可以认为,物联网只是对互联网的扩展。与传统的 C/S 架构相比,它多了一个“数据采集层”,我们称之为传感器层、硬件层等。数据的产出不再只是用户,还来自于各式各样的联网设备。物联网不再局限于使用 HTTP 协议来传输数据,它还会使用 CoAP(受限制的应用协议)、MQTT(消息队列遥测传输)协议。

    物联网的四个层级

    当前的物联网应用,所要做的就是控制和数据处理。指令,由用户到终端一层一层往下下达,直到硬件端由设备去执行。而数据,便是一层一层往上上报,直至被可视化。

    因此,与互联网的架构相比(如图1、图2所示),起点与终点不一样了:指令的终点与数据的起点,变成了硬件层,而非最后的用户层。

    图1  互联网架构

    图1 互联网架构

    图2  典型的物联网架构

    图2 典型的物联网架构

    数据由客户端 A 发送到服务端,客户端 B 再从服务端获取 A 的数据,如此便算是完成了一个回路。而物联网架构则稍微麻烦了一些,多了一个层级,便多了一个步骤。

    硬件层上的微控制器通过直连的方式,采集各式各样的数据,比如温度、湿度等。而受限于微控制器的成本、环境条件等因素,它可能无法直接连接到互联网。因此,需要连接到一些额外的联网设备才能实现。

    而这些联网设备,会负责处理来自各个硬件设备的数据,并将其上传至服务器。同时,它会提供一个无线(如蓝牙、红外、ZigBee)接口作为数据的入口。因此,这一层级需要有更好的数据处理能力,并且它应该要可以快速开发。因为这些设备主要做的是协调工作,我们习惯于将其称为“协调层”。

    使用多种语言的物联网

    多年以前,笔者曾做过一个并不复杂的物联网系统:

    1. 使用 Python 里的 Django 作为 Web 服务框架,Django REST Framework 创建 RESTful API;
    2. 为了使用手机作为控制器,还用 Java 写一个 Android 应用;
    3. 使用 Raspberry Pi 作为硬件端的协调层,用于连接网络,并传输控制信号给硬件;
    4. 在硬件端使用 Arduino 作为控制器,写起代码特别简单;
    5. 还使用了 ZigBee 模块 XBee 及 I2C 作为连接不同 Arduino 模块的介质;
    6. 最后,还需在网页上做一个图表来显示实时数据。

    为此,我们需要使用 Python、Java、JavaScript、C、Arduino 五种语言。而如果我们要写相应的 iOS 应用,还要用到 Objective-C。对于其他物联网项目来说,也多是如此,这简直是一场灾难。

    在做这样的物联网项目之前,我们需要找到六个不同类型的工程师:一个硬件工程师设计电路图,一个懂硬件的嵌入式工程师,一个写服务端应用的工程师,一个写 Web 前端的工程师,以及对应的 Android 和 iOS 工程师。

    且不考虑系统本身的协作,要找到这么多的工程师就不是一件容易的事。而如果我们可以只使用一种语言,将大大地改善开发效率、开发人员的难题。

    JavaScript 语言下的物联网架构

    JavaScript 语言在最近几年里特别流行,它流行起来有很多个原因,如:

    1. 使用 WebView 开发 UI 效率更高,也因此使得WebView 随处可见;
    2. 基于事件驱动的编程模型;
    3. JavaScript 容易上手(这是优点,也是缺点);
    4. 也因此,React、Unity 等框架提供了更多的可能性,可以让开发者用 JavaScript 开发游戏、VR 应用等等。

    那么,只使用 JavaScript,我们可以设计出怎样的物联网系统呢?

    基于纯 JavaScript 的物联网架构

    如上所述,几年前要想寻找一门能完成一个包含客户端、服务端的系统的语言可谓相当地困难。而随着客户端(浏览器、移动设备)性能的提升、Node.js 的出现,这样的语言就浮现了出来,即 JavaScript。它不仅可以让我们只用一门语言来降低开发成本,还能实现快速地开发出这样的一个系统。那么,剩下的问题就是,在不同的层级,如何选用合适的框架来实现快速开发。

    如图3所示,我们可以看到不同层级的可选用 JavaScript 方案。在此之中,有些纯粹只是为了证明 JavaScript 是可行的;有一些则可以在开发效率与运行速率上达到最好的平衡。选用这些方案,可以让我们实现更快速的 JavaScript 物联网应用开发。

    图3  基于纯JavaScript的物联网参考架构

    图3 基于纯 JavaScript 的物联网参考架构

    服务层

    对于服务层来说,自主开发的物联网服务端,主要采用的是基于 Node.js 的方案。然而,我们发现有越来越多的应用,在使用 Serverless 的架构,不仅可以快速推出一个可用的原型,未来也能够轻松地基于这个原型来添加业务功能。

    图4  物联网服务层

    图4 物联网服务层

    图4便是我们看到的物联网服务层的三种方案:

    1. 自主开发:即遵循传统的服务端开发模式,定义自己所需要的功能;
    2. 使用云服务:直接使用成熟的物联网云服务,它们在云端集成了各种所需要的功能;
    3. Serverless:Server 可以看作是在云服务之上的自主开发,集两者之便利。每一种方案都有各自的特点,也适合于不同开发能力的项目。但如果要实现快速的开发,那么理想的方式便是采用 Serverless 架构模式。

    自主开发

    出于不同的原因,诸如保密、安全、可扩展、核心技术等原因,一定规模的公司会采用自主开发的方式。这种开发方式与 Web 应用开发方式并没有太大区别,都是在数据进行 CRUD 操作。并且和前后端分离架构一样,使用 API 作为接口,同时再加上支持不同的传输协议,如 MQTT、CoAP 等。

    图5  Lan物联网架构

    图5 Lan 物联网架构

    如笔者之前在 GitHub 上开源的 Lan(https://github.com/phodal/lan),便是一个精简的物联网服务端示例。基于 Node.js 与 MongoDB,其架构如图5所示。

    1. 采用传统的关系型数据库来存储用户信息;
    2. 采用 NoSQL 可以应对不同的传感器数据;
    3. 提供 UI 界面供管理人员管理用户;
    4. 在协议上提供 HTTP、CoAP、MQTT、WebSocket 等的支持,方便不同的类型适配。

    除此,物联网系统在存储上,采用 NoSQL 作为存储介质会有更大的优势。一般来说,物联网系统的数据都是写入远远多于读取的场景。与此同时,由于设备的种类繁多,不可能为每一类设备创建表;或者考虑到大量设备的特性,来建立一个通用的表,但在未来这样的表可能仍不适用。

    因此,对于物联网数据来说,选用诸如 MongoDB 这一类的 NoSQL 数据库,有这么一些优点:

    1. 灵活性。采用非结构化的数据模型,可以存储和处理任何结构的数据;
    2. 支持水平扩展。NoSQL 数据库的分布式存储架构,带来了优秀的水平扩展性;
    3. 实时数据分析。如 MongoDB 可以通过丰富的索引和查询支持,包括二次、地理空间和文本搜索索引,聚合框架和本地 MapReduce,可以针对传感器数据就地运行报告分析。

    然而,这样的系统不免存在研发周期长的问题。如果需要快速验证,那么应该考虑使用云服务来完成部分功能。

    物联网云服务

    对于硬件团队来说,直接使用云服务是一种更简单、快速的搭建物联网系统的方法。而使用物联网云服务,就意味着:我们可以直接上硬件层的传感器数据,并在应用层获取、分析这些数据。这一类的服务,比较成熟的有 AWS IoT Things(如图6所示)、Azure IoT 等。

    图6  AWS IoT Things参考架构

    图6 AWS IoT Things 参考架构

    基于 AWS IoT Things,我们只需要在云端,定义好对应的数据处理规则,便可以在硬件端直接对接服务。不过值得注意的是,单一的云服务无法提供复杂的功能,这个时候就需要一些搭配额外的服务。

    Serverless

    Serverless 架构(如图7所示)是云服务的一种,但是它在可编程与云服务之间做了一个折中。它是一种基于互联网的技术架构理念,应用逻辑并非全部在服务端实现,而是采用 FaaS(Function as a Service)架构,通过功能组合来实现应用程序逻辑。

    图7  Serverless 物联网参考架构

    图7 Serverless 物联网参考架构

    从理论上来讲,这些服务提供的是一层 API 封装,它不会限制我们所使用的语言。使用 Serverless 服务,我们可以具备更好的快速开发能力,并且能使用同一种语言(JavaScript)来完成编程。

    在这个过程中,开发者要所做的便是:在不同的服务之间传输数据,每一次都只处理下一个服务所需要的数据,类似于 Pipe and Filters 架构模式。如一个典型的物联网应用的数据传输过程中是这样的:

    1. 对设备进行鉴权;
    2. 转换、存储设备的数据;
    3. 广播通知其他监听此设备数据的服务;
    4. 后台查询数据;
    5. 分析数据(AI);
    6. 可视化数据。

    只需要少量的编程,我们就可以完成服务端的开发。随后,专注于硬件层的开发,以及应用层的业务功能。

    应用层

    在应用层方面,已经有大量的地方使用到了 JavaScript。除了传统的桌面浏览器,还有更多的领域也可以用 JavaScript 来开发。比如移动应用,已经有基于 Cordova + WebView 的成熟方案,还有近两三年流行起来的 React Native,都可以让开发者使用 JavaScript 完成物联网移动应用的开发。又如微信小程序,可以直接用蓝牙来连接硬件设备,也是使用 JavaScript 来编程。

    因此,就目前的 Web 趋势来看,在应用层,JavaScript 将是快速开始的主流选择。

    在日常中的应用中,我们可以发现物联网的应用层,经常作为协调装置来连接硬件,并上传应用的数据。诸如共享单车、智能手环应用等,它们既通过蓝牙来获取数据,又上传数据到服务端。与此同时,有相当多的应用是运行在桌面客户端上的。故而在这一层级的应用,可谓是种类繁多。

    今天,开发人员在做移动端的技术选型时,都会优先考虑到跨平台能力(Android、iOS)。而在这些跨平台框架里,混合应用框架 Cordova(WebView)和 React Native 是使用最为广泛的两个框架,且它们都是使用 JavaScript 作为核心开发语言。

    Cordova 是使用 WebView 来渲染页面的。因此与 Reavt Native 相比,使用 Cordova 的最大优势是,可以复用已有的 Web 前端应用的逻辑,并且有大量的图表工具可以直接使用——这一点在物联网应用中特别重要。而在混合应用框架中,Ionic 是这个领域使用最多的 UI 框架。

    React Native 使用原生组件来渲染 UI 组件,不仅可以解决 Cordova 饱受诟病的性能问题;同时,它还能嵌入 WebView,解决一些复杂的图表显示问题。

    但是如果只能蓝牙的交互,可以考虑 PWA 或微信小程序。运行在 Chrome 浏览器上的 PWA 应用,可以直接使用 Web Devices API,如Bluetooth、NFC、USB,即在浏览器上直接调用原生接口,并实现对设备的控制。而诸如最近一年内流行的微信小程序,则也可以访问蓝牙、GPS、罗盘、加速度计等硬件接口,同时用户不存在安装成本,打开即用。

    另外,诸如 Electron、NW.js 这样的框架,可以让开发者直接使用 WebView + Node.js 模块开发物联网桌面应用。它可以加速 UI 界面的开发,并轻松地美化 UI 界面。

    硬件层

    在硬件层上,就当前而言,Arduino 是最合适的原型开发硬件,除此还有自带 Wi-Fi 的 ESP8266 开发板。尽管使用 JavaScript 的开发板数量较少,也没有 Arduino 这样的成熟生态,但是未来可期。在嵌入式领域,使用 JavaScript 编写的代码,具有移植性强、事件驱动、天生支持异步等特点。

    令人遗憾的是,为了保持上面提到的那些 JavaScript 特性,当前的 JavaScript 开发板都需要处理性能比较高的处理器,这也导致了此类开发板在生产上存在较高的成本。不过,好在多数使用 JavaScript 作为开发语言的设备,都具有网络功能连接到互联网,直接作为物联网设备使用。

    就目前而言,这一类的设备有 Tessel、Espruino、Ruff 等等,它们的处理器性能都相当不错,价格也相对较高一些。但是,它们可以直接使用 JavaScript,能为软件开发工程师屏蔽底层相关细节,及事件驱动、异步特性,带来更好的开发体验。

    幸运的是,Samsung 公司推出的开源物网框架 IoT.js,只需要 64KB RAM、200 KB ROM。在未来,或许它能解决一些制造成本上的问题。

    协调层

    当我们的硬件层不能直接联网时,协调层就可以完成这样的功能。作为一个协调层的设备,它应该能与一定数量的微控制器连接,接收它们的数据,并上传到服务端;又能与服务端通讯,获取一些控制指令,并将这些指令准时地发送给不同的控制器。所以,它需要有更好的处理能力、更多的 RAM、ROM 等等。因此,在这一层级使用 JavaScript 便不存在成本问题。我们只需要使用和服务端、应用层相似的知识,就可以快速地连接设备到网络中心。还能直接在本地的 Linux 机器上编写代码,并无缝地运行在设备上。

    图8  物联网协调层

    图8 物联网协调层

    这一类应用,依赖于 Node.js 引擎来实现快速开发。它可以运行在带有嵌入式系统的开发板上,如流行的 Raspberry Pi、OpenWRT 路由器等。

    我们只需要一个运行嵌入式 Linux 系统的开发板,就可以完成这样的工作。与此同时,主流的 ARM 开发板都提供相应的 Linux 移植,因此在这个层级,我们也只需要关注于业务的实现。

    小结

    如上所述,物联网应用的架构与 Web 应用的架构区别并不是太大,只是在这上面做一系列的演进。除了上面提到的一系列快速实践框架,当前在 Web 开发中流行的一些开发思想,势必也会引导到物联网系统中:

    1. 微服务化;
    2. DevOps;
    3. 容器化。

    物联网会吸引互联网的优秀开发思想,并演进出更优秀的架构。

    使用 JavaScript 和 MQTT 开发物联网应用

    文/刘彦玮

    如果说 Java 和 C# 哪个是最好的开发语言,无疑会挑起程序员之间的相互怒怼,那如果说 JavaScript 是动态性最好的语言,相信大家都不会有太大的争议。随着越来越多的硬件平台和开发板开始支持J avaScript,JavaScript 在硬件端以及物联网领域有了新的机会。

    IoT 应用开发的数据链路

    图1是一个智能家居物联平台的数据链路。

    图1  智能家居物联平台的数据链路

    图1 智能家居物联平台的数据链路

    一般来说,可以把 IoT 应用分为如图所示的四层。

    1. client 层:指的是 IoT 设备,可以是冰箱、空调,也可以是一些温湿度传感器。
    2. gateway 层:大多数场景中 gateway 是家里的 WiFi 路由器,也有小部分是基于 Zigbee 或蓝牙的网关设备。智能生活场景中的 gateway 数量相对于工业领域要少很多,在工业领域存在大量的边缘计算放在 gateway 层进行处理(雾计算)。
    3. cloud 云层:这里是集中处理业务的地方。
    4. 应用层:这一层是直接与用户打交道的地方,可以是通过电脑的 Web 浏览器、手机 App,也可以是有屏幕的智能设备的显示器。随着语音技术的发展,无屏设备也可以通过语音交互,作为一个应用存在于物联网的交互层。

    物联设备(下文统称为 client),可以是单个设备或多个设备组成的应用场景。比如冰箱把运行的功耗数据、库存数据、温度数据采集,通过 gateway 发送到 cloud 层,cloud 层收集数据后进行异常判断,做智能模式推荐等业务处理后到 application 层进行展现和交互。用户可以通过冰箱的设备数据进行模式选择,还可以做一些与设备无关的增值服务,比如听音乐、买菜等,这就是一个智能冰箱的数据链路。还有些 client 是成组智能场景的,比如温湿度传感器将数据上传到 cloud,经过处理和加工,动态控制家中空调的温度,调节空气净化器的运行模式等。这么描述好像没有体现出 cloud 层的作用,那如果运行模式是用户预先配置好的呢?如“当温度超过25度,请帮我打开空调”,这些业务都可以通过 cloud 层进行处理。

    client 层的连接方式有 WiFi、Bluetooth、Zigbee,而 MQTT 是为了让物联网设备更加互联互通而出现的应用层数据协议。

    MQTT+JavaScript

    MQTT 是一个长连接的通讯应用层协议,最大的特点是数据精简、消息可靠、Publish-Subscribe 模式灵活易用。MQTT 已经成为 IoT 传输的标准协议,应用非常广泛。

    图2中 Client 指的是物联网设备。Client 通过对 Topic 的订阅和发布数据管理应用中的数据流动,而 Broker 是 MQTT 应用中用于管理 Topic 的角色。Server 是物联网应用中的服务端,用于处理业务逻辑。

    MQTT 被广泛使用的一个重要的原因是 MQTT 的生态非常完善,同时也支持 JavaScript。因此图2所示的所有链路和模块,都可以通过 JavaScript 实现。

    图2  MQTT的数据链路图

    图2 MQTT 的数据链路图

    JavaScript 在 MQTT 架构中常用的框架

    mosca(https://github.com/mcollina/mosca

    mosca 是一个用 JavaScript 实现的 MQTT Broker。不仅如此,mosca 还增加了对数据库,如 Redis、MongoDB 的支持,用来实现消息数据的存储。MQTT.js(https://github.com/mqttjs/MQTT.js)MQTT.js 是官网推荐的 JavaScript 实现的 Client 端。

    KOA 和 Express

    这两者都是非常主流的 Node 版本的 Server,简单易用。

    图3  JavaScript在MQTT架构中常用的框架

    图3 JavaScript 在 MQTT 架构中常用的框架

    实战物联网应用

    这节我们运用之前介绍的框架,自己动手完成一个简单的物联网应用。应用场景如图4所示,温度传感器用于接收温度,并把文档通过 MQTT 发送到 Server 端,在 Server 端进行业务处理,根据温度计算出穿衣提示,通过 MQTT 把数据发送到特定的 Topic,App 订阅 Topic 获取数据后进行展现。

    图4  “穿衣提示”业务场景框架

    图4 “穿衣提示”业务场景框架

    Broker 端的实现

    Broker 端使用 mosca,参考网页https://github.com/mcollina/mosca

    • 安装 mosca。
    nmp install mosca --save
    • 启动 mosca。这里需要注意,如果本地没有配置 MongoDB,则需要把 ascoltatore 中的内容全部注释掉。
    var mosca = require('mosca');var ascoltatore = {  //using ascoltatore  // type: 'mongo',  // url: 'mongodb://localhost:27017/mqtt',  // pubsubCollection: 'ascoltatori',  // mongo: {}};var settings = {  port: 1883,  backend: ascoltatore};var server = new mosca.Server(settings);server.on('clientConnected', function(client) {    console.log('client connected', client.id);});// fired when a message is receivedserver.on('published', function(packet, client) {  console.log('Published', packet.payload); //{"clientId":"mqttjs_02fea7b4","topic":"/tips"}  // console.log('>>>packet', packet); //{"clientId":"mqttjs_02fea7b4","topic":"/tips"}});server.on('ready', setup);// fired when the mqtt server is readyfunction setup() {  console.log('Mosca server is up and running');}

    代码完成后,启动文件,本地的一个 Broker 就跑在 localhost 的1883端口上了。

    Client 端的温度传感器实现

    Client 使用 MQTT.js 实现,参考网页https://github.com/mqttjs/MQTT.js

    • 安装
    npm install mqtt --save
    • 启动
    var mqtt = require('mqtt');var client  = mqtt.connect('mqtt://localhost:1883');client.on('connect', function () {   console.log('>>> connected')   // client.subscribe('/tips')   setInterval(        ()=>{client.publish('/temperature', '30');},        3000    );})client.on('message', function (topic, message) {  // message is Buffer  console.log(message.toString())})// client.end();

    执行 Node index 后 Client 就启动了,可以看到在 MQTT.connect 方法中连接了上一节中启动的 Broker 地址,连接成功后,Client 会输出日志,“>>> connected”,Broker 的控制台也会输出 Client 的连接信息。

    这里模拟了温度传感器,定时3秒向 /temperature 的 Topic 中发送温度数据。

    本节的温度器可以在电脑中使用 Node 方式运行,也可以运行在支持 JavaScript 的开发板中,如 RUFF、NodeMCU、Raspberry Pi,并且可以使用真实的传感器。

    Server 的实现

    Server 使用 MQTT.js 订阅 Client 发送到 /temperature Topic 的数据进行处理,把处理后的数据转译成 JSON 发送到另一业务主题 /tips 中。

    实现代码如下:

    'use strict'const mqtt = require('mqtt');var client  = mqtt.connect('mqtt://localhost:1883');client.on('connect', function () {   console.log('>>> connected');   client.subscribe('/temperature');})client.on('message', function (topic, message) {  var temperature = parseInt(message.toString());  var data = {temperature};  if (temperature >= 60) {        data.tips = "热... 500服务器故障";  }  else if (temperature >= 50) {        data.tips = "今天天气非常热,建议不要穿衣服了";  }  else if (temperature >= 40) {        data.tips = "今天天气十分的热,建议穿短袖T恤+短裤";  }  else if (temperature >= 30) {        data.tips = "今天天气有点的热,建议穿短袖T恤";  }  else if (temperature >= 0) {        data.tips = "今天天气正好,可以穿上一件薄衣服";  }  else if (temperature >= -10) {        data.tips = "今天天气十分寒冷,棉袄可以穿上一件";      }  else {        data.tips = "今天天气十分十分寒冷,棉袄可以穿上二件";    }  client.publish('/tips', JSON.stringify(data));  // if (temperature+1) {}  // message is Buffer  console.log(JSON.stringify(data));})

    App 的实现

    Demo 的 App 使用 KOA 启动一个 Web,在 Web 中展现当前温度对应的穿衣提示,通过订阅 tips 获取数据。

    • 安装 koa
    $ npm install koa
    • 实现代码
    'use strict'const Koa = require('koa');const mqtt = require('mqtt');const app = new Koa();var msg = {temperature:"-",tips:""};// responseapp.use(ctx => {  ctx.body = "当前温度:" + msg.temperature + "度" + "\n" + '穿衣提示:'+msg.tips + "\n"  ;});app.listen(3000);//mqttvar client  = mqtt.connect('mqtt://localhost:1883');client.on('connect', function () {   console.log('>>> connected');   client.subscribe('/tips');})client.on('message', function (topic, message) {  var data = JSON.parse(message.toString());  console.log(message.toString());   console.log(data.tips);   msg = data;  // if (temperature+1) {}  // message is Buffer  // let str = message.toString();  // let data = JSON.parse(message);  // console.log(data.tips);  // msg =  message.toString();})

    Demo 小节

    本章给出了一个简单的物联网业务的业务场景和实现逻辑,其中 Client 也可以运行在电脑上进行 Demo 查看,或是跑在真实物联设备或开发版上。如图5,笔者使用 RUFF 开发板实现了一次。

    完整 Demo 代码已经分享在 github 中,大家可以输入 URL 下载。

    https://github.com/coolnameismy/javascript-mqtt-demo-wearingTip

    图5  Demo硬件演示

    图5 Demo 硬件演示

    总结

    本文和大家交流了物联网应用的一般数据链路、MQTT 协议的架构,并基于 MQTT 实现了一个简单的物联网应用。现在正是前端工程师的大好机会,越来越多的嵌入式设备都开始支持 JavaScript,原因是现在有很多 JavaScript 引擎可以把 JavaScript 转换成各种平台的底层代码,比较有名的有 Jerryscript、Duktape 等。随着越来越多的 JavaScript 工程师进入嵌入式开发的领域,嵌入式应用开发也会出现前后端分离的情况(应用开发或是驱动开发),类似于 Web 开发的前后端分离。前端关注在应用、创意、数据链路、用户体现上,而后端则关心 GPIO、I2C 的底层数据接口和驱动,平台兼容性等方向。

    游历 JavaScript IoT 应用开发平台
    使用 Python 进行物联网端到端原型开发
    管中窥豹:一线工程师看 MQTT
    物联网安全与实战
    未来物联网全栈开发 JavaScript or Python?
    IoT 通讯技术选型及模型设计的思考
    微软百度阿里三大物联网云平台探析
    如何基于 Android Things 构建一个智能家居系统?
    浅析物联网应用层协议 CoAP
    蓝牙 Mesh 技术初探

    阅读全文: http://gitbook.cn/gitchat/geekbook/5a62a6755418822a9fb0c246

    展开全文
  • 小团队如何玩转物联网开发

    千次阅读 2019-08-30 19:50:39
    近几年来,物联网发展迅速:据中商产业研究院《2016——2021年中国物联网产业市场研究报告》显示,预计到2020年,中国物联网的整体规模将达2.2万亿元,产业规模比互联...
  • 面向物联网的21个开源软件项目

    万次阅读 2018-09-04 09:38:44
    物联网市场呈现碎片化、无定形、不断变化的特点,其性质需要不仅仅像平常那样关注互操作性。开源在这方面表现不俗也就不足为奇了——客户犹豫不决,不敢将物联网的未来寄托在一种可能销声匿迹或变得难以定制、互联的...
  • 随 JavaScript 语言的流行,及物联网领域的崛起,我们能看到它们结合的可能性,同时也发现它特别适合于物联网开发
  • 物联网开发框架:node.js+WRTnode

    万人学习 2018-11-13 10:59:18
    物联网开发可以看到两种潮流:一是传统的嵌入式开发的路线,与10年,20年前的开发方法无异。二是新的以脚本、事件驱动、封装为核心的开发方法,我们看到lua\python\node.js在各种开发板中已经得到了应用。我们也看到...
  • 物联网推荐书籍

    千次阅读 2018-10-25 09:52:35
    《物联网智能家居平台DIY:Arduino+物联网云平台+手机+微信》 ...《Android物联网开发:基于Android Studio环境》何福贵 编著 《自己动手设计物联网》黄峰达 著 《 Android物联网开发从入门到实战》 ...
  • 嘉宾介绍:彭景,中科创达硬件工程师,Qualcomm开发者社区技术支持,硬件研发从业3年,目前是Qualcomm开发者社区硬件开发的技术支持。 嘉宾介绍:张玲,中科创达产品经理,Qualcomm开发者社区技术支持,从事智能产品...
  • 嵌入式高级C语言(二)

    万人学习 2019-05-23 11:28:50
    课程主要讲解了c语言数据与程序架构、函数、指针、数据结构等。学完本章能掌握什么: 增强对C语言的了解,为用户后期基于C语言的开发工作做准备。 学习难度:基础
  • ThingWorx技术体系和应用开发

    千人学习 2018-11-14 10:29:24
    ThingWorx是行业领先的物联网技术平台,提供了工业连接、图形化AEP、大数据分析、VR/AR、设备云等物联网开发工具和功能模块。本课程通过介绍ThingWorx技术体系构成、物联网应用开发,在线资源试用,帮助客户构建和...
  • 大白BC26 opencpu开发视频详解

    千人学习 2019-06-27 11:05:08
    BC26 opencpu开发视频详解。对BC26 opencpu开发过程中遇到的问题进行详细说明:开发所需要的工具文件、操作流程、代码例程解释、下载编辑流程、程序开发调试等等。还有关于NBIOT行业的常见问题解释。
  • 物联网开发流程

    千次阅读 2018-09-08 15:55:23
    ……
  • 在这个万物互联的时代,物联网在生活中发挥着巨大的作用。 何为物联网(IoT, internet of things)?从物联网学习的角度来说,物联网是在嵌入式的传统培训模式或者学习道路上,增加了一些互联互通,加了无线传输...
  • 物联网的三层架构

    万次阅读 2018-11-09 11:39:17
    物联网从架构上面可以分为感知层、网络层和应用层,如下图 所示。 (1)感知层:负责信息采集和物物之间的信息传输,信息采集的技术包括传感器、条码和二维码、 RFID射频技术、音视频等多媒体信息,信息传输包括远近...
  • 无论是各大IT巨头都看好的智能家居,还是极客们开发的无人机,都离不开GPS定位、蓝牙和Wi-Fi链接等功能实现。如何使用DragonBoard410c开发板,如何完全其中的GPS、蓝牙、Wi-Fi等模块,如何开启龙板蕴藏的强大能力?
  • 物联网发展的三大编程语言

    千次阅读 2019-04-18 10:43:10
    虽然Java是物联网开发中使用最多的语言,但是Java和Python在物联网开发的不同子域中紧随其后。物联网发展的未来可能仍然是多语言的。 十年前,可能没有人想象未来有一天我们使用的空调、冰箱可以智能可控,路上行驶...
1 2 3 4 5 ... 20
收藏数 76,945
精华内容 30,778
关键字:

物联网开发