二十九、W5100S/W5500+RP2040树莓派Pico<Web socket Server>

news2024/11/18 23:43:03

文章目录

  • 1 前言
  • 2 简介
    • 2 .1 什么是WebSocket协议?
    • 2.2 WebSocket协议工作原理
    • 2.3 WebSocket协议优点
    • 2.4 WebSocket应用场景
  • 3 WIZnet以太网芯片
  • 4 WebSocket示例概述以及使用
    • 4.1 流程图
    • 4.2 准备工作核心
    • 4.3 连接方式
    • 4.4 主要代码概述
    • 4.5 结果演示
  • 5 注意事项
  • 6 相关链接

1 前言

  在互联网的世界中,实时、高效的数据交换是至关重要的。WebSocket协议,作为一种强大的通信工具,正是为满足这一需求而生。与传统的HTTP协议不同,WebSocket协议允许服务器主动向客户端发送数据,而不需要客户端发起请求。这种特性使得WebSocket协议在需要实时数据交换的场景中,如在线聊天、多人在线游戏等,具有显著的优势。

  W5100S/W5500是一款集成全硬件 TCP/IP 协议栈的嵌入式以太网控制器,同时也是一颗工业级以太网控制芯片。本教程将介绍W5100S/W5500以太网Web socket应用的基本原理、使用步骤、应用实例以及注意事项,帮助读者更好地掌握这一技术。

2 简介

2 .1 什么是WebSocket协议?

  WebSocket是一种网络协议,允许服务器和客户端之间进行双向通信。与HTTP使用请求和响应模式不同,WebSocket对等方可以在任何时候向任一方向发送消息。WebSocket通常用于聊天应用和其他需要服务器和客户端之间持续通信的应用。

在这里插入图片描述

2.2 WebSocket协议工作原理

  1. 客户端向服务器发出HTTP请求以建立WebSocket连接。
  2. 如果服务器使用WebSocket协议,则它将接受升级并发送响应。
  3. 如果初始握手成功,客户端和服务器已经同意使用为HTTP请求建立的现有TCP/IP连接作为WebSocket连接。
  4. 数据现在可以通过这个连接使用基本的帧消息协议流动。
  5. 一旦双方都确认WebSocket连接应该关闭,TCP连接就会被拆除。

在这里插入图片描述

2.3 WebSocket协议优点

MODBUS TCP协议的优点包括:

  1. 全双工通信:WebSocket支持全双工通信,这意味着服务器和客户端可以同时发送和接收信息。
  2. 实时性:使用WebSocket,可以立即发送和接收数据,比HTTP更快。此外,它们比AJAX更快。
  3. 跨源通信:尽管这可能带来安全风险,但WebSocket支持跨源通信。
  4. 跨平台兼容性:WebSocket支持跨平台兼容性,包括Web、桌面和移动设备。
  5. 低开销:HTTP需要大约2000字节的开销,而WebSocket只需要2字节。
  6. 替代长轮询:WebSocket可以替代长轮询。
  7. 数据类型:与只能发送字符串数据类型的AJAX调用不同,WebSocket是数据类型化的。
  8. 持久连接:WebSocket是客户端和服务器之间的持久连接,这允许服务器在任何时候向客户端发送数据,而无需客户端请求。
  9. 低延迟:由于连接已经建立,因此WebSocket数据帧的组织非常高效(主要是6个额外的字节,2个字节用于头部,4个字节用于掩码),可以比通过包含头部、cookie等的HTTP请求更高效地发送数据。
  10. 减少带宽使用:与基于HTTP的实时机制(如HTTP长轮询)相比,WebSocket协议使用持久连接,而不是连续的HTTP请求/响应周期。WebSocket需要的带宽较少,并且与HTTP相比,提供了较低的延迟,从而减轻了客户端和服务器的负担。
  11. 改善性能和响应性:WebSocket的优点是,它们可以在客户端和服务器之间进行实时通信,而无需频繁的HTTP请求/响应。这带来了诸如减少延迟、改善性能和响应性的Web应用程序等好处。

2.4 WebSocket应用场景

WebSocket协议的应用场景广泛,以下是一些主要的领域:

  1. 实时事件更新:例如体育比赛实时得分、股市价格等。
  2. 用户通知:例如软件更新、内容更新。
  3. 协作编辑工具:多人同时在线编辑同一份文档。
  4. 信息流:例如社交媒体和新闻的实时更新。
  5. 社交媒体流:例如实时更新的Twitter或Facebook信息流。
  6. 聊天应用:例如实时的在线聊天。
  7. 多人在线游戏:例如需要多人同时在线的网络游戏。
  8. 实时位置数据更新:例如共享单车或打车应用的实时位置更新。
  9. 股市应用:例如实时更新的股票价格。

使用WebSocket搭建的在线网页聊天示例:

在这里插入图片描述

3 WIZnet以太网芯片

WIZnet 主流硬件协议栈以太网芯片参数对比

ModelEmbedded CoreHost I/FTX/RX BufferHW SocketNetwork Performance
W5100STCP/IPv4, MAC & PHY8bit BUS, SPI16KB4Max.25Mbps
W6100TCP/IPv4/IPv6, MAC & PHY8bit BUS, Fast SPI32KB8Max.25Mbps
W5500TCP/IPv4, MAC & PHYFast SPI32KB8Max 15Mbps
  1. W5100S/W6100 支持 8bit数据总线接口,网络传输速度会优于W5500。
  2. W6100 支持IPV6,与W5100S 硬件兼容,若已使用W5100S的用户需要支持IPv6,可以Pin to Pin兼容。
  3. W5500 拥有比 W5100S更多的 Socket数量以及发送与接收缓存。

4 WebSocket示例概述以及使用

4.1 流程图

  程序的运行框图如下所示:

在这里插入图片描述

4.2 准备工作核心

软件

  • Visual Studio Code
  • WIZnet UartTool

硬件

  • W5100S IO模块 + RP2040 树莓派Pico开发板 或者 WIZnet W5100S-EVB-Pico开发板
  • Micro USB 接口的数据线
  • TTL 转 USB
  • 网线

4.3 连接方式

  • 通过数据线连接PC的USB口(主要用于烧录程序,也可以虚拟出串口使用)

  • 通过TTL串口转USB,连接UART0 的默认引脚:

    • RP2040 GPIO0(UART0 TX) <----> USB_TTL_RX
    • RP2040 GPIO1(UART0 RX) <----> USB_TTL_TX
  • 使用模块连接RP2040 进行接线时

    • RP2040 GPIO16 <----> W5100S MISO
    • RP2040 GPIO17 <----> W5100S CS
    • RP2040 GPIO18 <----> W5100S SCK
    • RP2040 GPIO19 <----> W5100S MOSI
    • RP2040 GPIO20 <----> W5100S RST
  • 通过PC和设备都通过网线连接路由器LAN口

4.4 主要代码概述

  我们使用的是WIZnet官方的ioLibrary_Driver库。该库支持的协议丰富,操作简单,芯片在硬件上集成了TCP/IP协议栈,该库又封装好了TCP/IP层之上的协议,我们只需简单调用相应函数即可完成协议的应用。

第一步:在websocket_server.c文件中引用对应的库文件。

第二步:宏定义常量和定义全局变量。

第三步:定义四个函数,包括一个1秒定时器回调函数(用于处理DHCP超时处理),一个设置网络地址函数,一个串口初始化函数以及一个串口接收回调函数。

第四步:主函数首先是对串口和SPI进行初始化以及链路检测。然后是设置W5100S的网络地址,首先使用DHCP的方式进行获取,失败后使用预设的静态IP地址。然后则是将网页信息注册到HTTP服务器上,最后则是在主循环中跑httpServer的程序和websocketServer程序。

主函数程序如下:

int main()
{
    int i;
    struct repeating_timer timer; // Define the timer structure
    wiz_NetInfo get_info;
    /* MCU init */
    stdio_init_all();              // Initialize the main control peripheral
    wizchip_initialize();          // Initialize the chip interface
    wizchip_setnetinfo(&net_info); // Configure once first
    UART0_Init();                  // uart0 init

    /*dhcp init*/
    DHCP_init(SOCK_DHCP, ethernet_buf);                                   // DHCP initialization
    add_repeating_timer_ms(1000, repeating_timer_callback, NULL, &timer); // Add DHCP 1s Tick Timer handler

    printf("wiznet chip websocket server example.\r\n");
    network_init(&net_info);                                                                // Configuring Network Information
    print_network_information(&get_info);                                                   // Read back the configuration information and print it
    httpServer_init(http_tx_ethernet_buf, http_rx_ethernet_buf, MAX_HTTPSOCK, socknumlist); // HTTP Server initialization
    reg_httpServer_webContent((uint8_t *)"index.html", (uint8_t *)INDEX_HTML);              // netinfo.html 	: Network information example page
    while (true)
    {
        for (i = 0; i < MAX_HTTPSOCK; i++)
        {
            httpServer_run(i);
        }
        do_websocket_server(SOCK_WEBSOCKET);
    }
}

4.5 结果演示

在这里插入图片描述

5 注意事项

  • 发送的内容只能为UTF-8格式,如果是其他格式,可能会导致乱码造成网页崩,需要刷新才能正常。
  • 如果想用WIZnet的W5500来实现本章的示例,我们只需修改两个地方即可:

​ (1)在library/ioLibrary_Driver/Ethernet/下找到wizchip_conf.h这个头文件,将_WIZCHIP_ 宏定义修改为W5500。

​ (2)在library下找到CMakeLists.txt文件,将COMPILE_SEL设置为ON即可,OFF为W5100S,ON为W5500。

6 相关链接

WIZnet官网

WIZnet官方库链接

本章例程链接

想了解更多,评论留言哦!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙:Harmony开发基础知识详解

一.概述 工欲善其事&#xff0c;必先利其器。 上一篇博文实现了一个"Hello Harmony"的Demo&#xff0c;今天这篇博文就以Demo "Hello Harmony" 为例&#xff0c;以官网开发文档为依据&#xff0c;从鸿蒙开发主要的几个方面入手&#xff0c;详细了解一下鸿…

macOS 后台项目已添加 “Google Updater添加了可在后台运行的项目。你可以在“登陆项”设置中管理

文章目录 Intro解决查看三个文件夹分析 & 操作确认结果是否生效 Intro 我的macbook上经常弹出这样的通知狂&#xff1a; macOS 后台项目已添加 “Google Updater添加了可在后台运行的项目。你可以在“登陆项”设置中管理 不胜其扰&#xff0c;终于决定禁用它。以下为方法…

算法设计与分析【期中+期末复习知识点总结】(持续更新)

第1章&#xff1a;算法概述 算法&#xff1a;具有输入、输出、确定性、有限性。 程序&#xff08;算法数据结构程序&#xff09;&#xff1a;具有输入、输出、确定性&#xff08;注意&#xff1a;程序可以不满足有限性&#xff0c;如操作系统是在无限循环中执行的程序&#x…

es的优势

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…

教程:使用 Keras 优化神经网络

一、介绍 在 我 之前的文章中&#xff0c;我讨论了使用 TensorFlow 实现神经网络。继续有关神经网络库的系列文章&#xff0c;我决定重点介绍 Keras——据说是迄今为止最好的深度学习库。 我 从事深度学习已经有一段时间了&#xff0c;据我所知&#xff0c;处理…

橱柜的装修干货|板材、五金、高度、配色4个方面。福州中宅装饰,福州装修

引言 橱柜的装修干货。 橱柜是厨房的核心&#xff0c;一个好的橱柜能让厨房变得实用又美观。以下是关于橱柜装修的几个问题解答。 1. 橱柜的柜门常用的板材有哪些&#xff1f; 橱柜的柜门常用的板材有实木板、防火板、烤漆板、包复框、PVC板、膜压板等。不同板材有不同的特点…

庖丁解牛:NIO核心概念与机制详解 01

文章目录 Pre输入/输出Why NIO流与块的比较通道和缓冲区概述什么是缓冲区&#xff1f;缓冲区类型什么是通道&#xff1f;通道类型 NIO 中的读和写概述Demo : 从文件中读取1. 从FileInputStream中获取Channel2. 创建ByteBuffer缓冲区3. 将数据从Channle读取到Buffer中 Demo : 写…

五、hdfs常见权限问题

1、常见问题 2、案例 &#xff08;1&#xff09;问题 &#xff08;2&#xff09;hdfs的超级管理员 &#xff08;3&#xff09;原因 没有使用Hadoop用户对hdfs文件系统进行操作。 在Hadoop文件系统中&#xff0c;Hadoop用户相当于Linux系统中的root用户&#xff0c;是最高级别用…

win10电脑无法联网,设置IPv4,点击属性无法打开,闪退

win10设置IPv4&#xff0c;点击属性无法打开&#xff0c;闪退 问题:win10设置IPv4&#xff0c;点击属性无法打开&#xff0c;闪退 问题:win10设置IPv4&#xff0c;点击属性无法打开&#xff0c;闪退 第1步&#xff1a;用管理员打开cmd命令窗口&#xff0c;然后输入下面的命令&…

JVM的运行时数据区

Java虚拟机&#xff08;JVM&#xff09;的运行时数据区是程序在运行过程中使用的内存区域&#xff0c;主要包括以下几个部分&#xff1a; 程序计数器虚拟机栈本地方法栈堆方法区运行时常量池直接内存 不同的虚拟机实现可能会略有差异。这些区域协同工作&#xff0c;支持Java…

BUUCTF snake 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 下载附件&#xff0c;解压得到一张snake的图片。 密文&#xff1a; 这里有一张蛇的图片&#xff0c;本人害怕不敢放&#xff0c;想看自己下载附件解压。&#xff08;吐槽一下&#xff0c;我做这道题&#xff0c;全…

每天一点python——day71

#每天一点Python——71 #格式化字符串在Python中&#xff0c;你可以使用格式化字符串来动态地插入变量的值、表达式的结果等到字符串中。 如图&#xff1a;xxx部分需要不断变化&#xff0c;再和原文拼接 如上图所示这是一个类似于字符串拼接的操作。 因为字符串拼接操作会产生很…

【算法挨揍日记】day26——53. 最大子数组和、918. 环形子数组的最大和

53. 最大子数组和 53. 最大子数组和 题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 解题思路&#xff1a; 状态…

公司会倒闭,但大模型肯定不会

咋玩抖音的我&#xff0c;前几天在抖音上发了一张图片&#xff0c;没想到竟然有1000多的播放量。 当然这个播放量不算高&#xff0c;甚至在抖音的体系里属于很低的&#xff0c;但是比我预料的可能只有个位数的播放量是高了不少。 这张图片是我用某国产 AI 软件生成的&#xff…

R语言和RStudio的下载安装(非常简便舒适)

目录 R语言和RStudio的关系R语言和Tableau下载R语言进入官网选择清华镜像源Download R for Windows选择base版本开始下载进行安装配置环境变量检查是否安装成功 下载RStudio进入官网点击下载进行安装检查是否安装成功打开选择R语言环境成功打开显示四个工作区 R语言和RStudio的…

CDN是什么,能起到什么作用

随着互联网的快速发展&#xff0c;用户对于快速、稳定、高效的互联网体验的需求日益增长。为了满足这一需求&#xff0c;内容分发网络&#xff08;CDN&#xff09;应运而生&#xff0c;并在近年来得到了广泛应用。CDN通过在全球范围内部署大量的服务器和网络节点&#xff0c;实…

2023 鹏程杯

前言 笔者没有参加此次比赛&#xff0c;由于团队后面会复现此次比赛&#xff0c;所以笔者在此进行复现记录。 silent 考点: 栈溢出 ret2csu 栈迁移 保护: 开了 Full RELRO 和 NX, 禁掉了 execve/execveat 系统调用 漏洞分析 一个裸的栈溢出, 但是没有输出函数可以泄漏 …

MySQL进阶_8.数据库其他调优策略

文章目录 第一节、数据库调优的步骤1.1、选择合适的DBMS1.2、优化表设计1.3、优化逻辑查询1.4、优化物理查询1.5、使用 Redis 或 Memcached 作为缓存1.6、库级优化 第二节、优化MySQL服务器第三节、优化数据库结构 第一节、数据库调优的步骤 1.1、选择合适的DBMS 如果对事务性…

C++基础从0到1入门编程(三)

系统学习C 方便自己日后复习&#xff0c;错误的地方希望积极指正 往期文章&#xff1a; C基础从0到1入门编程&#xff08;一&#xff09; C基础从0到1入门编程&#xff08;二&#xff09; 参考视频&#xff1a; 1.黑马程序员匠心之作|C教程从0到1入门编程,学习编程不再难 2.系统…

腾讯云服务器带宽计费模式_按流量和带宽收费说明

腾讯云服务器带宽计费模式分为“按带宽计费”和“按使用流量”两种计费模式&#xff1a;按带宽计费是预付费&#xff0c;一次性购买固定带宽值&#xff0c;先付费&#xff1b;按使用流量计费是先使用后付费&#xff0c;根据云服务器公网出方向实际产生流量来计算。如何选择带宽…