二十九、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 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官方库链接

本章例程链接

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode 剑指 Offer II 053. 二叉搜索树中的中序后继

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定一棵二叉搜索树和其中的一个节点 p &#xff0c;找到该节点在…

【精选】HTML5最全知识点集合

HTML5简介与基础骨架 HTML5介绍 HTML5是用来描述网页的一种语言&#xff0c;被称为超文本标记语言。用HTML5编写的文件&#xff0c;后缀以.html结尾 HTML是一种标记语言&#xff0c;标记语言是一套标记标签。标签是由尖括号包围的关键字&#xff0c;例如&#xff1a;<html…

基于单片机智能液位水位监测控制系统设计

**单片机设计介绍&#xff0c; 基于单片机智能液位水位监测控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的智能液位水位监测控制系统可以用来检测和控制液位的高低&#xff0c;并可以用于水泵的控制和自…

戴姆勒——从豪华私家车到无人驾驶飞机

戴姆勒(DaimlerAG)是梅赛德斯-奔驰和精灵(Smart)汽车的德国母公司。自1926年其前身公司合并为戴姆勒-奔驰公司以来&#xff0c;戴姆勒在生产豪华和消费型汽车、卡车和公共汽车方面有着悠久的历史。 如今&#xff0c;除了以其精密设计的汽车闻名外&#xff0c;该公司还在设计、…

⑩④【MySQL】什么是视图?怎么用?视图的检查选项? 视图的作用?[VIEW]

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 视图VIEW ⑩④详解MySQL视图1. 视图的基本使用…

NPDP 02组合管理

NPDP 产品经理认证知识体系指南解读&#xff0c;02组合管理 第二章 组合管理 公司战略或经营战略以及创新战略&#xff0c;为竞争性创新投资之间的权衡决策提供了整体方向和框架。在发展和持续性维护一个组织的产品组合时&#xff0c;总要面对一系列彼此竞争资源和投资的项目。…

11.5MyBatis(进阶)

一.${}和#{} 1.$是直接替换,#是预处理(使用占位符,替换成?).前者不安全(SQL注入), 后者安全. 2.$的使用场景: 如果传递的值是sql的关键字,只能使用$,不能使用#(asc,desc). 二.SQL注入 注意: 如果使用${}进行传参,一定要是可以穷举的,并且要进行安全性验证(例如排序,只能传a…

【漏洞复现】​金和OA存在任意文件读取漏洞

漏洞描述 金和OA协同办公管理系统C6软件(简称金和OA),本着简单、适用、高效的原则,贴合企事业单位的实际需求,实行通用化、标准化、智能化、人性化的产品设计,充分体现企事业单位规范管理、提高办公效率的核心思想,为用户提供一整套标准的办公自动化解决方案,以帮助企…

Flume学习笔记(3)—— Flume 自定义组件

前置知识&#xff1a; Flume学习笔记&#xff08;1&#xff09;—— Flume入门-CSDN博客 Flume学习笔记&#xff08;2&#xff09;—— Flume进阶-CSDN博客 Flume 自定义组件 自定义 Interceptor 需求分析&#xff1a;使用 Flume 采集服务器本地日志&#xff0c;需要按照日志…

浅析AcrelEMS-CIA机场智慧能源管平台解决方案-安科瑞 蒋静

1 概述 机场智慧能源管平台解决方案对机场范围内变电站内的高低压配电设备 、 发电机、变压器 、UPS、EPS 、广场照明 、 室内照明 、通风及排水等机电设备进行实时分布式监控和集中管理 , 实现无人值守 , 确保高速公路安全畅通 , 提高 自动化管理水平 , 降低机电设备的运行维…

计算机视觉:驾驶员疲劳检测

目录 前言 关键点讲解 代码详解 结果展示 改进方向&#xff08;打哈欠检测疲劳方法&#xff09; 改进方向&#xff08;点头检测疲劳&#xff09; GUI界面设计展示 前言 上次博客我们讲到了如何定位人脸&#xff0c;并且在人脸上进行关键点定位。其中包括5点定位和68点定…

骨传导能保护听力吗?骨传导耳机是智商税吗?

先说答案&#xff0c;骨传导耳机是可以保护听力的&#xff01;并且骨传导耳机也不是智商税&#xff01;甚至在某些场景下&#xff0c;骨传导耳机比其他耳机更适合。 为什么说骨传导耳机会保护听力呢&#xff1f;因为骨传导耳机跟入耳式耳机的传递声音方式是不一样的&#xff0c…

PACS医学影像信息化数字平台源码

PACS系统对医院影像科意义重大&#xff0c;将业务量巨大的影像检验流程依托于信息化技术&#xff0c;对于进行信息化建设的医院而言&#xff0c;是十分必要的。 PACS系统源码&#xff0c;集成三维影像后处理功能&#xff0c;包括三维多平面重建、三维容积重建、三维表面重建、三…

【HarmonyOS开发】设备调试避坑指南

备注&#xff1a;通过开发验证&#xff0c;发现每个设备调试都会存在不小的差别&#xff0c;开发验证需要注意~ 1、预览器调试&#xff08;只能预览具有Entry修饰的文件&#xff09; 修改文件&#xff0c;预览器将自动刷新 注意&#xff1a;当我们只修改了Component 组件的文件…

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

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

嵌入式QTGit面试题

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

轻地图+数据闭环加速落地,觉非科技获多家头部车企定点

‍作者 |张祥威 编辑 |德新 智能驾驶日益普及&#xff0c;「轻地图」和「数据闭环」成为各家能力比拼的关键&#xff0c;车企对此的需求也逐渐迫切。 11月16日&#xff0c;觉非科技宣布已与多家头部主机厂达成量产定点合作&#xff0c;围绕轻地图与数据闭环服务&#xff0c;支…

《Linux从练气到飞升》No.31 多线程编程实践与线程安全技术

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的…

【数据结构】图的存储结构(邻接矩阵)

一.邻接矩阵 1.图的特点 任何两个顶点之间都可能存在边&#xff0c;无法通过存储位置表示这种任意的逻辑关系。 图无法采用顺序存储结构。 2.如何存储图&#xff1f; 将顶点与边分开存储。 3.邻接矩阵&#xff08;数组表示法&#xff09; 基本思想&#xff1a; 用一个一维数…

Vatee万腾的科技征程:Vatee数字化创新的前沿探讨

在Vatee万腾的科技征程中&#xff0c;我们目睹了一场数字化创新的引领之旅&#xff0c;探讨了Vatee在科技前沿的独到见解。Vatee万腾不仅仅是一家科技公司&#xff0c;更是一支前行不辍的冒险队伍&#xff0c;通过不断突破自我&#xff0c;探索未知领域&#xff0c;引领着数字化…