このプロジェクトの目的は、ロラワンセンサーノードの迅速かつ低コストの開発のためのオープンソースハードウェア/ソフトウェアプラットフォームを提供することです。 Arduino Pro Miniモジュール、LORA RMF95W通信モジュール、バックDC-DCコンバーター、さまざまなセンサーへの接続を簡素化するいくつかのコンポーネントで構成されています。

リポジトリと更新サブモジュールをダウンロードしてください:
$ git clone https://github.com/AngelJMC/agriot-sensor-node.git
$ cd agriot-sensor-node
$ git submodule update --init --recursive
.
├── docs # Documentation files
├── firmware # FW source code (Visual Studio Code)
├── hardware # HW design files (Kicad)
ソースコードを変更するか、デバイスをプログラムする場合は、Visual StudioコードとPlatformioプラグインを使用することを強くお勧めします。 Visual Studioコードを使用して「ファームウェア」ディレクトリを開くだけで、プロジェクト全体が使用できるようになります。
センサーで通信ルーチンを実装する新しい.cppファイルを作成する必要があります。次のスキームを使用する場合、センサーとの通信のみを追加する必要があります。 sensors_update()関数は定期的に実行され、センサーの取得が終了すると、データはロラワン通信レイヤーによって送信されます。
#ifdef SENS_SENSORNAME
#include "protocol.h"
#include "sensors.h"
#include <CayenneLPP.h>
/* Schedule sensore measurement every this senconds */
#define SENSOR_INTERVAL (5*60) //seconds
static osjob_t sensjob;
CayenneLPP lpp(51);
static void sensors_update( osjob_t* j ) {
os_avoidSleep();
/*TO-BE Implemented -- Read sensor*/
float t = readYourSensor();
/* Update Data Frame using Cayennne Library */
lpp.reset();
lpp.addTemperature(1, t); /*Change according your sensor*/
protocol_updateDataFrame( lpp.getBuffer(), lpp.getSize() );
/* Schedule next sensor reading*/
os_setTimedCallback( &sensjob, os_getTime() + sec2osticks(SENSOR_INTERVAL), sensors_update );
Serial.flush();
os_acceptSleep();
}
void sensors_init( ) {
/*TO-BE Implemented -- Init sensor*/
initYourSensor();
/*Schedule the first sensor reading*/
os_setTimedCallback(&sensjob, os_getTime() + sec2osticks(10), sensors_update);
}
#endif
この新しいセンサーのコードをコンパイルするには、Platformio.ini構成ファイルに新しいビルド環境を追加する必要があります。
[env:pro8MHzatmega328_SENSORNAME]
platform = atmelavr
board = pro8MHzatmega328
framework = arduino
build_flags = -DSENS_SENSORNAME
これで、Visual Studioコードからビルド環境を選択できるようになりました。
デバイス構成は、デバイスに実装されたコマンドラインインターフェイス(CLI)を介して実行されます。
まず、USBを介してデバイスをArduinoシリアルモニターに接続します。 Arduino Pro MiniにはオンボードFTDIチップがないため、USB-TTLアダプターを使用する必要があります。ボーレートを9600に設定し、シリアルポートを開いて接続を確立します。重要:デバイスの電力消費を減らすために、シリアルインターフェイスは、デバイスのパワーアップ後10分間のみ利用できます。
| コマンドID | タイプ | 説明 |
|---|---|---|
| d | r | Deveui-一意のデバイス識別子。 |
| e | r/w | Appeui-アプリケーションの一意の識別子。 |
| k | r/w | AppKey -OTAAで使用されてセッションキーを生成します。 |
エアアクティベーション(OTAA)でデフォルトを使用するには、そのデバイスEUIにデバイスを登録する必要があります
デバイスEUIは、ATMEGA328Pマイクロコントローラーによって提供される一意のアドレスです。これを取得するには、シリアルコンソールを入力します。
d
Things Networkに移動し、デバイスを追加するアプリケーションを開き、[デバイスの登録]をクリックします。

デバイスを登録したので、デバイス自体から接続をアクティブにすることができます。アクティベーションとは、デバイスが生成されたアプリキーを使用して、セッションキーをネゴシエートしてさらなる通信を行うことを意味します。
デバイスの概要に移動して、8バイトアプリケーションEUIをコピーします。次に、デバイスのシリアルポートを介して取得された値で「E」コマンドを送信する必要があります。
E:70B3D57ED0038147
同じプロセスを繰り返して、16バイトアプリケーションキーを送信します。
K:7B4F7BC85D064898DB39214D7607440E
次に、デバイスを再起動すると、ネットワークに自動的に登録されます。

セッションキーは不揮発性メモリに保存されていないため、デバイスが電源を入れるたびに再交渉されます。この動作は最も適切ではなく、将来のバージョンでレビューされます。
ここでPCB製造用のガーバーを取得します。
| 名前 | anmant | 説明 |
|---|---|---|
| Arduino Pro Mini | 1 | Pro Mini Armega328p 3,3V 8MHz |
| RFM95W | 1 | RFM95W 868-915MHz LORA SX1276トランシーバー |
| DC-DCバック | 1 | 3.3V固定出力、入力5V-24V |
| 抵抗2.2k | 1 | 2.2K SMD抵抗器0805 |
| 抵抗4.7k | 3 | 4.7k SMD抵抗器0805 |
| コンデンサ4.7 UF/6.3 v | 1 | 4.7 UF SMDコンデンサ0805 |
| SMD LED | 1 | LED SMD 0850 |
| ディップを切り替えます | 1 | スイッチ4ピンメタルSMD |
| ネジ端子01x03 | 2 | 3p -Pitch 3.5/3.96mmネジPCB端子ブロックコネクタ |
| ネジ端子01x02 | 1 | 2p -Pitch 3.5/3.96mmネジPCB端子ブロックコネクタ |
| コネクタU.FL-R-SMT | 1 | コネクタU.FL-R-SMT |
| アンテナ3DBI RP-SMA | 1 | アンテナ3DBI RP-SMAコネクタ + 21cm SMA MALE/U.FL PIGTAILケーブル |

