ESP-IDFを使ってみる

FTP Client/FTP Server


ESP32をFTP Serverとして使用するファームはいくつか公開されていますが、
ESP-IDF環境を使ったFTP Clientのファームはあまり見かけません。
探したところ、こちらにFTP Clientのコア部分だけが公開されていました。

FTPを使う場合、ネットワーク通信を行う前に、ファイルシステムを準備しておく必要が有ります。
ESP-IDFでは以下の5つのファイルシステムをサポートしていますが、コードが全て異なります。
  • SPIFFS file system on FLASH
  • FAT file system on FLASH
  • FAT file system on SPI peripheral SDCARD(SPI-IFのSD-CARDリーダー)
  • FAT file system on SDMMC peripheral SDCARD(ESP32-CAMについているやつ)
  • FAT file system on External Flash Memory(W25Q64の様なFLASHチップ)

  • そこで、どのファイルシステムでも使えるFTP Clientを作りました。
    ソースはこちらで 公開しています。

    FTP Clientのコア部分は以下の機能をサポートしています。
    /*Server connection*/
    static int connectFtpClient(const char* host, uint16_t port, NetBuf_t** nControl);
    static int loginFtpClient(const char* user, const char* pass, NetBuf_t* nControl);
    static void quitFtpClient(NetBuf_t* nControl);
    static int setOptionsFtpClient(int opt, long val, NetBuf_t* nControl);

    /*Directory Functions*/
    static int changeDirFtpClient(const char* path, NetBuf_t* nControl);
    static int makeDirFtpClient(const char* path, NetBuf_t* nControl);
    static int removeDirFtpClient(const char* path, NetBuf_t* nControl);
    static int dirFtpClient(const char* outputfile, const char* path, NetBuf_t* nControl);
    static int nlstFtpClient(const char* outputfile, const char* path,
            NetBuf_t* nControl);
    static int mlsdFtpClient(const char* outputfile, const char* path,
            NetBuf_t* nControl);
    static int changeDirUpFtpClient(NetBuf_t* nControl);
    static int pwdFtpClient(char* path, int max, NetBuf_t* nControl);

    /*File to File Transfer*/
    static int getDataFtpClient(const char* outputfile, const char* path,
                    char mode, NetBuf_t* nControl);
    static int putDataFtpClient(const char* inputfile, const char* path, char mode,
            NetBuf_t* nControl);
    static int deleteDataFtpClient(const char* fnm, NetBuf_t* nControl);
    static int renameFtpClient(const char* src, const char* dst, NetBuf_t* nControl);

    こちらに FTPコマンドの一覧が有りますが、普段使うのはごくわずかです。
    普通に使う分には必要十分な機能です。



    ESP32のFTPサーバーはいくつか公開されていますが、いずれもファイルシステムにSPIFFSを使っています。
    SPIFFSはディレクトリを作成することができません。
    こ ちらにlwipのプロトコルスタックを使ったFTPサーバーのソースが公開されていました。
    元々、ESP32で動くMicroPythonのために作られたものですが、少しの手直しでESP-IDFで動くようになりました。
    ソースはこちらで 公開しています。

    続く...