FTP_Server_Teensy41库
目录
- 目录
- 为什么我们需要此FTP_Server_Teensy41库
- 特征
- 目前支持的董事会
- ChangElog
- 先决条件
- 安装
- 使用Arduino Library Manager
- 手动安装
- VS代码和平台
- 软件包的补丁
- 1。
- 原始文件
- 例子
- 示例ftp_server_sdfat2
- 调试终端输出样品
- 调试
- 故障排除
- 问题
- 做
- 完毕
- 贡献和感谢
- 贡献
- 执照
- 版权
为什么我们需要此FTP_Server_Teensy41库
特征
此FTP_Server_Teensy41库是从Arduino-ftp-server库修改的W5x00 using Ethernet_Generic Library或Adafruit Airlift Featherwing using WiFiNINA_Generic Library ,并使用QNEthernet , NativeEthernet ,W5X00支持Teensy 4.X。在不久的将来,将支持any FS, such as PSRAM, LittleFS, (Q)SPI Flash, etc. 。
目前支持的董事会
- Teensy 4.1使用Qnethernet,本机越野,W5X00与以太网库或Adafruit Airlift Featherwing使用Wifinina_generic库和内置的SDCARD,等等。
- Teensy 4.0使用W5X00与Ethernet_generic Library或Adafruit Airlift Featherwing使用WiFinina_Generic库
先决条件
Arduino IDE 1.8.19+for Arduino。-
Teensy core v1.57+Teenensy 4.1 -
QNEthernet Library version v0.16.0+for Teensy 4.1内置以太网。 -
NativeEthernet Library version stable111+Teensy 4.1内置以太网。 -
Ethernet_Generic library v2.7.1+使用W5x00 。要安装,请检查 WiFiNINA_Generic library v1.8.15-1+使用Adafruit空运羽毛。要安装,请检查。
安装
使用Arduino Library Manager
最好和最简单的方法是使用Arduino Library Manager 。搜索FTP_Server_Teensy41 ,然后选择 /安装最新版本。您也可以使用此链接以获取更详细的说明。
手动安装
- 导航到FTP_Server_Teensy41页面。
- 下载最新版本
FTP_Server_Teensy41 -main.zip。 - 将zip文件提取到
FTP_Server_Teensy41 -main目录 - 将整个
FTP_Server_Teensy41 -main复制到Arduino库的目录,例如~/Arduino/libraries/。
VS代码和平台:
- 安装VS代码
- 安装平台
- 使用库管理器安装FTP_Server_Teensy41库。在platform.io作者的库中搜索FTP_Server_Teensy41
- 使用示例中的Platform.ini文件包括Platform.ini文件,以确保将自动安装所有依赖的库。请访问文档以获取项目配置文件中的其他选项和示例
软件包的补丁
1。
为了能够在Teensy板上编译和运行,您必须将TeenSy目录中的文件复制到Teensy Hardware Directory(./arduino-1.8.19 /hardware/hardware/teensy/teensy/avr/boards.txt)中。
假设Arduino版本为1.8.19。这些文件必须复制到目录中:
-
./arduino-1.8.19/hardware/teensy/avr/boards.txt -
./arduino-1.8.19/hardware/teensy/avr/cores/teensy/Stream.h -
./arduino-1.8.19/hardware/teensy/avr/cores/teensy3/Stream.h -
./arduino-1.8.19/hardware/teensy/avr/cores/teensy4/Stream.h
每当安装新版本时,请记住将此文件复制到新版本目录中。例如,新版本是X.yy.zz这些文件必须复制到目录中:
-
./arduino-x.yy.zz/hardware/teensy/avr/boards.txt -
./arduino-x.yy.zz/hardware/teensy/avr/cores/teensy/Stream.h -
./arduino-x.yy.zz/hardware/teensy/avr/cores/teensy3/Stream.h -
./arduino-x.yy.zz/hardware/teensy/avr/cores/teensy4/Stream.h
原始文件
请看一下readme_orig.md或readme.md
例子
- ftp_server_sdfat2
- 多验注射
- ftp_server_sdfat2_nina new
示例ftp_server_sdfat2
1。文件ftp_server_sdfat2.ino
FTP_Server_Teensy41 /examples/ftp_server_sdfat2/ftp_server_sdfat2.ino
EDC4CFF中的第10至373行
| #包括“ defines.h ” | |
| #包括< sd.h > | |
| #包括< spi.h > | |
| #定义pasv_response_style_new true | |
| #定义ftp_filesyst ftp_sdfat2 | |
| //默认2048 | |
| #定义ftp_buf_size 8192 | |
| #定义ftp_user_name_len 64 //最大允许和默认值为64 | |
| #定义ftp_user_pwd_len 128 //最大允许和默认值为128 | |
| #包括< FTP_Server_Teensy41 .h > | |
| // ftpserver的对象 | |
| //可以在此处定义的被动模式下的命令端口和数据端口 | |
| // FTPSERVER FTPSRV(221,25000); | |
| // ftpserver ftpsrv(421); //被动模式下的默认数据端口为55600 | |
| ftpserver ftpsrv; //默认命令端口为21(!!无括号!!) | |
| 提交myfile; | |
| //更改此操作以匹配您的SD盾牌或模块; | |
| // Arduino以太网盾:引脚4 | |
| // Adafruit SD盾牌和模块:引脚10 | |
| // Sparkfun SD盾:引脚8 | |
| //青少年音频板:引脚10 | |
| // Teensy 3.5&3.6&4.1板载:hindin_sdcard | |
| // WIZ820+SD板:引脚4 | |
| // Teensy 2.0:引脚0 | |
| // Teensy ++ 2.0:引脚20 | |
| const int chipselect = bundin_sdcard; // 10; | |
| sdclass myfs; | |
| //使用SD实用程序库函数设置变量: | |
| SD2CARD卡; | |
| sdvolume量; | |
| sdfile root; | |
| / ************************************************************************************************************** | |
| ** ** | |
| **初始化** | |
| ** ** | |
| ************************************************************************************************* | |
| #定义ftp_account “ teensy4x ” | |
| #定义ftp_password “ ftp_test ” | |
| void initereThernet () | |
| { | |
| #如果use_qn_ethernet | |
| 系列。 println ( f ( “ ============== use_qn_ethernet ================ ” ); | |
| #elif use_native_ethernet | |
| 系列。 println ( f ( “ =========== use_native_ethernet ========== ” ); | |
| #elif use_ethernet_generic | |
| 系列。 println ( f ( “ =========== use_ethernet_generic ========= ” ); | |
| #别的 | |
| 系列。 println ( f ( “ ======================================== | |
| #endif | |
| #如果use_native_ethernet | |
| //启动以太网连接和服务器: | |
| //使用DHCP动态IP和随机Mac | |
| uint16_t index = millis ()%number_of_mac; | |
| //使用静态IP | |
| //以ethernet.begin(mac [index],ip); | |
| 以太网。开始(Mac [index]); | |
| 系列。打印( f ( “使用mac index = ” )); | |
| 系列。 println (index); | |
| 系列。打印( f ( “连接!ip地址: ” )); | |
| 系列。 println (以太网。localip()); | |
| #elif use_qn_ethernet | |
| #如果使用_DHCP | |
| //使用DHCP启动以太网连接 | |
| 系列。打印( “使用DHCP => ”初始化以太网); | |
| 以太网。开始(); | |
| //为DHCP提供以太网屏蔽最小1秒,staticp给出2秒钟以初始化: | |
| 延迟( 1000 ); | |
| #别的 | |
| //使用静态IP启动以太网连接 | |
| 系列。打印( “使用静态IP => ”初始化以太网); | |
| 以太网。开始(myip,mynetmask,mygw); | |
| 以太网。 setdnsserverip (mydnsserver); | |
| #endif | |
| 如果(!以太网。WaitforLocalip( 5000 )) | |
| { | |
| 系列。 println ( “无法配置以太网” ); | |
| 如果(!以太网。linkstatus()) | |
| { | |
| 系列。 println ( “未连接以太网电缆。 ” ); | |
| } | |
| //永远留在这里 | |
| 而( true ) | |
| { | |
| 延迟( 1 ); | |
| } | |
| } | |
| 别的 | |
| { | |
| 系列。打印( “ IP地址= ” ); | |
| 系列。 println (以太网。localip()); | |
| } | |
| //为DHCP提供以太网屏蔽最小1秒,staticp给出2秒钟以初始化: | |
| //延迟(2000); | |
| #别的 | |
| ftp_logwarn ( f ( “默认spi pinout: ” )); | |
| ftp_logwarn1 ( f ( “ mosi: ” ),mosi); | |
| ftp_logwarn1 ( f ( “ miso: ” ),miso); | |
| ftp_logwarn1 ( f ( “ sck: ” ),sck); | |
| ftp_logwarn1 ( f ( “ ss: ” ),ss); | |
| ftp_logwarn ( f ( “ =========================== ” ); | |
| //未知板,什么都不做,使用默认SS = 10 | |
| #ifndef use_this_ss_pin | |
| #定义use_this_ss_pin 10 //其他董事会 | |
| #endif | |
| #如果定义(board_name) | |
| ftp_logwarn3 ( f ( “ board: ” ),board_name, f ( “ ,setcspin: ” ),use_this_ss_pin); | |
| #别的 | |
| ftp_logwarn1 ( f ( “未知板setcspin: ” ),use_this_ss_pin); | |
| #endif | |
| //对于其他董事会,如有必要 | |
| 以太网。 init (use_this_ss_pin); | |
| //启动以太网连接和服务器: | |
| //使用DHCP动态IP和随机Mac | |
| uint16_t index = millis ()%number_of_mac; | |
| //使用静态IP | |
| //以ethernet.begin(mac [index],ip); | |
| 以太网。开始(Mac [index]); | |
| 系列。打印( “ IP地址= ” ); | |
| 系列。 println (以太网。localip()); | |
| #endif | |
| } | |
| void cardinit () | |
| { | |
| //我们将使用实用程序库中的初始化代码 | |
| //因为我们只是在测试卡是否有效! | |
| if (!card。init ( spi_half_speed,chipselect)) | |
| { | |
| 系列。 println ( “初始化失败。要检查的事物: ” ); | |
| 系列。 println ( “ *插入卡片? ” ); | |
| 系列。 println ( “ *您的布线正确? ” ); | |
| 系列。 println ( “ *您是否更改了芯片销钉以匹配盾牌或模块? ” ); | |
| 返回; | |
| } | |
| 别的 | |
| { | |
| 系列。 println ( “接线是正确的,存在卡片。 ” ); | |
| } | |
| //打印卡的类型 | |
| 系列。打印( “ \\ n卡类型: ” ); | |
| 开关(卡。类型()) | |
| { | |
| 案例SD_CARD_TYPE_SD1: | |
| 系列。 println ( “ SD1 ” ); | |
| 休息; | |
| 案例SD_CARD_TYPE_SD2: | |
| 系列。 println ( “ sd2 ” ); | |
| 休息; | |
| 案例SD_CARD_TYPE_SDHC: | |
| 系列。 println ( “ sdhc ” ); | |
| 休息; | |
| 默认: | |
| 系列。 println ( “未知” ); | |
| } | |
| //现在我们将尝试打开“卷”/“分区” – 应该是fat16或fat32 | |
| 如果(!卷。初始化(卡)) | |
| { | |
| 系列。 println ( “找不到FAT16/FAT32分区。 \\ n确保您已格式化了卡片” ); | |
| 返回; | |
| } | |
| //打印第一个脂肪型体积的类型和大小 | |
