En la mayoría de los casos la respuesta es «ni lo pienses».
Si tus «cosas» tienen un presupuesto de energía ilimitado y puedes especificar un SBC (Single board computer) completo como un Allwinner A20 o un AM3358 (Beaglebone) entonces sí, podrías usar Java pero si necesitas funcionar con una batería (que no sea la de un coche) Java te matará. Necesita demasiada RAM y CPU para hacer algo y no podrás usar estados de reposo debido a la horrible sobrecarga de cargar la JVM desde el frío cada vez. Un ARM A8 es una CPU embebida pero no es una CPU IoT en la mayoría de los casos.
Así que, en la mayoría de los casos: estarás usando un ARM M4 como mucho (posiblemente hasta un M0) o un PIC o un ESP8266/32 y estarás programando el chip directamente o usando algo como FreeRTOS. Eso significa que vas a usar C. Podrías usar Pascal o Basic (por ejemplo, mikroPascal Compilers – MikroElektronika
) pero estarás en minoría.
También podría considerar MicroPython – Python para microcontroladores
o Espruino – JavaScript para microcontroladores
o eLua – eluaproject
o motor de JavaScript para el Internet de las Cosas
pero de nuevo, estarás al margen. La masa crítica de la industria es C.
Por supuesto, es posible que desee un eje central para cotejar todos los datos del Internet de las Cosas e informar/presentarlos. Java encaja perfectamente en este caso.
En el servidor, Java, Spring Boot, Jackson y Jersey forman un buen conjunto de herramientas para crear puntos finales REST con datos JSON. Esto construye tus servicios de columna vertebral, la parte de «Internet de…».
En dispositivos Algo como una Raspberry Pi Zero ejecutará Java muy bien. Puedes conectar electrónica real a esto, y comunicarte a través de la web con tu servidor
Para las CPUs que son demasiado limitadas para ejecutar Java – y Java es una bestia un poco voluminosa en estos días (debería mejorar con Java 9 «construye tu propio JRE») – entonces puedes obviamente utilizar otros lenguajes, como C. Esto todavía puede hablar JSON y REST utilizando las bibliotecas adecuadas.