質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.59%

devkitcのwifiとFTPサーバに関する問題

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 482

score 0

#include <ESP32_FTPClient.h>

#define B_LED_PIN 18
#define W_LED_PIN 16
#define Y_LED_PIN 5
#define R_LED_PIN 17

#define X_A_IN_PIN 34
#define Y_A_IN_PIN 35
#define Z_A_IN_PIN 36

#define SW_PIN 19
#define CY_MEAS_PIN 11

#define MOTOR_GET_PIN 14
#define MOTOR_WAIT_PIN 12
#define MOTOR_PULSE_PIN 13

#define SSID   "" //ルータのID
#define PASS   ""         
//ルータのパスワード(ハッシュ化)

#define NTP_SERVER "pool.ntp.org"  //時間取得 NTPサーバ

#define FTP_SERVER "10.0.1.119"
#define FTP_USER "ftp_data"
#define FTP_PASS ""
#define FTP_DIR "acceleration"

#define SENSOR_FILE_NAME "ftp_data"  //センサからの取得データの格納ファイル名
#define SENSOR_NAME "Accelerometer"       //センサの名前

#define MAX_DATA_SIZE 5000
#define SAMPS_DELAY 109

enum MotionStatus {STATE_ERROR = -1 , STATE_SETUP, STATE_WAIT, STATE_GET, STATE_SEND};

IPAddress local_IP(10,0,1,60);
IPAddress gateway_IP(10,0,1,250);
IPAddress subnet_Mask(255,255,255,0);

ESP32_FTPClient ftp(FTP_SERVER, FTP_USER, FTP_PASS, 5000, 0);

void connectWiFi() {
  Serial.println("OKOKOKOK");
  if(!WiFi.config(local_IP, gateway_IP, subnet_Mask)) {
    delay(100);
    Serial.println("STA Failed to configure");
  }
 delay(100);
 Serial.printf("Connenting to %s\n",SSID);
 WiFi.begin(SSID, PASS);
 wl_status_t state;

 while (true) {
  state = WiFi.status();
  delay(1);
  if(state == WL_CONNECTED) {
    Serial.println("WiFi connected!!\n");
    break;
  }else if(state == WL_NO_SHIELD) {
    Serial.println("Connecting WiFi");
    WiFi.begin(SSID, PASS);
  }else if(state == WL_CONNECT_FAILED) {
    Serial.println("Disconnecting WiFi");
    WiFi.disconnect(true);
  }else if(state == WL_DISCONNECTED) {
    Serial.println("WiFi discooected");
  }
  delay(250);
 }
}

void syncTime() {
  configTime(9 * 3600L, 0, NTP_SERVER); 
}

void setLED(enum MotionStatus state) {
  switch (state) {
    case STATE_ERROR:
    //digitalWrite(B_LED_PIN, HIGH);
    //digitalWrite(W_LED_PIN, HIGH);
    //digitalWrite(Y_LED_PIN, HIGH);
    digitalWrite(R_LED_PIN, LOW);
    break;

    case STATE_SETUP:
    digitalWrite(B_LED_PIN, LOW);
    digitalWrite(W_LED_PIN, LOW);
    digitalWrite(Y_LED_PIN, LOW);
    digitalWrite(R_LED_PIN, HIGH);
    break;

    case STATE_WAIT:
    digitalWrite(B_LED_PIN, HIGH);
    digitalWrite(W_LED_PIN, HIGH);
    digitalWrite(Y_LED_PIN, HIGH);
    digitalWrite(R_LED_PIN, HIGH);
    break;

    case STATE_GET:
    digitalWrite(B_LED_PIN, HIGH);
    digitalWrite(W_LED_PIN, LOW);
    digitalWrite(Y_LED_PIN, HIGH);
    digitalWrite(R_LED_PIN, HIGH);
    break;

    case STATE_SEND:
    digitalWrite(B_LED_PIN, LOW);
    digitalWrite(W_LED_PIN, HIGH);
    digitalWrite(Y_LED_PIN, HIGH);
    digitalWrite(R_LED_PIN, HIGH);
    break;
  }
}
/*
 * bool pulse_falled = false;
 * void motor_interrupt() {
 *  pulse_falled = ture;
 * }
 * 
 * bool pulseFalled() {
 *  if (pulse_falled == true) {
 *   pilse_falled = false;
 *   return true;
 *  }
 *  return false;
 * }
*/

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  pinMode(B_LED_PIN, OUTPUT);
  pinMode(W_LED_PIN, OUTPUT);
  pinMode(Y_LED_PIN, OUTPUT);
  pinMode(R_LED_PIN, OUTPUT);
  digitalWrite(B_LED_PIN, HIGH);
  digitalWrite(W_LED_PIN, HIGH);
  digitalWrite(Y_LED_PIN, HIGH);
  digitalWrite(R_LED_PIN, HIGH);
  pinMode(SW_PIN, INPUT_PULLUP);
  pinMode(CY_MEAS_PIN, OUTPUT);

  setLED(STATE_SETUP);
  connectWiFi();
  syncTime();
  pinMode(MOTOR_GET_PIN, INPUT);
  //attachInterrup(MOTOR_GET_PIN, motor_interrupt, FALLING);
}

int data_size;
int zero_count;
struct tm tm;
uint8_t motor_out[MAX_DATA_SIZE];
//uint16_t xout[MAX_DATA_SIZE], yout[MAX_DATA_SIZE], zout{MAX_DATA_SIZE];
char* p_ftp_buf = new char[70];
char* file_name = new char[30];
const double offset = 1.65 / 3.3 * 4096;
const double convert = 3.3 / 4096 /0.66;
//float Xout[MAX_DATA_SIZE], Yout[MAX_DATA_SIZE], Zout[MAX_DATA_SIZE];

void loop() {
  // put your main code here, to run repeatedly:
  setLED(STATE_WAIT);

  while (digitalRead(MOTOR_GET_PIN) == HIGH);

  Serial.println("Accelerometer value measurement started.");
  setLED(STATE_GET);

  getLocalTime(&tm);

  uint16_t *xout, *yout, *zout;
  float *Xout, *Yout, *Zout;

  xout = (uint16_t *)malloc(sizeof(uint16_t) * MAX_DATA_SIZE);
  yout = (uint16_t *)malloc(sizeof(uint16_t) * MAX_DATA_SIZE);
  zout = (uint16_t *)malloc(sizeof(uint16_t) * MAX_DATA_SIZE);

  Xout = (float *)malloc(sizeof(float) * MAX_DATA_SIZE);
  Yout = (float *)malloc(sizeof(float) * MAX_DATA_SIZE);
  Zout = (float *)malloc(sizeof(float) * MAX_DATA_SIZE);

  for (data_size = 0; data_size < MAX_DATA_SIZE; data_size++) {
    motor_out[data_size] = (digitalRead(MOTOR_GET_PIN) == HIGH) ? 1 : 0;
    xout[data_size] = analogRead(X_A_IN_PIN);
    yout[data_size] = analogRead(Y_A_IN_PIN);
    zout[data_size] = analogRead(Z_A_IN_PIN);

    digitalWrite(CY_MEAS_PIN, LOW);
    delayMicroseconds(SAMPS_DELAY);
    digitalWrite(CY_MEAS_PIN, HIGH);
    delayMicroseconds(SAMPS_DELAY);
  }
  for (data_size = 0; data_size < MAX_DATA_SIZE; data_size++) {
    Xout[data_size] = (float)(9.8 * ((xout[data_size] - offset) * convert));
    Yout[data_size] = (float)(9.8 * ((yout[data_size] - offset) * convert));
    Zout[data_size] = (float)(9.8 * ((zout[data_size] - offset) * convert));
  }

  Serial.println("Accelerometer value measurement completed. ");
  Serial.println("File transfer started. ");

  setLED(STATE_SEND);
  ftp.OpenConnection();
  ftp.InitFile("Type I");
  ftp.ChangeWorkDir(FTP_DIR);
  //sprintf(file_name, "%04d%02d%02d%02d%02d02d%_%s.csv",
    //tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, SENSOR_FILE_NAME);
    //ftp.NewFile(file_name);
    ftp.NewFile("data.csv");
  sprintf(p_ftp_buf, "%s,%04d%02d%02d%02d%02d02d%,%d\n",
    SENSOR_NAME, tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, data_size);
  ftp.Write(p_ftp_buf);
  for (data_size = 0; data_size < MAX_DATA_SIZE; data_size++) {
    sprintf(p_ftp_buf, "%d,%d,%f,%f,%f,\n", data_size, motor_out[data_size],
    Xout[data_size], Yout[data_size], Zout[data_size]);
    ftp.Write(p_ftp_buf);     
  }

  ftp.CloseFile();
  ftp.CloseConnection();

  free(xout);
  free(yout);
  free(zout);
  free(Xout);
  free(Yout);
  free(Zout);

  for (data_size = 0; data_size < MAX_DATA_SIZE; data_size++) {
    if (motor_out[data_size] == 0)
      zero_count++;
  }
  Serial.printf("zero_count : %d\n", zero_count);
  zero_count = 0;

  Serial.println("File transfer completed.\n");

  while (digitalRead(MOTOR_GET_PIN) == LOW);

}


コード


devkitcを使って加速度センサからのデータをWiFiを通して取得しようとしてます。

コンパイルエラーは出ないのですが、シリアルモニタではE(10582)がでます。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • y_waiwai

    2021/03/16 12:17

    このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください

    で、しつもんはなんでしょうか

    キャンセル

  • mkawa_sa

    2021/03/17 09:43

    シリアルモニタで確認をしたところE(10582)が出力されます。
    そのエラーの原因が分からない。

    キャンセル

  • thkana

    2021/03/17 20:17

    いろいろ余計な要素が一杯入っていてプログラムの見通しが悪いです。
    > wifiとFTPサーバに関する問題
    であることまで絞れているのなら、
    > 加速度センサからのデータをWiFiを通して取得しようとしてます
    だけに絞ったプログラムにしてください。

    キャンセル

回答 1

check解決した方法

0

ご協力ありがとうございます。
マイコン通しが繋がらなかった理由として、光センサを読み込むことで通信を開始する的なプログラムにしていた為であり、実際のとこマイコン用の基板に問題がありました。
プログラムの問題ではなく、センサの取得値が必要値より、低くマイコンが検知できていないのが原因でした。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る