SSIDとパスワードの変更
このチュートリアルではSSIDとパスワードの変更方法について学びます。 現在のSSIDとパスワードを、任意のSSIDとパスワードに変更できるアプリケーションを作成します。 登録に使用するCGIは config.cgi の SSIDの設定 と ネットワークセキュリティキーの設定 です。 現在のSSIDとパスワードの表示も行いますので、こちらは command.cgi の SSIDの取得 と ネットワークパスワードの取得 を使用して取得します。 それではさっそく作ってみましょう。
画面レイアウトの作成
今回作成するアプリケーションの画面レイアウトです。
Get がタップされると、labelSSID に現在のSSID、labelPassword に現在のパスワードを表示します。 Set がタップされると、登録画面の View Controller に遷移します。 入力画面では、Done がタップされると、SSID、パスワードを登録します。
注意: MASTERCODEは、FlashAirの新しいSSIDやパスワードを設定する際に使用します。 MASTERCODEを確認するには、PCなどにFlashAirを挿入し、”/SD_WLAN/” フォルダに保存されているCONFIGファイルを、お手持ちのテキストエディタなどで開きます(FlashAirの初期設定を終えていない場合は確認ができませんので、先に済ませるようにしてください)。 また、このフォルダは隠しフォルダとなっていますので、隠しフォルダを扱う事が出来るツールを使いましょう。
以下の部品を配置します。
表示画面
- UIButton(
UIButton
)- Get : SSID、パスワードを取得
- Set : SSID、パスワード登録画面を表示
- Label (
UILabel
)- labelSSID : 現在のSSIDを表示
- labelPassword : 現在のパスワードを表示
登録画面
- UIButton(
UIButton
)- Done : SSID、パスワードを登録
- Text View(
UITextField
)- textMASTERCODE : 現在のMASTERCODEを入力
- textSSID : 登録するSSIDを入力
- textPassword1 : 登録するパスワードを入力
- textPassword2 : 登録するパスワードを入力
- View Controller(
UIViewController
) - Scroll View(
UIScrollView
)- キーボード表示時に入力欄を閲覧するために使用
その他
- Navigation Controller(
UINavigationController
)- 登録画面から表示画面へ戻るために使用
このように表示される画面を作ります。
Set がタップされた場合に表示する画面です。 サブクラスを用意します。
- FSSetViewController
コードの作成
SSIDとパスワードの取得
SSIDとパスワードの取得は、command.cgi
にop=104
とop=105
をそれぞれ与えることで実現します。
CGIの実行には、NSString stringWithContentsOfURLを使用しています。 この関数は、指定されたエンコーディングの文字列(ここではUTF-8)と、発生した例外を返します。
Get がタップされた際の動作です。 現在のSSIDとパスワードを取得し設定しています。
FSViewController.h
@interface FSViewController : UIViewController
- (IBAction)buttonGetPush:(id)sender;
@property (strong, nonatomic) IBOutlet UILabel *labelSSID;
@property (strong, nonatomic) IBOutlet UILabel *labelPassword;
@end
FSViewController.m
- (IBAction)buttonGetPush:(id)sender {
NSError *error = nil;
// Get SSID
// Make url
NSURL *url104 = [NSURL URLWithString:@"http://flashair/command.cgi?op=104"];
// Run cgi
NSString *SSIDStr = [NSString stringWithContentsOfURL:url104
encoding:NSUTF8StringEncoding error:&error];
if ([error.domain isEqualToString:NSCocoaErrorDomain]) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:self.title
message:@"op=104 Failed \n check access point" delegate:nil
cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alert show];
NSLog(@"error104 %@\n",error);
return;
}
// Get Password
// Make url
NSURL *url105 = [NSURL URLWithString:@"http://flashair/command.cgi?op=105"];
// Run cgi
NSString *passwordStr = [NSString stringWithContentsOfURL:url105
encoding:NSUTF8StringEncoding error:&error];
if ([error.domain isEqualToString:NSCocoaErrorDomain]) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:self.title
message:@"op=105 Failed \n check access point" delegate:nil
cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alert show];
NSLog(@"error105 %@\n",error);
return;
}
self.labelSSID.text = SSIDStr;
self.labelPassword.text = passwordStr;
}
- 6行目
SSIDの取得に使用するURLです。
op=104
を設定します。 - 8-9行目
CGIが実行されます。
返される文字のエンコードは、ここでは UTF-8 を使用します。
encoding:NSUTF8StringEncoding
を指定しています。 - 21行目
パスワードの取得に使用するURLです。
op=105
を設定します。 - 23-24行目
CGIが実行されます。
返される文字のエンコードは、ここでは UTF-8 を使用します。
encoding:NSUTF8StringEncoding
を指定しています。 - 33-34行目
返された文字列(SSID、パスワード)を、Label に設定しています。
SSIDとパスワードの登録
SSIDとパスワードの登録は、config.cgi
にて パラメータMASTERCODE
、APPSSID
、APPNETWORKKEY
を指定することで実現します。
CGIの実行には、NSString stringWithContentsOfURLを使用しています。 この関数は、指定されたエンコーディングの文字列(ここではUTF-8)と、発生した例外を返します。
Done がタップされた際の動作です。 入力値のチェックを行った後、SSIDとパスワードを登録しています。
FSSetViewController.h
@interface FSSetViewController : UIViewController
@property (strong, nonatomic) IBOutlet UITextField *textMASTERCODE;
@property (strong, nonatomic) IBOutlet UITextField *textSSID;
@property (strong, nonatomic) IBOutlet UITextField *textPassword1;
@property (strong, nonatomic) IBOutlet UITextField *textPassword2;
- (IBAction)buttonDonePush:(id)sender;
@end
FSSetViewController.m
- (IBAction)buttonDonePush:(id)sender {
NSError *error = nil;
// Check
NSCharacterSet *charSet = [NSCharacterSet whitespaceAndNewlineCharacterSet];
// MASTERCODE
NSString *mastercodeText = [self.textMASTERCODE.text
stringByTrimmingCharactersInSet:charSet];
if ([mastercodeText isEqualToString:@""]){
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:self.title
message:@"Enter MASTERCODE" delegate:nil
cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alert show];
return;
}
// SSID
NSString *ssidText = [self.textSSID.text stringByTrimmingCharactersInSet:charSet];
if ([ssidText isEqualToString:@""]){
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:self.title
message:@"Enter SSID" delegate:nil
cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alert show];
return;
}
// password
NSString *password1Text = [self.textPassword1.text
stringByTrimmingCharactersInSet:charSet];
NSString *password2Text = [self.textPassword2.text
stringByTrimmingCharactersInSet:charSet];
if ([password1Text isEqualToString:@""] || [password2Text isEqualToString:@""]){
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:self.title
message:@"Enter password" delegate:nil
cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alert show];
return;
}else if(![password1Text isEqualToString:password2Text]){
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:self.title
message:@"Password mismatch!" delegate:nil
cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alert show];
return;
}
// Set SSID and password
// Make url
NSString *urlStr = [@"http://flashair/config.cgi?MASTERCODE="
stringByAppendingString:mastercodeText];
urlStr = [urlStr stringByAppendingString:@"&APPNETWORKKEY="];
urlStr = [urlStr stringByAppendingString:password1Text];
urlStr = [urlStr stringByAppendingString:@"&APPSSID="];
urlStr = [urlStr stringByAppendingString:ssidText];
NSURL *url = [NSURL URLWithString:urlStr];
// Run cgi
NSString *rtnStr =[NSString stringWithContentsOfURL:url
encoding:NSUTF8StringEncoding error:&error];
if ([error.domain isEqualToString:NSCocoaErrorDomain]){
NSLog(@"config.cgi %@\n",error);
return;
}else{
if([rtnStr isEqualToString:@"ERROR"]){
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:self.title
message:@"config.cgi failed" delegate:nil
cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alert show];
return;
}
}
// Close this View
[self.navigationController popToRootViewControllerAnimated:YES];
}
-(BOOL)textFieldShouldReturn:(UITextField*)textField{
[textField resignFirstResponder];
return YES;
}
-
5-42行目
チェック処理です。
未入力チェック、パスワードの不一致チェックを行っています。 - 46-52行目
使用するURLです。
config.cgi?MASTERCODE=(入力値)&APPNETWORKKEY=(入力値)&APPSSID=(入力値)
を設定します。 - 54-55行目
CGIが実行されます。
返される文字のエンコードは、ここでは UTF-8 を使用します。
encoding:NSUTF8StringEncoding
を指定しています。 - 70行目
登録が成功した場合に、最初の画面に戻ります。 - 74-77行目
キーボードの Done がタップされた際、キーボードが閉じるようにしています。
実行結果
プログラムが出来上がったら、確認をしてみましょう。 まずは Get をタップしてみます。
現在のSSIDとパスワードが表示されました。
次に、 Set をタップします。 ここで、前述したMASTERCODEの入力が必要になるので、FlashAirのCONFIGファイルを確認し、値を把握しておきます。
MASTERCODE、SSID、パスワードを入力します。 パスワードは同じもの2回入力してください。
注意: 入力したSSID、パスワードは必ず覚えておいてください。 Done をタップした後は、今までのSSID、パスワードは無効となり、FlashAirとの接続が切れます。 再度、接続をするためには、入力したSSID、パスワードが必要になります。
Done をタップします。 SSIDとパスワードが切り替わっているので、登録内容を確認する前に無線LANの接続先を、今回登録したSSIDに切り替えます。 Get をタップします。
新しく登録したSSIDとパスワードが表示されました。
以上で、SSIDとパスワードの変更 に関する解説はおわりです。
サンプルコード
ios_tutorial_06.zip (25KB)
このサイトのサンプルコードは二条項BSDライセンスで提供されています。