用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. ASP.NET MVC 实现简单的登录

    1.创建一个控制器   如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; ...

  2. C#调用Activex中串口电子秤的数据,并将电子秤的数据显示到前端页面

    大二的一个项目需要用到Activex技术将读取到串口中的数据在后台获取到,并将串口的数据写入数据库,这个过程需要在后台使用C#调用Activex控件已经使用的方法,然后在前端通过JavaScript进 ...

  3. 使用WebApi和Asp.Net Core Identity 认证 Blazor WebAssembly(Blazor客户端应用)

    原文:https://chrissainty.com/securing-your-blazor-apps-authentication-with-clientside-blazor-using-web ...

  4. js变量类型及检查

    一.变量的类型 JavaScript 有六种数据类型.主要的类型有 Number.String.object 以及 Boolean 类型,其他两种类型为 null 和 undefined.var ob ...

  5. Python从零开始——函数

    一:Python函数知识概览 二:函数的定义与调用 三:参数传递 四:函数返回值 五:匿名函数的定义与调用 六:变量作用域与改变变量作用域

  6. spring-cloud-kubernetes服务发现之在k8s环境下开发spring cloud应用

    通常情况下,我们的线上的服务在迁移到k8s环境下的时候,都是采用平滑迁移的方案.服务治理与注册中心等都是采用原先的组件.比如spring cloud应用,在k8s环境下还是用原来的一套注册中心(如eu ...

  7. Ubuntu下搭建Kubernetes集群(3)--k8s部署

    1. 关闭swap并关闭防火墙 首先,我们需要先关闭swap和防火墙,否则在安装Kubernetes时会导致不成功: # 临时关闭 swapoff -a # 编辑/etc/fstab,注释掉包含swa ...

  8. Linux 动态链接库路径 LD_LIBRARY_PATH

    如果遇到一些 .so 缺失问题 把路径添加到这个变量里面就可以了,注意跟PATH的区别 export LD_LIBRARY_PATH= 注意使用 export 否则变量设置成功但是子进程不可见

  9. 201871010136-赵艳强《面向对象程序设计(Java)》第八周学习总结

    201871010136-赵艳强<面向对象程序设计(Java)>第八周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这 ...

  10. 源码解读:webdriver client的原理

    前言 又到年底了,群里很多朋友说要开始备战2020金三银四,其实,我建议是,如果你不是技术大牛,就不要去凑热闹. 其实,现在(11,12月份)就是最佳换工作的时候,因为很多人想等着拿了年终再走,虽然招 ...