0
1

More than 3 years have passed since last update.

ESP32にFTPでファイルを渡す

Last updated at Posted at 2021-03-11

ESP32に大きなファイルを渡したい場合に、ESP32内にFTPサーバとして立ち上げておけば、Windowsのエクスプローラからアップロードやダウンロードが楽になります。

ソースコードをGitHubに上げておきました。

poruruba/SimpleEsp32FtpServer

シンプルなESP32用FTPサーバ

ESP32内にFTPサーバを立ち上げますが、非常にシンプルなものにしています。

・1つのファイルしか保持できません。
・フォルダは作れません。
・揮発なので、リブートすると消えます。
・Windowsのエクスプローラしか試していません。

※WinSCPで試してみましたが、ファイルを直接編集しようとしたときだけ、ソケットを多重で開こうとして切断されてしまいました。

以下の方が作られたものをほぼそのまま使っています。(ありがとうございました!)
SDを前提としていましたが、上記の通り非常にシンプルにして、メモリだけで実現するようにしています。

robo8080/ESP32_FTPServer_SD

使い方

src/main.cpp
#include "ESP32FtpServer.h"
FtpServer ftpSrv;

WiFiに接続した後に、

src/main.cpp
  configTzTime("JST-9", "ntp.nict.jp", "ntp.jst.mfeed.ad.jp");
  ftpSrv.begin("esp32","esp32", buffer, sizeof(buffer));

ポイントは以下のところです。

src/main.cpp
void    begin(String uname, String pword, unsigned char *p_buffer, unsigned long length);

受け付けるユーザ名、パスワードに加えて、FTPで送受信するデータのバッファと最大サイズを指定しています。

あとは、loop()の中で、

src/main.cpp
  FTP_F_STATUS status = ftpSrv.handleFTP();        //make sure in loop you call handleFTP()!!   
  if( status != F_IDLE ){
    Serial.print("status="); Serial.println(status); Serial.println(ftpSrv.file_name); Serial.println((char*)buffer);
  }

FTP_F_STATUS は、以下の種類があります。

・F_IDLE:特に変化なし
・F_RETRIEVED:ファイルが取得された
・F_STORED:ファイルの受信完了
・F_DELETED:ファイルが削除された
・F_RENAMED:ファイル名が変更された

上記の状態となったときに、任意の処理ができるようにしています。

また、FTPクライアント側にファイルを渡したい時には以下を呼び出します。
beginで指定したバッファに、返したいデータを設定した後に呼び出します。

src/main.cpp
void setFile(const char *fname, unsigned long size);

Windowsのエクスプローラで開く

Windowsのエクスプローラのアドレスバーに以下を入力すれば、接続できます。

ftp://ユーザ名:パスワード@IPアドレス/

ユーザ名とパスワードは、ftpSrv.begin()に指定したものです。
IPアドレスは、ESP32のIPアドレスです。

image.png

終わりに

ちょっと不安定かな。。。

以上

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1