【银杏科技ARM+FPGA双核心应用】MicroPython系列十九:TCP服务...

[复制链接]
780|1
 楼主| 如意不如意 发表于 2020-7-27 17:54 | 显示全部楼层 |阅读模式
本帖最后由 如意不如意 于 2020-7-27 17:53 编辑

一、实验目的与意义
了解STM32的SPI和W5500的结构,使用MicroPython将iCore3做为TCP服务器。

二、实验设备及平台
  • iCore3双核心板点击购买
  • Micro USB线
  • 电脑
  • 网线
  • TCP&UDP测试工具

三、实验原理
iCore3带有W5500嵌入式以太网控制器,本实验实现TCP服务器功能。以PC作为客户端,iCore3作为TCP服务器,PC的IP地址为192.168.0.1,iCore3的IP为192.168.0.2,端口号为60001,当PC客户端连接到TCP服务器,TCP建立成功即可进行数据信息传输。原理示意图如下所示:

fetch.php?media=icore3:icore3_micropython_18_1.jpg

四、实验步骤
  • 用数据线将iCore3的USB-OTG口与电脑相连,将供电跳帽选择为OTG供电;
  • 将代码包中的main.py文件替换到PYBFLASH磁盘中的main.py,弹出磁盘(必须!);
  • 设置本机电脑IP;(方法见附录1)
  • 打开TCP&UDP测试工具;(方法见附录2)
  • 将iCore3网口通过网线连接到电脑网口;
  • 将iCore3重新上电,代码运行;

五、实验现象

在发送区编辑完要发送的数据后,点击发送即可收到iCore3的回复信息,如下图所示:
fetch.php?media=icore3:icore3_micropython_19_1.jpg

六、实验程序
  1. # -*- coding: utf-8-*-
  2. # main.py -- put your code here!
  3. import pyb, network, socket, _thread  #导入库

  4. # 定义全局变量
  5. client_list = []      #客户端列表
  6. server_socket = None  #服务器套接字
  7. nic = None            #以太网对象

  8. # 服务器初始化
  9. def server_init():
  10.     global server_socket, nic
  11.     #创建WIZNET5K对象,指定SPI,端口初始化,A15连接LAN_cs,G2连接LAN_INT
  12.     nic = network.WIZNET5K(pyb.SPI(1), pyb.Pin('A15'), pyb.Pin('G2'))
  13.     #设置iCore3的ip地址、子网掩码、网关、DNS服务器地址
  14.     nic.ifconfig(('192.168.0.2','255.255.255.0','192.168.0.1','192.168.0.1'))

  15.     #创建新的套接字,使用ipv4协议、TCP协议
  16.     server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  17.     server_socket.bind(('192.168.0.2',60001))  #设置服务器地址,端口号
  18.     server_socket.listen(50)                #监听端口

  19. # 服务器信息处理
  20. def deal_with(id):
  21.     global client_list
  22.     while True:
  23.         # 历遍所有客户端
  24.         for client in client_list:
  25.             # 若连接存在
  26.             try:
  27.                 # 获取接收到的数据,,并解码
  28.                 data = client[0].recv(1024).decode('utf-8')
  29.                 # 若数据不为空,则给客户端回复消息
  30.                 if len(data) > 0:
  31.                     client[0].send('iCore3 receive %s from %s.\n'%(data,client[1]))
  32.             except:
  33.                 # 断开连接
  34.                 client_list.remove(client)
  35.                 client[0].close()

  36.         pyb.delay(1)

  37. # 客户端连接管理
  38. def mana_socket(id):
  39.     global server_socket
  40.     while True:
  41.         # 获取客户端接口与地址
  42.         client_socket, client_addr = server_socket.accept()
  43.         # 若接口不为空
  44.         if client_socket:
  45.             # 则将该连接加入到client_list中
  46.             client_list.append((client_socket, client_addr))

  47.         pyb.delay(10)

  48. # 初始化服务器
  49. server_init()
  50. # 创建服务器处理线程并开启,线程id号为1
  51. _thread.start_new_thread(deal_with, (1,))
  52. # 创建客户端管理线程并开启,线程id号为2
  53. _thread.start_new_thread(mana_socket, (2,))

附录1:
1、打开设置,网络和Internet,更改适配器选项,以太网,属性;
fetch.php?media=icore3:icore3_micropython_18_3.jpg

2、Internet协议版本4,选择使用下面的IP地址,网络配置信息如下图所示:
fetch.php?media=icore3:icore3_micropython_18_4.jpg
附录2:
1、TCP&UDP测试工具安装双击TCPUDPDebug102_Setup.exe,点击下一步,在这里安装路径我们默认即可,点击安装,然后点击Finish完成安装。
2、TCP&UDP测试工具的使用
(1)打开测试工具,界面如下,点击创建连接,在弹出的设置窗口中,我们设置类型为TCP,目标服务器ip为192.168.0.2,端口号为60001,点击创建。
fetch.php?media=icore3:icore3_micropython_19_2.jpg

(2)点击连接按钮,连接到TCP服务器,在发送区编辑消息,点击发送,即可接收到TCP服务器返回的消息。
fetch.php?media=icore3:icore3_micropython_19_3.jpg

(3)iCore3客户端上电启动后主动连接服务器,即可进行通信。(若连接不上请检查网线连接,禁用无线网卡,关闭电脑防火墙)

代码包.zip (1.42 KB, 下载次数: 1)
GT01115 发表于 2020-9-10 11:13 | 显示全部楼层
第一次发现,厉害厉害,感谢楼主
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

66

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部