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

文章目录

  • 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 structurewiz_NetInfo get_info;/* MCU init */stdio_init_all();              // Initialize the main control peripheralwizchip_initialize();          // Initialize the chip interfacewizchip_setnetinfo(&net_info); // Configure once firstUART0_Init();                  // uart0 init/*dhcp init*/DHCP_init(SOCK_DHCP, ethernet_buf);                                   // DHCP initializationadd_repeating_timer_ms(1000, repeating_timer_callback, NULL, &timer); // Add DHCP 1s Tick Timer handlerprintf("wiznet chip websocket server example.\r\n");network_init(&net_info);                                                                // Configuring Network Informationprint_network_information(&get_info);                                                   // Read back the configuration information and print ithttpServer_init(http_tx_ethernet_buf, http_rx_ethernet_buf, MAX_HTTPSOCK, socknumlist); // HTTP Server initializationreg_httpServer_webContent((uint8_t *)"index.html", (uint8_t *)INDEX_HTML);              // netinfo.html 	: Network information example pagewhile (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.mzph.cn/news/146525.shtml

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

相关文章

抖音直播招聘报白是一种新颖、高效的招聘方式增加曝光度和吸引力

总之&#xff0c;抖音招聘是一种新颖、高效的招聘方式&#xff0c;它可以为公司带来更大的曝光度和吸引力&#xff0c;帮助公司吸引更多优秀的人才。通过抖音直播招聘报白&#xff0c;企业或者人力资源公司可以利用抖音的短视频流量红利&#xff0c;触达到每天超过8亿的活跃用户…

CAD Exchanger SDK 3.23.0 的亮点

代号“CAD Exchanger MTK”的新兴产品首次亮相&#xff0c;支持新版本的流行格式&#xff0c;重新设计的 BIM 模型结构以及 3.23.0 中的 SDK 文档修订 阅读最新版本编写的 Autodesk Inventor 和 NX 文件&#xff0c;享受更严格的 BIM 模型结构&#xff0c;轻松浏览 SDK 文档&am…

基于单片机温湿度PM2.5报警系统

**单片机设计介绍&#xff0c; 基于单片机温湿度PM2.5报警设置系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 单片机温湿度PM2.5报警设置系统是一种智能化的环境检测与报警系统。它主要由单片机、传感器、液晶显示屏、蜂鸣器…

Django部署时静态文件配置的坑

Django部署时静态文件配置配置的坑 近期有个需求是用django进行开发部署&#xff0c;结果发现静态文件配置的坑是真的多&#xff0c;另外网上很多的内容也讲不清楚原理&#xff0c;就是这样这样&#xff0c;又那样那样&#xff0c;进了不少坑&#xff0c;这里记录一下关于css,…

C#中.NET Framework4.8 Windows窗体应用通过EF访问新建数据库

目录 一、 操作步骤 二、编写EF模型和数据库上下文 三、 移植&#xff08;Migrations&#xff09;数据库 四、编写应用程序 五、生成效果 前文已经说过.NET Framework4.8 控制台应用通过EF访问已经建立的和新建的数据库。 本文想说的是&#xff0c;.NET Framework4.8 Win…

MySQL优化(1):B+树与索引

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 对于60%的程序员而言&a…

springboot-RedisTemplate

pom.xml: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.…

嵌入式QTGit面试题

自己在秋招过程中遇到的QT和嵌入式和Git相关的面试题&#xff0c;因为比较少就一起放了 QT connect第5个参数是什么&#xff1f; Qt::AutoConnection&#xff1a; 默认值&#xff0c;使用这个值则连接类型会在信号发送时决定。 如果接收者和发送者在同一个线程&#xff0c;则…

【机器学习】决策树算法理论:算法原理、信息熵、信息增益、预剪枝、后剪枝、算法选择

1. 决策树概念 通过不断的划分条件来进行分类&#xff0c;决策树最关键的是找出那些对结果影响最大的条件&#xff0c;放到前面。 我举个列子来帮助大家理解&#xff0c;我现在给我女儿介绍了一个相亲对象&#xff0c;她根据下面这张决策树图来进行选择。比如年龄是女儿择偶更…

【如何学习Python自动化测试】—— 自动化测试环境搭建

1、 自动化测试环境搭建 1.1 为什么选择 Python 什么是python&#xff0c;引用python官方的说法就是“一种解释型的、面向对象、带有励志语义的高级程序设计语言”&#xff0c;对于很多测试人员来说&#xff0c;这段话包含了很多术语&#xff0c;而测试人员大多是希望利用编程…

和鲸科技创始人范向伟受邀出席“凌云出海,来中东吧”2023华为云上海路演活动

11月9日&#xff0c;华为云“凌云出海&#xff0c;来中东吧”系列路演活动第二场在上海正式开启。聚焦“创业全球化”&#xff0c;本次活动由华为云携手阿布扎比投资办公室&#xff08;ADIO&#xff09;举办&#xff0c;旨在与渴望出海发展的优秀创业者们共探出海中东新商机。 …

Vue3-watchEffect函数

Vue3-watchEffect函数 功能&#xff1a;watchEffect 函数在一开始时就会执行一次&#xff0c;而当中的回调函数的属性发生变化&#xff0c;那么watchEffect 就会再执行一次&#xff0c;主要作用还是在于监视回调函数每次的变化。 // App.vue <template><h2>计数…

一个美观且功能丰富的 .NET 控制台应用程序开源库

推荐一个美观且功能丰富的 .NET 控制台应用程序开源库&#xff0c;从此告别黑漆漆的界面。 01 项目简介 Spectre.Console 是一个开源的 .NET 库&#xff0c;用于创建美观、功能丰富的控制台&#xff08;命令行&#xff09;应用程序。它提供了一组易于使用的 API&#xff0c;…

阿里云崩了,总结我们从云上搬到线下经历了什么

我们做钢铁行业云的时候&#xff0c;也曾购买过某讯的云服务器。当时某讯做活动&#xff0c;头3年比较便宜&#xff0c;大概买了40台左右云服务器。 但是&#xff0c;3年期间使用云服务器的经历&#xff0c;体验并不好&#xff1a;1.我们云服务器的密码都是随机生成的&#xff…

多视图聚类的论文阅读

当聚类的方式使用的是某一类预定义好的相似性度量时&#xff0c; 会出现如下情况&#xff1a; 数据聚类方面取得了成功&#xff0c;但它们通常依赖于预定义的相似性度量&#xff0c;而这些度量受原始方法的影响:当输入维数相对较高时&#xff0c;往往是无效的。 1. Deep Mult…

解决Requests中使用httpbin服务器问题:自定义URL的实现与验证

问题背景 在使用Python的Requests模块进行单元测试时&#xff0c;可能会遇到无法使用本地运行的httpbin服务器进行测试的问题。这是因为测试脚本允许通过环境变量HTTPBIN_URL指定用于测试的本地httpbin实例&#xff0c;但在某些测试用例中&#xff0c;URL是硬编码为httpbin.or…

Linux 系统目录结构

Linux 系统目录结构 登录系统后&#xff0c;在当前命令窗口下输入命令&#xff1a; ls / 你会看到如下图所示: 以下是对这些目录的解释&#xff1a; /bin&#xff1a; bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。 /boot&#xff1a; 这里存放…

PbootCMS 应用快速迁移至浪潮信息 KeyarchOS 云服务器

本文我们以 PbootCMS 应用为例&#xff0c;详细介绍如何使用 X2Keyarch 迁移工具将其从 CentOS 系统迁移到浪潮信息 KeyarchOS 系统。 背景介绍 众所周知&#xff0c;CentOS 是最流行的红帽克隆版&#xff0c;因为免费&#xff0c;所以它的安装量甚至比红帽本身要大得多。本来…

在Rust编程中使用泛型

1.摘要 Rust中的泛型可以让我们为像函数签名或结构体这样的项创建定义, 这样它们就可以用于多种不同的具体数据类型。下面的内容将涉及泛型定义函数、结构体、枚举和方法, 还将讨论泛型如何影响代码性能。 2.在函数定义中使用泛型 当使用泛型定义函数时&#xff0c;本来在函…

Aerial for Mac: 沉浸在高清鸟瞰的世界,让你的屏幕焕发新生

你是否已经厌倦了那些平淡无奇的屏保程序&#xff1f;是否希望你的Mac屏幕能更生动、更有趣&#xff1f;如果你对此抱有强烈的期待&#xff0c;那么Aerial for Mac绝对会是你期待已久的解决方案。 Aerial for Mac是一款独具特色的高清屏保程序&#xff0c;它以鸟瞰的视角带你领…