JavaとThe Internet of Thing(IoT):実用的なガイド
Javaは、特にLinuxを実行して十分なメモリを持つことができるRaspberry PiやIndustrial Gatewaysなどのデバイスで、IoTアプリケーションにとって実行可能で強力なオプションです。 1. JVMを介したプラットフォームの独立性により、コードは多様なハードウェアを越えて実行できます。 2。Javaの堅牢なエコシステムは、AWS、Azure、およびGoogle Cloudとのネットワーキング、セキュリティ、クラウド統合のための成熟したライブラリを提供します。 3. IoTデータを既存のバックエンドシステムとデータベースにシームレスに接続することにより、エンタープライズ環境で優れています。 4。IoT開発の場合は、OpenJ9やGraalvmなどの軽量JVMを使用してJava SE EmbeddedまたはOpenJDK 17を使用してフットプリントを削減します。 5.システムファイルを介してハードウェアにアクセスするか、GPIOコントロールにPI4Jを使用します。 6. MQTTメッセージングにEclipse Pahoを使用して、センサーデータをブローカーに効率的に送信します。 7.定期的なデータ収集のためにスケジュールされたExecutorServiceを使用して、繰り返しのタスクをスケジュールします。 8。Javaは、すべてのIoTアーキテクチャレイヤーをサポートしています:エッジ処理、通信(MQTT/COAP)、Spring Bootを介したデータ変換、クラウド統合、および分析バックエンド。 9.推奨ツールには、軽量Webサービス用のEclipse Jetty、データストリーミング用のApache Kafka、マイクロサービス用のスプリングブートが含まれます。 10。GraalVMネイティブ画像を使用してパフォーマンスを最適化し、オブジェクトの割り当てを最小限に抑え、-xms64m -xmx128m -xx:usezgcなどのJVMフラグを調整します。要約すると、JavaはArduinoのようなリソースに制約のあるマイクロコントローラーには適していませんが、信頼性、スケーラビリティ、統合が重要であるエッジデバイスとバックエンドシステムには優れた選択肢であり、ハードウェアがサポートするときのより広いIoTランドスケープの強力な候補になります。
JavaとThe Internet of Things(IoT)は、C、Python、またはJavaScriptなどの言語がIoTの議論を支配することが多いことに伴い、最初のペアリングではないかもしれません。しかし、Javaは、その携帯性、強力なエコシステム、およびエンタープライズシステムにおける長年の存在感を備えており、多くのIoTアプリケーションで驚くほど能力があり実用的な選択です。このガイドは、JavaがIoTの風景にどのように適合するか、輝く場所、およびどのツールと戦略を考慮すべきかを分類します。

JavaがIoTにとって理にかなっている理由
「重い」モダンなJava、特に軽量JVMと最適化されたランタイムを使用して、特にエッジまたはゲートウェイレベルで多くのIoTデバイスで効率的に実行できます。
重要な利点は次のとおりです。

- プラットフォームの独立性:一度書く、どこでも実行(JVMのおかげで)は、不均一なIoTハードウェアを扱うとき、依然として大きな利点です。
- 強力なエコシステム:ネットワーキング、セキュリティ、データ処理、およびクラウドプラットフォームとの統合(AWS IoT、Azure IoTなど)のライブラリは、成熟しており、十分に文書化されています。
- エンタープライズ統合:Javaはバックエンドシステムで広く使用されているため、IoTデータパイプラインを既存のビジネスロジック、データベース、およびサービスに簡単に接続できます。
- 堅牢性とセキュリティ:組み込みのメモリ管理、例外処理、およびセキュリティ機能は、一般的なバグと脆弱性を軽減します。
注:Javaは、RAM/CPU(Arduino Nanoなど)が非常に限られているマイクロコントローラーにはそれほど適していませんが、シングルボードコンピューター(ラズベリーPIなど)、産業用ゲートウェイ、またはエッジサーバーでうまく機能します。
IoTに適切なJavaフレーバーを選択します
すべてのJavaがIoTに関して平等に作成されるわけではありません。考慮すべきことは次のとおりです。

- Java SE Embedded :埋め込みデバイス用に設計された標準Java SEのコンパクトバージョン。 Raspberry Piのようなアームベースのシステムでよく実行されます。
- Lightweight JVMSを使用したOpenJDK : OpenJ9 (Eclipseから)やGraalvmなどのツールは、メモリフットプリントとスタートアップ時間を短縮できます。
- Java Me(Micro Edition) :歴史的に小型デバイスに使用されていましたが、ほとんど時代遅れです。いくつかのレガシーまたは特殊な組み込みシステムに依然として関連しています。
- Project Panama and Foreign Function&Memory API(Java 17) :これらの最新のJava機能により、ネイティブコードとハードウェアとのより良い相互作用が可能になり、低レベルのデバイス通信に役立ちます。
Proのヒント:stable Javaセットアップのために、 openjdk 17を使用してRaspberry Pi OS(64ビット)を使用します。
Javaに簡単なIoTアプリケーションを構築します
Raspberry Piに接続されたセンサーから温度データを読んで、クラウドダッシュボードに送信するとします。
1。ハードウェアのセットアップ
- Raspberry Pi 4
- DS18B20温度センサー(GPIO経由で接続)
-
w1-gpio
およびw1-therm
カーネルモジュールを使用して、センサーから読み取ります
2。Javaのセンサーデータを読み取ります
ファイルシステムを介してセンサーデータにアクセスできます(Linuxは/sys/bus/w1/devices/
の下で1線型デバイスを公開します):
public string readtemperature()throws ioexception { string sensorpath = "/sys/bus/w1/devices/28-011924a1d9ff/w1_slave"; List <String> lines = files.readalllines(paths.get(sensorpath)); 文字列lastline = lines.get(lines.size() - 1); if(lastline.contains( "t =")){ int startindex = lastline.indexof( "t ="); double tempc = double.parsedouble(lastline.substring(startindex 2)) / 1000.0; return string.format( "%。2f°C"、tempc); } 「エラー」を返します。 }
3. MQTTブローカーにデータを送信します
軽量メッセージには、 Eclipse Paho MQTTクライアントを使用してください。
<! - maven依存関係 - > <依存関係> <groupid> org.eclipse.paho </groupId> <artifactid> org.eclipse.paho.client.mqttv3 </artifactid> <バージョン> 1.2.5 </バージョン> </依存関係>
mqttclient client = new mqttclient( "tcp://broker.hivemq.com:1883"、mqttclient.generateclientid()); client.connect(); mqttmessage message = new mqttmessage(readtemperature()。getBytes()); message.setqos(1); client.publish( "IoT/センサー/温度"、メッセージ);
4。スケジュールと監視
ScheduledExecutorService
を使用して、30秒ごとにセンサーを投票してください。
ScheduleDexecutorService Scheduler = executors.newscheduledthreadpool(1); scheduler.scheduleatfixedrate(this :: publishtemperature、0、30、timeunit.seconds);
IoTアーキテクチャレイヤーのJava
Javaは、IoTスタック全体で異なる役割を果たしています。
層 | Javaの役割 |
---|---|
デバイス(エッジ) | Raspberry PiまたはGatewaysで実行します。センサーの読み取り、ローカル処理を処理します |
コミュニケーション | MQTT、COAP、HTTPクライアント/サーバーを実装します。セキュアTLS接続を処理します |
データ処理 | Spring BootまたはJakarta EEを使用して、IoTデータを検証および変換するマイクロサービスを構築します |
クラウド統合 | SDKを介してAWS IoT、Google Cloud IoT、またはAzureに接続します。 PostgreSQLやKafkaなどのデータベースにデータを保存します |
UI&Analytics | ダッシュボードのパワーバックエンド(例えば、スプリングブーツの反応) |
知っておくべきツールとフレームワーク
- EclipsePaho :MQTTクライアントライブラリ(IoTメッセージングに不可欠)
- Eclipse JettyまたはUndertow :エッジデバイス上のREST API用の軽量Webサーバー
- Spring Boot :セキュリティ、監視、クラウド統合が組み込まれたIoTバックエンドサービスの急速な開発
- Apache Kafka :大量のセンサーデータストリームを処理するため
- PI4J :RaspberryPiのJava I/Oライブラリ - GPIO、I2C、SPI用のクリーンなAPIを提供します
<依存関係> <groupId> com.pi4j </groupId> <artifactid> pi4j-core </artifactid> <バージョン> 1.5 </バージョン> </依存関係>
IoTデバイス上のJavaのパフォーマンスのヒント
有能なハードウェアでさえ、最適化は重要です:
- Graalvmネイティブ画像を使用してJava 17を使用して、より速い起動とメモリを低下させるために(ランタイム効率のために複雑さをビルドすることができれば)。
- 制約付きデバイスの重いフレームワークを避けてください。
- ゴミ収集圧力を制限する:オブジェクトの再利用、ループでの頻繁な割り当てを避けてください。
- 調整されたフラグでJVMを実行します:
Java -xms64m -xmx128m -xx:usezgc -jar iot-app.jar
-
jstat
やVisualVM(ネットワーク上)などのツールでリソースの使用を監視します。
最終的な考え
Javaは、すべてのIoTプロジェクトのデフォルトの選択肢ではなく、特に小さなセンサー用ではありません。しかし、エッジコンピューティング、ゲートウェイ、バックエンドの統合の場合、比類のない信頼性、ツール、開発者の親しみやすさを提供します。最新のJVMの改善とPI4JやPAHOなどの固体ライブラリにより、JavaはIoTスタックのスマートでスケーラブルな部分になります。
スマートファクトリーシステム、フリート監視ソリューション、またはホームオートメーションハブを構築しても、Javaを見落とさないでください。 IoTアーキテクチャを一緒に保持するのは単なる接着剤かもしれません。
基本的に、デバイスがLinuxを実行し、数百MBのRAMを持っている場合、Javaは検討する価値があります。
以上がJavaとThe Internet of Thing(IoT):実用的なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

Argparseモジュールを使用する場合、提供する必要があるパラメーターは、必要= trueを設定することで実現できます。 1。必要な= TRUEを使用するには、オプションのパラメーター( - 入力など)を設定する必要があります。スクリプトの実行時に提供されていない場合、エラーが報告されます。 2。デフォルトでは位置パラメーターが必要であり、必須= trueを設定する必要はありません。 3.必要なパラメーターに位置パラメーターを使用することをお勧めします。場合によっては、必要な= trueのオプションのパラメーターが柔軟性を維持するために使用されます。 4。必須= trueは、パラメーターを制御する最も直接的な方法です。使用後、ユーザーはスクリプトを呼び出すときに対応するパラメーターを提供する必要があります。そうしないと、プログラムはエラーと終了を促します。

commentsinjavaareignored bythecompilerandforexplanation、notes、ordisablingcode.therearethreetypes:1)single-linecomments-startwith // andlastuntiltheendoftheline;

JavahttpClientapiを使用するコアは、HTTPCLIENTを作成し、HTTPRequestを構築し、HTTPResponseを処理することです。 1。httpclient.newhttpclient()またはhttpclient.newbuilder()を使用して、タイムアウト、プロキシなどを構成してクライアントを作成します。 2. httprequest.newbuilder()を使用して、uri、メソッド、ヘッダー、ボディを設定してリクエストを作成します。 3. client.send()を介して同期リクエストを送信するか、client.sendasync()を介して非同期リクエストを送信します。 4。BodyHandlers.ofstrを使用します

thebestjavaidein2024dependsonyourneads:1。Chooseintellijideaforprofessional、Enterprise、Orfull-stackdevelopmentDueToitsSuperorCodeIntelligence、FrameWorkIntegration、およびTooling.2.UseClipseforHighightextensibility、LegACROJESTES、またはWHENOPEN-SOROPEN-SOURCECUSATI

RestArtyourRouterandComputERTORESOLETORESOLVETEMPORARYGLITCHES.2.RUNTHENETWORKTROUBLESHOTERVIATHESTYSTEMESTOMESTOMONISTOMATICATELFIXCOMMONISSUES.3.RENEWTHEIPADDRESSUSINGINGINGINGINGINGINGINGINGCommandPromptasAdMinistratoratoratorByRunningIpConfig/リリース、IPConfig/reding、Netshwinsockreset

.equals()を使用して文字列コンテンツを比較します。これは、実際の文字ではなくオブジェクト参照のみを比較するためです。 2。無視しているケースを比較するときに.equalsignorecase()を使用します。 3。アルファベット順にソートするときに.compareto()を使用し、ケースを無視しているときは.comparetoignorecase()を使用します。 4. nullの文字列を呼び出すことは避けてください。 equals()は、null値を安全に処理するために、「リテラル」。要するに、参照ではなくコンテンツの比較に常に注意を払ってください。

LinkedListは、Javaの双方向リンクリストであり、リストとDequeインターフェイスを実装しています。要素が頻繁に挿入され削除されるシナリオに適しています。特に、リストの両端で動作する場合、効率が高くなりますが、ランダムアクセスパフォーマンスは低く、時間の複雑さはO(n)です。挿入と削除は、既知の場所でO(1)に到達できます。したがって、構造を動的に変更する必要があるスタック、キュー、または状況の実装に適しており、インデックスごとに頻繁にアクセスする読み取り集約型操作には適していません。最後の結論は、LinkedListが頻繁に変更されるが、アクセスが少ない場合、ArrayListよりも優れているということです。

ChecksearchSettingslikeのように、「Matchentirecellcontents」および「Matchcase」byexpindedoptionsinfindandReplaceを使用して、「tocorrectscope内」内で「lookin "issettovaluesand」を保証します
