下期第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測試
先試試 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