项目介绍
本次活动我实现了基于以太网口通信的LED灯控制。
本次活动的板卡是Teensy 4.1,这是一款基于NXP的i.MX RT1062高性能微控制器的开发板,主频可达600 MHz。拥有丰富的I/O接口,扩展出多达42个数字I/O引脚、18个模拟输入引脚和多种通信接口(如SPI、I2C、UART等)。Teensy 4.1支持USB主机和设备模式,并配备了SD卡插槽和额外RAM和ROM扩展焊盘,适合于需要高处理速度和实时性能的项目,如音频处理、图像分析以及机器人控制等应用。其兼容Arduino开发环境,方便开发者快速上手。
设计思路
代码整体思路较为简单,但实现过程相对曲折。
开发板的网口转接板我直接购买了官方的Ethernet Kit for Teensy 4.1,这块转接板原理图其实很简单,就是网口引出加一颗电容。
参考官方教程,我首先尝试了NativeEthernet library,但我尝试很久后依然没有头绪,每次串口都反馈能连上网络并提供本机ip,但从电脑和手机端都无法访问到开发板,试着搜索相关问题后也没有找到解答。
之后我尝试了QNEthernet库,问题一下迎刃而解了,本次项目的项目代码基于ServerWithListeners例程修改而来,代码逻辑较为简单,整体逻辑如图:
任务关键代码如下:
开发板接入网络后创建一个网页
IPAddress ip = state.client.remoteIP();
printf("Sending to client: %u.%u.%u.%u\r\n", ip[0], ip[1], ip[2], ip[3]);
state.client.writeFully("HTTP/1.1 200 OK\r\n"
"Connection: close\r\n"
"Content-Type: text/plain\r\n"
"\r\n"
"Hello, Client!\r\n"
"Print on to turn on the light!\r\n"
"Print off to turn off the light!\r\n");
state.client.flush();
然后通过改网页的子页面实现led的开关控制
if (!flag){
if ((str[5] == 'o')&&(str[6] == 'n')){
digitalWrite(LED_BUILTIN, HIGH);
printf("LED ON!\n");
flag=1;
}
else if ((str[5] == 'o')&&(str[6] == 'f')&&(str[7] == 'f')){
digitalWrite(LED_BUILTIN, LOW);
printf("LED OFF!\n");
flag=1;
}
}
最终实现了LED的闪烁:
活动感想
感谢eetree和得捷电子举办这次活动,teensy开发板一直是我很想体验的系列开发板,teensy2版本由于其hid功能的支持,曾一度是diy键盘的大火开发板之一,teensy3和4版本因为主频高,常常能在油管的控制类项目中看到,这次能体验到teensy4.1还是非常有意思的体验。小小的遗憾是nativethernet库一直没有调通。之前在论坛有看到teensy5的讨论,官方的说法似乎是原本22年就会有teensy5,但因为疫情的芯片断缺一再延期,24年的重心也在软件维护上了,期待更强大的teensy5的发布!