我经常希望能够在家里的另一个房间里从我的FPGA系统中获取状态信息。这样,当我运行测试时,我可以继续在另一个房间里看Netflix,或者在厨房里做饭,同时密切关注测试的状态。
显然,有几种不同的方式来创建这种类型的连接(蓝牙4,BLE, WiFi,磁感应?红外吗?)然而,Digilent刚刚发布了Pmod ESP32,这是他们自己的扩展板从Espressif ESP32.我有一些ESP32的经验,我喜欢这个事实,我可以做BLE,蓝牙4.1,和Wifi,以及作为一个服务器或客户端TCP或SSL连接。我决定从Digilent挑选一款新的Pmods,并将其整合到我的系统中,并选择了通过TCP协议使用Wifi。我做出这个决定是因为我发现了一个非常简单的python TCP服务器示例。
这个项目是我第一次尝试使用Pmod ESP32创建某种无线系统。
Vivado项目我决定用Microblaze设计这个FPGA,因为我想用c来写。一想到要用Verilog或VHDL来实现所有这些,我就有点犹豫了。我不是Microblaze的忠实粉丝,但它很容易让项目启动和运行。除了硬件设计的微火焰部分,我还添加了两个AXIuartlite控制器,一个用于通过Pmod连接器JA与Pmod ESP32接口,一个用于通过USB作为调试控制台。我还在设计中引入了一些AXI gpio控制器,用于与面板上的开关、按钮和led接口。还有一个来自Digilent的PWM控制器,由他们提供这里的IP库,以与RGB led接口。在设计中也有一个adc向导,但在本项目中未使用。
我将AXI uartlite控制器设置为115200波特率。我在UART的AT-command模式下使用Pmod ESP32,默认为115200。我还应该提到,这个项目是用Vivado 2017.4创建的。
的Pmod ESP32正如我前面提到的,我计划在AT模式而不是独立模式下使用ESP32。Pmod ESP32来自Digilent预装的AT命令固件,所以我不需要刷新任何新的板。但是,如果你需要在设备上重新刷新AT固件,详情和来源可以在这里找到.关于AT命令格式的详细信息可以在参考页的Pmod。
简单的Python TCP服务器我发现了一个用python设置TCP服务器的非常简单的例子,并选择在这个项目中使用这个例子。Python服务器包含在Github repo中,是'server.py'。重要的是,服务器中引用的IP地址要与路由器给你的机器的IP地址匹配。另外,记住这个IP地址和远程端口,因为我们将使用它们从ESP32创建一个TCP连接。
集成组件我的示例程序没有明确地通过软件连接到wifi网络,尽管我包含了一些功能,应该可以帮助任何人能够做到这一点。相反,我已经用一个串行终端将设备连接到我的wifi网络。因此,如果您想要重新创建这个项目,我建议在尝试运行这个示例之前将ESP32连接到您的网络,或者在main.c中添加几行代码,告诉ESP32在尝试启动TCP连接之前加入网络。同样重要的是,main.c中的示例代码被修改为服务器的特定IP地址和远程端口号。我使用的是端口5005,但实际上可以将其更改为几乎任何内容。
此外,如果您有一些问题使项目工作,使用Pmod ESP32上的按钮重新启动设备。在第一次传递时,我遇到了一些问题,让组件很好地一起工作,但在Pmod ESP32上循环供电,使事情完美地工作。同样重要的是,当你在microblaze上启动程序时,python服务器已经在运行。
一些快速步骤:为服务器……类型的python server.py
'在任何控制台或终端您使用您的服务器。我用Macbook Air作为服务器,而FPGA在我的Linux桌面运行。
FPGA的:
整个项目都包含在repo中,所以如果你愿意,你可以跳过Vivado中的位流生成,然后转到Vivado SDK,用工作区设置为proj/base-rt打开它。SDK。从这里开始,您应该能够用比特流编程FPGA并运行microblaze应用程序。
这是一个非常简单的示例,通过无线方式传递的消息包含关于FPGA上的开关、led和按钮状态的信息。但是,可以看到,将这种类型的示例转换成更复杂和有用的东西是非常容易的。
当服务器从TCP套接字接收到数据时,它只需将数据打印到控制台。所有的数据格式化都发生在FPGA上数据以ascii格式发送。
评论