UMEHOSHI ITA TOP PAGE    COMPUTER SHIEN LAB

[UMEHOSHI ITA]の制御で使っているIC「PIC32MX270F256B-I/SO」のフラッシュメモリには、テスト用プログラムが書き込まれいています。
以降では、このプログラムを「テスト・ウメ・フラッシュ」と呼ぶことにして解説します。
また、「テスト・ウメ・フラッシュ」を利用したユーザー用のプログラムを 「ウメ・エディットプログラム」と呼ぶことにします。
「ウメ・エディットプログラム」の開発では「umehoshiEditツール」が必要で、 その取得や最初の操作情報は、こちらを参照してください。
(「PICKit3などの書き込みツール」をお持ちの方で、「テスト・ウメ・フラッシュ」を利用しないで、 「MPLAB X IDE」の開発環境ですべてをプログラミングする場合の情報ではありません。)
「テスト・ウメ・フラッシュ」をどのように利用して、「ウメ・エディットプログラム」を 作るかの解説で、「umehoshiEditツール」の使用例を示しています。
各サンプルは、このWebページ上でドラック&コピーして、貼り付けしてご利用ください。

各種確認プログラム左記に必要な部品の追加例

umehoshiEditの使い方(Lチカで始める)

(D1のLEDを使う)

USBで接続されるホストにメッセージ(文字列)を送信する。

とくに必要ありません。
(D1のLEDは、あるとよい)

モータ制御、PWM (Timer2利用)

PWM対応の部品追加例

ADC(A/Dコンバータ)を使う(Timer3利用)

ADC 対応の部品追加例

BEEP(ブザー音で、デフォルトのCORE Timer、Timer1を利用)

BEEP SWITCH 対応の部品追加例

[UMEHOSHI ITA]単体で動作させる

Reset SW, Type-A, CN2 部品追加例

赤外線制御

U20,D4,D5,NPN, D3 部品追加例

UART を介して、RN-42(Bluetooth)で制御

CN11,CN-12 部品追加例

UART を介して、ESP32-WROOM-32DをBasic言語で制御

U19(ESP32) 部品追加例

UART を介して、RN4020(BLE)で制御

U17にRN4020の部品を追加する例

UART を介して、RN4020(Bluetooth Low Energy)を使う

取り付け方は、こちらのリンクをご参照してください。


[UMEHOSHI ITA]基板内「テスト・ウメ・フラッシュ」には、接続しているUSBのホストに対いて、文字列を送信する命令が組み込まれており、 その使い方です。割り込みの基本も解説しています。

BLE(Bluetooth Low Energy)の基礎知識

BLEでは通信の役割分担が明確に決まって、「セントラル」と「ペリフェラル」に分かれています
これはUSBのホスト機器とクライアント機器の関係に似ています。
主にパソコンやスマートフォンが「セントラル側」で、 データを送るセンサー(温度センサーや加速度センサー)側などは「ペリフェラル側」になります。
そして、あらかじめ決められたサービスと呼ばれる通信のやり取り技法が決められています。
この決められたことを「GATT(Generic Attributes)プロファイル」と言います。
GATTは 「どのようなサービスやキャラクタリスティックのUUIDを使い、どのような値を読み書きすると、どのようになるのか」 が決められます。
以下にRN4020の定義サービスの一部を示します。(RN4020のサービス指定用ビットパターン)
サービスビットパターン備考
Device Information0x80000000
Battery0x40000000
Heart Rate0x20000000

上記で3通りを示していますが、RN4020の定義サービスは17通りのサービスが定義済みです。
他に、ユーザ定義のプライベートサービス(このビットパターンは[0x00000001])も可能です。

RN4020の動作確認

[UMEHOSHI ITA]に取り付けた「RN4020-V/RM123(BLE)」をUARTを介した操作はスルーモードで行います。
PC側で起動した「Tera Term」のSerialのCOMポートによる接続で、ターミナルを開き、 『Eと[Enter]』のキー操作を行った後に『Tと[Enter]』の入力操作をしています。
これで、ターミナルの入出力は取り付けた「RN4020」とやり取りすることになります。
なお、シリアルコマンドは必ずCRのキャリッジリターン(0Dh)で終端します。
また、RN-4020からの戻り値はCRとLF(0Ah)で終端されています。
この「RN4020」に対する操作情報は、 RN4020 Bluetooth? Low Energy モジュールユーザガイド 「70005191A_JP.pdf や 「50002279B.pdf に記されています。(インターネットで容易に見つかるでしょう)

以下は、「+」「Enter」でエコー状態切り替えでONにし、
「SF,1」「Enter」で工場出荷時の既定値の設定にリセットし、
「D」「Enter」で設定内容をダンプ出力し、
「R,1」「Enter」で再起動し、新しい設定を有効している例です。
(「+」を入力してEcho Onにしないと、キー入力表示しません。)
Echo On
SF,1
AOK1
D
BTA=0491621AE426
Name=RNE426
Connected=no
Bonded=no
Server Service=80000000
Features=20000000
TxPower=4
R,1
Reboot

CMD
上記の赤の入力文字は、設定によって見えない場合があります。
上記のおBTA=の文字列「0491621AE426」がMACアドレスに相当します。

「RN4020」には、18個のサービスがありますが、以下ではその一つであるBatteryサービスを 指定する例です。
これはバッテリーの値を通信するためのサービスですが、 必ずバッテリーのためだけに使わなければいけないということ ではなく、「バッテリーの値通知に適している」というだけです.
+
SS,40000000
AOK
SR,00000000
AOK
R,1
Reboot
CMD
D
BTA=0491621AE426
Name=RNE426
Connected=no
Bonded=no
Server Service=40000000
Features=00000000
TxPower=4
LS
180F
  2A19,000B,V
  2A19,000C,C
END
F
AOK
A
AOK
上記「SS,40000000」の40000000でBatteryサービスを指定してます。
SR,00000000」でペリフェラルで使う指定です。
LS」でサーバサービスをリスト表示するコマンドです。
Fで、スキャンを開始して、 Aで、アドバタイズを開始して接続を待ちます。
LSの応答1行目の180Fhは,Battery ServiceのUUIDです。
次の行の,2A19hはBattery LevelのUUIDで、この行最後の"V"で、000Bhの値のハンドルと分かります。
このままターミナルを閉じないで、 別途ターミナルを開き、そこでRaspberry Pi と遠隔操作してRN4020に接続します。
「A」コマンドによってアドバタイズを開始して接続を待ちます。また「Y」このアドバタイズを停止します。
「U」コマンドは既存のボンディングを解除し、特定相手へのアドバタイズを停止し、 不特定多数に向けたアドバタイズを開始します。
また「F」でスキャンを開始、「X」 スキャンを停止します。

Raspberry Pi からの接続実験

以下は、Raspberry Piのターミナルで、hciconfigコマンドにより接続の確認を行った内容です。
なおRaspberry Piは、「sudo apt-get install -y pi-bluetooth」のインストールをしておく必要があります。
bluetoothctlコマンドで、セッションの開始が始まり終了まで対話的に操作できます。
pi@raspberrypi4:~ $ hciconfig
[bluetooth]# scan on No default controller available
このように、デファオルでは失敗する場合は、この操作はroot権限を与えて行う必要があるようです。
以下はsuのrootを使えるようにして行った時の例です。
右のRN4020のUARTターミナルは、上記の続きで赤の部分は左右のターミナルで連動する部分です。
その左右を合わせるために、RN4020のターミナルには余計な行を追加しています。
root@raspberrypi4:/home/pi/ble# bluetoothctl
[NEW] Controller DC:A6:32:72:DF:38 raspberrypi4 [default]
[bluetooth]# show
Controller DC:A6:32:72:DF:38
        Name: raspberrypi4
        Alias: raspberrypi4
        Class: 0x480000
        Powered: yes
        Discoverable: no
        Pairable: yes
        UUID: Headset AG                (00001112-0000-1000-8000-00805f9b34fb)
        UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control        (0000110e-0000-1000-8000-00805f9b34fb)
        UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
        UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
        UUID: Audio Source              (0000110a-0000-1000-8000-00805f9b34fb)
        UUID: Handsfree Audio Gateway   (0000111f-0000-1000-8000-00805f9b34fb)
        Modalias: usb:v1D6Bp0246d0532
        Discovering: no

[bluetooth]# scan on
Discovery started
[CHG] Controller DC:A6:32:72:DF:38 Discovering: yes	
[NEW] Device 04:91:62:1A:E4:26 RNE426	        出現しなければRN4020で「A」の操作をする
[bluetooth]# pair 04:91:62:1A:E4:26
Attempting to pair with 04:91:62:1A:E4:26
[CHG] Device 04:91:62:1A:E4:26 Connected: yes
[CHG] Device 04:91:62:1A:E4:26 Connected: no
[CHG] Device 04:91:62:1A:E4:26 Paired: yes
Pairing successful
[bluetooth]# connect 04:91:62:1A:E4:26
Attempting to connect to 04:91:62:1A:E4:26
[CHG] Device 04:91:62:1A:E4:26 Connected: yes
Connection successful
[NEW] Primary Service
        /org/bluez/hci0/dev_04_91_62_1A_E4_26/service0008
        Generic Attribute Profile
[CHG] Device 04:91:62:1A:E4:26 UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Device 04:91:62:1A:E4:26 UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Device 04:91:62:1A:E4:26 UUIDs: 0000180f-0000-1000-8000-00805f9b34fb
[CHG] Device 04:91:62:1A:E4:26 ServicesResolved: yes
[NEW] Device 75:2E:21:61:AE:0A 75-2E-21-61-AE-0A
[RNE426]# scan off
Discovery stopped
[CHG] Controller DC:A6:32:72:DF:38 Discovering: no
[CHG] Device 75:2E:21:61:AE:0A TxPower is nil
[CHG] Device 75:2E:21:61:AE:0A RSSI is nil
[CHG] Device 04:91:62:1A:E4:26 RSSI is nil
[DEL] Device 75:2E:21:61:AE:0A 75-2E-21-61-AE-0A
[RNE426]# info 04:91:62:1A:E4:26
Device 04:91:62:1A:E4:26
        Name: RNE426
        Alias: RNE426
        Paired: yes
        Trusted: no
        Blocked: no
        Connected: yes
        LegacyPairing: no
        UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
        UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
        UUID: Battery Service           (0000180f-0000-1000-8000-00805f9b34fb)
[RNE426]# disconnect 04:91:62:1A:E4:26
Attempting to disconnect from 04:91:62:1A:E4:26
[CHG] Device 04:91:62:1A:E4:26 ServicesResolved: no
Successful disconnected
[CHG] Device 04:91:62:1A:E4:26 Connected: no
[bluetooth]# connect 04:91:62:1A:E4:26
Attempting to connect to 04:91:62:1A:E4:26
[CHG] Device 04:91:62:1A:E4:26 Connected: yes
Connection successful
[CHG] Device 04:91:62:1A:E4:26 Connected: no
[bluetooth]# quit
[DEL] Controller DC:A6:32:72:DF:38 raspberrypi4 [default]
[DEL] Primary Service
        /org/bluez/hci0/dev_04_91_62_1A_E4_26/service0008
        Generic Attribute Profile
root@raspberrypi4:/home/yuu/ble#



Reboot
CMD

+
Echo On

D
BTA=0491621AE426
Name=RNE426
Connected=no
Bonded=no
Server Service=40000000
Features=00000000
TxPower=4






A
AOK
Connection End
A
AOK
Connected
Secured
Bonded
Connection End

A
AOK
Secured
Connected
WC,000C,0100.
 ここでの接続は成功している。











D
BTA=0491621AE426
Name=RNE426
Connected=DCA63272DF38,0
Bonded=DCA63272DF38,0
Server Service=40000000
Features=00000000
TxPower=4






Connection End



A
AOK
Secured
Connected
Connection End 
 ここではすぐ閉じて失敗している。
 (成功する場合もある ??)



04:91:62:1A:E4:26 RNE426の箇所が「RN4020」のモジュールです。
そしてshowコマンドでコントローラの状態表示させ、ペアリングして、接続して、情報確認後、接続を切って、quitで終了しています。
 (赤がキー操作部です。)
以下に、bluetoothctlのセッションで使う代表的なコマンドを示します。
コマンド概要
showコントローラの状態表示
scan (on/off)デバイス検索モード起動/停止
listローカルコントローラのリスト表示
select (ctrl)コントローラ (ローカルの BT) 選択
power (on/off)コントローラ起動/停止
discoverable (on/off) on で発見可能にする
devicesデバイス表示
pair (dev MAC address)ペアリング
trust (dev MAC address)デバイスを信用する
paired-devicesペアリング済デバイス表示
remove (dev MAC address) ペアリングの削除
agent (on/off/capability)リモートデバイスからペアリングを行う場合
default-agentリモートデバイスからペアリングを行う場合
pairable (on/off)ペア機能の ON/OFF
connect (dev MAC address)接続
info (dev MAC address)デバイスの状態
disconnect (dev MAC address)デバイス切断

RN4020の設定を「ウメ・エディットプログラム」で行う

RN4020は、UART ハードウェア フロー制御機能があり、その方がミス無く送信できます。
そこで、[UMEHOSHI ITA]をターミナルに繋いで、次のようにスルーモードにして、SRコマンドでフロー制御にしておきます。
(でフロー制御への遷移は、「SR,02000000」で行います。

E
T
+
Echo On
SF,1
SR,02000000
R,1
Reboot

CMD
+
BTA=0491621AE426
Name=RNE426
Connected=no
Bonded=no
Server Service=80000000
Features=02000000
TxPower=4

プログラムで以下の設定(送信)を行う。
D
SS,40000000
SR,02000000
D
LS
A
「ウメ・エディットプログラム」の任意の処理は、USBの入出力処理ループから呼び出されます。
このループは止めることができないので、必要な処理が終わったら速やかに戻る必要があります。
そこで、タイマー割り込みでこの文字列を1文字づつUARTに送信するプログラムがよいでしょう。
それを以下に示します。(rn4020_test.c)
#include <xc.h>
#include "common.h"

char **prg=NULL; 	// RN4020への初期プログラムポインタ
int prg_n =0;
int prg_i =0;

char *prg1[]= 	// RN4020への初期プログラム
{
	"D",			// 表示
	"SS,40000000",	// Batteryサービスを指定
	"SR,02000000",    // ペリフェラルとフロー制御で使う指定
	"D",			// 表示
	"LS",			// サーバサービスをリスト表示
	"A",			// アドバタイズを開始
	NULL,
};

void timer(){//「割り込みで目的のプログラム行うため処理: 0.00005秒ごとに呼び出される。」
	IEC0bits.T4IE = 0;// Timer4 Enable(割込み不可)

	if( prg[prg_n] != NULL ){
		if(prg[prg_n][prg_i] != 0){
			_send_uart1(prg[prg_n][prg_i]);//RN4020へ送信
			prg_i++;
		} else {
			_send_uart1('\r');//RN4020へ送信
			_send_uart1('\n');//RN4020へ送信
			prg_n++;
			prg_i=0;
			_RB15 = ! _RB15;// D1 LEDを反転
		}
	}
	IEC0bits.T4IE = 1;// Timer4 Enable(割込み許可)
}

void restart(){
	_core_wait(5);// 遅延実験用 
	prg = prg1;
	U1MODEbits.RTSMD = 0; // UxRTS ピンモード選択をフロー制御モード
	U1MODEbits.UEN = 2;//UxTX、UxRX、UxCTS、UxRTS ピンを有効にして使う

	_HANDLES[_IDX_TIMER_4_FUNC] = timer;//デフォルトで0.00005秒ごとに呼び出しに登録 	
	IEC0bits.T4IE = 1;// Timer4 Enable(割込み許可)
	T4CONbits.ON = 1;// timer割込みオン
}

__attribute__((address( 0x80005000 ))) void setting(void);
void setting()
{
	_HANDLES[_IDX_INIT_SUB_FUNC] = restart;
	restart();
	_RB5 = 0;// 起動確認用のLED D1の消灯
}
以下が実行時の画面です。
R00800050000061
START:80005000
BTA=0491621AE426
Name=RNE426
Connected=no
Bonded=no
Server Service=80000000
Features=02000000
TxPower=4
AOK
AOK
BTA=0491621AE426
Name=RNE426
Connected=no
Bonded=no
Server Service=40000000
Features=02000000
TxPower=4
180A
  2A25,000B,V
  2A27,000D,V
  2A26,000F,V
  2A28,0011,V
  2A29,0013,V
  2A24,0015,V
END
AOK