ESP32 UDP 05

1.在上一文章基础上修改,文章网址

ESP32-Ethernet-04-CSDN博客

2.基本代码

/* Ethernet Basic ExampleThis example code is in the Public Domain (or CC0 licensed, at your option.)Unless required by applicable law or agreed to in writing, thissoftware is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES ORCONDITIONS OF ANY KIND, either express or implied.
*/
#include <stdio.h>
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_netif.h"
#include "esp_eth.h"
#include "esp_event.h"
#include "esp_log.h"
#include "ethernet_init.h"
#include "sdkconfig.h"
#include "nvs_flash.h"
#include "lwip/err.h"
#include "lwip/sockets.h"
#include "lwip/sys.h"
#include <lwip/netdb.h>static const char *TAG = "eth_example";/** Event handler for Ethernet events */
static void eth_event_handler(void *arg, esp_event_base_t event_base,int32_t event_id, void *event_data)
{uint8_t mac_addr[6] = {0};/* we can get the ethernet driver handle from event data */esp_eth_handle_t eth_handle = *(esp_eth_handle_t *)event_data;esp_netif_t *eth_netif=(esp_netif_t *)arg;switch (event_id) {case ETHERNET_EVENT_CONNECTED:esp_netif_dhcpc_stop(eth_netif);esp_netif_ip_info_t eth;esp_netif_set_ip4_addr(&eth.ip,192, 168, 1, 22);esp_netif_set_ip4_addr(&eth.gw,192, 168, 1, 1);esp_netif_set_ip4_addr(&eth.netmask, 255, 255, 255, 0);esp_netif_set_ip_info(eth_netif,&eth);esp_eth_ioctl(eth_handle, ETH_CMD_G_MAC_ADDR, mac_addr);ESP_LOGI(TAG, "Ethernet Link Up");ESP_LOGI(TAG, "Ethernet HW Addr %02x:%02x:%02x:%02x:%02x:%02x",mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);break;case ETHERNET_EVENT_DISCONNECTED:ESP_LOGI(TAG, "Ethernet Link Down");break;case ETHERNET_EVENT_START:ESP_LOGI(TAG, "Ethernet Started");break;case ETHERNET_EVENT_STOP:ESP_LOGI(TAG, "Ethernet Stopped");break;default:break;}
}//IP_EVENT_ETH_GOT_IP的事件处理程序
static void got_ip_event_handler(void *arg, esp_event_base_t event_base,int32_t event_id, void *event_data)
{ip_event_got_ip_t *event = (ip_event_got_ip_t *) event_data;const esp_netif_ip_info_t *ip_info = &event->ip_info;ESP_LOGI(TAG, "Ethernet Got IP Address");ESP_LOGI(TAG, "~~~~~~~~~~~");ESP_LOGI(TAG, "ETHIP:" IPSTR, IP2STR(&ip_info->ip));ESP_LOGI(TAG, "ETHMASK:" IPSTR, IP2STR(&ip_info->netmask));ESP_LOGI(TAG, "ETHGW:" IPSTR, IP2STR(&ip_info->gw));ESP_LOGI(TAG, "~~~~~~~~~~~");
}//UDP 接受任务函数
static void udp_recv_task(void* arg)
{char rx_buffer[128];int sock = *(int *)arg;struct sockaddr_in source_addr; // Large enough for both IPv4 or IPv6socklen_t socklen = sizeof(source_addr);for (;;) {//清空缓存memset(rx_buffer, 0, sizeof(rx_buffer));//接受数据int len = recvfrom(sock, rx_buffer, sizeof(rx_buffer), 0, (struct sockaddr *)&source_addr, &socklen);//发送数据int err = sendto(sock, rx_buffer, len, 0, (struct sockaddr *)&source_addr, sizeof(source_addr));if(err < 0) {printf("Error occurred during sending: errno %d", errno);}}
}void app_main(void)
{esp_err_t ret = nvs_flash_init();if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {ESP_ERROR_CHECK(nvs_flash_erase());ret = nvs_flash_init();}//初始化TCP/IP网络接口esp_netif_init();//创建一个在后台运行的默认事件循环esp_event_loop_create_default();//初始化MAC和PHY默认配置eth_mac_config_t mac_config = ETH_MAC_DEFAULT_CONFIG();eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG();//PHY地址和复位引脚配置phy_config.phy_addr = CONFIG_EXAMPLE_ETH_PHY_ADDR;phy_config.reset_gpio_num = CONFIG_EXAMPLE_ETH_PHY_RST_GPIO;//初始化EMAC默认配置eth_esp32_emac_config_t esp32_emac_config = ETH_ESP32_EMAC_DEFAULT_CONFIG();//MDC的信号引脚esp32_emac_config.smi_mdc_gpio_num = CONFIG_EXAMPLE_ETH_MDC_GPIO;//MDIO的信号引脚esp32_emac_config.smi_mdio_gpio_num = CONFIG_EXAMPLE_ETH_MDIO_GPIO;//创建MAC实例esp_eth_mac_t *mac = esp_eth_mac_new_esp32(&esp32_emac_config, &mac_config);//创建PHY实例esp_eth_phy_t *phy = esp_eth_phy_new_lan87xx(&phy_config);//驱动程序安装完毕后,将得到驱动程序的句柄esp_eth_handle_t eth_handle = NULL;//应用默认驱动程序配置esp_eth_config_t config = ETH_DEFAULT_CONFIG(mac, phy);//安装驱动程序esp_eth_driver_install(&config, &eth_handle);//应用以太网默认的网络接口配置esp_netif_config_t cfg = ESP_NETIF_DEFAULT_ETH();//为以太网驱动程序创建网络接口esp_netif_t *eth_netif = esp_netif_new(&cfg);//将以太网驱动程序连接至TCP/IP协议栈esp_netif_attach(eth_netif, esp_eth_new_netif_glue(eth_handle));//注册以太网事件处理程序esp_event_handler_register(ETH_EVENT, ESP_EVENT_ANY_ID, &eth_event_handler, eth_netif);//注册用户定义的IP事件处理程序esp_event_handler_register(IP_EVENT, IP_EVENT_ETH_GOT_IP, &got_ip_event_handler, eth_netif);//启动以太网驱动程序状态机esp_eth_start(eth_handle);//新建socketint sock =  socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);//绑定本机地址的IP和端口struct sockaddr_in dest_addr;dest_addr.sin_family = AF_INET;dest_addr.sin_addr.s_addr = htonl(INADDR_ANY);dest_addr.sin_port = htons(10000);//绑定本机IPint err = bind(sock, (struct sockaddr *)&dest_addr, sizeof(dest_addr));if(err < 0){printf("Socket unable to bind: errno %d", errno);close(sock);}//创建任务xTaskCreate(udp_recv_task, "udp_recv_task", 2048, &sock, 10, NULL);
}

3.运行和测试结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/420303.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apple Intelligence深夜炸场!苹果发布4颗自研芯片,iPhone/iWatch/AirPods大升级

今年 6 月&#xff0c;苹果在 WWDC 上正式推出 Apple Intelligence。消息发布次日&#xff0c;苹果股价在盘中突破 200 美元大关&#xff0c;创 2022 年 11 月 10 日以来最大涨幅&#xff0c;截至收盘&#xff0c;苹果总市值升至 3.18 万亿美元&#xff08;约合人民币 23 万亿&…

通信工程学习:什么是IP-CAN(IP连接接入网)

IP-CAN&#xff1a;IP连接接入网 IP-CAN&#xff08;IP连接接入网&#xff09;是一个通过IP实现用户设备&#xff08;UE&#xff09;与IP多媒体子系统&#xff08;IMS&#xff09;实体之间连通的网络实体和接口的集合。以下是对IP-CAN的详细解释&#xff1a; 一、定义与概述 1…

深度学习实战87-高中数学自适应测试系统研究与应用研发,前后台页面设计

大家好,我是微学AI ,今天给大家介绍一下深度学习实战87-高中数学自适应测试系统研究与应用研发,前后台页面设计。高中数学自适应测试系统旨在通过精准评估学生能力,用最少的题目发现其薄弱环节,并提供定制化的学习计划,帮助学生快速提升成绩。同时,系统结合了AI大模型实现…

WinCC 中对 VBS 进行单步执行调试

以前应该写过文章给各位展示如何在WinCC 中通过自身控件对脚本&#xff08;C、VBS&#xff09;进行脚本诊断和排错。但是也有用户反馈说在编写了一些相对复杂的脚本后&#xff0c;WinCC自身控件无法做到单步调试&#xff0c;也会影响脚本的诊断调试效率。如果能够对WinCC 中的脚…

在Linux中从视频流截取图片帧(ffmpeg )

Linux依赖说明: 说明: 使用到的 依赖包 1. ffmpegsudo apt update sudo apt-get install ffmpeg2. imagemagick (选装) (检测图像边缘信息推断清晰度,如果是简单截取但个图像帧>用不到<)sudo apt-get install imagemagick备注: 指令及相关参数说明核心指令: (作用: 执…

WRF-LES与PALM微尺度气象大涡模拟、PALM静态数据预备、PALM驱动数据预报、PALM模拟

查看原文>>>WRF-LES与PALM微尺度气象大涡模拟及ChatGPT在大气科学领域应用 针对微尺度气象的复杂性&#xff0c;大涡模拟&#xff08;LES&#xff09;提供了一种无可比拟的解决方案。微尺度气象学涉及对小范围内的大气过程进行精确模拟&#xff0c;这些过程往往与天气…

Parsec无法使用、访问、连接、被墙、被封、800报错解决方案 完美平替软件

最近Parsec出现无法使用、报错等问题&#xff0c;话不多说先上解决办法 方案一&#xff1a;在%appdata%/Parsec/config.txt中&#xff0c;添加代理 app_proxy_address 127.0.0.1 app_proxy_scheme http app_proxy true app_proxy_port 你的http代理端口 方案二&#xff1a;…

计算机网络 第2章 物理层

文章目录 通信基础基本概念信道的极限容量编码与调制常用的编码方法常用的调制方法 传输介质双绞线同轴电缆光纤以太网对有限传输介质的命名规则无线传输介质物理层接口的特性 物理层设备中继器集线器一些特性 物理层任务&#xff1a;实现相邻节点之间比特&#xff08;0或1&…

嘿嘿 解决了Dev C++ 中文乱码(有效版)

这是博主第一篇博客&#xff01;记录一下博主的小小小小解决史&#xff01; 很早就下载用了Dev c &#xff0c;但现在隔了很长时间没去用过了再次打开发现出现中文乱码的现象&#xff01;在网站上翻阅了许久&#xff01;终于解决了问题&#xff01;困扰了许久&#xff01; ——…

Java easypoi导出word表格显示

1.成品 2.依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi…

LabVIEW制系统开发流程介绍

在开发一个LabVIEW电机控制系统时&#xff0c;尤其是涉及多种类型的电机并需实现本地与远程控制时&#xff0c;合理的开发顺序是确保项目高效完成且返工最少的关键。下面介绍如何按照系统需求分阶段开发&#xff0c;从而保障开发的速度与质量&#xff0c;减少返工的风险。 开发…

RAG+Agent在实际业务落地案例分享+项目推荐

RAG+Agent在实际业务落地案例分享+项目推荐 大模型架构的经典分层,即:应用层、工具层、模型层 & AI Infra: 应用层 - 大模型应用:主要以 RAG&AI Agent 初代的模式透出,主要的落地场景包括内部数据分析 - GBI 即生成式 BI、研发辅助提效 - 生成式 Code、面向外部用…

《垃圾回收的算法与实现》-算法-摘抄

本文是书籍《垃圾回收的算法与实现》的摘抄&#xff0c;不涉及算法源码及步骤讲解模块。 预备 对象由头(header)和域(field)构成。 头&#xff1a;对象中保存对象本身信息的部分&#xff0c;主要含有以下信息&#xff1a;对象的大小和种类。 域&#xff1a;对象使用者在对象…

Veeam中国区“十年换四帅”

数据保护厂商Veeam登顶了&#xff01; 傲视群雄 8月&#xff0c;Gartner《2023年全球企业备份和恢复软件市场份额分析报告》显示&#xff0c;Veeam市场占有率居所有厂商中的第一位——其市场份额为15.1%&#xff0c;收入为15亿美元&#xff0c;2023年相比2022年增长11.8%。 数据…

深度学习(七)-计算机视觉基础

计算机视觉 计算机视觉在广义上是和图像相关的技术总称。包括图像的采集获取&#xff0c;图 像的压缩编码&#xff0c;图像的存储和传输&#xff0c;图像的合成&#xff0c;三维图像重建&#xff0c;图像增强&#xff0c;图像修复&#xff0c;图像的分类和识别&#xff0c;目…

Adobe Illustrator非矢量图片的交集利用剪切蒙版实现

AI不支持对于非矢量图片的交集处理&#xff0c;但是可以通过剪切蒙版类似地实现需求。 如下图&#xff0c;字母F是一张PNG图片&#xff0c;为位图文件&#xff08;非矢量&#xff09;。 现在我需要将这种图片与黑色的矩形求交&#xff1a; 将两个目标全部选中&#xff0c;鼠标…

安宝特案例 | AR如何大幅提升IC封装厂检测效率?

前言&#xff1a;如何提升IC封装厂检测效率&#xff1f; 在现代电子产品的制造过程中&#xff0c;IC封装作为核心环节&#xff0c;涉及到复杂处理流程和严格质量检测。这是一家专注于IC封装的厂商&#xff0c;负责将来自IC制造商的晶圆进行保护、散热和导通处理。整个制程繁琐…

Mysql Innodb存储引擎原理—链接如下

Mysql Innodb存储引擎| ProcessOn免费在线作图,在线流程图,在线思维导图 ProcessOn是一个在线协作绘图平台&#xff0c;为用户提供强大、易用的作图工具&#xff01;支持在线创作流程图、思维导图、组织结构图、网络拓扑图、BPMN、UML图、UI界面原型设计、iOS界面原型设计等。同…

探索有向图与无向图中深度优先搜索(DFS)的边类型——3×3 网格分析

探索有向图与无向图中深度优先搜索(DFS)的边类型——33 网格分析 一、基本概念二、有向图中的 DFS 边类型分析三、有向图 DFS 的 C 代码实现在图的深度优先搜索(DFS)过程中,边的分类对于理解算法的执行流程及其复杂性至关重要。在有向图和无向图中,DFS 过程中遇到的边可以…

基于单片机的水产养殖饲料自动投喂系统

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图系统框架图设计获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机…