精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ESP8266的UDP廣播詳解

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2020-12-26 02:29 ? 次閱讀

先來看看ESP8266的UDP通訊,主要看它的廣播模式。說這個,需要先了解UDP通訊是什么?

說到UDP,伴隨而來的還有另一個東西,就是TCP。這里不說定義,只說應用。簡單來說,這兩者都是網絡通信中常用的通信協議。

最主要的區別,TCP通訊比較穩定,它和接收端要進行三次握手,接收端有沒有收到數據,都能知道。優點是安全,缺點是和UDP相比,速度慢。UDP在發送時,不管有沒有接收方,也不管接收方有沒有收到,只要把數據發出去,就完了。所以,相比TCP,安全性差一些,速度要快一些。

但并不是說安全性差,就不能用,像視頻音頻等一些無關緊要的數據,都可以用UDP來進行傳輸。

UDP包的最大長度是多少?

65535個字節。但是除掉IP頭(20字節)和UDP頭(8字節)之后,剩余65507個字節。

UDP如何廣播?

IP 255.255.255.255 為廣播地址,往這個地址發數據,局域網中的所有機器都可以收到。

對UDP有一個基本了解之后,咱們來進行ESP8266的UDP廣播。本節程序是在上一節程序基礎上修改的,所以如果你上一節看懂了,這一節是很簡單的。使用步驟多一點,但是并不麻煩,分為6步。

1.包含頭文件

#include "espconn.h"

#include "mem.h"

主要是"espconn.h",涉及到UDP通訊所需的各種數據結構。

2.設置工作模式及相關參數

wifi_set_opmode(0x03); // station+ soft-ap模式

struct softap_config config; //定義AP參數結構體,

wifi_softap_get_config(&config); //獲取當前AP模式的參數

os_memcpy(config.ssid,"ESP8266",strlen("ESP8266")); //修改AP名稱

os_memcpy(config.password,"123456789",strlen("123456789")); //修改AP密碼

config.ssid_len=strlen("ESP8266"); //修改 AP名稱的長度

wifi_softap_set_config(&config); //使修改后的參數生效

此時,如果把程序燒錄進去,可以看到當前環境下有一個ESP8266的wifi,輸入密碼“123456789”可以連接。

3.掃描并連接當前環境下的wifi

跟上一節一樣,掃描當前環境下的wifi,并進行連接。我這里連接我家里的“shatanliu”,你要改成你自己的。

4.連接成功后,設置UDP相關參數

跟上一節相比,這里要對Wifi_conned();進行修改。

首先頭文件中定義一個結構體形式的ESPCONN描述符:

struct espconn user_udp_espconn;

關于espconn,SDK中給出的定義如下:

/** A espconn descriptor */

struct espconn {

/** type of the espconn (TCP, UDP) */

enum espconn_type type;

/** current state of the espconn */

enum espconn_state state;

union {

esp_tcp *tcp;

esp_udp *udp;

} proto;

/** A callback function that is informed about events for this espconn */

espconn_recv_callback recv_callback;

espconn_sent_callback sent_callback;

uint8 link_cnt;

void *reverse;

};

可以看到,無論是TCP通訊還是UDP通訊,都要用到這個結構體,同時,要在結構體內設置相應的發送、接收回調函數。

接下來就是一個UDP參數的設置過程:

wifi_set_broadcast_if(STATIONAP_MODE);

設置UDP廣播包的發送接口,默認soft-ap。這里選擇的是station和soft-ap。

參數:1、station 2、soft-ap 3、station和soft-ap

user_udp_espconn.type=ESPCONN_UDP; //設置為UDP通信

//開辟UDP參數需要的空間

user_udp_espconn.proto.udp=(esp_udp *)os_zalloc(sizeof(esp_udp));

//設置本地端口和遠程端口

user_udp_espconn.proto.udp->local_port=2525;

user_udp_espconn.proto.udp->remote_port=1024;

//設置遠程IP

const char udp_remote_ip[4]={255,255,255,255};

os_memcpy(user_udp_espconn.proto.udp->remote_ip,udp_remote_ip,4);

//設置發送完成和接收完成的回調函數

espconn_regist_recvcb(&user_udp_espconn,user_udp_recv_cb);

espconn_regist_sentcb(&user_udp_espconn,user_udp_sent_cb);

//使UDP參數生效

espconn_create(&user_udp_espconn);

//UDP發送函數

user_udp_send();

5.定義發送完成和接收完成的回調函數

void ICACHE_FLASH_ATTR user_udp_sent_cb(void *arg)

{

os_printf("SEND SUCCESS!");

os_timer_disarm(&test_timer);

os_timer_setfn(&test_timer,(os_timer_func_t *)user_udp_send,0);

os_timer_arm(&test_timer,1000,0);

}

串口打印:SEND SUCCESS! 然后延時1秒,調用UDP發送函數。

為什么串口不發送中文?SDK3.0的版本,串口對中文的支持好像不太好,有興趣的自己試一下。

void ICACHE_FLASH_ATTR user_udp_recv_cb(void *arg,

char *pdata,

unsigned short len)

{

os_printf("udp have received data:%s",pdata);

}

把收到的數據,串口打印出來。

6.定義UDP發送函數

void ICACHE_FLASH_ATTR user_udp_send(void)

{

char hwaddr[6];

char DeviceBuffer[40]={0};

wifi_get_macaddr(STATION_IF,hwaddr);

os_sprintf(DeviceBuffer,"DEVICE MAC ADDRESS IS:"MACSTR"!!

ESP8266 IOT!",MAC2STR(hwaddr));

espconn_send(&user_udp_espconn,DeviceBuffer,os_strlen(DeviceBuffer));

}

通過wifi_get_macaddr函數獲取station模式下的MAC地址,并通過espconn_sent函數打印出來。

函數定義

sint8 espconn_send(

struct espconn *espconn,

uint8 *psent,

uint16 length

)

參數:

struct espconn *espconn : 對應網絡傳輸的結構體

uint8 *psent : 發送的數據

uint16 length : 數據長度

程序修改完成,保存、清理、編譯、下載一條龍,然后重新上電。這里,需要借助串口助手和網絡調試助手兩個工具來查看效果。效果如下所示:

打開網絡調試助手:

如圖,依次設置相關的參數。

怎么知道顯示的MAC地址對不對?打開路由器的管理界面,看當前連接設備的MAC地址:

如此,說明發送端(路由下的8266)和接收端(路由下的PC)成功進行通信。

如果這時候網絡調試助手發送數據:hello。

串口助手會收到如下信息:

至此,UDP廣播說完了。你們可以試一下讓當前電腦連接8266,看網絡調試助手里的參數如何修改。

審核編輯:符乾江
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 通信協議
    +關注

    關注

    28

    文章

    861

    瀏覽量

    40274
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1351

    瀏覽量

    78999
  • UDP
    UDP
    +關注

    關注

    0

    文章

    324

    瀏覽量

    33882
收藏 人收藏

    評論

    相關推薦

    ESP8266 太空人動畫的 OLED 顯示

    ESP8266 太空人動畫的 OLED 顯示
    的頭像 發表于 10-08 15:06 ?218次閱讀
    <b class='flag-5'>ESP8266</b> 太空人動畫的 OLED 顯示

    STM32 ESP8266阿里云鏈接源碼

    stm32F103C8T6 ESP8266 物聯網電表 登錄阿里云
    發表于 08-29 14:21 ?5次下載

    esp32和esp8266代碼共用嗎

    本文將介紹ESP32和ESP8266兩款流行的微控制器在代碼共用性方面的可能性與差異性。 一、引言 隨著物聯網技術的飛速發展,越來越多的智能設備開始進入我們的生活。其中,ESP32和ESP82
    的頭像 發表于 08-19 18:23 ?1003次閱讀

    esp8266esp32區別是什么

    以下是關于ESP8266ESP32的主要區別: 處理器和架構 : ESP8266 :使用一個Tensilica L106 80MHz的處理器,屬于Xtensa架構。 ESP32 :使
    的頭像 發表于 08-19 18:16 ?4512次閱讀

    esp8266不燒錄可以使用嗎

    ESP8266是一款非常流行的Wi-Fi模塊,廣泛應用于物聯網項目中。然而,如果不進行燒錄,ESP8266將無法正常工作。 1. ESP8266簡介 ESP8266是一款由Espres
    的頭像 發表于 08-19 17:28 ?658次閱讀

    esp8266wifi模塊怎么連接手機

    ESP8266 WiFi模塊連接手機主要可以通過兩種方式實現: 通過路由器連接(STA模式)和直接作為熱點連接(AP模式) 。以下是兩種連接方式的步驟: 一、通過路由器連接(STA模式) 配置
    的頭像 發表于 08-19 17:27 ?2305次閱讀

    ESP8266收到重傳的UDP數據包,則udp接收回調函數會調用兩次,怎么解決?

    我們使用 esp8266 開發了一個網格系統。 在所有開發完成時,我們發現了一個關鍵問題。 如果ESP8266收到重傳的 UDP 數據包,則 udp 接收回調函數會調用兩次。 (*
    發表于 07-18 06:29

    如何在地址239.255.255.250端口1900上收聽UDP廣播數據包嗎?

    有人知道如何在地址 239.255.255.250 端口 1900 上收聽 UDP 廣播數據包嗎? 基本上,我如何獲得使用組播數據包并使用 AT 命令偵聽 239.255.255.250 上的所有流量的ESP8266
    發表于 07-16 07:42

    請問ESP8266如何在UDP中設置本地端口?

    我正在嘗試使用 AT 命令制作 Access Point UDP 服務器。 簡而言之,它有效,但我無法控制ESP8266本地端口,因為它是由芯片隨機設置的。 我想創建一個具有已知固定端口的服務器
    發表于 07-15 08:31

    ESP8266-01在幾個小時后停止響應了如何解決?

    我已經使用 Arduino IDE 為我的家庭自動化項目編寫了 ESP8266-01。ESP-01 會在一段時間后停止響應接收到的 UDP 廣播數據。 有人可以告訴我如何解決這個問題
    發表于 07-15 07:31

    使用UDP廣播在兩個ESP8266之間進行通信,發送會存在延遲是怎么回事?

    我正在使用 UDP 廣播在兩個ESP8266 (wemos) 之間進行通信。 作為測試,我只是從第一個設備發送 10 個字節,第二個設備只是回顯它。 發送方在 200 毫秒延遲之前沒有得到他的響應。 這種延遲可以解釋嗎?我需要配
    發表于 07-11 06:27

    esp8266定時器中程序占用時間太長,導致AP無法廣播或者廣播了連接不上怎么解決?

    使用esp8266定時器去跑ws2811效果,目前的情況是可以跑效果,但是在AP模式下,esp8266無法廣播,改了廣播間隔,還是會出現找不到廣播
    發表于 07-10 08:07

    ESP8266網絡天氣時鐘OLED顯示

    基于ESP8266實現網絡獲取天氣和時鐘并OLED顯示
    的頭像 發表于 06-28 04:46 ?1006次閱讀
    <b class='flag-5'>ESP8266</b>網絡天氣時鐘OLED顯示

    國產低成本Wi-Fi SoC解決方案芯片ESP8266ESP8285對比差異

    ESP8266ESP8285對比差異 ESP8285相當于在ESP8266基礎上多加了1/2MB Flash, ESP8285與
    的頭像 發表于 05-17 11:44 ?1190次閱讀
    國產低成本Wi-Fi SoC解決方案芯片<b class='flag-5'>ESP8266</b>與<b class='flag-5'>ESP</b>8285對比差異

    使用Wi-Fi ESP8266方案模組接入云平臺

    選擇Wi-Fi的應用模式,列出、加入、退出接入點,建立TCP/UDP連接、獲得狀態、發送數據等操作。ESP8266模塊的三種工作模式如下:①Sation模式:Sat
    的頭像 發表于 05-10 08:20 ?1752次閱讀
    使用Wi-Fi <b class='flag-5'>ESP8266</b>方案模組接入云平臺