2017-06-06 6 views
1

すべての参加者がUDP経由で最も簡単な形式で通信する必要があるESP32(偉大なプラットフォームbtw)を使用して分散アプリケーションを構築しています:ブロードキャスト経由でメッセージを送信し、メッセージはの周囲に浮かんでいます。各参加者は、関連するメッセージを単独でフィルタリングします。ESP32 - ネイティブLwIPライブラリを使用するUDPブロードキャスタ/レシーバ

これまでのところ、私は、次の初期化ルーチンがあります。そして、

int lavor_wifi_openUDPsocket(){ 
    // Create a socket 
    int sckt = socket(AF_INET, SOCK_DGRAM, 0); 
    if (sckt < 0){ 
     printf("socket call failed"); 
     exit(0); 
    } 

    // Prepare binding to port 
    struct sockaddr_in sLocalAddr; 
    // Initialize the address 
    memset((char *)&sLocalAddr, 0, sizeof(sLocalAddr)); 

    sLocalAddr.sin_family = AF_INET; 
    sLocalAddr.sin_len = sizeof(sLocalAddr); 
    sLocalAddr.sin_addr.s_addr = htonl(INADDR_ANY); 
    sLocalAddr.sin_port = UDP_SOCKET_PORT; 

    bind(sckt, (struct sockaddr *)&sLocalAddr, sizeof(sLocalAddr)); 

    return sckt; 
} 

を、メッセージがで送信されます:

void lavor_wifi_sendUDPmsg(int sckt, char* msg, int len){ 
    // Prepare the address to sent to via BROADCAST 
    struct sockaddr_in sDestAddr; 
    // Initialize the address 
    // memset((char *)&sDestAddr, 0, sizeof(sDestAddr)); 

    sDestAddr.sin_family = AF_INET; 
    sDestAddr.sin_len = sizeof(sDestAddr); 
    sDestAddr.sin_addr.s_addr = htonl(INADDR_BROADCAST); 
    sDestAddr.sin_port = UDP_SOCKET_PORT; 

    if(sendto(sckt, msg, len, 0, (struct sockaddr *)&sDestAddr, sizeof(sDestAddr)) < len){ 
     printf("UDP message couldn't be sent."); 
    } 
} 

そして最後に、メッセージを受信すると、このように動作します:

void lavor_wifi_processor(void* sckt){ 
    int nbytes; 
    char buffer[UDP_BUFF_LEN]; 
    // Listen for incoming messages as long as the socket is open 
    while(1){ // TO DO: Test if socket open 
     // Try to read new data arrived at the socket 
     nbytes = recv(*((int *)sckt), buffer, sizeof(buffer), 0); 
    ... 

私は上記の初期化関数を呼び出そうとしても、ESPは1つのGuru Meditationエラーを別のものの後に投げます。

誰もUDP通信の経験がありますか?

答えて

1

私は、この例で動作するようにESP32/UDP/LWIPとUDPを得た:私たちは、IPアドレスを受信するまで()をsend_thread

https://github.com/Ebiroll/qemu_esp32/blob/master/examples/19_udp

注意が開始されていません。

ただし、esp-idfのv2.0が必要な場合もあります。最新のバージョンでGuru Meditationのエラーも出ました。

関連する問題