UDP
をオンにするためにパケットを送信するアプリを作成していLED bulb
ます。Ad-hoc
によって作成されたに接続しているときに、すべてのアクションを実行できましたWifi bridge
。
Wifi bridge
次に、メイン ルータに接続できるように を設定します。Wifi bridge
この手順を実行するように AT コマンドを設定しましたが、送信したコマンドに対する応答を から受信できません。
手順は次のとおりです。
ステップ 1 : UDP メッセージを LAN ブロードキャスト IP アドレス "10.10.100.255" およびポート 48899 => "Link_Wi-Fi" に送信します。LAN
上のすべての Wifi ブリッジが詳細を応答します。応答は「10.10.100.254、ACCF232483E8」ですステップ 2 : (wifi ブリッジの設定を変更するためのオプション): 次に、「+ok」を LimitlessLED Wifi ブリッジに送信します。手順 1 で返された応答 IP アドレスに UDP メッセージを送信する "10.10.100.254" => "+ok"
- ステップ 3 : (wifi ブリッジの設定を変更するためのオプション): その後、モジュールに AT コマンド (\r\n で終わる) を送信できます。
UDP パケットを送信するためのコードは次のとおりです。
-(void)configureWifi{
counter++;
NSString *host = @"10.10.100.255";
if ([host length] == 0)
{
[self logError:@"Address required"];
return;
}
int port = 48899; //[portField.text intValue];
if (port <= 0 || port > 65535)
{
[self logError:@"Valid port required"];
return;
}
NSString *msg = @"Link_Wi-Fi";
NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"the message sent is %@", data);
[udpSocket sendData:data toHost:host port:port withTimeout:-1 tag:tag];
}
ソケットをセットアップしてデータを受信するために、次の 2 つのデリゲート メソッドを使用しています。
- (void)setupSocket
{
// Setup our socket.
// The socket will invoke our delegate methods using the usual delegate paradigm.
// However, it will invoke the delegate methods on a specified GCD delegate dispatch queue.
//
// Now we can configure the delegate dispatch queues however we want.
// We could simply use the main dispatc queue, so the delegate methods are invoked on the main thread.
// Or we could use a dedicated dispatch queue, which could be helpful if we were doing a lot of processing.
//
// The best approach for your application will depend upon convenience, requirements and performance.
//
// For this simple example, we're just going to use the main thread.
udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
NSError *error = nil;
if (![udpSocket bindToPort:0 error:&error])
{
[self logError:FORMAT(@"Error binding: %@", error)];
return;
}
if (![udpSocket beginReceiving:&error])
{
[self logError:FORMAT(@"Error receiving: %@", error)];
return;
}
[self logInfo:@"Ready"];
}
データを受信するには、UDP パケットの送信後に呼び出されるメソッドです。GCDAsyncUdpSocket
これは、UDP パケットを送受信するためにプロジェクトで使用したクラスのデリゲート メソッドです。
- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data
fromAddress:(NSData *)address
withFilterContext:(id)filterContext
{
NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
if (msg)
{
[self logMessage:FORMAT(@"RECV: %@", msg)];
}
else
{
NSString *host = nil;
uint16_t port = 0;
[GCDAsyncUdpSocket getHost:&host port:&port fromAddress:address];
[self logInfo:FORMAT(@"RECV: Unknown message from: %@:%hu", host, port)];
}
}
応答を受信できたら、ブリッジを構成するために次の AT コマンドを送信できます。
ありがとう。どんな助けでも大歓迎です。