下期第8堂[自動抄錄機器人] IOT+傳感+資料庫

今天要把物聯網蒐集到的數據,傳送到資料庫上,做到自動海量紀錄。


建置主板


測試Blink成功後 …


使用DHT11,記錄溫濕度

接線:
GND— G
VCC— 3V
S — D1

注意 : D1不是第1腳


#include "DHT.h"
DHT dht_pin5(5, DHT11); // Initialize DHT sensor

void setup() {
  Serial.begin(115200);//設定鮑率
  dht_pin5.begin();//啟動DHT
}

void loop() {
  float h = dht_pin5.readHumidity();//讀取濕度
  float t = dht_pin5.readTemperature();//讀取攝氏溫度

  Serial.print("濕度: ");
  Serial.print(h);
  Serial.print("\t");    //空大格
  Serial.print("攝氏: ");
  Serial.print(t);
  Serial.print("\n");   //換行
  delay(1000);
}

確認序列埠監控視窗數值


GET測試

http://howd.ddns.net/

先試試 friend


是很好玩,但…資料很多怎麼半? 可以放幾筆?


再測試 temperature


伺服器端 VS 客戶端 介紹


今天是要讓ESP8266主板當成 — 客戶端client
注意下面出現 client 的地方


#include "DHT.h"
#include <ESP8266WiFi.h>
//--------------------------------------------------------------
const char* ssid = "TCGS-Student";
const char* password = "";

WiFiClient client;
 
String serverURL = "howd.ddns.net";
String url = "";
//--------------------------------------------------------------
DHT dht_pin5(5, DHT11); // Initialize DHT sensor






//==================================================
void setup() {
  Serial.begin(115200);//設定鮑率
  dht_pin5.begin();//啟動DHT
//--------------------------------------------
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println(".");
  }
}
//==================================================







void loop() {
  float h = dht_pin5.readHumidity();//讀取濕度
  float t = dht_pin5.readTemperature();//讀取攝氏溫度

  Serial.print("濕度: ");
  Serial.print(h);
  Serial.print("\t");    //空大格
  Serial.print("攝氏: ");
  Serial.print(t);
  Serial.print("\n");   //換行
  delay(5000);
//--------------------------------------------------------------
    url = "/temperature/insert.php?t=" +  String(t) + "&h=" +  String(h);
 
  if (client.connect(serverURL, 80)) {
    client.println("GET " + url + " HTTP/1.1");
    client.println("Host: " + serverURL);
    client.println("Connection: close");
    client.println();
    client.stop();
  }
}

小挑戰

應該可以看到自動上傳溫度+濕度了,加上”學號”吧


<?php
// 列出資料
require_once 'db.php';



// 設置一個空陣列來放資料
$datas = array();
// sql語法存在變數中
$sql = "SELECT `id`, `t` , `h`,`no`,`time` FROM `temperature` AS userData WHERE `no`=20903 ";

// 用mysqli_query方法執行(sql語法)將結果存在變數中
$result = mysqli_query($link,$sql);



// 如果有資料
if ($result) {
    // mysqli_num_rows方法可以回傳我們結果總共有幾筆資料
    if (mysqli_num_rows($result)>0) {
        // 取得大於0代表有資料
        // while迴圈會根據資料數量,決定跑的次數
        // mysqli_fetch_assoc方法可取得一筆值
        while ($row = mysqli_fetch_assoc($result)) {
            // 每跑一次迴圈就抓一筆值,最後放進data陣列中
            $datas[] = $row;
        }
    }
    // 釋放資料庫查到的記憶體
    mysqli_free_result($result);
}
else {
    echo "{$sql} 語法執行失敗,錯誤訊息: " . mysqli_error($link);
}
// 處理完後印出資料
if(!empty($result)){
    // 如果結果不為空,就利用print_r方法印出資料
    //print_r($datas);
}
else {
    // 為空表示沒資料
    echo "查無資料";
}
?>






<div>
<?php if(!empty($datas)): ?>
<ul>
<!-- 資料 as key(下標) => row(資料的row) -->
<?php foreach ($datas as $key => $row) :?>
<li>
第<?php echo($key +1 ); ?> 筆資料ID: <?php echo $row['id']; ?>   濕度:<?php echo $row['h']; ?>  溫度:<?php echo $row['t']; ?>  學號:<?php echo $row['no']; ?>  時間:<?php echo $row['time']; ?>
</li>
<?php endforeach; ?>
</ul>
<?php else:  ?>
查無資料
<?php endif; ?>
</div>
<!-- 代表結束連線 -->
<?php mysqli_close($link); ?>

伺服端介紹,遠端就是使用同學學過的XAMPP建置,
使用PHP語言


PHP vs HTML

檢視原始碼


可以SQL在遠端,我在近端存取嗎?

在你的電腦存取遠端資料庫
安裝XAMPP
只打開 APACHE


您可能也會喜歡…

發佈留言