Seeed Studio XIAO nRF52840の開発環境を作る

組み込みエンジニア

こんにちは、ENGかぴです。

Seeed Studio XIAO nRF52840はARMマイコンでありBLEを搭載しているためBlutooth通信ができるのが特徴です。またArduino環境に対応しているためArduinoライブラリを使ってソフト開発ができます。

Seeed Studio XIAO nRF52840の開発環境をArduino IDEに組み込む方法を説明しています。Seeeduino XIAO(Seeed Studio XIAO SAMD21)で動作確認したことについてリンクをまとめています。

Seeeduino XIAOで学べるソフト開発と標準ライブラリの使い方

Seeed Studio XIAOの開発環境を作る

Seeed Studio XIAOの開発環境はArduino環境で開発する場合はArduino IDEのインストールが必要です。Arduino IDEでSeeed Studioが公開しているボードマネージャーのURLを追加するとSeeed StudioのボードがArduino IDEでインストールできるようになります。以降の手順の説明はWindows10及びWindow11を対象としています。

Arduino IDEのインストール

Arduinoの開発環境であるArduino IDEをインストールするまでの手順とスケッチ例を使って開発を行う手順について下記リンクにまとめています。

Arduinoの開発環境の作り方とスケッチ例の使い方

ボードマネージャーのURLの追加とインストールの手順

Seeed Studio XIAOを追加するボードマネージャーのURL

Seeed Studio XIAOの開発環境を追加していきます。Seeed Wikiの各種モジュールの説明にボードマネージャに追加するURLが記載されています。

Seeed Wiki:Getting Started with Seeed Studio XIAO nRF52840 (Sense)

Seeed WikiではSeeed Studio XIAO nRF52840についてハードウェアやソフトウェアの情報やピン配置などの情報が記載されています。

Arduino IDEを起動してファイル欄から「基本設定」を選択すると設定項目が表示されます。

基本設定の「追加のボードマネージャーのURL」にSeeed WikiのURLを追加する
基本設定の「追加のボードマネージャーのURL」にSeeed WikiのURLを追加する

基本設定の「追加のボードマネージャのURL」にSeeed Wikiに記載されているURLを貼り付けて追加します。追加後はOKを押して決定します。次にArduino IDEのツールからボードマネージャーを選択するとボードの検索画面に遷移します。

ボードマネージャでSeeed SAMD Boardsを選択してインストール
ボードマネージャでSeeed nRF52 Boardsを選択してインストール

ボードマネージャで検索欄に「seeed」と入力するとSeeed nRF52 Boardsが候補として表示されます。(URLを追加していないと表示されません)このボードマネージャをインストールします。インストール後はボードの選択を行います。

すき間時間で資格をゲット【STUDYing(スタディング)】

ボードの選択とシリアルポートの設定

ボードとシリアルポートの選択
ボードとシリアルポートの選択

ボードを選択欄をクリックするとボードとシリアルポートの選択画面に遷移します。ボードは「Seeed XIAO nRF52840」を選択します。USBを接続してポートが認識できている場合はSeeed XIAO nRF52840用のCOM番号が表示されています。本記事ではCOM4になっています。

Seeed Studio XIAO nRF52840はUSBに接続したのみではCOMポートを認識しないことあります。USB-TYPE-Cコネクタの横にあるリセットボタン(RST)をダブルクリックのイメージで2度押しするとCOMポートが接続状態になります。

上記の通りCOMポートが認識できないのは個人の設定環境によるものかもしれませんが、COMポートが認識できない場合はRSTを試してみてください。

スポンサーリンク

USER LED(3 Colors)による動作確認

引用:Seeed Studio XIAO nRF52840の外形(Seeed Wikiより)
引用:Seeed Studio XIAO nRF52840の外形(Seeed Wikiより)

Seeed Studio XIAO nRF52840の動作確認を行います。動作確認にはUSER LED(3 Colors)を使ってLEDの点灯色のパターンを変えながら点灯/消灯させます。タイマ管理を行って1000ms毎にLEDを点灯/消灯させるソースコードを作成しコンパイルと書き込みを行います。

Seeed Studio XIAO nRF52840のピン配置などの詳細の情報はSeeed Wiki(Getting Started with Seeed Studio XIAO nRF52840 (Sense))を参照ください。

LEDの点灯パターンの切り替え

pinMode( LED_RED, OUTPUT);
pinMode( LED_GREEN, OUTPUT);
pinMode( LED_BLUE, OUTPUT);

digitalWrite(LED_RED,LOW); //赤を点灯
digitalWrite(LED_GREEN,LOW); //緑を点灯
digitalWrite(LED_BLUE,LOW); //青を点灯
digitalWrite(LED_RED,HIGH); //赤を消灯
digitalWrite(LED_GREEN,HIGH); //緑を消灯
digitalWrite(LED_BLUE,HIGH); //青を消灯

USER LEDは3色LEDであり3つのポートの組み合わせによって点灯させる色を選択することできます。LED_RED、LED_GREEN、LED_BLUEは内部で使用されているDOであり、Seeed Studio XIAO nRF52840のDIOピンであるD0~D10までのピンを使用していません。

pinMode()関数でピン番号とDIOの種別を指定します。第1引数にピン番号を指定し、第2引数にDIOの種別を指定します。出力ポートとして使用する場合はOUTPUTを指定します。

digitalWrite()関数で対象のピン番号の出力レベルを指定します。第1引数にピン番号を指定し、第2引数に出力レベルを指定します。

ハードの構成上LOWを出力すると該当する色が点灯するようになっています。消灯する場合はHIGHを出力します。

2色や3色を同時に点灯すると色が重なって見えるため赤、緑、青以外の色についても表現することができます。

コンパイルと書き込み

コンパイルと書き込み
コンパイルと書き込み

✔マークはコンパイル(検証)を実行します。→マークはコンパイルして書き込みを行います。書き込みはコンパイルしてエラーがなければスタートします。シリアルポートに接続していない場合はコンパイルはできますが書き込みすることができません。

Seeed Studio XIAO nRF52840はUSBに接続しても接続ポートが反応しないことがあります。反応していない場合はArduino IDEのメイン画面右下部分に「Seeed XIAO nRF52840[未接続]」と表示されます。リセットボタンを2回ダブルクリックのイメージで押すと通信ポートが接続できるので接続してソフトを書き込みます。

ソースコード全体のソフトを書き込むと動作を開始してLEDが色を変えながら点灯/消灯することが確認できます。

Seeed Studio XIAO nRF52840は小サイズであることや電源がDC3.3Vであるため各種センサーと接続しやすいのもメリットの一つだと感じています。不便な点はUSBを接続しても通信ポートが接続されないことがあることだと感じています。

スポンサーリンク

ソースコード全体

以下のソースコードはコンパイルして動作確認をしております。コメントなど細かな部分で間違っていたりやライブラリの更新などにより動作しなくなったりする可能性があります。参考としてお使いいただければと思います。

#define TIME_UP 0
#define TIME_OFF -1
#define BASE_CNT 10 //10msがベースタイマとなる
#define LED_CNG 100

int16_t timledcng;
int16_t timled;
uint8_t btns;

uint32_t beforetimCnt = millis();

/*** Local function prototypes */
void mainTimer(void);
void ledSelect(bool r,bool g, bool b);

void setup() {

  pinMode( LED_RED, OUTPUT);
  pinMode( LED_GREEN, OUTPUT);
  pinMode( LED_BLUE, OUTPUT);
}

void loop() {

  mainTimer();

  if( timledcng == TIME_UP){
    timledcng = LED_CNG;

    switch (btns)
    {
    case 0:
      ledSelect(true,false,false);
      break;
    case 2:
      ledSelect(false,true,false);
      break;
    case 4:
      ledSelect(true,true,false);
      break;  
    case 6:
      ledSelect(false,false,true);
      break;
    case 8:
      ledSelect(true,false,true);
      break;
    case 10:
      ledSelect(false,true,true);
      break;
    case 12:
      ledSelect(true,true,true);
      break;                          
    default:
      ledSelect(false,false,false);
      break;
    }

    if( ++btns >= 14){
      btns = 0;
    }
  }
}
/* Timer Management function add */
void mainTimer(void){

  if ( millis() - beforetimCnt >= BASE_CNT ){
    beforetimCnt = millis();
    //10msごとにここに遷移する
    if( timledcng > TIME_UP ){
      timledcng--;
    }
  }
}
/*LEDの選択*/
void ledSelect(bool r,bool g, bool b){

  if( r ){
    digitalWrite(LED_RED,LOW);
  }
  else{
    digitalWrite(LED_RED,HIGH);
  }

  if( g ){
    digitalWrite(LED_GREEN,LOW);
  }
  else{
    digitalWrite(LED_GREEN,HIGH);
  }

  if( b ){
    digitalWrite(LED_BLUE,LOW);
  }
  else{
    digitalWrite(LED_BLUE,HIGH);
  }
}

関連リンク

Arduinoのライブラリを使って動作確認を行ったことを下記リンクにまとめています。

Arduinoで学べるマイコンのソフト開発と標準ライブラリの使い方

Seeeduino XIAOで学べるソフト開発と標準ライブラリの使い方

ESP32-WROOM-32Eで学べるソフト開発と標準ライブラリの使い方

最後まで、読んでいただきありがとうございました。

タイトルとURLをコピーしました