ESP-01 + DHT11 + LED

更新於 發佈於 閱讀時間約 17 分鐘
raw-image

本專題為兩塊ESP8266-ESP01 ,分別為 Arduino+ESP-01+YL-69 土壤濕度檢測器與LED燈 ,以及 ESP-01 + DHT11 + LED 傳輸給伺服器端,並於伺服器上 WebSite 透過ESP-01上傳儲 存於 MYSQL 資料呈現曲線圖給前端使用者。此外,前端使用者也可控制兩塊ESP01將LED 燈點亮與關閉。



ESP8266 ES-01獨立使用

STEP 1. 清空 Arduino Uno 內存,將Arduino Uno 做中介燒入。

void setup() {} 
void loop() {}

STEP 2. 檔案->偏好設定->額外的開發版管理員網址 填入 http://arduino.esp8266.com/stable/package_esp8266com_index.json

raw-image

然後到 工具-> 開發板管理員 填入 ESP8266 就會看到esp8266 by ESP8266 Community 接著安裝 就可以在開發板選項中看到 ESP8266 這個系列了

raw-image

Step 3. 選擇開發板
開發板 : Generic ESP8266 Module
Flash Mode : DIO
Flash Zize : 1M (512K SPIFFS)
序列埠 : Arduino Uno

raw-image

Arduino Uno & ESP-01 線路

raw-image

(用Arduino 當燒錄中介 所以TX與RX 是直接對接,IO0(GPIO0) 接Low後上電就會進入燒錄模 式燒錄完記得改為空接)

raw-image

Step 5. 燒錄測試 (*注意 燒錄後內建的AT command會被覆蓋掉 若有需要則需上官網下載重新燒入) 選擇 檔案 ->範例 -> Basics -> Blink 將腳位改為 2 (即IO2)

void setup() {
pinMode(2, OUTPUT);
}
void loop() {
digitalWrite(2, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(2, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}

然後按"上傳",就開始燒錄Code了 當跑到 100% 後就燒錄完成了。


ESP8266 ES-01獨立使用 透過 WebSite 點亮 LED

#include <ESP8266WiFi.h>
#define _baudrate 9600
const char* ssid = "D-Link_DIR-612";//type your ssid
const char* password = "123456789";//type your password
int ledPin = 2; // GPIO2 of ESP8266
WiFiServer server(80);
const char* host = "192.168.20.3";
const int httpPort = 80;
unsigned long time_interval=60000;
void setup() {
Serial.begin( _baudrate );
pinMode(2, OUTPUT);
Serial.println( "ESP8266 Ready!" );
// Connecting to a WiFi network
Serial.print("Connect to... ");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println( "" );
Serial.println( "WiFi connected" );
Serial.println( "IP address: " );
Serial.println( WiFi.localIP() );
Serial.println( "" );
}
String turnx="";
void loop() {
// 設定 ESP8266 作為 Client 端
WiFiClient client;
if (!client.connect(host, httpPort)) {
Serial.println( "connection failed" );
return;
}
delay(1000);
String url = "/iot/turn2.txt";
url+="\r\n";
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: keep-alive\r\n\r\n");
//"Connection: close\r\n\r\n");
delay(1000);
// 讀取所有從 IoT Server 的回應並輸出到串列埠
while(client.available())
{
String line = client.readStringUntil('\r');
//Serial.print(line);
turnx=line;
}
if(turnx=="On")
{
digitalWrite(2, HIGH);
Serial.print("trun="+turnx+"\r\n");
}
else
{
digitalWrite(2, LOW);
Serial.print("Notrun="+turnx+"\r\n");
}
delay(1000);
}

ESP8266 ES-01獨立使用 DHT11 傳送至WebSite

Step1. 安裝 DHT11 程式庫 工具 > 程式庫 > DHT Sensor library

raw-image

Step2.將程式燒入( GPIO 0 若在開機時被偵測到 Low, ESP8266 將進入韌體燒寫模式 (透過 UART), 否則 GPIO 0 即為一般的 GPIO 埠.)

#include <ESP8266WiFi.h>
//DHT
#include <DHT.h>
#define DHTTYPE DHT11
#define DHTPIN 0
//

#define _baudrate 9600

const char* ssid = "D-Link_DIR-612";//type your ssid
const char* password = "123456789";//type your password

int ledPin = 2; // GPIO2 of ESP8266
WiFiServer server(80);
const char* host = "192.168.20.3";
const int httpPort = 80;
unsigned long time_interval=60000;

//DHT
DHT dht(DHTPIN, DHTTYPE, 11); // 11 works fine for ESP8266
float humidity, temp_f; // 從 DHT-11 讀取的值
unsigned long previousMillis = 0; // will store last temp was read
const long interval = 2000; // interval at which to read sensor

void setup() {
Serial.begin( _baudrate );
pinMode(ledPin, OUTPUT);

Serial.println( "ESP8266 Ready!" );
// Connecting to a WiFi network
Serial.print("Connect to... ");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println( "" );

Serial.println( "WiFi connected" );
Serial.println( "IP address: " );
Serial.println( WiFi.localIP() );
Serial.println( "" );
// Start the server
//server.begin();
}

String turnx="";
void loop() {
// 設定 ESP8266 作為 Client 端
WiFiClient client;

if (!client.connect(host, httpPort)) {
Serial.println( "connection failed" );
return;
}

delay(1000);

String url = "/iot/turn2.txt";
url+="\r\n";
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: keep-alive\r\n\r\n");
//"Connection: close\r\n\r\n");
delay(1000);

// 讀取所有從 IoT Server 的回應並輸出到串列埠
while(client.available())
{
String line = client.readStringUntil('\r');
//Serial.print(line);
turnx=line;
}

if(turnx=="On")
{
digitalWrite(ledPin, HIGH);
Serial.print("trun="+turnx+"\r\n");
}
else
{
digitalWrite(ledPin, LOW);
Serial.print("Notrun="+turnx+"\r\n");
}

delay(1000);
gettemperature();//DHT偵測
}

void gettemperature() {
// 量測間等待至少 2 秒
unsigned long currentMillis = millis();

if(currentMillis - previousMillis >= interval) {
// 將最後讀取感測值的時間紀錄下來
previousMillis = currentMillis;

// 讀取溫度大約 250 微秒!
humidity = dht.readHumidity(); // 讀取濕度(百分比)
temp_f = dht.readTemperature(true); // 讀取溫度(華氏)

// 檢查兩個值是否為空值
if (isnan(humidity) || isnan(temp_f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
else
{
WiFiClient client;

if (!client.connect(host, httpPort)) {
Serial.println( "connection failed" );
return;
}

delay(1000);

//Serial.print(temp_f);
String url = "/iot/insert.php?t=";
url+=temp_f;
url+="&h=";
url+=humidity;
url+="\r\n";
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
Serial.println("Send DHT sensor ok!");
delay(1000);
}
}
}

Step3. WebSite 程式 (insert.php)

<?php
//資料庫 設定
$db_host = "localhost"; //路徑
$db_username = "root"; //帳號
$db_password = "1234"; //密碼
$db_name = "iot20211008";
//pdo -> mysql連線
try{
$db_link = new PDO("mysql:host={$db_host};dbname={$db_name};charset=utf8",$db_username,$db_password);
}catch(PDOException $e){
print "資料庫連結失敗...Msg:{$e->getMessage()}<br/>";
die();
}

$data = [$_GET["t"],
$_GET["h"]
];
$query_insert = "INSERT INTO sensor2 (temperature,humidity ,datex) VALUES (?,?, NOW())";
$stmt = $db_link->prepare($query_insert);
$stmt->execute($data);
?>

資料庫結構

本專題資料庫名稱為: iot20211008 資料表分別為 :
sensor 紀錄土壤偵測的數值
sensor2 紀錄DHT11 溫溼度的數值

raw-image
raw-image
raw-image
raw-image
raw-image

相關原碼: https://reurl.cc/OkME6g
Arduino 原碼 為 123.ino 壓縮檔內
WevSite 原碼 為 iot.rar
MySql 資料庫 為 iot20211008.sql
技術文件 : 專題.pdf



留言
avatar-img
留言分享你的想法!
avatar-img
吳佳鑫的沙龍
41會員
136內容數
獨立遊戲開發紀錄
吳佳鑫的沙龍的其他內容
2025/04/12
🗓 Steam 上市日期:2025/4/28 | 🖤 加入願望清單:https://store.steampowered.com/app/3634400/Elara/ 「他們說我太敏感,說我不合群。 但我只是——不想學會沉默。」 —Elara Quinn 你是否曾經在工作時,感
Thumbnail
2025/04/12
🗓 Steam 上市日期:2025/4/28 | 🖤 加入願望清單:https://store.steampowered.com/app/3634400/Elara/ 「他們說我太敏感,說我不合群。 但我只是——不想學會沉默。」 —Elara Quinn 你是否曾經在工作時,感
Thumbnail
2025/03/05
在靈異頻發的醫院夜班,小護士林筱筱意外發現她的冷酷上司——蘇醫生,竟然早已死亡五年,從此她與這位神秘的「鬼醫生」攜手處理靈異事件,並在驚魂不斷的夜班中逐漸建立起一段超越生死的羈絆。
Thumbnail
2025/03/05
在靈異頻發的醫院夜班,小護士林筱筱意外發現她的冷酷上司——蘇醫生,竟然早已死亡五年,從此她與這位神秘的「鬼醫生」攜手處理靈異事件,並在驚魂不斷的夜班中逐漸建立起一段超越生死的羈絆。
Thumbnail
2025/02/24
這是一篇懸疑驚悚小說,描述女主角江語珊調查一起離奇命案的故事。死者林曦是一位心理學教授,死於自家公寓,現場佈滿鏡子,死者嘴角帶著詭異的微笑。語珊在調查過程中發現,此案與一種名為「鏡像侵蝕」的心理現象有關,並逐漸被捲入其中。
Thumbnail
2025/02/24
這是一篇懸疑驚悚小說,描述女主角江語珊調查一起離奇命案的故事。死者林曦是一位心理學教授,死於自家公寓,現場佈滿鏡子,死者嘴角帶著詭異的微笑。語珊在調查過程中發現,此案與一種名為「鏡像侵蝕」的心理現象有關,並逐漸被捲入其中。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
Arduino是一個廣泛用於物聯網(IoT)和嵌入式開發的開源平台。在這個教學中,我們將向您展示如何使用Arduino和I2C LCD模組來顯示一條簡單的消息:"Hello World!"。我們將使用LiquidCrystal_I2C庫來簡化LCD的控制。
Thumbnail
Arduino是一個廣泛用於物聯網(IoT)和嵌入式開發的開源平台。在這個教學中,我們將向您展示如何使用Arduino和I2C LCD模組來顯示一條簡單的消息:"Hello World!"。我們將使用LiquidCrystal_I2C庫來簡化LCD的控制。
Thumbnail
Arduino是一個開源的電子原型平台,它讓您能夠輕鬆地創建各種互動式電子項目。在開始之前,您需要安裝Arduino的開發環境。本文將詳細說明如何在台灣使用台灣用語來安裝Arduino環境。
Thumbnail
Arduino是一個開源的電子原型平台,它讓您能夠輕鬆地創建各種互動式電子項目。在開始之前,您需要安裝Arduino的開發環境。本文將詳細說明如何在台灣使用台灣用語來安裝Arduino環境。
Thumbnail
燒錄方式可用兩種: 拆開直接用USB to TTL燒 以OTA方式燒錄 以OTA方式燒錄,請先去程式碼加上web server,並OTA一次,之後輸入設備IP進入網頁,再選擇此處的檔案燒錄 此燒錄檔會開啟以下功能: device name後綴mac address web server
Thumbnail
燒錄方式可用兩種: 拆開直接用USB to TTL燒 以OTA方式燒錄 以OTA方式燒錄,請先去程式碼加上web server,並OTA一次,之後輸入設備IP進入網頁,再選擇此處的檔案燒錄 此燒錄檔會開啟以下功能: device name後綴mac address web server
Thumbnail
ESP8266 / ESP32單晶片的學習者或玩家常用板卡,依大小體積區分為 大型板卡: Arduino UNO/MEGA/M0 Pro , WEMOS D1 R2 ,WEMOS UNO 中型板卡: NodeMCU ESP8266-12E , ESP32/WROOM-32 , WEMOS D1
Thumbnail
ESP8266 / ESP32單晶片的學習者或玩家常用板卡,依大小體積區分為 大型板卡: Arduino UNO/MEGA/M0 Pro , WEMOS D1 R2 ,WEMOS UNO 中型板卡: NodeMCU ESP8266-12E , ESP32/WROOM-32 , WEMOS D1
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News