Lazurite による920MHz帯の送受信

#はじめに
920MHz帯のWi-SUN規格の通信をLazuriteを使ってする

#使用機器
Lazurite　　 2個
![lazurite.jpg](https://qiita-image-store.s3.amazonaws.com/0/140159/a620c8cf-9c24-b3cf-ac8d-a5f45fd13c71.jpeg)


#IDEのインストール
[Lazurite 関連ファイル](http://www.lapis-semi.com/lazurite-jp/download)　から　「Lazurite IDE 」をインストールする
![ide インストール.jpg](https://qiita-image-store.s3.amazonaws.com/0/140159/0bba6d95-cb49-728e-3c8f-851e05e5025e.jpeg)

インストーラは「Next」をしてけば、だいたい入るはず

#送信プログラム

もしくは Lazurite IDEから
ファイル　>　プロジェクトのサンプル　>　SubGHz　>　Welcome_SubGHz　
でプログラムを開くと以下が表示される

```c:Welcome_SubGHz.c
#include "Welcome_SubGHz_ide.h"		// Additional Header

#define LED 26						// pin number of Blue LED
#define SUBGHZ_CH		36			// channel number (frequency)
#define SUBGHZ_PANID	0xABCD		// panid
#define HOST_ADDRESS	0x5f8f		// distination address

unsigned char send_data[] = {"Welcome to Lazurite Sub-GHz\r\n"};

void setup(void)
{

	SubGHz.init();					// initializing Sub-GHz
	Serial.begin(115200);
	pinMode(LED,OUTPUT);			// setting of LED
	digitalWrite(LED,HIGH);			// setting of LED
}

void loop(void)
{
	SUBGHZ_MSG msg;
	// Initializing
	SubGHz.begin(SUBGHZ_CH, SUBGHZ_PANID,  SUBGHZ_100KBPS, SUBGHZ_PWR_20MW);		// start Sub-GHz

	// preparing data
	digitalWrite(LED,LOW);														// LED ON
	msg=SubGHz.send(SUBGHZ_PANID, HOST_ADDRESS, &send_data, sizeof(send_data),NULL);// send data
	digitalWrite(LED,HIGH);														// LED off
	SubGHz.msgOut(msg);

	// close
	SubGHz.close();																// Sub-GHz module sets into power down mode.

	sleep(2000);																// sleep

	return;
}

```

###送信先の指定(6行目)
```c:
define HOST_ADDRESS    0x668C
```

0x668C の部分は各自の環境に変更する。


以下の基盤を例にすると、機器のアドレスは「5F5A」になるので

```c
define HOST_ADDRESS    0x5F5A
```

![識別番号.jpg](https://qiita-image-store.s3.amazonaws.com/0/140159/ccbc591e-3ed7-859c-3d7d-951786583116.jpeg)


###送信される文字列(8行目)
```c:
unsigned char send_data[] = {"Welcome to Lazurite Sub-GHz\r\n"};
```
の部分が送信される文字列になる。

##マイコンボードに転送
###1.ポートの指定
ツール　>　シリアル通信　> 通信ポート
より　COM　にチェックを入れる。　入っていないと転送できません。
###2.マイコンボードに転送
「マイコンボードに転送」をクリックすると転送されてエラーがなければ成功
![転送.jpg](https://qiita-image-store.s3.amazonaws.com/0/140159/dc8f1a93-13f7-04fa-3dd3-8df6bbd52e8f.jpeg)


#受信プログラム
もしくは Lazurite IDEから
ファイル　>　プロジェクトのサンプル　>　SubGHz　>　Welcome_SubGHz　
でプログラムを開くと以下が表示される
特に変更点はない


```c:Print_SubGHz.c
#include "Print_SubGHz_ide.h"		// Additional Header

#define SUBGHZ_CH	36
#define SUBGHZ_PANID	0xabcd
uint8_t rx_data[256];
uint32_t last_recv_time = 0;
SUBGHZ_STATUS rx;							// structure for getting rx status
#define BLUE_LED	26

void setup(void)
{
	SUBGHZ_MSG msg;
	long myAddress;

	Serial.begin(115200);

	msg = SubGHz.init();
	if(msg != SUBGHZ_OK)
	{
		SubGHz.msgOut(msg);
		while(1){ }
	}

	myAddress = SubGHz.getMyAddress();
	Serial.print("myAddress1 = ");
	Serial.println_long(myAddress,HEX);
	msg = SubGHz.begin(SUBGHZ_CH, SUBGHZ_PANID,  SUBGHZ_100KBPS, SUBGHZ_PWR_20MW);
	if(msg != SUBGHZ_OK)
	{
		SubGHz.msgOut(msg);
		while(1){ }
	}
	msg = SubGHz.rxEnable(NULL);
	if(msg != SUBGHZ_OK)
	{
		SubGHz.msgOut(msg);
		while(1){ }
	}

	pinMode(BLUE_LED,OUTPUT);
	digitalWrite(BLUE_LED,HIGH);

	Serial.println("TIME	HEADER	SEQ	PANID	RX_ADDR	TX_ADDR	RSSI	PAYLOAD");
	Serial.println("-----------------------------------------------------------------------------------------------------------------");

	return;
}

void loop(void)
{
	short rx_len;
	short index=0;
	uint16_t data16;

	rx_len = SubGHz.readData(rx_data,sizeof(rx_data));

	if(rx_len>0)
	{
		digitalWrite(BLUE_LED, LOW);
		SubGHz.getStatus(NULL,&rx);										// get status of rx
		// print time
		Serial.print_long((long)millis(),DEC);
		Serial.print("\t");


		// print header
		data16 = rx_data[index], index++;
		data16 = data16 + ((uint16_t)rx_data[index] << 8), index++;
		Serial.print_long((long)data16,HEX);							// output 802.15.4e header
		Serial.print("\t");

		// print sequence number
		Serial.print_long((long)rx_data[index],HEX), index++;			// output 802.15.4e sequence number
		Serial.print("\t");

		// print PANID
		data16 = rx_data[index], index++;
		data16 = data16 + ((uint16_t)rx_data[index] << 8), index++;
		Serial.print_long((long)data16,HEX);							// output 802.15.4e rx PANID
		Serial.print("\t");

		// print RX_ADDR
		data16 = rx_data[index], index++;
		data16 = data16 + ((uint16_t)rx_data[index] << 8), index++;
		Serial.print_long((long)data16,HEX);							// output 802.15.4e rx address
		Serial.print("\t");

		// print TX_ADDR
		data16 = rx_data[index], index++;
		data16 = data16 + ((uint16_t)rx_data[index] << 8), index++;
		Serial.print_long((long)data16,HEX);							// output 802.15.4e tx address
		Serial.print("\t");

		// print RSSI
		Serial.print_long((long)rx.rssi,DEC);							// output RSSI of receiving packet
		Serial.print("\t");

		// print payload
		Serial.write(&rx_data[index],(rx_len-index));					// output payload

		// print ln
		Serial.println("");
		digitalWrite(BLUE_LED, HIGH);
	}


	return;
}

```

##転送後
先ほど作成した「送信プログラム」を実行しながら、シリアルモニターを起動する。
シリアルモニターには送信プログラムで指定した文字列　「Welcome to Lazurite Sub-GHz」が表示されていれば成功！！

![シリアルモニター.jpg](https://qiita-image-store.s3.amazonaws.com/0/140159/a187465e-c029-08b3-2eba-9d3ad4f4ed10.jpeg)


#参考URL
[Lazurite ブログ一覧](http://www.lapis-semi.com/lazurite-jp/blog)
[Lazurite　日本語リファレンス　サンプルプログラム](http://www.lapis-semi.com/lazurite-jp/contents/reference/subghz_msgOut.html)
[GitHub](https://github.com/LAPIS-Lazurite/LazuriteIDE_0.10.x/tree/release-25May2016/examples/03.SubGHz)