ESP-WROOM-02の透過モード時のデータ長
現在wifiモジュール基板のESP-WROOM-02で、今までイーサネットポートしかもっていなかった端末機の残っていたUARTポートを利用してwifi通信を行えるようにしたいと考えています。
現在、端末側からESP-WROOM-02に対してwifi APの設定と接続先サーバの設定を完了して、30秒に1回程度送信するための1.2kByte程度のパケットデータをESP-WROOM-02の透過送信モードを使用して送信しようとしています。
受信側のサーバPCでWiresharkを起動して、データの受信状況を確認したのですが、
イーサーネット側で送信していた場合は1.2Kbyte程度のパケットデータ長だったのですが、ESP-WROOM-02で送信してみるとなぜか48Byteのパケットデータ長になってしまい、1.2Kbyteで構成されているデータの頭の4バイトのみしか送信できていないことが分かりました。
1.2KByteの”Packet”というデータパケットは、イーサネットポートからパケットを出力している際には
send(s+1,(BYTE *)Packet,sizeof(TEST_PACKET));
このように送信していたところを
wifiModuleSendAT((BYTE *)Packet,200);
今回wifi送信のための関数として作成した”wifiModuleSendAT”に入れて送信しました。200という引数は、この端末で使用しているucosのペンディング時のエラーとしてのポストのタイムアウト時間です。
send関数の場合、引数としてパケットサイズを見るsizeof(TEST_PACKET)を渡している部分がありますが、wifiModuleSendAT関数ではこの部分がないのですが、パケットサイズを引数として渡さなくてはいけませんでしょうか?
どうぞ、ご教示頂きますようよろしくお願い致します。
wifiModuleSendAT関数のコード
u8 wifiModuleSendAT(u8 * cmd,int timeOutTime)
{
int i;
u8 err;
u8 * pC;
int checkLen;
checkLen = strlen(cmd);
for(i = 0 ; i < strlen(cmd) ; i++)
wireless_put_for_Wifi_data(cmd[i]);
OSSemPend(WifiRxData, timeOutTime, &err);
memset(g_wire_cmd,0,sizeof(g_wire_cmd));
if(err != 0)
{
memset(g_wire_rx_buf,0,MAX_WIRELESS_BUF);
return false;
//continue;
}
pC = strtok(g_wire_rx_buf," ");
i=0;
while(pC != NULL)
{
strcpy(&g_wire_cmd[i][0],pC);
pC = strtok(NULL," ");
i++;
}
memset(g_wire_rx_buf,0,MAX_WIRELESS_BUF);
if(err == 0)
{
if(strstr(cmd,"AT+CIPSEND") != NULL)
{
return TRUE;
}
if(strstr(cmd,"AT+CWJAP") != NULL)
{
return TRUE;
}
if(strstr(cmd,"AT+CIPSTART") != NULL)
{
return TRUE;
}
if(strstr(cmd,"AT+CIFSR") != NULL)
{
return TRUE;
}
if(strstr(g_wire_cmd[0],"OK") != NULL)
{
return TRUE;
}
}
return FALSE;
}
お礼
回答頂きありがとうございます。 TeraTermにもシェルスクリプト機能みたいなマクロ機能というのがあるのですね。今回もそうですが、その他のRS232C関連でこの機能いろいろと便利そうですね。 助かります。