LoginSignup
3
4

More than 5 years have passed since last update.

Lazurite による920MHz帯の送受信

Posted at

はじめに

920MHz帯のWi-SUN規格の通信をLazuriteを使ってする

使用機器

Lazurite   2個
lazurite.jpg

IDEのインストール

Lazurite 関連ファイル から 「Lazurite IDE 」をインストールする
ide インストール.jpg

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

送信プログラム

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

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行目)

define HOST_ADDRESS    0x668C

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

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

define HOST_ADDRESS    0x5F5A

識別番号.jpg

送信される文字列(8行目)

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

の部分が送信される文字列になる。

マイコンボードに転送

1.ポートの指定

ツール > シリアル通信 > 通信ポート
より COM にチェックを入れる。 入っていないと転送できません。

2.マイコンボードに転送

「マイコンボードに転送」をクリックすると転送されてエラーがなければ成功
転送.jpg

受信プログラム

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

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

参考URL

Lazurite ブログ一覧
Lazurite 日本語リファレンス サンプルプログラム
GitHub

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4