2018年8月13日月曜日

ArduinoでFtpServer


Arduino-Ftp-Serverを利用して、ArduinoでFTPサーバーを動かしたメモ。
基本的にはReadMe.txtのとおり。

環境

Arduino Mega 2560
Ethernet Shield
Arduino IDE 1.8.5

手順

Arduino-Ftp-ServerをダウンロードしてFtpServerフォルダをlibraries\FtpServerとする。

Streaming をダウンロードしてlibraries\Streamingとする。
http://arduiniana.org/Streaming/Streaming5.zip

SdFatをダウンロードしてlibraries\SdFatとする。
https://github.com/greiman/SdFat

libraries\Ethernet\src\EthernetServer.hを編集してconnected()を追加
  EthernetClient available();
  EthernetClient connected(); //add

libraries\Ethernet\src\EthernetServer.cppを編集してしてconnected()を追加
  EthernetClient EthernetServer::connected()
  {
   accept();
   for( int sock = 0; sock < MAX_SOCK_NUM; sock++ )
     if( EthernetClass::_server_port[sock] == _port )
     {
       EthernetClient client(sock);
       if( client.status() == SnSR::ESTABLISHED ||
           client.status() == SnSR::CLOSE_WAIT )
         return client;
     }
   return EthernetClient(MAX_SOCK_NUM);
  }

libraries\SdFat\src\FatLib\iostream.h を編集してendl()をコメントアウト

#if 0
/** insert endline
 * \param[in] os The Stream
 * \return The stream
 */
inline ostream& endl(ostream& os) {
  os.put('\n');
#if ENDL_CALLS_FLUSH
  os.flush();
#endif  // ENDL_CALLS_FLUSH
  return os;
}
#endif

libraries\FatLib\FatLib.hを編集してFAT_SYSTを0に変更
  //#define FAT_SYST 1
  #define FAT_SYST 0 //mod

libraries\FtpServer\examples\FtpServeurTest\FtpServeurTest.ino をIDEで開き下記追加。
    #define SD_SPI_CONFIGURATION 1
    #define ENABLE_SPI_TRANSACTION 1
    #define ENABLE_SPI_YIELD 1

動作確認


  • ログインアカウントはlibraries\FtpServer\FtpServer.hに記載されている。
  • FtpServeurTest.inoはsetup()でデフォルトでDHCP起動。
  • DOSのFTPからはうまく入れなかった。(ユーザー名を入力した段階で切れてしまう)
  • FFFTPではログインでき動作確認できた。
  • リセット後下記出る場合は電源OFF/ONで復旧する。
    Mount the SD card with library SdFat ... Unable to mount SD card