用Java编程能给物联网(IoT)带来什么优势与不同?

这是一个不太容易回答的问题,也是一个适合拿出来与大家讨论的一个话题~
首先需要聊聊物联网硬件与嵌入式设备有什么不同。嵌入式设备通常是一个软件一体的产品,MCU完成传感器的读写,驱动设备,完成一个或一个集合的设备功能。而物联网设备个人认为应该包含两个方面,一个是硬件传感器数据采集处理的能力,还有就是云服务的植入能力。不可否认,传感器等硬件能力是物联网设备的基础,但是仅仅具备嵌入设备的能力而缺乏与互联网服务接入的能力的话,并不是一个典型的物联网产品。

解释了这个问题之后,我们就可以来看看Java给物联网带来什么能力?

首先,从嵌入式设备的角度出发,传感器等硬件驱动的能力是完全没问题的,但是当你的设备完成了数据的采集控制之后,应该如何通过webAPI与云服务器互动,甚至开放出你的硬件能力给第三方服务使用这个部分是嵌入式产品和从业人员不具备的知识体系。举个例子,智能手机上的GPS传感器,手机厂商做的GPS传感器更多的是为第三方软件服务的(导航、打车、外卖)而不是手机厂商自己用,所以硬件能力的开放给第三方软件是趋势。

然后,从互联网云服务角度出发,在移动互联网成熟的业务和服务、大量的开发者,他们十分熟悉业务和云服务,但是传统无法触达终端,物联网设备的软件和硬件耦合,开发工具SDK五花八门,互联网程序员不具备从事传感器硬件编程的知识和背景,而通过JOSH技术,让互联网程序员可以用与硬件无关的Java编程方式在设备上进行硬件数据的采集控制,然后再对接自己熟悉的云服务,甚至进行业务的开发,这是让物联网从业人员多起来的方式,也是让物联网业务真正能与实际场景结合闭环的手段。

很多人不明白,JOSH是如何实现用JavaAPI实现传感器数据的读写的,如何实现硬件无关的传感器硬件接口的编程的,这个是一个比较大的话题,我们后面会再JEDI的板块展开讲解,主要的技术实现方式是通过Java设备接口来实现,DeviceAccessAPI(一个开源社区的项目,在Java虚拟机实现的一个标准的通用IO接口,支持MCU的外设接口:GPIO、UART、SPI、I2C、ADC、PWM等),下面一张图片,让大家有个基本的印象:

在国外,关于IoT为什么需要JOSH这样的技术的讨论,起源比较早。只要是嵌入式技术的从业者,或者对于OS(操作系统)有所研究有所兴趣的朋友,一定听说过uC/OS,这个是每个人的入门利器。其知名度不亚于Linux,是嵌入式系统的OS。C语言是其开发语言,与其类似的操作系统,已经发展了很多年,有ThreadX、国人主导的开源嵌入式操作系统RT Thread、华为的Liteos、和ARM出的mbed等等,种类十分众多。抛开主观因素,我想后来的操作系统无论是在开发者的规模,认可度,普及性,开源资料等等各个方面,绝不是uC/OS的对手。

那么,问题来了,uC/OS作为拥有众多受众和开发者的嵌入式操作系统的鼻祖,为何在面对IoT新的机遇时,强调JVM(uC/OS推荐的物联网操作系统方案是uC/OS作为底层系统上层使用MicroEJ的JVM用于物联网)更为适用与IoT,并且如此看重?个人认为:C语言开发优势之外,劣势在于依赖编译器,依赖硬件,门槛高,形成不了规模优势,应用不能独立运行,难以后装应用等等,而JVM(Java虚拟机)屏蔽掉了不同的芯片、编译器的区别,并且可以让应用独立的开发和后装应用,可以建立ecosystem和IoT APP Store,还有最重要的,全球1000万的开发者,和现成的开源社区应用资源。这些资源就连盘踞嵌入式系统多年的uC/OS都无法与Java比,更别提那些刚刚进入的没有本质差别的同质化产品。开源和生态不是巨无霸的商业就能建立的,而是要顺势而为,就像Google做Android都要复用Java社区的道理一样。

最后,来点干货,如果一个人民币100块钱以内的智能手表,可以让所有Java&Android的开发者都能开发应用,并且可以构建手表的应用商店,随时安装各种应用和未来我们还没想到的应用(比如安装一个共享单车的APP就可以用手表刷一下解锁)是不是听上去比现在只能计步的要更“智能”一些了呢?关键GUI非常漂亮,并且可以自己定制,随时OTA迭代~

用Java编程能给物联网(IoT)带来什么优势与不同?的更多相关文章

  1. Java编程思想重点笔记(Java开发必看)

    Java编程思想重点笔记(Java开发必看)   Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而 ...

  2. Google Java编程风格指南

    出处:http://hawstein.com/posts/google-java-style.html 声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Comm ...

  3. JAVA 编程规范(上)

    2016-03-20 J120-CHARLIEPAN JAVA 编程规范(上) 1.      应用范围 本规范应用于采用J2EE规范的项目中,所有项目中的JAVA代码(含JSP,SERVLET,JA ...

  4. 谷歌Java编程规范

    Google Java编程风格指南 January 20, 2014 作者:Hawstein 出处:http://hawstein.com/posts/google-java-style.html 声 ...

  5. Google Java编程风格指南中文版

    作者:Hawstein出处:http://hawstein.com/posts/google-java-style.html声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Cre ...

  6. (转)google Java编程风格中文版

    转:http://www.hawstein.com/posts/google-java-style.html 目录 前言 源文件基础 源文件结构 格式 命名约定 编程实践 Javadoc 后记 前言 ...

  7. [转] java编程规范

    原文链接: 资料推荐--Google Java编码规范 之前已经推荐过Google的Java编码规范英文版了: http://google-styleguide.googlecode.com/svn/ ...

  8. java 编程时候的性能调优

    一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: import java.util ...

  9. java编程思想

    Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而且在大型项目开发中也是常用的知识,既有简单的概念理 ...

随机推荐

  1. Python基础18

    “为什么有列表,还要元组?” 1. 元组可看成是简单的对象组合,而列表是随时间改变的数据集合. 2. 元组的不可变特性提供了某种完整性,确保元组不会被另一个引用来修改.类似于其它语言中的常数声明.

  2. Git Error:There is no tracking information for the current branch.

    在执行git pull的时候,提示当前branch没有跟踪信息: $> git pull There is no tracking information for the current bra ...

  3. 在ie下转换时间戳出错

    在将特定格式转换为时间戳的时候,我们通常的做法事new Date(str).getTime(), 这个方法在谷歌上是可行的,但是在ie上需要注意一点,就是这个str如果是“2019-11-15”的格式 ...

  4. jQuery-ready与load

      // ready 在DOM加载完成时运行的代码 $(document).ready(function(){ // 在这里写代码... }) // 可以简写为 $(function(){ // 在这 ...

  5. Jmeter对服务器进行压力测试

    一.插件准备 下载地址:https://jmeter-plugins.org/downloads/all/ 1.下载插件管理: 2.将管理插件放到jmeter/../ext文件夹中 3.在插件管理中搜 ...

  6. JavaScript深入浅出第4课:V8引擎是如何工作的?

    摘要: 性能彪悍的V8引擎. <JavaScript深入浅出>系列: JavaScript深入浅出第1课:箭头函数中的this究竟是什么鬼? JavaScript深入浅出第2课:函数是一等 ...

  7. Android常见面试题学习第二天(原创)

    61. Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念 DVM指Dalvik的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik ...

  8. Delphi-基础(例程、例程返回值)

    一.例程:Delphi中独有的称呼,例程是将具体某个功能的代码进行封装表现形式: 1.过程 2.函数 过程和函数的区别在于有没有返回值二.例程的作用 1.可以解决命名冲突问题 2.提高代码的重复使用率 ...

  9. python 模块、包

    #-----模块.包----- 模块: 一个.py 文件就称之为模块模块好处:1.提高代码可读性 2.编写代码不需要从零开始 python 模块: 1.python标准库 2.第三方模块 3.应用程序 ...

  10. 201871010107-公海瑜《面向对象程序设计(java)》第十五周学习总结

    201871010107-公海瑜<面向对象程序设计(java)>第十五周学习总结             项目                            内容   这个作业属于 ...