Funpack3-5:基于 Teensy 4.1 和 W5500 实现通过网页控制开发板上的 LED
该项目使用了Teensy 4.1 和 W5500,实现了通过网页控制开发板上的 LED的设计,它的主要功能为:通过网页控制LED。
标签
嵌入式系统
Funpack活动
开发板
topgear
更新2025-01-13
7

1. 项目描述

本项目使用 Teensy 4.1 开发板结合 W5500 以太网模块,通过以太网通信实现对开发板上 LED 的远程控制。用户可以通过网页发送指令控制板载 LED 的开关状态,实现一个简单的物联网功能演示。

在项目的实现过程中,选择了易于开发的 Teensyduino (Arduino IDE + Teensy Board package)。




2. 硬件资源

2.1 Teensy 4.1 开发板

Teensy 是一个非常适合进行系统原型开发搭建的的平台,经过多个版本的迭代,开发板的硬件能力愈发强大。同时开发板也支持多种软件开发环境,易于开发的 Arduino 开发环境正是其中之一。

image.png

目前 Teensy 4.1 是 Teensy 系列开发板最新迭代的产品:

  • 采用恩智浦的i.MX RT1062处理器,基于ARM Cortex-M7内核,运行频率高达600 MHz
  • 64 和 32 位浮点数学单元
  • 7936K 闪存、1024K RAM(512K 紧密耦合)、4K EEPROM(仿真)
  • QSPI 存储器扩展,可容纳 2 个额外的 RAM 或闪存芯片
  • 2 个 USB 端口,速度均为 480 MBit/S
  • 55 个数字输入/输出引脚,35 个 PWM 输出引脚
  • 18 个模拟输入引脚
  • 8 个串行端口、3 个 SPI 端口、3 个 I2C 端口
  • 2 个 I2S/TDM 和 1 个 S/PDIF 数字音频端口
  • 3 个 CAN 总线(1 个带 CAN FD)
  • 1 个 SDIO(4 位)microSD 卡插槽
  • 包含了一个以太网控制器和一个以太网PHY芯片(DP83825),支持10/100 Mbit的速度
  • 32 个通用 DMA 通道
  • 加密加速和随机数生成器
  • 用于日期/时间的 RTC
  • 可编程 FlexIO
  • 像素处理流水线
  • 外设交叉触发
  • 电源开关管理

2.2 W5500 以太网模块

  • 集成 TCP/IP 协议栈,支持稳定的以太网通信
  • 使用 SPI 接口与主控通信

2.3 其他外设和资源

  • 板载 LED(引脚 13)
  • 网线




3. 需求分析

  • 基本功能
    • Teensy 4.1 通过 W5500 模块接入局域网,监听 HTTP 请求。
    • 根据用户通过网页发送的指令控制 LED 的开关。
  • 用户交互
    • 提供简单的网页界面,包含按钮操作(打开/关闭 LED)。
  • 可靠性要求
    • 保证以太网连接稳定,响应速度快。




4. 系统框图

image.png

  • W5500 通过网线与 PC 连接
  • Teensy 4.1 给 W5500 提供 3.3V 电源
  • Teensy 4.1 SPI 连接到 W5500
  • 直接使用板子上的 LED




5. 开发环境

5.1 安装 Teensyduino

安装 Teensyduino 包含两个步骤,首先安装 Arduino IEDE,然后通过 Arduino Boards Manager 安装 Teensy package。

5.1.1 安装 Arduino IDE

从官网下载并安装 Arduino 2.x.x IDE,推荐安装 Versions 2.3.0 以上版本。

5.1.2 安装 Teensy package

打开 Arduino IDE,点击 File > Preferences,在弹出窗口中点击 Additional boards manager URLs,复制粘贴下方链接并确认:

https://www.pjrc.com/teensy/package_teensy_index.json

image.png

然后在主界面,点击左侧 Boards Manager 图标,搜索 teensy,然后安装 Teensy Package,如下图所示,当前最新版本为 Version 1.59

image.png

安装过程可能会比较耗时:

Downloading packages
teensy:teensy-tools@1.59.0
teensy:teensy-compile@11.3.1
teensy:teensy-discovery@1.59.0
teensy:teensy-monitor@1.59.0
teensy:avr@1.59.0
Installing teensy:teensy-tools@1.59.0
Configuring tool.
teensy:teensy-tools@1.59.0 installed
Installing teensy:teensy-compile@11.3.1
Configuring tool.
teensy:teensy-compile@11.3.1 installed
Installing teensy:teensy-discovery@1.59.0
Configuring tool.
teensy:teensy-discovery@1.59.0 installed
Installing teensy:teensy-monitor@1.59.0
Configuring tool.
teensy:teensy-monitor@1.59.0 installed
Installing platform teensy:avr@1.59.0
Configuring platform.
Platform teensy:avr@1.59.0 installed

5.2 安装 Ethernet 库

本项目将在 Teensy 4.1 开发板上搭建一个 HTTP service,可以基于 Ethernet Libaray 进行开发。

在 Arduino IDE 主界面,点击左侧 Libaray Manager 图标,搜索 ethernet,然后安装 Ethernet Libaray,如下图所示,当前最新版本为 Version 2.0.2

image.png

Output 窗口显示:

Downloading Ethernet@2.0.2
Ethernet@2.0.2
Installing Ethernet@2.0.2
Installed Ethernet@2.0.2




6. 开发过程

6.1 硬件连接

6.1.1 将 W5500 模块与 Teensy 4.1 的 SPI1 接口连接

Ethernet 库默认使用 SPI0 配置 W5500,不过由于 Teensy 4.1 开发板上 SPI0_SCK Pin 与 LED GPIO Pin 共用了 Pin 13,所以有冲突。为了能使用开发板上的 LED,这里我改为使用 SPI1 与 W5500 进行通信。

同时使用 Teensy 4.1 的 3.3V 和 GND Pin 为 W5500 提供电源。

SPI 1 Pin 脚如下;

  • CS1 (Pin 0)
  • MISO1 (Pin 1)
  • MOSI1 (Pin 26)
  • SCK1 (Pin 27)

image.png

6.1.2 连接 W5500 以太网模块到 PC

image.png

6.2 软件开发

image.png

6.2.1 系统初始化

 setup 函数中完成以下工作:

  • 配置 SPI1 总线,初始化 W5500 模块
    • 因为 SPI1 的 CS1 和 MISO1 可以通过 Pinmux 使用 Pin 0 和 Pin 1 或者 Pin 38 和 Pin 39,本次项目中我使用的是 Pin 0 和 Pin 1,需要通过 setCS  setMISO 接口指定 Pin
  • 设置网络参数(如 MAC 地址和静态 IP 地址)
    • 这里配置静态 IP 地址:192.168.1.50
  • 初始化以太网服务器,监听 HTTP 请求
#include <SPI.h>
#include <Ethernet.h>

// W5500 配置
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // MAC 地址
IPAddress ip(192, 168, 1, 50); // 静态 IP 地址
EthernetServer server(80); // 设置服务器端口 80 (HTTP)

// LED 引脚
const int ledPin = 13; // Teensy 板载 LED

void setup() {
// 初始化 LED 引脚
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW); // 默认关闭 LED

// 初始化 SPI1 引脚
SPI1.setCS(0);
SPI1.setMISO(1);
SPI1.begin();

// 初始化以太网
Ethernet.init(0, SPI1);
Ethernet.begin(mac, ip);
delay(1000); // 等待以太网稳定

// 启动服务器
server.begin();

// 输出以太网信息
Serial.begin(9600);
Serial.print("Server is at ");
Serial.println(Ethernet.localIP());
}

6.2.2 HTTP 请求处理

  • 检测是否有客户端连接
  • 解析 HTTP 请求中的指令
    • 当请求包含 LED=ON 时,点亮 LED
    • 当请求包含 LED=OFF 时,熄灭 LED
  • 生成一个简单的 HTML 页面,提供控制 LED 的按钮:
    • "Turn LED ON"
    • "Turn LED OFF"
void loop() {
EthernetClient client = server.available(); // 检查是否有客户端连接

if (client) {
String request = ""; // 存储客户端请求
while (client.available()) {
char c = client.read();
request += c; // 读取请求字符
}

// 解析请求并控制 LED
if (request.indexOf("LED=ON") != -1) {
digitalWrite(ledPin, HIGH); // 打开 LED
} else if (request.indexOf("LED=OFF") != -1) {
digitalWrite(ledPin, LOW); // 关闭 LED
}

// 返回 HTML 响应
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("<html><body>");
client.println("<h1>Teensy 4.1 LED Control</h1>");
client.println("<a href=\"/LED=ON\">Turn LED ON</a><br>");
client.println("<a href=\"/LED=OFF\">Turn LED OFF</a>");
client.println("</body></html>");

delay(1); // 确保客户端接收到响应
client.stop(); // 关闭客户端连接
}
}

6.3 PC 网络配置

W5500 静态分配 IP 地址 192.168.1.50,所以需要将 PC 的 IP 地址设置为同一网段。




7. 功能展示

见视频

附件下载
Teensy-4.1_W5500.ino.zip
Arduino 工程
团队介绍
在职工程师
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号