UMEHOSHI ITA TOP PAGE COMPUTER SHIEN LAB
[UMEHOSHI ITA]の制御で使っているIC「PIC32MX270F256B-I/SO」のフラッシュメモリには、テスト用プログラムが書き込まれいています。
以降では、このプログラムを「テスト・ウメ・フラッシュ」と呼ぶことにして解説します。
また、「テスト・ウメ・フラッシュ」を利用したユーザー用のプログラムを
「ウメ・エディットプログラム」と呼ぶことにします。
「ウメ・エディットプログラム」の開発では「umehoshiEditツール」が必要で、
その取得や最初の操作情報は、こちらを参照してください。
(「PICKit3などの書き込みツール」をお持ちの方で、「テスト・ウメ・フラッシュ」を利用しないで、
「MPLAB X IDE」の開発環境ですべてをプログラミングする場合の情報ではありません。)
「テスト・ウメ・フラッシュ」をどのように利用して、「ウメ・エディットプログラム」を
作るかの解説で、「umehoshiEditツール」の使用例を示しています。
各サンプルは、このWebページ上でドラック&コピーして、貼り付けしてご利用ください。
| 各種確認プログラム | 左記に必要な部品の追加例 | 
|---|---|
| (D1のLEDを使う) | |
| とくに必要ありません。 (D1のLEDは、あるとよい) | |
| PWM対応の部品追加例 | |
| ADC 対応の部品追加例 | |
| BEEP SWITCH 対応の部品追加例 | |
| Reset SW, Type-A, CN2 部品追加例 | |
| U20,D4,D5,NPN, D3 部品追加例 | |
| CN11,CN-12 部品追加例 | |
| U19(ESP32) 部品追加例 | |
| U17にRN4020の部品を追加する例 | 
取り付け方は、こちらのリンクをご参照してください。

[UMEHOSHI ITA]基板内「テスト・ウメ・フラッシュ」には、接続しているUSBのホストに対いて、文字列を送信する命令が組み込まれており、
その使い方です。割り込みの基本も解説しています。
| サービス | ビットパターン | 備考 | 
|---|---|---|
| Device Information | 0x80000000 | |
| Battery | 0x40000000 | |
| Heart Rate | 0x20000000 | 
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上記の赤の入力文字は、設定によって見えない場合があります。
+ 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サービスを指定してます。
pi@raspberrypi4:~ $ hciconfigこのように、デファオルでは失敗する場合は、この操作はroot権限を与えて行う必要があるようです。
[bluetooth]# scan on No default controller available
| 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 ここではすぐ閉じて失敗している。 (成功する場合もある ??) | 
| コマンド | 概要 | 
|---|---|
| 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は、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の入出力処理ループから呼び出されます。
#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