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

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

ただいまの
回答率

90.33%

  • PHP

    21413questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Java

    14473questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • HTML

    9628questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • Arduino

    578questions

    Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

サーバーにあるtxtファイルに直接書き込む手法

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,073

bobby2128

score 34

ArduinoとESP-WROOM-02でサーバーに繋いでいるのですが、
ArduinoとESP-WROOM-02によって、サーバーにあるテキストファイルを開き、データを書き込むことは可能でしょうか。

何か参考になるアイデアや資料などございましたらご教授お願いいたします。

/*****************************Wifi,Setting***************************/
// ライブラリの読み込み
#include "ESP8266.h"
#include "Milkcocoa.h"
#include "Client_ESP8266.h"
// 転送スピード
#define SERIAL_SPEED 115200
/************************* WiFi Access Point *********************************/
// Wi-Fi SSID
#define WLAN_SSID "D********"
// Wi-Fi PASSWORD
#define WLAN_PASS "e********"
ESP8266Client wifi;

String data;
String server = "p******.scm.azurewebsites.net";

String uri = "/dev/wwwroot/SQL_SEND.php";

byte dat [5];
String temp ,hum;

/********************************** Setup ***************************************/
void setup() {
// パソコンとのシリアル通信のポートを開ける
  Serial.begin(SERIAL_SPEED);
// Wi-Fiモジュールとのシリアル通信のポートを開ける
  Serial1.begin(SERIAL_SPEED); /
// Wi-Fi設定
  setupWiFi();
}

/* setupWiFi(); Wifi接続部 省略*/


void loop () {
  hum= "1";
  temp="2";
  data = "temperature=" + temp;// + "&humidity=" + hum;// data sent must be under this form //name1=value1&name2=value2.
  httppost();
  delay(1000);
}

void httppost () {
  Serial1.println("AT+CIPSTART=\"TCP\",\"" + server + "\",80");//start a TCP connection.
//  Serial.println("TCP connection try");

  if( Serial1.find("OK")) {
    Serial.println("TCP connection ready");
  } 
  delay(1000);

  String postRequest =
    "POST " + uri + " HTTP/1.0\r\n" +
    "Host: " + server + "\r\n" +
    "Accept: *" + "/" + "*\r\n" +
    "Content-Length: " + data.length() + "\r\n" +
    "Content-Type: application/x-www-form-urlencoded\r\n" +
    "\r\n" + data;
  Serial.println(data);
//  Serial.println(postRequest);


  String sendCmd = "AT+CIPSEND=";//determine the number of caracters to be sent.

  Serial1.print(sendCmd);
  Serial1.println(postRequest.length() );
  delay(500);

  if(Serial1.find(">")) { 
    Serial.println("Sending.."); 
    Serial1.print(postRequest);

    if( Serial1.find("SEND OK")) { 
      Serial.println("Packet sent");
      while (Serial1.available()) {
        String tmpResp = Serial1.readString();
        Serial.println(tmpResp);
      }

     // close the connection
     Serial1.println("AT+CIPCLOSE");
    }
  }
}

phpのうちファイル書き込み用命令文

$Temp = $_POST["temperature"];
$Write = "<p>Temperature :"  . $_POST["temperature"] . "</p><br>";

$fp = @fopen("write.txt", "w") ;
fputs($fp, $Write);
fclose($fp);
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

+3

ArduinoとESP-WROOM-02でサーバーに繋いでいるのですが、 

どのようにconnectしているかわかりませんが
WEBサーバならGet/Postを受け付けるサービスを立ち上げてその中でファイルの追記をすれば良いはずです。

-------------  追記
TCP通信を丸ごと抜き出すだけなら
node.js(v6)環境でapp.jsを作成
app.jsの内容は下記の通り

const net = require('net');
const client = net.connect({port: 80}, () => {
  // 'connect' listener
  console.log('connected to server!');
});
client.on('data', (data) => {
  console.log(data.toString());
});
client.on('end', () => {
  console.log('disconnected from server');
});
node app.js


で実行すれば飛んできているデータはコンソール画面上に表示されると思います。
データの書き込みはdataイベント中に受信したデータを退避しておき、endが来たときに退避したデータをfsパッケージを使って書き込めばokです。たぶん。未検証です。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/04/06 12:39

    tenpa様
    コメントいただきありがとうございます。
    現状のプログラムを質問文を編集し追記いたしました。
    サーバーはWindows Azureを用いており、
    https://p*******.scm.azurewebsites.net/dev/wwwroot/public_data/p******/t****/t****.txt
    に送信した文字列(上記のプログラムだとdata)を書き込みたいです。

    以上、おわかりでしたらお手数おかけいたしますが、どうかよろしくお願いいたします。

    キャンセル

  • 2017/04/06 16:08

    未検証ですが追記しました。

    キャンセル

  • 2017/04/06 16:35

    tenpa様
    コメントいただきありがとうございます。
    大変恐縮ではございますが、少しわからないのでお助けください。

    SQL_SEND.phpのあるディレクトリの中で
    app.jsというファイルを作成し、それに上記のJavaScriptを書き込めば良いということでしょうか。
    そのとき、Bashというものはどこに書き込めばよろしいでしょうか。

    以上、お手数おかけいたしますがどうかよろしくお願いいたします。

    キャンセル

+2

書き込む権限があり、書き込むスキルがあればできると思います

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

checkベストアンサー

+1

.phpに渡すべきデータ内容および.php側で行うべき処理が分からないということでしょうか?
PHPは分かりませんが、基本は以下の処理を行えばよいと思います。

Arduino

// 略
data = "temperature=" + temp;

// ファイルパスを渡す
data += "&";
data += "path=" + "p******/t****/t****.txt"
// 略

SQL_SEND.php

// (temparatureとpathを受け取る)

// pathをサーバー上のパスに変換する(単なる文字列操作)

// サーバー上のテキストファイルを開く

// temparatureの文字列を書き込む(追記する)

// テキストファイルを閉じる

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/04/06 14:10

    can110様
    ご回答いただきありがとうございます。
    パスが既知として、
    php側にて

    $Temp = $_POST["temperature"];
    $Write = "<p>Temperature : " . $_POST["temperature"] . </p><br>";

    $fp = @fopen(“write.txt”, “w”) ;
    fputs($fp, $Write);
    fclose($fp);

    このように書き込み同じディレクトリ内のwrite.txtファイルをみても何もデータが無い状態でした。

    従って前に投稿させていただきました質問のように、送ったテキストデータが
    ブランクになる問題を解決しないといけないようです。。。

    キャンセル

  • 2017/04/06 16:39

    たとえデータがない状態だとしてもwrite.txtが作成されたということは提示された.phpの処理は動作したと考えてよいかと思います。PHPは分からないのでなぜデータ(文字列)が書き込まれないのかは分かりません。質問に提示されたコードを追記し、他の方の回答をまってはいかがでしょうか?

    キャンセル

  • 2017/04/06 16:45

    パッと見「$Write = "<p>Temperature : " . $_POST["temperature"] . </p><br>";」の
    「</p><br>"」は「"</p><br>"」ではないかと思いますが。(「"」の対応が合っていない)

    キャンセル

  • 2017/04/06 16:58

    can110様
    早々のコメントをいただきありがとうございます。
    ご指摘の通りphpを質問文に追記させていただきました。

    ありがとうございます。
    また、write.txtファイルは自動ではなく自身で作成いたしました。

    キャンセル

  • 2017/04/06 17:08

    とりあえず手法については解決したかと思います。
    あとは.php側の処理のデバッグが必要です。

    キャンセル

  • 2017/04/06 17:19

    write.txtファイルを削除し更新したところ、
    自動でwrite.txtファイルが作成され、中身に

    <p>Temperature :</p><br>

    と記載されていました。肝心の値が表示されません。

    以上、現状報告でした。

    キャンセル

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

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

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

  • PHP

    21413questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Java

    14473questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • HTML

    9628questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • Arduino

    578questions

    Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。