一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ESP8266的UDP廣播詳解

電子設(shè)計(jì) ? 來源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2020-12-26 02:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

說到UDP,伴隨而來的還有另一個(gè)東西,就是TCP。這里不說定義,只說應(yīng)用。簡單來說,這兩者都是網(wǎng)絡(luò)通信中常用的通信協(xié)議。

最主要的區(qū)別,TCP通訊比較穩(wěn)定,它和接收端要進(jìn)行三次握手,接收端有沒有收到數(shù)據(jù),都能知道。優(yōu)點(diǎn)是安全,缺點(diǎn)是和UDP相比,速度慢。UDP在發(fā)送時(shí),不管有沒有接收方,也不管接收方有沒有收到,只要把數(shù)據(jù)發(fā)出去,就完了。所以,相比TCP,安全性差一些,速度要快一些。

但并不是說安全性差,就不能用,像視頻、音頻等一些無關(guān)緊要的數(shù)據(jù),都可以用UDP來進(jìn)行傳輸。

UDP包的最大長度是多少?

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

UDP如何廣播?

IP 255.255.255.255 為廣播地址,往這個(gè)地址發(fā)數(shù)據(jù),局域網(wǎng)中的所有機(jī)器都可以收到。

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

1.包含頭文件

#include "espconn.h"

#include "mem.h"

主要是"espconn.h",涉及到UDP通訊所需的各種數(shù)據(jù)結(jié)構(gòu)。

2.設(shè)置工作模式及相關(guān)參數(shù)

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

struct softap_config config; //定義AP參數(shù)結(jié)構(gòu)體,

wifi_softap_get_config(&config); //獲取當(dāng)前AP模式的參數(shù)

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); //使修改后的參數(shù)生效

此時(shí),如果把程序燒錄進(jìn)去,可以看到當(dāng)前環(huán)境下有一個(gè)ESP8266的wifi,輸入密碼“123456789”可以連接。

3.掃描并連接當(dāng)前環(huán)境下的wifi

跟上一節(jié)一樣,掃描當(dāng)前環(huán)境下的wifi,并進(jìn)行連接。我這里連接我家里的“shatanliu”,你要改成你自己的。

4.連接成功后,設(shè)置UDP相關(guān)參數(shù)

跟上一節(jié)相比,這里要對(duì)Wifi_conned();進(jìn)行修改。

首先頭文件中定義一個(gè)結(jié)構(gòu)體形式的ESPCONN描述符:

struct espconn user_udp_espconn;

關(guān)于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通訊,都要用到這個(gè)結(jié)構(gòu)體,同時(shí),要在結(jié)構(gòu)體內(nèi)設(shè)置相應(yīng)的發(fā)送、接收回調(diào)函數(shù)。

接下來就是一個(gè)UDP參數(shù)的設(shè)置過程:

wifi_set_broadcast_if(STATIONAP_MODE);

設(shè)置UDP廣播包的發(fā)送接口,默認(rèn)soft-ap。這里選擇的是station和soft-ap。

參數(shù):1、station 2、soft-ap 3、station和soft-ap

user_udp_espconn.type=ESPCONN_UDP; //設(shè)置為UDP通信

//開辟UDP參數(shù)需要的空間

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

//設(shè)置本地端口和遠(yuǎn)程端口

user_udp_espconn.proto.udp->local_port=2525;

user_udp_espconn.proto.udp->remote_port=1024;

//設(shè)置遠(yuǎn)程IP

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

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

//設(shè)置發(fā)送完成和接收完成的回調(diào)函數(shù)

espconn_regist_recvcb(&user_udp_espconn,user_udp_recv_cb);

espconn_regist_sentcb(&user_udp_espconn,user_udp_sent_cb);

//使UDP參數(shù)生效

espconn_create(&user_udp_espconn);

//UDP發(fā)送函數(shù)

user_udp_send();

5.定義發(fā)送完成和接收完成的回調(diào)函數(shù)

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! 然后延時(shí)1秒,調(diào)用UDP發(fā)送函數(shù)。

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

void ICACHE_FLASH_ATTR user_udp_recv_cb(void *arg,

char *pdata,

unsigned short len)

{

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

}

把收到的數(shù)據(jù),串口打印出來。

6.定義UDP發(fā)送函數(shù)

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函數(shù)獲取station模式下的MAC地址,并通過espconn_sent函數(shù)打印出來。

函數(shù)定義

sint8 espconn_send(

struct espconn *espconn,

uint8 *psent,

uint16 length

)

參數(shù):

struct espconn *espconn : 對(duì)應(yīng)網(wǎng)絡(luò)傳輸?shù)慕Y(jié)構(gòu)體

uint8 *psent : 發(fā)送的數(shù)據(jù)

uint16 length : 數(shù)據(jù)長度

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

打開網(wǎng)絡(luò)調(diào)試助手:

如圖,依次設(shè)置相關(guān)的參數(shù)。

怎么知道顯示的MAC地址對(duì)不對(duì)?打開路由器的管理界面,看當(dāng)前連接設(shè)備的MAC地址:

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

如果這時(shí)候網(wǎng)絡(luò)調(diào)試助手發(fā)送數(shù)據(jù):hello。

串口助手會(huì)收到如下信息:

至此,UDP廣播說完了。你們可以試一下讓當(dāng)前電腦連接8266,看網(wǎng)絡(luò)調(diào)試助手里的參數(shù)如何修改。

審核編輯:符乾江
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 通信協(xié)議
    +關(guān)注

    關(guān)注

    28

    文章

    1031

    瀏覽量

    41141
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1402

    瀏覽量

    80976
  • UDP
    UDP
    +關(guān)注

    關(guān)注

    0

    文章

    330

    瀏覽量

    34621
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    ESP8266燒錄與機(jī)智云一鍵配網(wǎng)教程

    ESP8266模塊因其低成本和高性能,廣泛應(yīng)用于智能家居和工業(yè)自動(dòng)化等領(lǐng)域。機(jī)智云平臺(tái)提供了一鍵配網(wǎng)功能,簡化了設(shè)備的聯(lián)網(wǎng)過程。本教程將詳細(xì)介紹如何使用ESP8266進(jìn)行燒錄,并通過機(jī)智云實(shí)現(xiàn)一鍵配
    的頭像 發(fā)表于 05-24 11:04 ?438次閱讀
    <b class='flag-5'>ESP8266</b>燒錄與機(jī)智云一鍵配網(wǎng)教程

    ESP8266 太空人動(dòng)畫的 OLED 顯示

    ESP8266 太空人動(dòng)畫的 OLED 顯示
    的頭像 發(fā)表于 10-08 15:06 ?700次閱讀
    <b class='flag-5'>ESP8266</b> 太空人動(dòng)畫的 OLED 顯示

    STM32 ESP8266阿里云鏈接源碼

    stm32F103C8T6 ESP8266 物聯(lián)網(wǎng)電表 登錄阿里云
    發(fā)表于 08-29 14:21 ?9次下載

    esp32和esp8266代碼共用嗎

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

    esp8266esp32區(qū)別是什么

    以下是關(guān)于ESP8266ESP32的主要區(qū)別: 處理器和架構(gòu) : ESP8266 :使用一個(gè)Tensilica L106 80MHz的處理器,屬于Xtensa架構(gòu)。 ESP32 :使
    的頭像 發(fā)表于 08-19 18:16 ?7292次閱讀

    ESP8266需要燒錄固件庫嘛

    需要。ESP8266是一款非常流行的Wi-Fi模塊,廣泛應(yīng)用于物聯(lián)網(wǎng)項(xiàng)目中。它具有低成本、低功耗、易于編程等特點(diǎn),因此受到了許多開發(fā)者的喜愛。在開發(fā)ESP8266項(xiàng)目時(shí),燒錄固件庫是一個(gè)非常重要
    的頭像 發(fā)表于 08-19 17:30 ?1861次閱讀

    esp8266不燒錄可以使用嗎

    ESP8266是一款非常流行的Wi-Fi模塊,廣泛應(yīng)用于物聯(lián)網(wǎng)項(xiàng)目中。然而,如果不進(jìn)行燒錄,ESP8266將無法正常工作。 1. ESP8266簡介 ESP8266是一款由Espres
    的頭像 發(fā)表于 08-19 17:28 ?1666次閱讀

    esp8266wifi模塊怎么連接手機(jī)

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

    STM32F103 + ESP8266與機(jī)智云開發(fā)常見問題集錦:入門者必讀!

    關(guān)于ESP8266模塊的選擇針對(duì)初學(xué)者,強(qiáng)烈建議選擇帶有串口的ESP8266開發(fā)板!這可以避免像我曾經(jīng)遇到的燒錄固件失敗等問題。推薦直接購買已預(yù)裝機(jī)智云固件的模塊,或者帶有串口下載功能的模塊,例如
    的頭像 發(fā)表于 07-18 08:11 ?990次閱讀
    STM32F103 + <b class='flag-5'>ESP8266</b>與機(jī)智云開發(fā)常見問題集錦:入門者必讀!

    ESP8266 UDP數(shù)據(jù)包具有額外的字節(jié),為什么?

    使用版本 AT version:0.21.0.0 SDK version:0.9.5,如果我使用 UDP 發(fā)送少于 18 個(gè)字節(jié),則 ESP8266 發(fā)送的數(shù)據(jù)包末尾有額外的字節(jié)。 IP 和 UDP
    發(fā)表于 07-18 06:59

    ESP8266收到重傳的UDP數(shù)據(jù)包,則udp接收回調(diào)函數(shù)會(huì)調(diào)用兩次,怎么解決?

    我們使用 esp8266 開發(fā)了一個(gè)網(wǎng)格系統(tǒng)。 在所有開發(fā)完成時(shí),我們發(fā)現(xiàn)了一個(gè)關(guān)鍵問題。 如果ESP8266收到重傳的 UDP 數(shù)據(jù)包,則 udp 接收回調(diào)函數(shù)會(huì)調(diào)用兩次。 (*
    發(fā)表于 07-18 06:29

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

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

    ESP8266配置為用作單個(gè)UDP連接的透明WiFi到串行橋接器遇到的疑問求解

    我正在嘗試將我的 ESP8266ESP-WROOM-02) 配置為用作單個(gè) UDP 連接的透明 WiFi 到串行橋接器。ESP8266分配有 IPADD 192.168.47.1,
    發(fā)表于 07-16 06:47

    請(qǐng)問ESP8266如何在UDP中設(shè)置本地端口?

    我正在嘗試使用 AT 命令制作 Access Point UDP 服務(wù)器。 簡而言之,它有效,但我無法控制ESP8266本地端口,因?yàn)樗怯尚酒S機(jī)設(shè)置的。 我想創(chuàng)建一個(gè)具有已知固定端口的服務(wù)器
    發(fā)表于 07-15 08:31

    ESP8266-01在幾個(gè)小時(shí)后停止響應(yīng)了如何解決?

    我已經(jīng)使用 Arduino IDE 為我的家庭自動(dòng)化項(xiàng)目編寫了 ESP8266-01。ESP-01 會(huì)在一段時(shí)間后停止響應(yīng)接收到的 UDP 廣播數(shù)據(jù)。 有人可以告訴我如何解決這個(gè)問題
    發(fā)表于 07-15 07:31