注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
wo4fisher的个人空间 https://home.eeworld.com.cn/space-uid-296469.html [收藏] [复制] [分享] [RSS]
日志

【得捷Follow me第4期】项目总结

已有 309 次阅读2024-3-10 22:46 |个人分类:W5500-EVB-Pico

因起:rp2040早两年就面世了,并且在不同的开发平台都有对其的支持,本身也是一款性能比较强劲的芯片,这次W5500-EVB-Pico在官方pico基础上增加了W5500这颗 集成全硬件TCPIP协议栈网络芯片,是一个学习通过嵌入式平台接入以太网的,以及各种网络协议栈学习的绝好机会。

**在每个帖子中,均有安装过程,代码和最后运行的结果(静态图片和动画的形式展现),硬件相对简单,没有录制视频,后边有时间再补充。

 

发帖地址汇总:

入门任务:    第一帖:【得捷Follow me第4期】W5500-EVB-Pico arduino离线HFS方式搭建第三方库开发环境     帖子中有完整的离线安装过程、库文件链接和github加速下载...

                      第二帖:【得捷Follow me第4期】W5500-EVB-Pico platform io方式开发环境踩坑记录

基础任务一:第三帖: 【得捷Follow me第4期】W5500-EVB-Pico platform IO下使用Ethernet3库设置静态IP 

基础任务二:第四帖: 【得捷Follow me第4期】W5500-EVB-Pico PIO UDP收发测试

                     第五帖: 【得捷Follow me第4期】W5500-EVB-Pico PIO下TCP协议实现Webclient和WebServer

进阶任务:   第六帖: 【得捷Follow me第4期】W5500-EVB-Pico PIO通过NTP服务器获取网络时间

终极任务二:第七帖:【得捷Follow me第4期】W5500-EVB-Pico PIO 挂载SD卡并实现文件读写访问 

                     第八帖: 未完待续......

入门任务:开发环境搭建,BLINK,驱动液晶显示器进行显示(没有则串口HelloWorld)

arduino

第一个任务主要是开发环境搭建,这里没有使用其他小伙伴使用的***Python环境,而是使用了Arduino环境和vscode + platformIO环境,原因,第一平时用python不多,第二主要是借助本次测试正好进一步了解一下vscode + platformIO环境下的开发板添加、各种库的使用方法、以及开发环境中的各种配置。

任务一分两步进行,首先在Arduino环境中进行了rp2040 pico开发环境的安装,因为中rp2040仅支持arduino环境。 所以想着先通过Arduino中搭建开发环境并测试开发板,以验证rp2040底层,跑通“helloworld”第一步,这样,方便在vscode + platformIO中万一遇到各种问题,好排查问题所在。

过程比较曲折,开始尝试通过在线安装,两次没成功。

后来网上搜索,使用离线方式安装,同时发现了一个非官方的库,大佬就是大佬(感谢开源路上各个无私奉献的大佬们!!!),arduino官方中的库应该也是来自于这位大佬,不过更新/同步不及时。于是乎使用HFS离线方式在arduino搭建了rp2040 pico 的库以及工具链等,中vscode + platformIO间过程也还好,不算太绕。

arduino库提供了丰富的示例库,无论是通用的arduino开发板,还是rp2040 pico 。但是弊端是没有编程过程中的代码提示功能和调试功能。(后来发现在visualStudio中已经有支持arduino工程的插件),于是,打算通过测评,测试另一目标比较流行的开发方式:vscode + platformIO。

结论:通过例程BLINK,arduino的库,是最快入门嵌入式学习的途径,不要太好用。

 

② vscode + platformIO

首先是vscode + platformIO的安装。

安装完成后,便可以通过添加新工程的方式,让platformIO自动将rp2040 pico的库和工具链添加到系统环境。

这一步在线安装比在arduino中快很多,一次成功。

如果某硬件arduino和platformIO中是同步的,那么arduino中的例程是可以直接拷贝过来使用的,仅需要在mian.cpp中增加“#include <arduino.h>”,添加对arduino.h的应用即可。也就是platformIO可以借鉴arduino丰富的生态,并且绝大多数arduino的库都有使用例程。

platformIO也提供了在线搜索library的功能,并且查询到的库,可以通过链接打开库的网址。并且,如果直接使用这些库,不需要修改的话,仅需在PIO HOME中查询库,打开库之后单击  即可。

下图演示过程:

下载的库文件也会添加到lib文件夹下:

 

另一种添加第三方库的方式是,手动查找对应的库,下载后,将库手动拷贝至工程目录下对应的lib文件夹内即可。platformIO中提供ldf功能,会自动搜索lib文件下下的源文件,在编译时进行编译。

这里遇到的一个坑是,rp2040 pico通过usb下载一键下载程序使用驱动问题,在帖子中也有详细说明。这一步,在arduino中工具菜单下通过一些选项配置即可完成,没有遇到问题。

结论:过程有一些曲折,但是代码编辑自动提示、可以直接借鉴arduino生态,还是有新引力的(另外,platformIO对esp32、esp8266、stm32多个系列均有支持)。

 

基础任务一:完成主控板W5500初始化(静态IP配置),并能使用局域网电脑ping通,同时W5500可以ping通互联网站点;通过抓包软件(Wireshark、Sniffer等)抓取本地PC的ping报文,展示并分析。

因为此前对platformIO的不熟悉,因此,在本任务中,主要首先网络搜索,发现有Ethernet3库,这个库比较新,并且提供了对W5500的支持。

后来发现,pico库中自带Ethernet库,不过不支持CS引脚和RST引脚,需要在此基础上进行二次修改,同时Ethernet是否原生支持W5500,也是个问题。

 

因为,在后边的UDPTCP/IP中都需要以本任务做基础,另,当时写本任务和后面基础任务二、进阶任务时,当时pico不在身边,没法测试。所以,本任务无最终测试,但是通过基础任务二、进阶任务,可知,使用Ethernet3可以完成本任务基本要求。

同时,在计算机端ping PICOip地址,可以返回数据(在其他任务中测试)。

结论:Ethernet3“是”pico原生Ethernet库的扩展,提供了CS引脚和RST引脚以及对应的io操作函数,以进行片选和硬件复位,同时通了udp、tcp/ip等协议栈的接口操作。

 

基础任务二:主控板建立TCPIP或UDP服务器,局域网PC使用TCPIP或UDP客户端进行连接并发送数据,主控板接收到数据后,送液晶屏显示(没有则通过串口打印显示);通过抓包软件抓取交互报文,展示并分析。(TCP和UDP二选一,或者全都操作)

① Udp协议收发测试

这里使用了ETHERNET3库中的示例代码,pico建立udp服务端,pc端使用net assist软件模拟udp客户端,进行数据收发。

PC端:

pico端(下图开始时有一段时间静止(在操作pc端)):

 

② TCP/IP协议 Webclient的实现

依然使用Ethernet3库,使用其web client例程

首先创建web client客户端,然后向服务端发起连接请求,当接收到数据后,打印接收数据。

结论:成功建立web client ,访问baidu.com,并成功返回连接请求数据。

③ TCP/IP协议 Web server 的实现

这里继续使用Ethernet3库,使用pico创建web 服务器,在pc端,使用net assist软件,建立web 客户端。客户端发送数据给picopico进行应答。

pico 服务端:

pc 客户端:

结论:作为web server可以成功接收客户端发送的请求数据,(写总结时)发现,pico作为服务端没有成功返回给客户端数据,这个后边查卡壳原因。

 

进阶任务:从NTP服务器(注意数据交互格式的解析)同步时间,获取时间送显示屏(串口)显示。

从NTP服务器获取网络时间,还是在UDP协议上的一个延伸,只要udp协议可以正常收发数据。

接下来就是按照NTP要求向NTP服务器发送请求数据报文即可获取时间数据,接下来就是对返回时间戳进行计算,根据需要计算得到不同格式的时间数据。

在例子中分别得到了1900年起到现在的秒数、1970年起到现在的秒数、和当前的日期和时间。

 

结论:在rp2040 pico中通过w5500可以方便实现有线连接获取网络时间,从而实现本地校时功能。

 

终极任务二:使用外部存储器,组建简易FTP文件服务器,并能正常上传下载文件。

这一步需要将之前的Ethernet功能基础上增加ftp服务,同时需要在原来硬件基础上,扩展SD卡。需要使用多个库才能实现最终功能。

① 首先实现pico 硬件SPI1 挂载SD

这里使用了RP2040_SD 库,同时在RP2040_SD 库的基础上进行了部分修改(RP2040_SD 库,以及 pico的库文件),使得支持硬件SPI1访问SD卡(原生仅支持SPI0)。原贴中有详细的修改步骤。

运行结果:

硬件连接:

未实现部分:

最后一个任务需要使用Ethernet库、FTP server库和SD库,因为原生pico库中没有很好的提供硬件支持(或者没找到),在实现以上任务中使用到的库文件在最后一个任务中,出现了不兼容的情况,因此FTP server和SD库,总有部分编译时出现各种重定义、错误等警告。

业余时间又断断续续折腾了一周,还是不见效果,但是折腾的过程也逐渐学习了各种库的实现、platformio库文件管理、不通库如何相互协作(引用)、C++语法等相关知识内容。

同时在折腾中,也发现了一些非常好的库文件,后边有时间再继续折腾。

 

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章