RF/无线
为嵌入式系统配备 HTML(超文本标记语言)服务器使其能够通过标准 Web 浏览器与用户(或开发人员)进行通信。该服务器占用的代码相对较少,几乎可以在任何现代 MCU 上实现,以提供可用作仪表板、控制面板或几乎任何类型的用户界面的 GUI。在这篇动手文章中,我们将提供一个在 Microchip PIC32 MCU 上实现的 Wi-Fi™ 无线 Web 服务器的实际示例,它可以作为在您选择的平台上进行类似设计的基础。
在这篇由两部分组成的文章的第一部分中,我们将检查硬件/软件选择、添加 I/O 屏蔽以及熟悉网络软件库。
构建块
由于涉及内存和处理能力要求,该项目基于 32 位处理器。基本的 TCP/IP 堆栈可以在一些现代 8 位机器上实现,例如Microchip 的 PIC18、STMicro 的 ST8和Atmel 的 AVR 系列,但支持全功能 TCP/IP 堆栈,以及 http 服务器和 Wi 的代码-Fi 驱动程序,可能会超出他们的舒适度。
我搭建的服务器基于PIC32MX795F5因为我在实验室里已经有了一个(更多关于这个很快)。PIC32MX7xx 系列基于 32 位 MIPS M4K 内核,它具有 5 级流水线哈佛架构,包括一个单周期乘法和硬件除法单元以及 32 个 32 位内核寄存器。此应用中使用的 ‘MX795 系列以 80 MHz 运行,并配备了 10/100 以太网、USB 和 CAN 接口,使其成为通信控制器的理想选择(图 2)。PIC32 的 MIPS CPU、大容量内存(512 K 闪存/128 K RAM)和种类繁多的网络接口,提供更完善的变体,使其能够处理 TCP/IP 堆栈和 HTTP 服务器的代码以备不时之需。
图 :Microchip Technology 的 PIC32MX7xx MCU。(由 Microchip Technology 提供。)
Microchip 为 PIC32 制作了几款适用于 Web 服务器的评估板,包括他们的DM320004以太网入门套件和MRF24WB0MA Wi-Fi 演示板。有几种低成本的第三方开发板可用于 PIC32,包括Olimex 的 PIC32 Maxi-Web 和 Digilent 的Cerebot Mx7ck,以及由多家制造商提供的 Arduino Uno 板的 PIC32 供电变体,包括 Digilent Uno32使用 Microchip Technologies 的PIC32MX795F512L。
由于我已经熟悉 Arduino IDE,并且有一个我为另一个项目获得的 Uno32 板,它成为服务器的基础。Uno 板只有一个 USB 接口,所以我订购了 Digilent 的TDGL011 Wi-Fi Shield 作为我的网络接口(图 3a)。我还选择了 Diligent 的TDG005基本 I/O 扩展板,作为一种工具,帮助我在处理 Wi-Fi 板之前了解一些有关在扩展板卡上执行 I/O 操作的知识(图 3b)。
I/O 扩展板是现成的方便设备集合,其中许多可用于为服务器实现温度监控器或其他现实世界接口。紧凑型电路板包括数字 I/O(按钮开关和分立 LED)、模拟 I/O(电位计和 I²C 温度传感器)、串行 EEPROM 和几个大电流 FET 驱动器。该扩展板还有一个漂亮的 128 x 32 像素单色 OLED 显示屏,可通过 SPI 接口与 MCU 通信并输出字母数字文本或简单图形。一旦服务器启动并稳定运行,我计划用它来显示设备的状态或用作小型远程消息传递设备。
硬件和软件集成
到目前为止,我写的所有草图(程序)都相当简单,只涉及 Arduino 板本身,所以我插入了 I/O 屏蔽,并在教程中找到了一些示例草图感受一下处理多板系统。我研究了一些示例代码,它们使用“包含”功能调用各种头文件,这些头文件为协议栈和硬件驱动程序提供库接口。我还对 MPIDE 核心抽象层库中定义的 String 对象类进行了一些试验,我需要为 OLED 显示器的驱动程序或其他 I/O 设备提供数据。结果是一个高度修改的示例草图,它读取 I/O 屏蔽电位器上的电压并将其用作延迟变量,以确定消息在 OLED 上滚动的速度。
一旦我对在我的草图中添加硬件和库感到满意,我便将注意力转向了与 Digilent chipKIT 兼容的 Internet 库1,这是一个支持 Diligent 板生态系统的参考设计、应用说明和面向网络的材料的集合。DNETcK 互联网协议套件库为使用 Microchip PIC32 MCU 及其外围设备的 Digilent 处理器板提供全套互联网协议功能。它包括为 UDP 和 TCP 以及 HTTP 服务器实现 IP 客户端和服务器功能所必需的软件类。它的配套库 DWIFIcK 增加了对 Wi-Fi 的支持。
DNETck 包含 TcpServer.pde,这是一个由几个源文件组成的 HTTP 服务器草图:
HttpServer.pde — 此文件包含所有网络代码和基本服务器应用程序。
Parser.cpp — 此文件包含用于解析 HTTP 请求消息的代码。
Render.cpp — 此文件包含生成 HTTP 响应消息的代码和构成消息正文的 HTML 代码。
BoardDefs.h - 该文件包含草图支持的各种板平台上的 I/O 引脚的声明。
Parser.h - 这声明了解析器和草图的其余部分共享的符号。
网络服务器操作由模块 HttpServer.pde 中的函数 ServerTask() 和 Client-Task() 处理。HTTP 协议和 HTML 响应的详细信息由 HttpServer.pde 中的 AppTask() 以及 Parser.cpp 和 Render.cpp 中的代码处理。
所有库都设计用于像 Arduino 这样的简单嵌入式系统,这些系统不运行 RTOS 内核,并且依赖于循环状态机类型的编程环境,通过主循环进行短而重复的传递。尽管这种安排运作良好,但它对软件状态机的依赖确实对使用它的应用程序施加了一些限制。该库的应用笔记包含几个关于确保应用程序不会阻塞网络堆栈的定期执行(至少每隔几毫秒)的可怕警告,并轮询网络堆栈的状态以确保它在开始之前返回跑。
在消化了这些注意事项后,我使用 IDE 为我正在使用的硬件配置 TCP 堆栈和 HTTP 服务器,然后再上传和启动软件。
参考:
Diligent 的支持页面提供了一个可下载的 zip 文件,其中包含用于将 Network Shield、Wi-Fi Shield 和 PmodWiFi 与 chipKIT MPIDE 一起使用的库和文档。这些库提供以太网(TCP/IP 和 UDP)、USB 主机、USB 设备、CAN 和 Wi-Fi 支持。
全部0条评论
快来发表一下你的评论吧 !