件名が長ったらしいですが、一連の流れが表れています。w
概要
1、PHPでデータベーステーブルに接続してSelect文を投げてからfetchしたデータを
連想配列に突っ込んでJSONエンコードする。
2、ArduinoIDEでArduinoJsonをインクルードして1のphpにアクセスしてJSONを
受け取りParseする
3、Arduinoで分割した受け取りデータを分岐させて活用する。
リモコンでもいいし、リモコンの送信データでも如何様にでも〜
注意
Arduino公式が出してるJSONライブラリもある
ArduinoJson5、ArduinoJson6があって古いネット情報では5の情報が多い
この記事は6でやってるよ。
参考サイト
arduinojson.org
arduinojson.org
http://arduinojson.org/example.json
↑上記二つのリンクで使うJSONデータ
それでは実装してみましょう
順番は概要とは違いますが、ArduinoIDEでのコーディングから
RecieveJsonFromPhp.ino
#include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> #include <ArduinoJson.h> /* Set these to your desired credentials. */ const char *ssid = "使えるSSID"; //ENTER YOUR WIFI SETTINGS const char *password = "WIFIのパスワード"; void setup() { // put your setup code here, to run once: 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 } void loop() { // Send request HTTPClient http; //Declare object of class HTTPClient http.useHTTP10(true); //http.begin("http://arduinojson.org/example.json");//←これは参考にするJSONを返すURLです http.begin("ここにあなたが作ったJSONを返すPHPのURLを記述します"); http.GET(); // Parse response DynamicJsonDocument doc(2048); deserializeJson(doc, http.getStream()); // Read values const char* id_recieve = doc["id"]; Serial.println(id_recieve); int ondo_recieve = doc["ondo"]; Serial.println(ondo_recieve); const char* time_recieve = doc["zikan"]; Serial.println(time_recieve); http.end(); delay(10000); }
<?php // データベースに接続するために必要なデータソースを変数に格納 // mysql:host=ホスト名;dbname=データベース名;charset=文字エンコード $dsn = 'mysql:host=サーバドメイン;dbname=データベース名;charset=utf8'; // データベースのユーザー名 $user = 'データベースユーザー名'; // データベースのパスワード $password = 'データベースへのアクセスパスワード'; // tryにPDOの処理を記述 try { // PDOインスタンスを生成 $dbh = new PDO($dsn, $user, $password); // エラー(例外)が発生した時の処理を記述 } catch (PDOException $e) { // エラーメッセージを表示させる echo 'データベースにアクセスできません!' . $e->getMessage(); // 強制終了 exit; } $sth = $dbh->prepare("SELECT文をここに入力!"); //SQLを準備 $sth->execute(); //SQLを実行 //$stest = $dbh->query($sql); $userData = array(); while($row = $sth->fetch(PDO::FETCH_ASSOC)){ //SQLで取得したデータ($sth)から連想配列でフェッチして$rowに一行づつ入れる $userData[]=array( 'id'=>$row['id_number'], 'ondo'=>$row['temperatureField'], 'zikan'=>$row['hizuke'], ); } //print_r ($userData); //print_rで配列の中身を表示する(確認用後に削除する) //echo "<br>"; //jsonとして出力 //header('Content-type: application/json'); //ヘッダの作成(JSON出力の明確化) echo json_encode($userData[0]); //ユーザーデータ配列をJSON化!!! //echo addslashes(json_encode($userData[0])); //配列0にしているのはselectデータの最初だけをJSONするため //echo addslashes(json_encode($userData)); //addslashesはダブルコーテーションをバックスラッシュでエスケープする場合 //echo json_encode($sth); //var_dump(json_encode($userData)); ?>
作成されるJSONデータ |
---|
{“id”:”55″,”ondo”:”54″,”zikan”:”2020-05-22 14:53:06″} |
id=連番
ondo=センサーからの温度
zikan=レコード作成時間
お好みでPHPやらデータベスのテーブルを作ってJSON作成してください。
スケッチを実行するとWifiにつながってURL投げてJSONゲットしてParseしてSerialPrintしてこうなります。
コメント