Funpack3-5-基于teensy4.1通过网口实现控制LED
该项目使用了TEENSY4.1板卡,通过自己设计网口扩展板,连接本地局域网,通过PC网络调试助手,UDP发送固定报文,进行点亮与关闭LED。
标签
嵌入式系统
Funpack活动
开发板
林伟521
更新2025-01-15
7

简介

该项目使用了TEENSY4.1板卡,通过自己设计网口扩展板,连接本地局域网,通过PC网络调试助手,UDP发送固定报文,进行点亮与关闭LED

项目介绍

本项目主要使用teensy4.1开发板,通过板载的dp83825百兆网卡,嘉立创画的网口板,进行与电脑上位机进行通信。通过上位机调试助手,发送特定指令,teensy开发板收到网络数据进行解析,来控制LED的亮灭。

硬件配置:

1, teensy4.1开发板

(1)  主控介绍

i.MX RT1062处理器,基于ARM Cortex-M7内核,运行频率高达600 MHz,通过arduino软件可超频至1Ghz,性能非常强悍。

具有 1 MB 片上 RAM,强过RT1050系统的512KB

片内集成UARTSPII2CUSB2x 10/100M 以太网和 3x CAN

64 32 位浮点数学单元

加密加速和随机数生成器

2 I2S/TDM 1 S/PDIF 数字音频端口

用于日期/时间的 RTC

可编程 FlexIO

(2) 板卡外设介绍

7936K 闪存、1024K RAM512K紧密耦合)、4K EEPROM(仿真)

QSPI 存储器扩展,可容纳 2 个额外的 RAM 或闪存芯片

2 USB 端口,速度均为 480MBit/S

55 个数字输入/输出引脚,35 PWM 输出引脚

18 个模拟输入引脚

8 个串行端口、3 SPI 端口、3 I2C 端口

包含了一个以太网控制器和一个以太网PHY芯片(DP83825),支持10/100Mbit的速度,我们的项目正是使用这个接口完成的设计。

2, 网口转接板

我们通过嘉立创软件进行设计,通过排针引出网口,如图:


PCB如下:

实物如下:0.1uf电容焊接在网口座子下面

软件工具

arduino

我们使用的是软件arduino1.8.9版本。新版本由于我网络问题,teensy库一直安装不成功。


网络调试助手

架构框图

步骤实现

硬件连接

我们通过焊接好的排针,通过6针杜邦线与网口转接板相连,要注意板卡上的丝印与转接板的丝印一一对应,如下图

软件部分介绍

开发板初始化网络参数及设置LED

void setup() {
Serial.begin(115200);
while (!Serial && millis() < 4000) {
// Wait for Serial
}
printf("Starting...\r\n");
pinMode(led, OUTPUT);
// Unlike the Arduino API (which you can still use), QNEthernet uses
// the Teensy's internal MAC address by default, so we can retrieve
// it here
uint8_t mac[6];
Ethernet.macAddress(mac); // This is informative; it retrieves, not sets
printf("MAC = %02x:%02x:%02x:%02x:%02x:%02x\r\n",
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);

printf("Starting Ethernet with DHCP...\r\n");
if (!Ethernet.begin()) {
printf("Failed to start Ethernet\r\n");
return;
}
if (!Ethernet.waitForLocalIP(kDHCPTimeout)) {
printf("Failed to get IP address from DHCP\r\n");
} else {
IPAddress ip = Ethernet.localIP();
printf(" Local IP = %u.%u.%u.%u\r\n", ip[0], ip[1], ip[2], ip[3]);
ip = Ethernet.subnetMask();
printf(" Subnet mask = %u.%u.%u.%u\r\n", ip[0], ip[1], ip[2], ip[3]);
ip = Ethernet.gatewayIP();
printf(" Gateway = %u.%u.%u.%u\r\n", ip[0], ip[1], ip[2], ip[3]);
// ip = Ethernet.dnsServerIP();
//printf(" DNS = %u.%u.%u.%u\r\n", ip[0], ip[1], ip[2], ip[3]);

// Start the server
//printf("Listening for clients on port %u...\r\n", kServerPort);
//server.begin();

// start UDP
Udp.begin(localPort);
printf("udp start %u...\r\n", localPort);
}

解析网络报文,进行控制LED开关

//EthernetClient client = server.accept();
delay(1000);
int packetSize = Udp.parsePacket();
if (packetSize) {
Serial.print("Received packet of size ");
Serial.println(packetSize);
Serial.print("From ");
IPAddress remote = Udp.remoteIP();
for (int i=0; i < 4; i++) {
Serial.print(remote[i], DEC);
if (i < 3) {
Serial.print(".");
}
}
Serial.print(", port ");
Serial.println(Udp.remotePort());

// read the packet into packetBufffer
for (int i=0; i < 64; i++) {
packetBuffer[i] = 0;
}
Udp.read(packetBuffer, 64);
Serial.println("Contents:");
Serial.println(packetBuffer);
// send a reply to the IP address and port that sent us the packet we received
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
if(led_open == packetBuffer){
//Serial.println("led open");
digitalWrite(led, HIGH);
Udp.write(ReplyBuffer);
Udp.endPacket();
}
if(led_close == packetBuffer){
// Serial.println("led close");
digitalWrite(led, LOW);
Udp.write(ReplyBuffer);
Udp.endPacket();
}

项目中遇到的难题和解决方法

Arduino2.3.4版本在安装teensy特定库的时候,可能是网络问题,一直安装不成功,最后没有办法,降低arduino降到1.8.19,才能安装teensy软件包。第二,用错了网络库,导致一直通讯不上,查了很久,最后用qnethernet库,就通信OK了。

对本地活动的体会

虽然顺利的完成的项目的要求,但是对于该板卡的强大功能,只实现了其一小部分,后续要多花时间来研究该板卡。小巧的封装,极高的主频,特别适合做一些实时性的项目。来凸显该板卡的性能优势。






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