

https://downloads.arduino.cc/libraries/logs/github.com/xreef/ebyte_lora_e22_series_library/
ここでPCBを注文できます
ガイドの6つの部分に関する指導とアセンブリビデオ
ここでPCBを注文できます
ガイドの6つの部分に関する指導とアセンブリビデオ
私は、非常に強力でシンプルで安価なデバイスのLORAデバイスのeByte E22シリーズを管理するライブラリを作成します。
LORAまたは長距離ワイヤレスデータテレメトリは、NRF24L01(433 MHz、868 MHz、または916 MHzがNRF24L01で2.4 GHz)よりも低い周波数で動作するSEMTechによって開拓された技術ですが、距離(4000Mから10000M)。
ロラE22
ここでは、aliexpress(433MHz 4km)-Aliexpress(433MHz 10km)を見つけることができます
更新されたスキーマを取得するには、私の記事を参照してください
ここで私の図書館を見つけることができます。
ダウンロードします。
右上隅のダウンロードボタンをクリックし、非圧縮フォルダーLORA_E22の名前を変更します。
LORA_E22フォルダーにLORA_E22.CPPとLORA_E22.Hが含まれていることを確認してください。
LORA_E22ライブラリフォルダーを配置 /ライブラリ /フォルダー。
最初のライブラリの場合、ライブラリサブフォルダーを作成する必要がある場合があります。
IDEを再起動します。
E22
| ピン番号 | ピンアイテム | ピン方向 | ピンアプリケーション |
|---|---|---|---|
| 1 | M0 | 入力(弱いプルアップ) | M1を操作し、4つの操作モードを決定します。 |
| 2 | M1 | 入力(弱いプルアップ) | M0を使用して、4つの操作モードを決定します。 |
| 3 | RXD | 入力 | TTL UART入力は、外部(MCU、PC)TXD OutputPinに接続します。オープンドレインまたはプルアップ入力として構成できます。 |
| 4 | TXD | 出力 | TTL UART出力は、外部RXD(MCU、PC)InputPinに接続します。オープンドレインまたはプッシュプル出力として構成できます |
5 | aux | 出力 | Indicare lo stato di funzionamento del modulo e riattivare l'mcu esterno Durante la procedura di inizializzazione di autocontrollolo、il pin emette una bassa tensione。 puòspessereconfiguratoはuscita open-drain o出力プッシュプル(&Conscondito non metterlo a terra、ma se hai foolbeti、ad esempio ti si freeze il duspivie mettere una restistenza di pull-up da 4.7ko meglio collegarlo disutivo)。 |
| 6 | VCC | 電源2.3V〜5.5V DC | |
| 7 | GND | 地面 |
ご覧のとおり、M0およびM1ピンを介してさまざまなモードを設定できます。
| モード | M1 | M0 | 説明 |
|---|---|---|---|
| 普通 | 0 | 0 | UARTおよびワイヤレスチャネルはオープンで、透明なトランスミッションがオンになっています(特別なコマンドを介してAIR上の構成をサポートしています) |
| worモード | 0 | 1 | WORトランスミッターおよびWORレシーバーとして定義できます |
| 構成モード | 1 | 0 | ユーザーはシリアルポートを介してレジスタにアクセスして、モジュールの動作状態を制御できます |
| 深い睡眠モード | 1 | 1 | スリープモード |
ご覧のとおり、静的な方法で使用できるピンがいくつかありますが、ライブラリに接続すると、パフォーマンスで得られ、ソフトウェアを介してすべてのモードを制御できますが、次に説明することができます。
すでにすべてのピンをマイクロコントローラーの出力に接続することは重要ではないと言っているように、M0およびM1ピンを高またはLOWに配置して設計された構成を取得できます。補助を接続しないと、ライブラリが操作が完了することを確認するために合理的な遅延を設定できます。
送信データを使用して外部MCUを起動し、データ転送仕上げで高く戻すことができます。
トランスミッションのLORA E22 AUXピン
AUXを受け取るときは、バッファが空になったときに高く戻り、高く戻ります。
レセプションのLORA E22 AUXピン
また、通常の操作を復元するためのセルフチェックにも使用されています(パワーオンおよびスリープ/プログラムモード)。
セルフチェックのLORA E22 AUXピン
ESP8266接続スキーマは、論理通信(3.3V)の同じ電圧で機能するため、より簡単です。
LORA E22 TTL 100 WEMOS D1が完全に接続されています
プルアップ抵抗器(4,7kohm)を追加して、良好な安定性を得ることが重要です。
| E22 | ESP8266 |
|---|---|
| M0 | D7 |
| M1 | D6 |
| TX | ピンD2(プルアップ4,7kΩ) |
| Rx | ピンD3(プルアップ4,7kΩ) |
| aux | ピンD5(プルアップ4,7kΩ) |
| VCC | 5V(ただし、3.3Vでより少ない電力で動作します) |
| GND | GND |
ESP32の接続スキーマも同様ですが、RXおよびTXではRX2とTX2を使用します。デフォルトではESP32にはソフトウェアセリアルがなく、3つのシリアルがあります。
ebyte lora e22デバイスESP32開発キットv1ブレッドボード完全接続
| E22 | ESP32 |
|---|---|
| M0 | D21 |
| M1 | D19 |
| TX | ピンRX2(プルアップ4,7kΩ) |
| Rx | ピンTX3(プルアップ4,7kΩ) |
| aux | ピンD18(プルアップ4,7kΩ) |
| VCC | 5V(ただし、3.3Vでより少ない電力で動作します) |
| GND | GND |
Arduinoの作業電圧は5Vなので、損傷を防ぐためにRX PIN M0およびM1の電圧分割器を追加する必要があります。
RXにまとめるよりも、SignalからGNDに2KOHM抵抗器と1KOHMを使用できます。
LORA E22 TTL 100 Arduinoが完全に接続されています
| M0 | 7(電圧分割) |
| M1 | 6(電圧分割) |
| TX | ピン2(プルアップ4,7kΩ) |
| Rx | ピン3(プルアップ4,7kΩ&電圧分割) |
| aux | ピン5(プルアップ4,7kΩ) |
| VCC | 5V |
| GND | GND |
管理するオプションと状況をより多く持つことができるため、私は非常に多くのコンストラクターを作成しました。
LoRa_E22 (byte rxPin, byte txPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (byte rxPin, byte txPin, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (byte rxPin, byte txPin, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);コンストラクターの最初のセットは、シリアルおよびその他のピンの管理をライブラリに委任するための作成です。
txE22pinとrxE22pin UARTに接続するピンであり、必須です。auxPin 、操作、送信、受信ステータスをチェックするピンです(次に説明します)、ピンは必須ではありません。設定しないと、操作が自らを完了するために遅延を適用します(潜在性がある場合、フリーズデバイスなど、プルアップ4.7k抵抗器を配置するか、デバイスに接続する必要があります)。m0pinとm1Pin操作モードを変更するピンです(テーブルアッパーを参照)、 「生産」のこのピンは直接高または低く接続すると思いますが、テストではライブラリが管理するのに役立ちます。bpsRateは、通常9600です(プログラム/睡眠モードでの唯一のボーレート)ソフトウェアの底板です。簡単な例です
# include " LoRa_E22.h "
LoRa_E22 e22ttl100 ( 2 , 3 ); // RX, TX
// LoRa_E22 e22ttl100(2, 3, 5, 6, 7); // RX, TX別のコンストラクターを使用して、ソフトウェアの直接使用できます
LoRa_E22 (HardwareSerial* serial, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (HardwareSerial* serial, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (HardwareSerial* serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);このコンストラクターのアッパーの例は、そうすることができます。
# include < SoftwareSerial.h >
# include " LoRa_E22.h "
SoftwareSerial mySerial ( 2 , 3 ); // RX, TX
LoRa_E22 e22ttl100 (mySerial);
// LoRa_E22 e22ttl100(&mySerial, 5, 7, 6);コンストラクターの最後のセットは、ソフトウェアセリアルの代わりに携帯電話を使用することを許可することです。
LoRa_E22 (SoftwareSerial* serial, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (SoftwareSerial* serial, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (SoftwareSerial* serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);beginコマンドは、入力モードと出力モードでシリアルとピンを起動するために使用されます。
void begin ();実行中です
// Startup all pins and UART
e22ttl100.begin();構成を管理し、デバイスの情報を取得するための一連のメソッドがあります。
ResponseStructContainer getConfiguration ();
ResponseStatus setConfiguration (Configuration configuration, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
ResponseStructContainer getModuleInformation ();
void printParameters ( struct Configuration configuration);応答の管理を簡素化するために、エラーを管理し、一般的なデータを返すために非常に有用にコンテナのセットを作成します。
これはステータスコンテナであり、2つの簡単なエントリポイントがあります。これにより、ステータスコードとステータスコードの説明を取得できます。
Serial.println(c.getResponseDescription()); // Description of code
Serial.println(c.code); // 1 if Successコードはです
E22_SUCCESS = 1 ,
ERR_E22_UNKNOWN,
ERR_E22_NOT_SUPPORT,
ERR_E22_NOT_IMPLEMENT,
ERR_E22_NOT_INITIAL,
ERR_E22_INVALID_PARAM,
ERR_E22_DATA_SIZE_NOT_MATCH,
ERR_E22_BUF_TOO_SMALL,
ERR_E22_TIMEOUT,
ERR_E22_HARDWARE,
ERR_E22_HEAD_NOT_RECOGNIZEDこのコンテナは、文字列応答を管理し、2つのエントリポイントを持つために作成されます。
文字列のあるdataメッセージとstatusから返され、 RepsonseStatusのインスタンス。
ResponseContainer rs = e22ttl.receiveMessage();
String message = rs.data;
Serial.println(rs.status.getResponseDescription());
Serial.println(message);これは、より「複雑な」コンテナであり、これを使用して構造を管理します。応答者と同じエントリポイントを持っていますが、データは複雑な構造を管理するためのボイドポインターです。
ResponseStructContainer c;
c = e22ttl100.getConfiguration();
// It's important get configuration pointer before all other operation
Configuration configuration = *(Configuration*) c.data;
Serial.println(c.status.getResponseDescription());
Serial.println(c.status.code);
c.close();最初の方法はGetConfigurationです。これを使用して、デバイスに保存されているすべてのデータを取得できます。
ResponseStructContainer getConfiguration ();ここに使用例があります。
ResponseStructContainer c;
c = e22ttl100.getConfiguration();
// It's important get configuration pointer before all other operation
Configuration configuration = *(Configuration*) c.data;
Serial.println(c.status.getResponseDescription());
Serial.println(c.status.code);
Serial.println(configuration.SPED.getUARTBaudRate());
c.close();構成の構造には設定のすべてのデータがあり、一連の関数を追加して、単一のデータのすべての説明を取得します。
configuration.ADDL = 0x03 ; // First part of address
configuration.ADDH = 0x00 ; // Second part
configuration.NETID = 0x00 ; // NETID used for repeater function
configuration.CHAN = 23 ; // Communication channel
configuration.SPED.uartBaudRate = UART_BPS_9600; // Serial baud rate
configuration.SPED.airDataRate = AIR_DATA_RATE_010_24; // Air baud rate
configuration.SPED.uartParity = MODE_00_8N1; // Parity bit
configuration.OPTION.subPacketSetting = SPS_240_00; // Packet size
configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED; // Need to send special command
configuration.OPTION.transmissionPower = POWER_22; // Device power
configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED; // Enable RSSI info
configuration.TRANSMISSION_MODE.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Transmission type
configuration.TRANSMISSION_MODE.enableRepeater = REPEATER_DISABLED; // Enable repeater mode
configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED; // Check interference
configuration.TRANSMISSION_MODE.WORTransceiverControl = WOR_RECEIVER; // Enable WOR mode
configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011; // WOR timingすべての説明を取得するための同等の関数があります:
DEBUG_PRINT (F( " HEAD : " )); DEBUG_PRINT(configuration.COMMAND, HEX);DEBUG_PRINT( " " );DEBUG_PRINT(configuration.STARTING_ADDRESS, HEX);DEBUG_PRINT( " " );DEBUG_PRINTLN(configuration.LENGHT, HEX);
DEBUG_PRINTLN (F( " " ));
DEBUG_PRINT (F( " AddH : " )); DEBUG_PRINTLN(configuration.ADDH, HEX);
DEBUG_PRINT (F( " AddL : " )); DEBUG_PRINTLN(configuration.ADDL, HEX);
DEBUG_PRINT (F( " NetID : " )); DEBUG_PRINTLN(configuration.NETID, HEX);
DEBUG_PRINTLN (F( " " ));
DEBUG_PRINT (F( " Chan : " )); DEBUG_PRINT(configuration.CHAN, DEC); DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.getChannelDescription());
DEBUG_PRINTLN (F( " " ));
DEBUG_PRINT (F( " SpeedParityBit : " )); DEBUG_PRINT(configuration.SPED.uartParity, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.SPED.getUARTParityDescription());
DEBUG_PRINT (F( " SpeedUARTDatte : " )); DEBUG_PRINT(configuration.SPED.uartBaudRate, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.SPED.getUARTBaudRateDescription());
DEBUG_PRINT (F( " SpeedAirDataRate : " )); DEBUG_PRINT(configuration.SPED.airDataRate, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.SPED.getAirDataRateDescription());
DEBUG_PRINTLN (F( " " ));
DEBUG_PRINT (F( " OptionSubPacketSett: " )); DEBUG_PRINT(configuration.OPTION.subPacketSetting, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.OPTION.getSubPacketSetting());
DEBUG_PRINT (F( " OptionTranPower : " )); DEBUG_PRINT(configuration.OPTION.transmissionPower, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.OPTION.getTransmissionPowerDescription());
DEBUG_PRINT (F( " OptionRSSIAmbientNo: " )); DEBUG_PRINT(configuration.OPTION.RSSIAmbientNoise, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.OPTION.getRSSIAmbientNoiseEnable());
DEBUG_PRINTLN (F( " " ));
DEBUG_PRINT (F( " TransModeWORPeriod : " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.WORPeriod, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getWORPeriodByParamsDescription());
DEBUG_PRINT (F( " TransModeTransContr: " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.WORTransceiverControl, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getWORTransceiverControlDescription());
DEBUG_PRINT (F( " TransModeEnableLBT : " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.enableLBT, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getLBTEnableByteDescription());
DEBUG_PRINT (F( " TransModeEnableRSSI: " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.enableRSSI, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getRSSIEnableByteDescription());
DEBUG_PRINT (F( " TransModeEnabRepeat: " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.enableRepeater, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getRepeaterModeEnableByteDescription());
DEBUG_PRINT (F( " TransModeFixedTrans: " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.fixedTransmission, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getFixedTransmissionDescription());同様に、setConfigurationが構成Strucutreを必要とするので、構成を管理するより良い方法は、現在のものを取得し、必要な変更のみを適用して再度設定することだと思います。
ResponseStatus setConfiguration (Configuration configuration, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE); configuration 、現在のセッションのみで変更が永続的に変化する場合、 saveType previsiouly showです。
ResponseStructContainer c;
c = e32ttl100.getConfiguration();
// It's important get configuration pointer before all other operation
Configuration configuration = *(Configuration*) c.data;
Serial.println(c.status.getResponseDescription());
Serial.println(c.status.code);
printParameters (configuration);
configuration.ADDL = 0x03 ; // First part of address
configuration.ADDH = 0x00 ; // Second part
configuration.NETID = 0x00 ; // NETID used for repeater function
configuration.CHAN = 23 ; // Communication channel
configuration.SPED.uartBaudRate = UART_BPS_9600; // Serial baud rate
configuration.SPED.airDataRate = AIR_DATA_RATE_010_24; // Air baud rate
configuration.SPED.uartParity = MODE_00_8N1; // Parity bit
configuration.OPTION.subPacketSetting = SPS_240_00; // Packet size
configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED; // Need to send special command
configuration.OPTION.transmissionPower = POWER_22; // Device power
configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED; // Enable RSSI info
configuration.TRANSMISSION_MODE.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Transmission type
configuration.TRANSMISSION_MODE.enableRepeater = REPEATER_DISABLED; // Enable repeater mode
configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED; // Check interference
configuration.TRANSMISSION_MODE.WORTransceiverControl = WOR_RECEIVER; // Enable WOR mode
configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011; // WOR timing
// Set configuration changed and set to not hold the configuration
ResponseStatus rs = e32ttl100.setConfiguration(configuration, WRITE_CFG_PWR_DWN_LOSE);
Serial.println(rs.getResponseDescription());
Serial.println(rs.code);
printParameters (configuration);
c.close()パラメーターはすべて一定として管理されています:
| アド | モジュールの高いアドレスバイト(デフォルト00H) | 00h-ffh |
| addl | モジュールの低いアドレスバイト(デフォルト00H) | 00h-ffh |
| sped | データレートのパリティビットと航空データレートに関する情報 | |
| チャン | 通信チャネル(410m + chan*1M)、デフォルト17H(433MHz)、 433MHzデバイスのみがデバイスの正しい周波数を確認するために有効です | 00H-1FH |
| オプション | 送信の種類、パケットサイズ、特別なメッセージを許可します | |
| inssomision_mode | 伝送モダリティを指定する多くのパラメーター |
オプション
トランスミッションの種類、プルアップ設定、ウェイクアップ時間、FEC、トランスミッションパワー
UARTパリティビット: UARTモードは通信パーティー間で異なる場合があります
| 4 | 3 | UARTパリティビット | 一定の値 |
| 0 | 0 | 8N1(デフォルト) | mode_00_8n1 |
| 0 | 1 | 8o1 | mode_01_8o1 |
| 1 | 0 | 8 E1 | mode_10_8e1 |
| 1 | 1 | 8n1(00に等しい) | mode_11_8n1 |
UARTボーレート:UARTボーレートは通信パーティー間で異なる場合があり、UARTボーレートはワイヤレス送信パラメーターとは関係ありません。ワイヤレス送信 /受信機能には影響しません。
| 7 | 6 | 5 | ttl uart baudレート(bps) | 一定の値 |
| 0 | 0 | 0 | 1200 | uart_bps_1200 |
| 0 | 0 | 1 | 2400 | uart_bps_2400 |
| 0 | 1 | 0 | 4800 | uart_bps_4800 |
| 0 | 1 | 1 | 9600(デフォルト) | uart_bps_9600 |
| 1 | 0 | 0 | 19200 | UART_BPS_19200 |
| 1 | 0 | 1 | 38400 | uart_bps_38400 |
| 1 | 1 | 0 | 57600 | uart_bps_57600 |
| 1 | 1 | 1 | 115200 | uart_bps_115200 |
空気データレート:空気データレートが低いほど、送信距離が長くなり、干渉防止パフォーマンスが向上し、送信時間が長くなるため、空気データレートは両方の通信パーティーで同じように保つ必要があります。
| 2 | 1 | 0 | エアデータレート(BP | 一定の値 |
| 0 | 0 | 0 | 0.3k | air_data_rate_000_03 |
| 0 | 0 | 1 | 1.2k | air_data_rate_001_12 |
| 0 | 1 | 0 | 2.4k(デフォルト) | air_data_rate_010_24 |
| 0 | 1 | 1 | 4.8k | air_data_rate_011_48 |
| 1 | 0 | 0 | 9.6k | air_data_rate_100_96 |
| 1 | 0 | 1 | 19.2k | air_data_rate_101_192 |
| 1 | 1 | 0 | 38.4k | air_data_rate_110_384 |
| 1 | 1 | 1 | 62.5k | air_data_rate_111_625 |
####サブパケット設定
これは、パケットの最大のレングットです。
データがサブパケットの長さよりも小さい場合、受信側のシリアル出力は途切れない連続出力です。データがサブパケットの長さよりも大きい場合、受信エンドシリアルポートはサブパケットを出力します。
| 7 | 6 | パケットサイズ | 一定の値 |
| 0 | 0 | 240bytes(デフォルト) | SPS_240_00 |
| 0 | 1 | 128bytes | SPS_128_01 |
| 1 | 0 | 64バイト | SPS_064_10 |
| 1 | 1 | 32バイト | SPS_032_11 |
#### RSSIアンビエントノイズイネーブル
このコマンドは、RSSIの管理タイプを有効/無効にすることができます。リモート構成を管理することが重要です。メッセージのRSSIパラメーターではないことに注意してください。
有効にすると、C0 C1 C2 C3コマンドを送信モードまたはWOR送信モードで送信して、レジスタを読み取ることができます。登録0x00:現在のアンビエントノイズRSSIレジスタ0x01:RSSIデータが前回受信されたとき。
| 5 | RSSI周囲ノイズ有効化 | 一定の値 |
| 0 | 有効にする | rssi_ambient_noise_enabled |
| 1 | 無効(デフォルト) | rssi_ambient_noise_disabled |
####送信電力
このような定義を適用することにより、この定数セットを変更できます。
# define E22_22 // default value without set
# define E22_30これを定義すると、チャネル周波数OLSOを構成できます。
// One of
# define FREQUENCY_433
# define FREQUENCY_170
# define FREQUENCY_470
# define FREQUENCY_868
# define FREQUENCY_915#### RSSIを有効にします
有効にすると、モジュールはワイヤレスデータを受信し、シリアルポートTXDを介して出力した後、RSSI強度バイトに従います
####送信タイプ
送信モード:固定伝送モードでは、各ユーザーのデータフレームの最初の3バイトを、高/低アドレスおよびチャネルとして使用できます。モジュールは、送信時にアドレスとチャネルを変更します。また、プロセスを完了した後、元の設定に戻ります。
####リピーター機能を有効にします
####送信前のデータを監視します
有効にすると、ワイヤレスデータが送信される前に監視され、ある程度の干渉を回避できますが、データの遅延を引き起こす可能性があります。
#### wor
WOR送信機:モジュールの受信および送信機能がオンになり、データの送信時にウェイクアップコードが追加されます。受信がオンになります。
WORレシーバー:モジュールはデータを送信できず、WOR監視モードで動作します。監視期間は次のとおり(WORサイクル)であり、多くの電力を節約できます。
#### worサイクル
WORが送信されている場合:WORレシーバーがワイヤレスデータを受信し、シリアルポートから出力した後、WORを再び入力する前に1000msが待機します。ユーザーは、この期間中にシリアルポートデータを入力し、ワイヤレス経由で返品できます。各シリアルバイトは1000msで更新されます。ユーザーは、1000ms以内の最初のバイトを送信する必要があります。
まず、何かが受信バッファーにあるかどうかを確認するために、シンプルだが有用な方法を導入する必要があります
int available ();現在のストリームにあるバイト数を返すだけです。
通常/透明な送信モードは、同じアドレスとチャネルを持つすべてのデバイスにメッセージを送信するために使用されます。
LORA E22送信シナリオ、ラインはチャネルです
メッセージを送信/受信する方法がたくさんあります。詳細に説明します。
ResponseStatus sendMessage ( const String message);ResponseContainer receiveMessage ();最初の方法はsendMessageであり、通常モードのデバイスに文字列を送信するために使用されます。
ResponseStatus rs = e22ttl.sendMessage( " Prova " );
Serial.println(rs.getResponseDescription());他のデバイスは、単にループ上で行うだけです
if (e22ttl.available() > 1 ){
ResponseContainer rs = e22ttl. receiveMessage ();
String message = rs. data ;` ` // First ever get the data
Serial. println (rs. status . getResponseDescription ());
Serial. println (message);
}複雑な構造を送信したい場合は、この方法を使用できます
ResponseStatus sendMessage ( const void *message, const uint8_t size);
ResponseStructContainer receiveMessage ( const uint8_t size);たとえば、Strucutreを送信するために使用されます。
struct Messaggione {
char type[ 5 ];
char message[ 8 ];
bool mitico;
};
struct Messaggione messaggione = { " TEMP " , " Peple " , true };
ResponseStatus rs = e22ttl.sendMessage(&messaggione, sizeof (Messaggione));
Serial.println(rs.getResponseDescription());そして反対側はあなたがメッセージを受け取ることができるので
ResponseStructContainer rsc = e22ttl.receiveMessage( sizeof (Messaggione));
struct Messaggione messaggione = *(Messaggione*) rsc.data;
Serial.println(messaggione.message);
Serial.println(messaggione.mitico);メッセージの最初の部分を読んで、より多くのタイプのstrucutreを管理したい場合は、この方法を使用できます。
ResponseContainer receiveInitialMessage ( const uint8_t size);私はそれを作成して、タイプまたはその他の文字列を受け取って、ロードする構造を識別します。
struct Messaggione { // Partial strucutre without type
char message[ 8 ];
bool mitico;
};
char type[ 5 ]; // first part of structure
ResponseContainer rs = e22ttl.receiveInitialMessage( sizeof (type));
// Put string in a char array (not needed)
memcpy ( type, rs.data.c_str(), sizeof(type) );
Serial.println( " READ TYPE: " );
Serial.println(rs.status.getResponseDescription());
Serial.println(type);
// Read the rest of structure
ResponseStructContainer rsc = e22ttl.receiveMessage( sizeof (Messaggione));
struct Messaggione messaggione = *(Messaggione*) rsc.data;同じ方法で、私は固定伝送で使用する一連の方法を作成します
宛先デバイスはアドレスとチャネルを使用してプリアンブルを受信しないため、送信方法のみを変更する必要があります。
だからあなたが持っている文字列メッセージのために
ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const String message);
ResponseStatus sendBroadcastFixedMessage (byte CHAN, const String message);そして、あなたが持っている構造のために
ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const void *message, const uint8_t size);
ResponseStatus sendBroadcastFixedMessage (byte CHAN, const void *message, const uint8_t size );ここに簡単な例があります
ResponseStatus rs = e22ttl.sendFixedMessage( 0 , 0 , 0x17 , &messaggione, sizeof (Messaggione));
// ResponseStatus rs = e22ttl.sendFixedMessage(0, 0, 0x17, "Ciao");固定トランスミッションには、より多くのシナリオがあります
LORA E22送信シナリオ、ラインはチャネルです
特定のデバイス(2番目のシナリオ固定送信)に送信する場合は、ADDL、ADDH、およびCHANを追加して直接識別する必要があります。
ResponseStatus rs = e22ttl.sendFixedMessage( 2 , 2 , 0x17 , " Message to a device " );指定されたチャネル内のすべてのデバイスにメッセージを送信したい場合は、この方法を使用できます。
ResponseStatus rs = e22ttl.sendBroadcastFixedMessage( 0x17 , " Message to a devices of a channel " );ネットワーク内のすべてのブロードキャストメッセージを受信したい場合は、 ADDHとADDL BROADCAST_ADDRESSで設定する必要があります。
ResponseStructContainer c;
c = e22ttl100.getConfiguration();
// It's important get configuration pointer before all other operation
Configuration configuration = *(Configuration*) c.data;
Serial.println(c.status.getResponseDescription());
Serial.println(c.status.code);
printParameters (configuration);
configuration.ADDL = BROADCAST_ADDRESS;
configuration.ADDH = BROADCAST_ADDRESS;
// Set configuration changed and set to not hold the configuration
ResponseStatus rs = e22ttl100.setConfiguration(configuration, WRITE_CFG_PWR_DWN_LOSE);
Serial.println(rs.getResponseDescription());
Serial.println(rs.code);
printParameters (configuration);
c.close();###ワイヤレス構成
このデバイスは、sepecialコマンドでワイヤレス構成をサポートしていますが、機能していないようです。私はebyteを尋ねますが、応答はありません。
パケットを正しい方法で送信するコマンド(ロジックアナイザーでテスト)を実装しますが、機能していないようです。
ちなみに、まず、RSSIノイズ環境を有効にします。
Configuration configuration;
configuration.ADDL = 0x13 ;
configuration.ADDH = 0x13 ;
configuration.NETID = 0x00 ;
configuration.CHAN = 23 ;
configuration.SPED.uartBaudRate = UART_BPS_9600;
configuration.SPED.airDataRate = AIR_DATA_RATE_010_24;
configuration.SPED.uartParity = MODE_00_8N1;
configuration.OPTION.subPacketSetting = SPS_240_00;
configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED;
configuration.OPTION.transmissionPower = POWER_22;
configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED;
configuration.TRANSMISSION_MODE.fixedTransmission = FT_FIXED_TRANSMISSION;
configuration.TRANSMISSION_MODE.enableRepeater = REPEATER_DISABLED;
configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED;
configuration.TRANSMISSION_MODE.WORTransceiverControl = WOR_TRANSMITTER;
configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011;今、あなたはあなたの仕事をするためのすべての情報を持っていますが、私はすべての可能性をより良く導くためにいくつかの現実的な例を示すことが重要だと思います。
Arduino、ESP32、またはESP8266用のebyte lora e22デバイス:設定と基本的な使用
Arduino、ESP32、またはESP8266用のebyte lora e22デバイス:ライブラリ
Arduino、ESP32、またはESP8266用のebyte lora e22デバイス:構成
Arduino、ESP32、またはESP8266用のebyte lora e22デバイス:送信とrssiを固定
Arduino、ESP32、またはESP8266用のebyte lora e22デバイス:構造化されたデータの節約と送信
Arduino、ESP32、またはESP8266用のebyte lora e22デバイス:リピーターモードとリモート設定
Arduino、ESP32、またはESP8266用のebyte lora e22デバイス:wor microcontrollerおよびarduinoシールド
Arduino、ESP32、またはESP8266用のebyte lora e22デバイス:wor microcontrollerとwemos d1シールド
Arduino、ESP32、またはESP8266用のebyte lora E22デバイス:wor microcontrollerおよびesp32 dev v1シールド