Funpack3-5 基于Teensy 4.1的以太网通讯工具
该项目使用了Teensy 4.1,实现了通过以太网连接PC进行通信的设计,它的主要功能为:使用板卡上的以太网接口连接到电脑上并通过以太网和电脑通信,实现led数据传输。。
标签
嵌入式系统
Funpack活动
反正都一样
更新2025-01-15
10

image.png

项目介绍

这里是我参加Funpack第三季第五期活动的任务总结报告,我所完成的是任务一,从板子的以太网排针处引出接口,并通过网口通信,控制板子上的LED灯

以下是详细的操作指导:

步骤 1: 安装 Arduino 并配置 Teensy 4.1 开发板

  1. 下载并安装 Arduino IDE
  2. 添加 Teensy 4.1 支持
    • 打开 Arduino IDE。
    • 进入“文件”>“首选项”(在 macOS 上是“Arduino”>“首选项”)。
    • 在“附加开发板管理器网址”字段中,添加 Teensy 的 URL:https://www.pjrc.com/teensy/td_downloads.json
    • 点击“确定”保存设置。
  3. 安装 Teensy 开发板
    • 进入“工具”>“开发板”>“开发板管理器”。
    • 在搜索框中输入“Teensy”。
    • 找到“Teensyduino”安装选项并安装。
  4. 选择 Teensy 4.1 开发板
    • 在“工具”>“开发板”菜单中选择“Teensy 4.1”。
  5. 下载示例程序和配置编译器
    • Arduino IDE 自动配置编译器和其他工具链,无需手动操作。

步骤 2: 选择合适的示例程序

  1. 选择以太网相关例程
    • 在 Arduino IDE 中,进入“文件”>“示例”>“Teensy”>“web”。
    • 选择一个以太网相关的示例程序,例如“web_server”。
  2. 选择控制板载 LED 灯的相关例程
    • 在 Arduino IDE 中,进入“文件”>“示例”>“Basics”>“Blink”。

步骤 3: 修改例程

  1. 修改以太网例程
    • 在以太网例程中,你可以添加 HTML 代码,使其在网页中显示相关内容或组件。
    • 例如,你可以在 handleRoot() 函数中添加 HTML 代码,用于创建一个简单的网页界面。
  2. 修改 LED 控制例程
    • 在 Blink 例程中,你可以添加代码来控制 LED 的亮灭状态。
    • 例如,你可以添加一个按钮到网页中,当用户点击按钮时,通过以太网发送命令到 Teensy 4.1,从而控制 LED 的状态。
  3. 上传代码到 Teensy 4.1
    • 确保 Teensy 4.1 已经正确连接到计算机。
    • 在 Arduino IDE 中,点击“上传”按钮上传代码到 Teensy 4.1。
  4. 测试你的项目
    • 打开浏览器,输入 Teensy 4.1 在本地网络中的 IP 地址。
    • 检查网页是否显示了你添加的内容,以及是否可以通过网页控制 LED。

通过这些步骤,你可以成功地在 Teensy 4.1 上运行以太网和 LED 控制的示例程序,并进行相应的修改。

硬件介绍

Teensy 4.1 是一款高性能微控制器,特点如下:

  1. 处理器与性能:搭载恩智浦i.MX RT1062处理器,基于ARM Cortex-M7内核,最高运行频率600 MHz,具备64位和32位浮点数学单元。
  2. 内存与存储:拥有7936K闪存、1024K RAM(512K紧密耦合)、4K EEPROM(仿真),支持QSPI存储器扩展。
  3. 接口与通信:具备2个USB端口(480MBit/S)、55个数字I/O引脚(35个PWM输出)、18个模拟输入引脚、8个串行端口、3个SPI端口、3个I2C端口、2个I2S/TDM和1个S/PDIF数字音频端口、3个CAN总线(1个支持CAN FD)、1个SDIO(4位)microSD卡插槽。
  4. 网络功能:内置以太网控制器和PHY芯片,支持10/100 Mbit速度。
  5. 电源管理:支持动态时钟缩放,可在不同频率下保持正确的串行通信、音频采样率等,且具备电源关闭功能,可通过按钮控制。
  6. 其他特性:32个通用DMA通道、加密加速、随机数生成器、RTC、FlexIO、像素处理流水线、外设交叉触发等。

Teensy 4.1 还支持超频,频率可超过600MHz,且在电源关闭时,如果连接了纽扣电池,RTC仍能跟踪日期和时间。


软件介绍

image.png


Teensy支持多种编程软件:

  1. Arduino IDE + Teensyduino:主要环境,包含优化库。
  2. Visual Micro:仅限Windows,需付费。
  3. PlatformIO:跨平台,功能丰富。
  4. CircuitPython:通过Teensy Loader编程,部分硬件支持。
  5. 命令行:提供Makefile,适合无图形界面使用。

本次我使用的是arduino的方式进行开发

image.png

需要在软件中先安装好相应的开发板管理器,安装好之后,会有许多的示例程序,我们可以先看看,与以太网及led控制相关的例程

/*
Web Server

A simple web server that shows the value of the analog input pins.
using an Arduino Wiznet Ethernet shield.

Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
* Analog inputs attached to pins A0 through A5 (optional)

created 18 Dec 2009
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe
modified 02 Sept 2015
by Arturo Guadalupi

*/

#include <SPI.h>
#include <NativeEthernet.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 170, 177);

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

String LEDState = "off";

void setup() {
// You can use Ethernet.init(pin) to configure the CS pin
//Ethernet.init(10); // Most Arduino shields
//Ethernet.init(5); // MKR ETH shield
//Ethernet.init(0); // Teensy 2.0
//Ethernet.init(20); // Teensy++ 2.0
//Ethernet.init(15); // ESP8266 with Adafruit Featherwing Ethernet
//Ethernet.init(33); // ESP32 with Adafruit Featherwing Ethernet

// Open serial communications and wait for port to open:
Serial.begin(9600);

pinMode(LED_BUILTIN, OUTPUT);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.println("Ethernet WebServer Example");

// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);

// Check for Ethernet hardware present
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
while (true) {
delay(1); // do nothing, no point running without Ethernet hardware
}
}
if (Ethernet.linkStatus() == LinkOFF) {
Serial.println("Ethernet cable is not connected.");
}

// start the server
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}

上面是一个Web服务器代码,能够通过Web界面控制板上的LED灯。它使用了Arduino Wiznet Ethernet盾(或兼容的网络接口)来实现网络通信。以下是代码的主要功能:

  1. 包含库:引入了SPI和NativeEthernet库,用于网络通信。
  2. 设置MAC地址和IP地址:定义了网络接口的MAC地址和IP地址。
  3. 初始化Ethernet服务器:在端口80上创建了一个EthernetServer对象,用于处理HTTP请求。
  4. 定义LED状态:定义了一个字符串变量LEDState来跟踪LED的状态(开或关)。
  5. 设置函数(setup)
    • 初始化串口通信。
    • 设置LED_BUILTIN引脚为输出模式。
    • 等待串口连接(对于原生USB端口的Arduino板)。
    • 打印启动信息。
    • 启动Ethernet连接和服务器。
    • 检查Ethernet硬件是否存在,并在串口打印相关信息。
  6. 循环函数(loop)
    • 监听新的客户端连接。
    • 读取HTTP请求头,并检查请求内容。
    • 根据请求内容,控制LED的状态,并响应HTTP请求。
    • 发送HTTP响应头和HTML页面内容,页面包含LED的当前状态和控制按钮。
    • 关闭客户端连接。
  7. 处理HTTP请求
    • 如果请求是/led/on,则将LED状态设置为“on”并点亮LED。
    • 如果请求是/led/off,则将LED状态设置为“off”并熄灭LED。
    • 生成一个简单的HTML页面,显示LED的当前状态,并提供两个按钮来控制LED的开关。

这个Web服务器允许用户通过浏览器访问指定的IP地址,看到一个包含LED状态和控制按钮的网页,用户可以通过点击按钮来控制连接到Arduino板上的LED灯。


效果展示

image.png

总结

在本次活动中,学习了如何使用以太网发进行通信。在过程中遇到的问题,通过百度搜索都能找到适合的答案,使自我得到了提升,感谢硬禾学堂平台。

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