五、W5100S/W5500+RP2040之MicroPython开发<TCP Server示例>

news2024/9/27 5:54:07

文章目录

  • 1 前言
  • 2 相关网络信息
    • 2 .1 简介
    • 2.2 TCP Server工作步骤
    • 2.3 TCP Server的优点
    • 2.4 应用场景
  • 3 WIZnet以太网芯片
  • 4 TCP Server网络设置示例概述以及使用
    • 4.1 流程图
    • 4.2 准备工作核心
    • 4.3 连接方式
    • 4.4 主要代码概述
    • 4.5 烧录验证
  • 5 注意事项
  • 6 相关链接

1 前言

  在这个智能硬件和物联网时代,MicroPython和树莓派PICO正以其独特的优势引领着嵌入式开发的新潮流。MicroPython作为一种精简优化的Python 3语言,为微控制器和嵌入式设备提供了高效开发和简易调试的

  当我们结合WIZnet W5100S/W5500网络模块,MicroPython和树莓派PICO的开发潜力被进一步放大。这两款模块都内置了TCP/IP协议栈,使得在嵌入式设备上实现网络连接变得更加容易。无论是进行数据传输、远程控制,还是构建物联网应用,它们都提供了强大的支持。

  本章我们将以WIZnet W5100S为例,以MicroPython的开发方式进行TCP_Server解析示例

2 相关网络信息

2 .1 简介

在这里插入图片描述

  TCP Server是使用TCP协议进行通信的服务器端程序。TCP是一种面向连接的、可靠的、基于字节流的传输协议,用于在计算机网络上传输数据。TCP Server在计算机网络中扮演重要角色,它监听客户端的连接请求,并与客户端建立可靠的连接,实现数据的传输。在TCP Server中,服务器程序需要指定监听的端口号,并使用TCP协议与客户端建立连接。一旦有客户端连接进来,服务器程序就会为每个客户端建立一个单独的连接,并通过数据流对象(NetworkStream)与客户端进行数据交互。

2.2 TCP Server工作步骤

在这里插入图片描述

一般的TCP服务器的创建步骤:

  1. 创建套接字(socket)。
  2. 将套接字绑定到指定的IP地址和端口号。
  3. 开始监听来自客户端的连接请求。
  4. 当有客户端请求连接时,接受连接请求,并创建一个新的套接字(通常被称为子套接字)来处理与该客户端的通信。
  5. 通过子套接字与客户端进行数据交换。
  6. 在完成数据交换后,关闭子套接字,并继续监听其他客户端的连接请求。

2.3 TCP Server的优点

在这里插入图片描述

TCP Server的优点主要包括:

  1. 面向连接的传输:TCP是一种面向连接的协议,它在进行数据传输前需要先建立连接。这种连接可以保证数据传输的可靠性和顺序性。
  2. 可靠的数据传输:TCP提供了可靠的数据传输服务,它通过确认机制、重传机制等手段保证数据在传输过程中不会丢失或重复。
  3. 全双工方式传输:TCP支持全双工方式传输,即数据可以在两个方向上同时传输,提高了传输效率。
  4. 字节流方式:TCP以字节流的方式进行数据传输,这种方式可以更好地处理大量数据,并且可以控制数据的流量。
  5. 紧急数据传送功能:TCP提供了紧急数据传送功能,可以在紧急情况下优先传送数据。

2.4 应用场景

  TCP Server的应用场景非常广泛,以下是一些主要的场景:

  1. 电子商务平台:TCP Server可以用于电子商务平台的后端服务,处理用户的订单、支付等操作,保证交易的安全性和可靠性。
  2. 在线游戏:TCP Server可以用于在线游戏的服务器端,处理游戏玩家的连接、数据交换等操作,提供稳定、高效的游戏体验。
  3. 即时通讯:TCP Server可以用于即时通讯系统的服务器端,处理用户的登录、消息发送和接收等操作,保证通讯的稳定性和可靠性。
  4. 远程监控:TCP Server可以用于远程监控系统的服务器端,接收和处理监控数据,提供实时的监控画面和报警信息。
  5. 文件传输:TCP Server可以用于文件传输系统的服务器端,处理文件的上传和下载等操作,保证文件传输的完整性和可靠性。
  6. 网络视频会议:TCP Server可以用于网络视频会议系统的服务器端,处理音视频数据的传输和处理等操作,提供稳定、流畅的会议体验。

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 TCP Server网络设置示例概述以及使用

4.1 流程图

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

在这里插入图片描述

4.2 准备工作核心

软件

  • Thonny
  • WIZnet UartTool
  • SocketTester

硬件

  • W5100SIO模块 + 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 主要代码概述

  我们直接打开TCP_Server.py文件。

第一步:可以看到在w5x00_init()函数中,进行了SPI的初始化。以及将spi相关引脚和复位引脚注册到库中,后续则是激活网络,并使用DHCP配置网络地址信息,当DHCP失败时,则配置静态网络地址信息。当未配置成功时,会打印出网络地址相关寄存器的信息,可以帮助我们更好的排查问题。

第二步:然后是进行客户端监听的操作,当有客户端连接时,进行数据的收发测试。

''' TCP Server example.
    date: 2023-11-23
'''
from usocket import socket
from machine import Pin,SPI,UART
import time, network

''' static netinfo
'''
ip = '192.168.1.11'
sn = '255.255.255.0'
gw = '192.168.1.1'
dns= '8.8.8.8'

netinfo=(ip, sn, gw, dns)

localip = ''
localport = 8000
listen_info = (localip, localport)

''' uart0 init
    baudrate: 115200
    tx pin  : gpio0
    rx pin  : gpio1
'''
uart = UART(0, 115200, tx=Pin(0), rx=Pin(1))   
uart.init(115200, bits=8, parity=None, stop=1) 
uart.write('WIZnet chip tcp server example.\r\n')
    
def w5x00_init():
    global localip
    ''' spi0 init
        baudrate: 2000000
        mosi pin: gpio19
        miso pin: gpio16
        sck  pin: gpio18
        cs   pin: gpio17
        rst  pin: gpio20
    '''
    spi=SPI(0,2_000_000, mosi=Pin(19),miso=Pin(16),sck=Pin(18))
    nic = network.WIZNET5K(spi,Pin(17),Pin(20))
    nic.active(True)
    # use dhcp, if fail use static netinfo
    try:
        nic.ifconfig('dhcp')
    except:
        nic.ifconfig(netinfo)
    localip = nic.ifconfig()[0]
    print('ip :', nic.ifconfig()[0])
    print('sn :', nic.ifconfig()[1])
    print('gw :', nic.ifconfig()[2])
    print('dns:', nic.ifconfig()[3])
    uart.write('ip :{0}\r\n'.format(nic.ifconfig()[0]))
    uart.write('sn :{0}\r\n'.format(nic.ifconfig()[1]))
    uart.write('gw :{0}\r\n'.format(nic.ifconfig()[2]))
    uart.write('dns:{0}\r\n'.format(nic.ifconfig()[3]))
    
    while not nic.isconnected():
        time.sleep(1)
#         print(nic.regs())
        print('no link')
        uart.write('no link\r\n')

conn_flag = False

def server_loop():
    global localip
    global conn_flag
    while True:
        if(conn_flag == False):
            uart.write('socket open\r\n')
            s = socket()
            s.bind(listen_info) # Source IP Address and Port
            s.listen(5) # max conncet counts
            conn_flag = True
            print("TEST server Loop")
            uart.write('TCP Server:{0} ,listen port:{1}\r\n'.format(localip, listen_info[1]))
            conn, addr = s.accept()
            print('Connect from %s' % str(addr))
            uart.write('Connect from {0}:{1}\r\n'.format(addr[0], addr[1])) 
        else:
            
            try:
                
                data = conn.recv(2048)
                data = data.decode('utf-8')

                data+='\r\n'
                uart.write(data)
                if data != 'NULL':
                    conn.send(data)
            except:
                uart.write('disconnect')
                conn_flag = False
            
def main():
    w5x00_init()
    server_loop()
if __name__ == "__main__":
    main()




4.5 烧录验证

在这里插入图片描述

要测试以太网示例,必须将开发环境配置为使用Raspberry Pi Pico。

  • 所需的开发环境
    • Thonny
  • 如果你必须编译MicroPython,则必须使用Linux或Unix环境。

将代码复制到Thonny之后,选择运行环境为Raspberry Pi Pico,然后点击运行即可。打开SocketTester选择客户端连接服务器后发送消息可以获取到回传,打开WIZnet UartTool 打开串口,可以看到客户端发送的消息,则表示可以测试成功。

5 注意事项

  • 如果采用的是WIZnet的W5500来实现本章的示例,则只需烧录W5500的固件并运行示例程序即可。

6 相关链接

WIZnet官网

本章例程链接

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

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

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

相关文章

人工智能可以战胜人类智慧大脑么?

引言 在当今快速发展的科技时代&#xff0c;人工智能的进步日新月异&#xff0c;引发了一场深刻的讨论&#xff1a;能否有一天&#xff0c;人工智能能够超越甚至战胜人类智慧&#xff1f;这个问题涉及到人类认知的广泛领域&#xff0c;牵涉到人类思维的深层次特质以及AI技术在…

Leetcode 45 跳跃游戏 II

题意理解&#xff1a; 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。 还是从初始坐标i0的位置到达最后一个元素&#xff0c;但是问题不是能不能跳到&#xff0c;而是最少几步能跳到最后一个元素。 目标&…

2024Web自动化测试的技术框架和工具有哪些?

Web 自动化测试是一种自动化测试方式&#xff0c;旨在模拟人工操作对 Web 应用程序进行测试。这种测试方式可以提高测试效率和测试精度&#xff0c;减少人工测试的工作量和测试成本。在 Web 自动化测试中&#xff0c;技术框架和工具起着至关重要的作用。本文将介绍几种常见的 W…

Ubuntu 常用命令之 tar 命令用法介绍

tar 命令在 Ubuntu 系统中是用来打包和解包文件的工具。tar 命令可以将多个文件或目录打包成一个 tar 文件&#xff0c;也可以将 tar 文件解包成原来的文件或目录。 tar 命令的常用参数如下 c&#xff1a;创建一个新的 tar 文件。x&#xff1a;从 tar 文件中提取文件。v&…

【源码】基于SpringBoot+thymeleaf实现的快递之家管理系统

系统介绍 基于SpringBootthymeleaf实现的快递之家管理系统是为学校打造的高效的快递管理系统&#xff0c;系统分为管理员、注册用户两类角色&#xff0c;一共是分为三大菜单项&#xff0c;分别是我的物流、个人管理、后台管理&#xff0c;管理员拥有全部菜单&#xff0c;注册用…

科研院校和研究所都在用功率放大器做哪些实验

科研院校和研究所在科研工作中常常使用功率放大器进行实验。功率放大器是一种电子设备&#xff0c;其主要功能是将输入信号的功率增加到预定的输出功率水平&#xff0c;并保持信号的波形不失真。它在各个学科领域都有广泛的应用&#xff0c;包括通信、无线电、雷达、生物医学等…

外汇天眼:Cboe宣布与纽约州Secaucus的NY6数据中心建立连接

NY6数据中心将集成到Cboe的延迟均衡Secaucus基础架构中&#xff0c;目前该基础架构使用NY4和NY5数据中心。 NY6将仅作为BYX Equities、BZX Equities、EDGA Equities、EDGX Equities、BZX Options、EDGX Options和C2 Options交易所的延迟均衡出入口&#xff08;PoP&#xff09;…

算法--数据结构基础

文章目录 数据结构单链表栈表达式求值前缀表达式中缀表达式后缀表达式 队列单调栈单调队列KMPTrie并查集堆哈希表字符串哈希 数据结构 单链表 用数组模拟&#xff08;静态链表&#xff09;效率比定义Node类&#xff08;动态链表&#xff09;效率高些 使用数组模拟单链表&am…

DBNet文本检测网络 (FPN、batch normalization、Transpose conv)

DB Net文本检测网络概述 DBNet论文地址&#xff1a;https://arxiv.org/pdf/1911.08947.pdf DBNet是一种基于分割的文本检测网络&#xff0c;使用分割网络提供自适应的thresh用于二值化。 原始二值化方法和DBNet中的动态阈值 传统的基于分割的检测方法&#xff0c;对于分割后的…

C++第一讲之初入C++

注&#xff1a;本文是对于学完C语言再学C同学的讲解&#xff0c;主要补充C与C语言不同之处&#xff0c;如果你没学过C语言&#xff0c;不建议观看本文。 一.C简介 我们都知道C语言是过程性语言&#xff08;强调的是实现过程&#xff09;&#xff0c;即对计算机语言要处理的两…

【持续更新】汇总了一份前端领域必看面试题

文章目录 1. 写在前面2. 前端面试汇总2.0.1. 如何提⾼webpack的打包速度2.0.2. 数组去重2.0.3. 前端有几种缓存方式&#xff1f;2.0.4. nextTick描述一下&#xff1f;2.0.5. Webpack层面的优化&#xff1f;2.0.6. 代码层面的优化&#xff1f;2.0.7. Web 技术的优化&#xff1f;…

ESP32 - Thonny+MicroPython+ESP32 继电器的使用

ESP32 - ThonnyMicroPythonESP32 继电器的使用 认真理解&#xff0c;能看懂 继电器默认为断开 from machine import Pin p13 Pin(13, Pin.OUT) p13.value(1) # 吸合 #p13.value(0) # 断开

专攻代码型闪存芯片赛道,芯天下授权世强硬创代理全线产品

近年来受下游应用需求增长的驱动&#xff0c;代码型闪存芯片市场空间持续扩张&#xff0c;在后疫情之下NOR Flash及SLC NAND Flash市场规模整体仍保持逐步增长的趋势。 为了迎合市场需求&#xff0c;世强先进&#xff08;深圳&#xff09;科技股份有限公司&#xff08;下称“世…

【离散数学】——期末刷题题库(树其二)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

vue2的小练习——实现自定义指令v-nodata的商品列表

实现&#xff1a;一个商品列表&#xff0c;每个商品包含商品名称、商品价格&#xff0c;我们可以对每个商品进行删除操作&#xff0c;要求如下。 实现一个自定义指令v-nodata&#xff0c;指令的功能是当商品列表中没有商品数据时会显示一个div&#xff0c;div中有“暂无数据”…

node.js mongoose middleware

目录 官方文档 简介 定义模型 注册中间件 创建doc实例&#xff0c;并进行增删改查 方法名和注册的中间件名相匹配 执行结果 分析 错误处理中间件 手动抛出错误 注意点 官方文档 Mongoose v8.0.3: Middleware 简介 在mongoose中&#xff0c;中间件是一种允许在执…

智能停车场系统施工布线方案

一、停车场系统所用的控制主板的信号线是不可以与交流电源线平行铺设的&#xff0c;所以应该尽量避免穿在同一PVC管内。 二、停车场系统在布线的时候需要避免导线产生接头。如果必须有接头&#xff0c;那么接头也应该使用压线或焊接并作防水处理。 三、停车场布线所有外部设备…

玩转大数据19:数据治理与元数据管理策略

随着大数据时代的到来&#xff0c;数据已经成为企业的重要资产。然而&#xff0c;如何有效地管理和利用这些数据&#xff0c;成为了一个亟待解决的问题。数据治理和元数据管理是解决这个问题的关键。 1.数据治理的概念和重要性 数据治理是指对数据进行全面、系统、规范的管理…

netty线程调度定制

1、netty的线程调度问题 在netty的TCP调度中&#xff0c;线程的调度封装在NioEventLoopGroup中&#xff0c;线程执行则封装在NioEventLoop中。 线程调度规则封装在MultithreadEventExecutorGroup的next方法中&#xff0c;这个方法又封装了EventExecutorChooserFactory&#xf…

低代码核心能力详解:简化应用开发的新思路

低代码平台作为一种快速地应用开发解决方法&#xff0c;为中小企业实现数字化转型提供了机会。但是&#xff0c;对于一些刚开始触碰低代码平台的企业来说&#xff0c;了解其核心能力是很重要的。本文将详细分析低代码平台的核心能力&#xff0c;并在挑选低代码平台以前为中小企…