このリポジトリは、Ebyte LoraモジュールとESP32に基づいて、簡単に構築するために必要なすべてを簡単に構築するために必要なものをすべて提供します(DIYプロジェクトです!)。ゲートウェイには2つの異なるバージョンがあります。これらのバージョンの詳細と、以下を選択する必要があります。
ボードのイーサネット機能を提供するために、私はQuinled ESP32イーサネットハットを使用しています。もちろん、私はまた、Quinled ESP32を使用するべきだったのは当然ですが、私はいくつかの予備の標準ESP32開発者が使用して横たわっていたので、これらの周りにボードを設計しました。しかし、そうは言っても、私はいつかQuinled-ESP32に基づいてバージョンを完全にデザインするかもしれません。
Wi-Fiとイーサネットを簡単に切り替えるには、ボード上にジャンパーがそれを行うためのジャンパーがあります。これは、搭載のボードでも機能します。電力を削減する必要はありません。
繰り返しますが、これはDIYプロジェクトです!まず最初に、いくつかのはんだ付けスキルが必要であり、EBYTE E32モジュールをはんだ付けするためにSMDホットプレートまたはホットエアガンのいずれかを強くお勧めします。鉄だけではんだ付けするのは非常に難しいです!
したがって、JLCPCBやPCBWayなど、選択したPCBプロトタイプファクトリーにPCBを印刷したいと考えています。 rytivフォルダーに両方のgerberファイルを含めました。別のサービスプロバイダーを使用したい場合は、これらのガーバーを受け入れるか、自分で生成できるかどうかを確認する必要があります。
また、このPCBをステンシルで注文することを強くお勧めします。そうしないと、ebyteモジュールのパッドにペーストを置くのに苦労することを強くお勧めします。
各PCBフォルダーには、IBOM HTMLファイルがあります。これにより、はんだ付けの指示 /概要を説明するのは、各バージョンフォルダーのibomフォルダーで見つけます。ボードをはんだ付けしたら、5Vの電源で配線するだけで、そこに行きます!消費する200mA未満であるため、古い500mA、1a(またはそれ以上)の電話充電器を簡単に使用できます。
ソースはsrcフォルダーで利用できます。 Arduino IDEをダウンロードし、 config.hファイルを確認し、プレースホルダーを設定に置き換え、ESP32にコンパイルしてアップロードします。それはそれであり、ゲートウェイはMQTTサーバーにポップアップし、5秒ごとにヘルスチェックメッセージを送信する必要があります。
これで、センサーとボードにロラメッセージが送信される方法は、以下の「ソースコード /ソフトウェア」セクションにあります。
どちらを選ぶべきですか?それは非常に簡単で、1つの要因によって定義されています。
シリアル通信を使用するEBYTEモジュールはRFM95モジュールと通信できないため、それらを選択する必要があります。これは、eByteシリアル操作モジュールには、LORAを介してメッセージを送信する際にすでに独自の「スタッフ」 /プロトコルを行っているリッテMCUも搭載されているためです。したがって、Semtechチップと直接話すのではなく、代わりにその小さなMCUです。これらのメッセージを読み取るのに、SemTechチップへの直接SPI通信(使用する特定のE32モジュールなど)を使用して互いに動作させるためにこれらのメッセージを読み取るのに正確に機能する方法を理解する必要があります。
このバージョンは、eByte E32-400M20SまたはE32-900M20Sに基づいており、SemTech SX1276に直接シリアルコミュニケーションを提供します。最後の調査(2022年の開始)の時点で、これはこのPCBで動作する唯一のeバイテモジュールであるため、シリアル通信を使用する他のeは使用できません。ボードに収まらない /別のピンアウトを持っています!お住まいの地域に適したものを選択します(TL; DR:400米国/アジア、ヨーロッパでは900)。
モジュールはBOM CSVファイルにありません。AliexPressから外す必要があります。
通常、シリアルインターフェースモジュールを使用してeByteエコシステムで作業している場合、このボードはあなたのためです。ただし、このボード用のE32ベースのソフトウェアのポートを実行していません。そして、私は個人的にE32バージョンを使用しているので、実際にはそうするつもりはありません。しかし、Renzo Mischiantis Arduino Libraryを使用してポートすることを歓迎します。
モジュールはBOM CSVファイルにありません。AliexPressから外す必要があります。
私がこのために開発したソフトウェアは、ゲートウェイ自体の実際のロジックに触れることなく簡単に拡張できることを意図していますが、代わりに別のファイルに小さなコードを追加します。
lora-ids.hをご覧ください。このファイルは、このゲートウェイと開発するすべてのセンサーの間で共有されることを目的としています。異なるメッセージタイプのリストがあり、簡単に独自のメッセージを追加できます。たとえば、メールボックスが送信するいくつかのプロパティを定義する「メールボックス」タイプがあります。これにより、このメッセージを読み取り、処理し、 MQTTサーバーにトピックを作成し、聴くことができます。また、基本的に無料のテキストを持ち、デバッグに適している「カスタム」タイプもあります。
このファイルに独自のタイプを自由に追加してください。 2つのものを追加する必要があります。
#define LORA_MESSAGE_ID_CUSTOM 0x0のようなIDstruct LoRaMessageCustom : LoRaBaseメッセージが該当する主題は、ゲートウェイID、デバイスID、メッセージIDから構築されています。したがって、次の例では、次のとおりです。
0xAと名前のmailbox-sensorを備えたデバイスが送信されていますLORA_MESSAGE_ID_MAILBOXおよび0x1と名前lora-gateway-e32ゲートウェイが受信します。まず、 mailboxメッセージの種類を例として見てみましょう。これらのプロパティを定義します。
さらに、それは独自の名前を定義します(そしてそれで:これらのプロパティの親):
String getMqttTopicName() { return "mailbox"; }したがって、ゲートウェイがこのタイプのメッセージを受け取るたびに、それはそこからプロパティを読み取り、これらのトピックにドロップします。
???/messages/mailbox/duration???/messages/mailbox/distance???/messages/mailbox/humidity???/messages/mailbox/temperatureしかし、 /messages/パーツはどこに来て、何とは何ですか???/簡単です。開発した簡単なデバイス /センサーはlora-ids.hにも登録する必要があります。最上部には、デバイスのリストがあります。それぞれが次のとおりです。
ゲートウェイは、デバイスで受信するすべてのメッセージをソートし、そのデバイス名でプレフィックスを付け、さらにmessagesトピックの下にあるすべてのメッセージをソートして、デバイスに実際のメッセージの横に他のトピックを持つことができます。これにより、特定のデバイスから特定のメッセージタイプの特定のフィールド/値を聞くことができます!
だから私たちは今これを知っています:
???/mailbox-sensor/messages/mailbox/duration???/mailbox-sensor/messages/mailbox/distance???/mailbox-sensor/messages/mailbox/humidity???/mailbox-sensor/messages/mailbox/temperature最後の欠けているピースは、メッセージを受信するゲートウェイです。また、デバイスとして定義されているため、名前も付いているため、例の完全なトピック名を簡単に作成できます。
lora-gateway-e32/devices/mailbox-sensor/messages/mailbox/durationlora-gateway-e32/devices/mailbox-sensor/messages/mailbox/distancelora-gateway-e32/devices/mailbox-sensor/messages/mailbox/humiditylora-gateway-e32/devices/mailbox-sensor/messages/mailbox/temperatureこれで簡単にできます:
LORA_DEVICE_IDSに追加する sendLoRaMessage関数をご覧ください: bool sendLoRaMessage(byte messageID, LoRaBase *loRaMessage, byte recipientId = 0, byte senderId = 0)
オプションで指定することもできます。
LORA_GATEWAY_IDになりますLORA_DEVICE_IDにデフォルトであるsenderidしたがって、コードでは、送信するメッセージIDのインスタンスを作成して、 sendLoRaMessageに渡すだけです。
LoRaMessageMailbox *loRaMessage = new LoRaMessageMailbox;
loRaMessage->duration = duration;
loRaMessage->distance = distance;
loRaMessage->humidity = humidity;
loRaMessage->temperature = temperature;
sendLoRaMessage(LORA_MESSAGE_ID_MAILBOX, loRaMessage);
そしてそれだけです:)
このために、LORAを介して送信される実際のメッセージがどのように構築されるかを見てみましょう。基本的なアイデアは、arduino-loraライブラリから盗まれています。これは、単独でバイトを使用して送信者、受信機などを識別します。
単一のメッセージを見てください:
| 。したがって、上記のmailboxメッセージの例を使用すると、メッセージの値は次のようになります: 12345|3.56|44.55|27.4