1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

nRF Connect SDKによるBLEアプリケーション開発2:メッセージ出力

Last updated at Posted at 2024-11-03

記事の概要

Nordic社製のBLEモジュール nRF53 を用いて、nRF Connect SDKによりBLEアプリケーションを開発する方法を紹介します

今回はメッセージ出力させる方法について説明します。
メッセージ出力方法は、USB端子を介してUSB CDC ACM を使用する方法や、JLinkを用いてJTAG/SWD経由で入出力する方法などもありますが、今回はUART通信機能を利用します。

なお、今回の記事の内容については以下のNordicの演習が参考になります。

新規アプリケーション作成

今回はサンプルを流用するのではなく、新規にアプリケーションを作成します。

VS Code の nRF Connect アイコンをクリックしてNRF CONNECT サイドウィンドウを開き、 WELCOME を展開し、Create a new application をクリックします。

新規作成01.png

Create a blanv application を選択します。

新規作成02.png

アプリケーションの置き場所とアプリケーション名を設定します。

新規作成03.png

次はボードの設定をします。APPLICATIONS を展開し、Add build configuration をクリックします。

新規作成05.png

前回の記事で作成したオリジナル基板についての boards ファイル、 trial_nrf5340 を以下では使用します。

Boards target に trial_nrf5340 を入力し、画面最下部の build COnfigutation をクリックします。

新規作成06.png

自動でビルドが実行されてから、BUILD を展開すると、 Source Files -> Application -> src に以下の main.c ファイルが生成されています。

main.c
#include <zephyr/kernel.h>

int main(void)
{
        return 0;
}

UART通信によるメッセージ出力

UART機能設定

メッセージ出力には UART 通信を使用するので、ボードの設定を編集し UART機能を追加します。

Devicetree Boards file をクリックしてボード設定を開き、 NODES を展開し、peripheral の uart0 にチェーンを入れます。

次に uart0 をクリックして設定画面を表示させ、 PINS を展開し 端子を設定します。
クロックやAD端子などの特定の機能が決まっている端子、既に LEDやスイッチと接続されている端子でなければ、任意の端子を選ぶことができます。

今回は TX端子を P0.12 に割り当て、RX端子を P0.11 に割り当てました。
RTS端子とCTS端子は使用しませんが、端子設定だけはしておきます。(RTS端子を P0.10 に割り当て、CTS端子を P0.09 に割り当てました)

通信速度は 115200 にしておきます。別の通信速度にしても問題ありません。

uart01b.png

以上の設定を行うと、 trial_nrf5340.dts に以下の UART0 設定が追加されます。
なお、上記のツール設定を行わず、 trial_nrf5340.dts に以下の設定を直接入力してもかまいません。

trial_nrf5340.dts
/* UART0 GPIOs can be configured for other use-cases */
&uart0 {
	/* Disabled by default */
	current-speed = <115200>;
	status = "okay";
	pinctrl-0 = <&uart0_default>;
	pinctrl-1 = <&uart0_sleep>;
	pinctrl-names = "default", "sleep";
};

また、 メッセージをコンソールに出力させたいので、以下のようにUARTモジュールをコンソールと関連付ける設定を追加します。

trial_nrf5340.dts
/ {
	model = "trial_nrf5340";
	compatible = "mpengineering,trial-nrf5340";

	chosen {
		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
		zephyr,code-partition = &slot0_ns_partition;
		zephyr,console = &uart0;  /* UARTモジュールをコンソールと関連付ける設定を追加する */
	};

また defconfig ファイルに以下の設定を追加します。

trial_nrf5340_defconfig
# Enable console
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y

USB-シリアル変換

現時点では開発ボード nRF5340 MDBT53-1M の UART入出力端子がどこにもつながっていません。

そこで USB-シリアル変換モジュールを外付けすることで、PCとUSB接続して PC-nRF53 間でUART通信できるようにします。
今回はマルツで販売されている PL2303SA搭載モジュールを使用します。

なお、以下の点に注意してハンダ付けしてください。

  • USBから電源供給するので USB-シリアル変換モジュールの SJ1 をハンダでつなぐ
  • nRF53 は 3.3V で動作しており、TXD/RXD は内蔵の 3.3V レギュレーションの出力を使っても問題ないので、 USB-シリアル変換モジュールの SJ2 をハンダでつなぐ
  • モジュールのRXD端子は nRF53 のTXD端子と接続し、モジュールのTXD端子は nRF53 のRXD端子と接続する
  • モジュールは内部給電しているので、3.3V端子とGNDは nRF53 と接続しなくてもいい
IMG_7874.jpg

printk

main.cを以下のように編集します。

main.c
#include <zephyr/kernel.h>
#include <zephyr/sys/printk.h>

int main(void)
{
       while(1)
       {
               printk("Hello, World!\n");
               k_sleep(K_SECONDS(1));
       }
       return 0;
}

printk 関数を使用することで、 UART通信のメッセージをターミナルに表示できます。

連続でUART通信すると通信が詰まってしまい、諸々の機能に影響を及ぼすので、1秒間隔でメッセージ出力するように k_sleep 関数を使用しています。

なお、UART 通信は他の機能を邪魔することがあるので、実際の製品などではメッセージ出力はデバッグ時のみにして、本番時には無効化することをお勧めします。

動作確認

ACTIONS を展開して Build と Flash を行います。
次いで ターミナルソフトの TeraTerm を立ち上げて シリアルを選択します

uart02.png

「設定」から「シリアルポート」を選択し、スピードを先ほどに設定した通信速度と同じにします。

uart03.png

すると以下のように1秒ごとにメッセージ出力されます。

uart04.png

その他のメッセージ出力方法

USB CDC ACMを利用したメッセージ出力方法については以下をご参照ください。

JLinkを用いてJTAG/SWD経由で入出力する方法については以下をご参照ください。

関連記事

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?