饂飩コーディング

iOSアプリやら、Unityやら、Cocos2dやらごにょごにょ書いております

ESP8266からPHPにPOSTしてmySQLを更新する

サイトが引っ越しました。→https://scombu.com

約1秒後に自動的にリダイレクトします。切り替わらない場合はリンクをクリックしてください。

概要
1、PHPでPOSTデータを受け取れるようにコーディングする。例えば温度データを受け取るとか
  その中で該当テーブルにSQLを投げてレコードを追加する。
2、ESP8266から上記phpにポストする。
その他 データベースのテーブルカラムは以下の感じでIDをオートインクリメント、時間はレコード作成時間
    にしておくと楽。(何も考えてない・・・w)
テーブルはこんな感じで!↓

f:id:appdeappuappu:20200523104037p:plain
テーブル例

/*
#include <ESP8266WiFi.h> 
#include <ESP8266HTTPClient.h>

/* Set these to your desired credentials. */
const char *ssid = "SSID";  //ENTER YOUR WIFI SETTINGS
const char *password = "パスワード";

//Web/Server address to read/write from 
//const char *host = "xxxxxxxx.さくら.net";   //https://circuits4you.com website or IP address of server

//=======================================================================
//                    Power on setup
//=======================================================================

void setup() {
  delay(1000);
  Serial.begin(115200);
  WiFi.mode(WIFI_OFF);        //Prevents reconnection issue (taking too long to connect)
  delay(1000);
  WiFi.mode(WIFI_STA);        //This line hides the viewing of ESP as wifi hotspot
  
  WiFi.begin(ssid, password);     //Connect to your WiFi router
  Serial.println("");

  Serial.print("Connecting");
  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  //If connection successful show IP address in serial monitor
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());  //IP address assigned to your ESP
}

//=======================================================================
//                    Main Program Loop
//=======================================================================
void loop() {
  HTTPClient http;    //Declare object of class HTTPClient

  String postData,watasuData;
  //int adcvalue=analogRead(A0);  //Read Analog value of LDR
  //ADCData = String(adcvalue);   //String to interger conversion
  //station = "A";

  //Post Data
  int watasuValue = 54;
  watasuData = String(watasuValue);
  //postData = "status=" + ADCData + "&station=" + station ;
  postData = "ondoDataPara=" + watasuData ;
  
  http.begin("http://xxxxxx.さくら.ne.jp/ほにゃらら.php?");              //Specify request destination
  http.addHeader("Content-Type", "application/x-www-form-urlencoded");    //Specify content-type header

  int httpCode = http.POST(postData);   //Send the request
  String payload = http.getString();    //Get the response payload

  Serial.println("*****");
  Serial.println(httpCode);   //Print HTTP return code
  Serial.println("*****");
  Serial.println(payload);    //Print request response payload
  Serial.println("*****");

  http.end();  //Close connection
  
  delay(10000);  //Post Data at every 5 seconds


  
}
//=======================================================================
<?php

$uketoriOndo = $_POST['ondoDataPara'];

// データベースに接続するために必要なデータソースを変数に格納
  // mysql:host=ホスト名;dbname=データベース名;charset=文字エンコード
$dsn = 'mysql:host=mysqlxxxx.db.xxxxx.ne.jp;dbname=データベース名;charset=utf8';
  // データベースのユーザー名
$user = 'データベースアクセスユーザー名';
  // データベースのパスワード
$password = 'アクセスパスワード';
 
// tryにPDOの処理を記述
try {
  // PDOインスタンスを生成
  $dbh = new PDO($dsn, $user, $password);
// エラー(例外)が発生した時の処理を記述
} catch (PDOException $e) {
  // エラーメッセージを表示させる
  echo 'データベースにアクセスできません!' . $e->getMessage();
  // 強制終了
  exit;
}


// SELECT文を変数に格納
$sql = "INSERT INTO テーブル名 (temperatureField) VALUES ($uketoriOndo)";
// SQLステートメントを実行し、結果を変数に格納
$stmt = $dbh->query($sql);
 
?>