ESP-01 + DHT11 + LED

閱讀時間約 18 分鐘
本專題為兩塊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
然後到 工具-> 開發板管理員 填入 ESP8266 就會看到esp8266 by ESP8266 Community 接著安裝 就可以在開發板選項中看到 ESP8266 這個系列了
Step 3. 選擇開發板
開發板 : Generic ESP8266 Module
Flash Mode : DIO
Flash Zize : 1M (512K SPIFFS)
序列埠 : Arduino Uno

Arduino Uno & ESP-01 線路

(用Arduino 當燒錄中介 所以TX與RX 是直接對接,IO0(GPIO0) 接Low後上電就會進入燒錄模 式燒錄完記得改為空接)
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
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 溫溼度的數值
相關原碼: https://reurl.cc/OkME6g
Arduino 原碼 為 123.ino 壓縮檔內
WevSite 原碼 為 iot.rar
MySql 資料庫 為 iot20211008.sql
技術文件 : 專題.pdf
為什麼會看到廣告
40會員
130內容數
獨立遊戲開發紀錄
留言0
查看全部
發表第一個留言支持創作者!
吳佳鑫的沙龍 的其他內容
本專題為兩塊ESP8266-ESP01 ,分別為 Arduino+ESP-01+YL-69 土壤濕度檢測器與LED燈 ,以及 ESP-01 + DHT11 + LED 傳輸給伺服器端,並於伺服器上 WebSite 透過ESP-01上傳儲 存於 MYSQL 資料呈現曲線圖給前端使用者。此外,前端使用者
使用網路上找來的原碼 測試圖片 因版本問題會出現 error pytesseract.pytesseract.TesseractNotFoundError: C:\Program Files (x86)\Tesseract-OCR esseract.exe is not installed or i
Haar Cascade classifier OpenCV 官方 Github:https://github.com/opencv/opencv/tree/4.x/data 人臉特徵模型:haarcascade_frontalface_default.xml 資料來源: https://steam
詳細原碼: https://reurl.cc/ex8lZm hello world Variable (變數) 輸入 input() 四則運算 列表 list (陣列) 集合 字典(Dictionary) 給值 try 檢驗 取所有值 判斷式 If else 迴圈 Switch //字典方式 CSV
取得掌紋 圖片比對 後續思維... 透過特徵比對+CNN,以YOLO 或 TensorFlow+Keras進行會比較正確。 單靠OpneCV至此是極限,要判斷出各條線,沒模型,則要以numpy陣列加上相似度(哈希算法等)去做,整體上不好進行... 待續...
原碼:https://reurl.cc/bGkxKr 資料庫連線 資料庫的連線建立完成後,要進行相關的操作,需要建立Cursor(指標)物件來執行,這邊使用Python的with陳述式,當資料庫存取完成後,自動釋放連線。 INSERT SELECT Select 取得單筆資料 fetchone()
本專題為兩塊ESP8266-ESP01 ,分別為 Arduino+ESP-01+YL-69 土壤濕度檢測器與LED燈 ,以及 ESP-01 + DHT11 + LED 傳輸給伺服器端,並於伺服器上 WebSite 透過ESP-01上傳儲 存於 MYSQL 資料呈現曲線圖給前端使用者。此外,前端使用者
使用網路上找來的原碼 測試圖片 因版本問題會出現 error pytesseract.pytesseract.TesseractNotFoundError: C:\Program Files (x86)\Tesseract-OCR esseract.exe is not installed or i
Haar Cascade classifier OpenCV 官方 Github:https://github.com/opencv/opencv/tree/4.x/data 人臉特徵模型:haarcascade_frontalface_default.xml 資料來源: https://steam
詳細原碼: https://reurl.cc/ex8lZm hello world Variable (變數) 輸入 input() 四則運算 列表 list (陣列) 集合 字典(Dictionary) 給值 try 檢驗 取所有值 判斷式 If else 迴圈 Switch //字典方式 CSV
取得掌紋 圖片比對 後續思維... 透過特徵比對+CNN,以YOLO 或 TensorFlow+Keras進行會比較正確。 單靠OpneCV至此是極限,要判斷出各條線,沒模型,則要以numpy陣列加上相似度(哈希算法等)去做,整體上不好進行... 待續...
原碼:https://reurl.cc/bGkxKr 資料庫連線 資料庫的連線建立完成後,要進行相關的操作,需要建立Cursor(指標)物件來執行,這邊使用Python的with陳述式,當資料庫存取完成後,自動釋放連線。 INSERT SELECT Select 取得單筆資料 fetchone()
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
作為〈Esperanto〉的續作,此作加強了雙方對話的空間,在這空間進行情感的脈絡梳理與抉擇,對對方保持希望也是對自己保持希望。 詩篇:〈Esperantoj〉 由 Tingku Tjarungan 撰寫收錄於《吸血鬼的情調》
Thumbnail
ESP FOREST-STD 特色 Special Features 其優雅的體形,就像一棵矗立在森林深處的大樹,吸引觀眾目光。 琴體由榿木製成,硬楓木琴頸與深 6 點緊固件牢固連接。 接頭加工平滑,有助於提升高音品的演奏性能。
Thumbnail
本書描述了作者的靈性探索,介紹了靈應盤和潛意識的相關理論和工具,通過珍的旅程,揭示了每個人的潛力和自由意識。
Thumbnail
常在用一些軟體轉移系統區到新的SSD後,在DiskGenius裡面會顯示ESP(損壞),但系統又能正常開機,網路上找到可以修復的方式來紀錄一下。 要準備的軟體是DiskGenius,這裡是5.5.1.1508 最新版; 以及Dism++10.1.1002.1B,兩者都建議別用太舊版本。 首先打
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
作為〈Esperanto〉的續作,此作加強了雙方對話的空間,在這空間進行情感的脈絡梳理與抉擇,對對方保持希望也是對自己保持希望。 詩篇:〈Esperantoj〉 由 Tingku Tjarungan 撰寫收錄於《吸血鬼的情調》
Thumbnail
ESP FOREST-STD 特色 Special Features 其優雅的體形,就像一棵矗立在森林深處的大樹,吸引觀眾目光。 琴體由榿木製成,硬楓木琴頸與深 6 點緊固件牢固連接。 接頭加工平滑,有助於提升高音品的演奏性能。
Thumbnail
本書描述了作者的靈性探索,介紹了靈應盤和潛意識的相關理論和工具,通過珍的旅程,揭示了每個人的潛力和自由意識。
Thumbnail
常在用一些軟體轉移系統區到新的SSD後,在DiskGenius裡面會顯示ESP(損壞),但系統又能正常開機,網路上找到可以修復的方式來紀錄一下。 要準備的軟體是DiskGenius,這裡是5.5.1.1508 最新版; 以及Dism++10.1.1002.1B,兩者都建議別用太舊版本。 首先打