※本實驗目的為運用光敏電阻感應光源控制LED開關,已達到節約能源的目的;並利用ESP32的WiFi功能結合ThingSpeak和手機App:Line,達到收集光敏電阻數據並及時通知手機App目前LED的狀態。

1.ESP32在Arduino開發環境架設

●由於在Arduino開發環境上架設ESP32之教學文章非常之多,因此這裡就不再多做贅述直接進入第二點。

Ps.請Google搜尋→ESP32環境安裝

2. 使用Arduino撰寫程式碼

※由於Youtube上有許多非常優良的Arduino教學影片,因此這裡便不多做贅述,只會附上程式碼,其餘前置動作,請各位自行上Youtube搜尋囉!

Ps.下方有ThingSpeak和Line的設定教學

以下為Arduino程式碼

※注意 程式碼內需修改的[你的APIKey]會在ThingSpeak教學時取得APIKey。

#include
#include
//請修改以下參數——————————————–
char ssid[] = “SSID”;//輸入要連接之WiFi的名稱
char password[] = “SSID Password”;//輸入要連接之WiFi的密碼
//請修改為你自己的API Key,並將https改為http

String url = “http://api.thingspeak.com/update?api_key=你的APIKey“;
int photocellPin = 39; // 光敏電阻 (photocell) 接在 anallog pin 39 (SVN)
//———————————————————
int photocellVal = 0; // photocell variable
int LED=0;
String LED_status = “OFF”;
int vv;

void setup()
{
  Serial.begin(115200);
  pinMode(LED, OUTPUT); //設定 DIO Pin 2 為 LED 輸出
  pinMode(photocellPin,INPUT);

  Serial.print(“開始連線到無線網路SSID:”);
  Serial.println(ssid);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED)
   {
     Serial.print(“”);
     delay(1000);
   }
   Serial.println(“已連接WiFi”);
}

void loop()
{
// 讀取光敏電阻並輸出到 Serial Port
  photocellVal = analogRead(photocellPin);
  Serial.println(“”);
  Serial.print(“讀取光敏值:”);
  Serial.println(photocellVal);
  delay(100);
  vv=analogRead(photocellPin);

  if (vv<400)
  {
    digitalWrite(LED, HIGH);
    Serial.println(“LED ON”);
    LED_status=”ON”;
  }
  else
  {
    digitalWrite(LED, LOW);
    Serial.println(“LED OFF”);
    LED_status=”OFF”;
  }

   //開始傳送到thingspeak
   Serial.println(“傳送數值至網頁”);
   HTTPClient http;
   //將光敏值以http get參數方式補入網址後方
   String url1 = url + “&field1=” + photocellVal ;
   //http client取得網頁內容
   http.begin(url1);
   int httpCode = http.GET();

   if (httpCode == HTTP_CODE_OK)
    {
      //讀取網頁內容到payload
      String payload = http.getString();
      //將內容顯示出來
      Serial.print(“以上為第”);
      Serial.print(payload);
      Serial.println(“筆資料”);
    }
    else
     {
       //讀取失敗
       Serial.println(“網路傳送失敗”);
     }
   http.end();

   Serial.println(“15秒後再次偵測”);
   delay(15000);//延遲15秒
}

3.Line Notify設定教學

※若以下教學有不懂處可點此→參考連結

第一步:進入LINE Notify網站→點此進入,並點擊右上角登入。

第二步:登入Line帳號。

第三步:點擊右上角[個人頁面]。

第四步:點擊下方[發行權杖]。

第五步:輸入通知機器人姓名及選擇接收通知的聊天室。

第六步:點選下方[複製]並將此權杖妥善保存。

※此權杖離開該介面便無法再找回該權杖,務必妥善保存。

※注意

若於第五步時選擇傳訊的對象是一個群組,那麼要多一個動作:邀請LINE Notify進入群組內,否則會出現此錯誤訊息[此帳號尚未被邀請至已連動的群組]。

4.ThingSpeak創建帳號教學

※若以下教學有不懂處可點此→參考連結

第一步:創建帳號,進入ThingSpeak網站→點此進入,並點擊右上角Sign Up。

第二步:輸入E-mail及用戶名稱,輸入完畢按下方Continue。

Ps. E-mail必須完全輸入正確,其餘隨意即可。

第三步:在標示在標示1打勾,並按下方Continue。

第四步:等待並前往你的E-mail收取認證信件

第五步:找到名稱[Verify Email Address]的信件並點擊紅框處。

第六步:完成第五步便會跳轉到這個畫面,便可回到第四步的畫面點擊Continue。

第七步:輸入密碼和勾選後,點擊下方Continue。

Ps.密碼須包含數字及大小寫英文

第八步:完成ThingSpeak帳號創建,點選OK後會詢問是否用於商業用途,點選紅框選項,並點選

               OK,完成創建帳號。

5.ThingSpeak頻道設定

※若以下教學有不懂處可點此→參考連結

第一步:點選NewChannel進入創建頻道。

第二步:輸入所需資料,輸入完畢後點選最下方Save Channel。

Ps.大部分可忽略,如需增加其他資料請自行勾選。

第三步:點選API Keys。

第四步:複製紅框內APIKey,並到程式碼內的[貼入你的API Key]處貼上。

6.設定 ThingHTTP

※此部分為ThingSpeak傳送信息至Line的設定。

第一步:點擊Apps中的ThingHTTP,並點擊New ThingHTTP按鈕。

第二步:相關欄位設定(參照下表),完成設定後點選最下方Save ThingHTTP。

  • URL:https://notify-api.line.me/api/notify
  • Method:POST
  • Content Type:application/x-www-form-urlencoded
  • Header的name=Authorization
  • Header的value=Bearer 你的Token
    Bearer與Token中間要記得插入一個英文空白
  • Body部份輸入
       message=偵測目前Photocell Vaule為”%%trigger%%”。
    %%trigger%% 代表將來會被後續設定的React觸發的欄位值,稍後設定完成會顯示光敏值。

Ps.此處的Token指的是在Line Notify設定教學中的第六步所取得的權杖。

7.設定React

第一步:點選Apps中的React,並點選New React。

第二步:相關欄位設定(參照下表),完成設定後點選最下方Save React。

  • Condition Type (數值種類):選擇數值類Numeric。
  • 監控頻率(Test Frequency):選擇監控每次新增的值。
  • 監控頻道(if channel):選擇上面建立好的頻道。
  • 監控欄位(field):選擇監控哪一個欄位,本處選擇欄位1(Photocell Value)。
  •  比較方式:數值類比較大小,此處選擇「大於400」時觸發,選is Greater than。
  • 數值:輸入400
  • Action:反應方式選擇ThingHTTP,即條件達到時,要傳送一個ThinhHTTP亦即上面的LINE通知。
  • perform ThingHTTP:選擇剛剛建立好LINE通知的那個ThingHTTP。
  • Options:觸發通知的頻率,兩個選擇分別是1.條件達成後,只發一次通知,或2.每次條件達成都發通知,我們選擇1.條件達成後,只發一次通知。

8.實驗電路圖

所需元件與線材

元件

ESP32*1

LED*1

電阻*1(連接光敏電阻用)

Ps.請視LED狀況決定是否需再外加電阻。

線材

杜邦線*4

單芯線*2 (麵包板接線之常用線材)

Micro USB*1 (ESP32燒綠程式用線)

完成以上步驟後,即可上傳程式碼至ESP32,觀察實驗結果,若光敏值超過400時,LED便會關閉,手機就會收到LINE通知囉。

※因受限於使用的為ThingSpeak免費版功能,因此ThingSpeak需15秒才會做一次數值傳輸,所以於程式碼內設定為間隔15秒才會偵測一次光敏值並傳送數值至ThingSpeak再透過ThingSpeak傳送訊息至Line。

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>