網頁

2017年12月4日 星期一

Arduino ESP32 研習 - 實作範例-json資料的應用

題目
從網站讀取溫度。
當溫度 < 21 度,亮 blue 燈
當溫度 介於 21 度到 28度 ,亮 green 燈
當溫度 大於 28度 ,亮red 燈

步驟
使用 firefox 瀏覽器,網址輸入 :
https://works.ioa.tw/weather/api/weathers/114.json
可以看到temperature( 溫度)


按 鎖頭圖示,再 按  >

按「更多資訊」
選「安全」的「檢視憑證」
選「詳細資訊」
憑證層級 選 「Amazon Root CA1」,按「匯出」,檔名為 :AmazonRootCA1.crt

用記事本打開檔案
在 https_WeatherJson   程式內,增加 程式如下:




因為用到  #include <ArduinoJson.h>  程式庫,所以要安裝 ArduinoJson程式庫。
方法:
草稿碼/匯入程式庫 /管理程式庫
輸入「arduinojson」,按「More info」,按「安裝」
arduinojson 安裝完畢


程式

修改要 連接的 wifi  ssid 和 password

const char* ssid = "asus3";
const char* password =  "12345678";

根據電路板設定 四個led 燈 連接 到  esp32 的pin 號碼。

在程式前面增加:

#define LED_PIN            22 //LED Red
#define LED_PIN2           21 //LED Green
#define LED_PIN3           17 //LED Blue
#define LED_PIN4           16 //LED White

判別從網站讀到的temperature( 溫度),以顯示不同的 led燈。

在 void handleReceivedMessage(String message) 增加程式碼:

if (temperature < 21 ){
  digitalWrite(LED_PIN, LOW);
  digitalWrite(LED_PIN2, LOW);
  digitalWrite(LED_PIN3, HIGH);
  digitalWrite(LED_PIN4, LOW);
 }
 if (temperature >= 21  && temperature  <= 28){
   digitalWrite(LED_PIN, LOW);
   digitalWrite(LED_PIN2, HIGH);
   digitalWrite(LED_PIN3, LOW);
   digitalWrite(LED_PIN4, LOW);
 }
if (temperature > 28  ){
   digitalWrite(LED_PIN, HIGH);
   digitalWrite(LED_PIN2, HIGH);
   digitalWrite(LED_PIN3, LOW);
   digitalWrite(LED_PIN4, LOW);
 }

在 void setup() 內增加:

 pinMode(LED_PIN, OUTPUT);
 pinMode(LED_PIN2, OUTPUT);
 pinMode(LED_PIN3, OUTPUT);
 pinMode(LED_PIN4, OUTPUT);

不然 led不會亮。


序列埠監控視窗的結果:
最後實體結果為:
目前溫度為 21度,所以亮綠燈。