- 用wemos玩物聯網(1)-環境設定與簡易測試
- 用wemos玩物聯網(2)-簡易的blink程式
- 用wemos玩物聯網(3)-用電腦控制wemos上的LED燈
- 用wemos d1 mini 玩物聯網(4)-2x16LCD顯示器
- 用wemos d1 mini 玩物聯網(5)-DHT11 溫溼度感測器
用wemos d1 mini 玩物聯網(6) IFTTT 的介紹與基本使用
用wemos d1 mini 玩物聯網(7) PMS5003T 實作PM2.5 感測器
2019年6月21日 星期五
108.06.22 物聯網佈署與空氣品質監測系統建置研習
2019年6月18日 星期二
用wemos d1 mini 玩物聯網(7) PMS5003T 實作PM2.5 感測器
一、感測器介紹
PMS5003T是一款可以同時監測空氣中顆粒物濃度及溫濕度的二合一感測器。其中顆粒物濃度的監測基於鐳射散射原理,可連續採集並計算單位體積內空氣中不同粒徑的懸浮顆粒物個數,即顆粒物濃度分佈,進而換算成為質量濃度。
二、接線圖
VCC-> 5V
GND->GND
RXD->D6
TXD->D5
三、程式碼
PMS5003T是一款可以同時監測空氣中顆粒物濃度及溫濕度的二合一感測器。其中顆粒物濃度的監測基於鐳射散射原理,可連續採集並計算單位體積內空氣中不同粒徑的懸浮顆粒物個數,即顆粒物濃度分佈,進而換算成為質量濃度。
二、接線圖
GND->GND
RXD->D6
TXD->D5
三、程式碼
四、執行結果
- #include <Wire.h>
- #include <esp_LiquidCrystal_I2C.h>
- #include <ESP8266WiFi.h>
- #include <SoftwareSerial.h>
- const char* ssid = "HJN"; //wifi 帳號
- const char* password = "11111111";// wifi 密碼
- const char* safekey = "fhjh";//檢查碼
- const uint16_t port = 80; //上傳的主機port
- const char* host = "192.168.137.1"; //上傳的主機ip
- const char* php_url = "/airbox/t2.php";//上傳在主機的程式
- byte sensor_id = 1; //偵測器ID
- long lPmcf10;
- long lPmcf25;
- long lPmcf100;
- long lTemperature;
- long lHumidity;
- esp_LiquidCrystal_I2C mylcd(0x27, 16, 2);
- SoftwareSerial pms5003t_Serial(D5, D6);
- #define PMS5003T_PM10 1
- #define PMS5003T_PM25 2
- #define PMS5003T_PM100 3
- #define PMS5003T_TEMPER 4
- #define PMS5003T_HUMI 5
- long pms_pmcf10 = 0;
- long pms_pmcf25 = 0;
- long pms_pmcf100 = 0;
- long pms_pmat10 = 0;
- long pms_pmat25 = 0;
- long pms_pmat100 = 0;
- long pms_Temperature = 0;
- long pms_Humidity = 0;
- int no = 0;
- WiFiClient client;
- void setup()
- {
- Serial.begin(9600);
- mylcd.init();
- mylcd.backlight();
- pms5003t_Serial.begin(9600);
- lPmcf10 = 0;
- lPmcf25 = 0;
- lPmcf100 = 0;
- lTemperature = 0;
- lHumidity = 0;
- mylcd.clear();
- mylcd.setCursor(0, 0);
- mylcd.print("Yo Airbox");
- WiFi.begin(ssid, password);
- Serial.println("");
- int t = 0;
- mylcd.setCursor(0, 1);
- while (WiFi.status() != WL_CONNECTED) {
- t++;
- if (t > 15) break;
- Serial.print(".");
- mylcd.print(".");
- delay(500);
- }
- Serial.println("");
- Serial.print("Connected to ");
- Serial.println(ssid);
- Serial.print("IP address: ");
- Serial.println(WiFi.localIP());
- mylcd.setCursor(0, 1);
- mylcd.print(WiFi.localIP());
- delay(2000);
- mylcd.clear();
- }
- void loop()
- {
- lPmcf10 = 0;
- lPmcf10 = pms5003t_read_(PMS5003T_PM10);
- Serial.println((String("PM1.0: ") + String(lPmcf10)));
- delay(500);
- lPmcf25 = pms5003t_read_(PMS5003T_PM25);
- Serial.println((String("PM2.5: ") + String(lPmcf25)));
- delay(500);
- lPmcf100 = pms5003t_read_(PMS5003T_PM100);
- Serial.println((String("PM10: ") + String(lPmcf100)));
- delay(500);
- lTemperature = pms5003t_read_(PMS5003T_TEMPER);
- Serial.println((String("Temperature: ") + String(lTemperature)));
- delay(500);
- lHumidity = pms5003t_read_(PMS5003T_HUMI);
- Serial.println((String("Humidity: ") + String(lHumidity)));
- delay(500);
- if (lPmcf10 > 0) {
- no++;
- String things_request = "GET " + String(php_url);
- things_request += "?safekey=" + String(safekey);
- things_request += "&sensor_id=" + String(sensor_id);
- things_request += "&pm10=" + String(lPmcf10);
- things_request += "&pm25=" + String(lPmcf25);
- things_request += "&pm100=" + String(lPmcf100);
- things_request += "&tt=" + String(lTemperature);
- things_request += "&hh=" + String(lHumidity) + "\r\n\r\n";
- Serial.println(things_request);
- if (client.connect(host, port)) {
- client.print(things_request);
- Serial.println("Request: [ok]");
- client.stop();
- } else {
- Serial.println("Request: [error]");
- }
- if (client.connect("api.thingspeak.com", 80)) {
- String things_request = "GET /update?api_key=Your_Write_API_Key&field1=" + String(lPmcf10) + "&field2=" + String(lPmcf25) + "&field3=" + String(lPmcf100) + "&field4=" + String(lTemperature) + "&field5=" + String(lHumidity) + "\r\n\r\n";
- // client.print(things_request);
- client.stop();
- }
- mylcd.clear();
- mylcd.setCursor(0, 0);
- mylcd.print(no);
- mylcd.setCursor(5, 0);
- mylcd.print(String(" PM2.5: ") + String(lPmcf25) );
- mylcd.setCursor(0, 1);
- mylcd.print(String("T:") + String(lTemperature) + String("C"));
- mylcd.setCursor(9, 1);
- mylcd.print(String("H:") + String(lHumidity) + String("%"));
- delay(5000);
- }
- }
- //G5t check
- long pms5003t_read_(int datatype) {
- int count = 0;
- unsigned char c;
- unsigned char high;
- pms5003t_Serial.listen();
- while (pms5003t_Serial.available()) {
- c = pms5003t_Serial.read();
- if ((count == 0 && c != 0x42) || (count == 1 && c != 0x4d)) {
- Serial.println("pms5003t check failed");
- break;
- }
- if (count > 27) {
- Serial.println("pms5003t completed");
- break;
- }
- else if (count == 4 || count == 6 || count == 8 || count == 10 || count == 12 || count == 14 || count == 24 || count == 26) {
- high = c;
- }
- else if (count == 5) {
- pms_pmcf10 = 256 * high + c;
- }
- else if (count == 7) {
- pms_pmcf25 = 256 * high + c;
- }
- else if (count == 9) {
- pms_pmcf100 = 256 * high + c;
- }
- else if (count == 11) {
- pms_pmat10 = 256 * high + c;
- }
- else if (count == 13) {
- pms_pmat25 = 256 * high + c;
- }
- else if (count == 15) {
- pms_pmat100 = 256 * high + c;
- }
- else if (count == 25) {
- pms_Temperature = (256 * high + c) / 10;
- }
- else if (count == 27) {
- pms_Humidity = (256 * high + c) / 10;
- }
- count++;
- }
- while (pms5003t_Serial.available()) pms5003t_Serial.read();
- if (datatype == PMS5003T_PM10)
- return pms_pmcf10;
- else if (datatype == PMS5003T_PM25)
- return pms_pmcf25;
- else if (datatype == PMS5003T_PM100)
- return pms_pmcf100;
- else if (datatype == PMS5003T_TEMPER)
- return pms_Temperature;
- else if (datatype == PMS5003T_HUMI)
- return pms_Humidity;
- }
五、參考資料
用wemos d1 mini 玩物聯網(6) IFTTT 的介紹與基本使用
一、IFTTT簡介
FTTT 簡單來說就是 當 什麼 發生時 就做 什麼 事, 這 2 個「什麼」就是「服務」, 讓不同的平台、服務可以整合在一起。
二、使用方法
(1)註冊 官網:https://ifttt.com/ ,請點選 Sign Up 註冊帳號, 或是直接按Sign In ,可以利用GMAIL帳號作同步認證作登入
(2)登入後,點選個人帳號,再點選New Applet,將會有一系列的步驟來協助建立。
步驟5 建立通知email的內容格式設定,有支援中文。
(1) evenName:代表觸發器名稱,以本例為tt123
(2)OccurredAt 代表發生時間
(3)Value1 , Value2, Valu3代表要傳送的資料
用兩個大括號,前後夾,代表它是一個變數,不要去動到。
<?php
$url ="http://maker.ifttt.com/trigger/line_0606/with/key/bEcMfXQzyIpvECSsXvEJ2n?";
$url .="value1=a&value22=b&value3=c";
echo $response = file_get_contents($url);
?>
FTTT 簡單來說就是 當 什麼 發生時 就做 什麼 事, 這 2 個「什麼」就是「服務」, 讓不同的平台、服務可以整合在一起。
二、使用方法
(1)註冊 官網:https://ifttt.com/ ,請點選 Sign Up 註冊帳號, 或是直接按Sign In ,可以利用GMAIL帳號作同步認證作登入
(2)登入後,點選個人帳號,再點選New Applet,將會有一系列的步驟來協助建立。
再點選 「+this」
步驟1.Choose a service, 我們選擇 webhook進行篩選,再點選藍色方塊,進入下個步驟。
所謂的webhook的利用傳送一段網址給ifttt, 來觸發程式。
所謂的webhook的利用傳送一段網址給ifttt, 來觸發程式。
步驟2.Choose trigger(選擇觸發器),將你的「事件」命名,我們 命名為tt123 ,是利用「收到網絡請求」的方式來進行。
步驟3. 接下來設定系統要做什麼事情,點選「+that」
選擇一個行動的服務,我們選擇用「email」來通知該事件被觸發,也就是事件觸發後立即發信。內建信箱是登入的email, 當然也可以選擇line,
步驟4 .點選,send me a email 藍色方塊,進行設定
(1) evenName:代表觸發器名稱,以本例為tt123
(2)OccurredAt 代表發生時間
(3)Value1 , Value2, Valu3代表要傳送的資料
用兩個大括號,前後夾,代表它是一個變數,不要去動到。
步驟6 完成後,點選下 Receive notifications when this Applet runs 即可完成啟動。
步驟 7
接下來進行 尋找觸發的網址格式,我們直接進到以下網址
https://ifttt.com/maker_webhooks,選擇右上角的「Document」
觸發器名稱:tt123
your key=系統會給您一串文字
填入觸發器的名稱,按下「Test It!」即可進行測試。
也可以直接打入以下網址:
即可以試驗,其中value1=a代表會傳遞a
https://maker.ifttt.com/trigger/tt123/with/key/your key?valu1=a&value=b&value=c
t3.php
$url ="http://maker.ifttt.com/trigger/line_0606/with/key/bEcMfXQzyIpvECSsXvEJ2n?";
$url .="value1=a&value22=b&value3=c";
echo $response = file_get_contents($url);
?>
參考資料
- http://blog.ilc.edu.tw/blog/index.php?op=printView&articleId=675501&blogId=868
- http://hammer1007.blogspot.com/2018/07/esp82665-5ifttt-line.html
用wemos d1 mini 玩物聯網(5)-DHT11 溫溼度感測器
一、課程目標:
安裝的程式庫位於「C:\使用者\電腦名稱\文件\Arduino\libraries」資料夾中。
三、接線圖
"+" vcc 極接5V,v
"-" Gnd 極接GND,
data pin接上要輸入的Pin腳=>接在13 (D7)
四、程式碼
點選「範例」->SimpleDHT->DHT11Default
- #include <SimpleDHT.h>
- // for DHT11,
- // VCC: 5V or 3V
- // GND: GND
- // DATA: 2
- int pinDHT11 = 13;//data PIN 在D7=>也就是13
- SimpleDHT11 dht11(pinDHT11);
- void setup() {
- Serial.begin(115200);
- }
- void loop() {
- // start working...
- Serial.println("=================================");
- Serial.println("Sample DHT11...");
- // read without samples.
- byte temperature = 0;
- byte humidity = 0;
- int err = SimpleDHTErrSuccess;
- if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
- Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
- return;
- }
- Serial.print("Sample OK: ");
- Serial.print((int)temperature); Serial.print(" *C, ");
- Serial.print((int)humidity); Serial.println(" H");
- // DHT11 sampling rate is 1HZ.
- delay(1500);
- }
伍、執行結果
六、程式碼2
- #include <SimpleDHT.h>
- #include <Wire.h>
- #include <esp_LiquidCrystal_I2C.h>
- esp_LiquidCrystal_I2C mylcd(0x27, 16, 2);
- // for DHT11,
- // VCC: 5V or 3V
- // GND: GND
- // DATA: 13
- int pinDHT11 = 13;//di mini D7 DHT11腳位在D7 , 也就是13
- SimpleDHT11 dht11(pinDHT11);
- int no = 0;//計數器
- void setup() {
- Serial.begin(115200);
- mylcd.init();
- mylcd.backlight();
- mylcd.setCursor(0, 0);
- mylcd.print("Welcome to");
- mylcd.setCursor(0, 1);
- mylcd.print("DHT 11");
- }
- void loop() {
- // start working...
- Serial.println("=================================");
- Serial.println("Sample DHT11...");
- // read without samples.
- byte temperature = 0;
- byte humidity = 0;
- int err = SimpleDHTErrSuccess;
- if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
- Serial.print("Read DHT11 failed, err=");
- Serial.println(err);delay(1000);
- mylcd.setCursor(0, 0);
- mylcd.print("Read DHT11 failed");
- return;
- }
- Serial.print("Sample OK: ");
- Serial.print((int)temperature); Serial.print(" *C, ");
- Serial.print((int)humidity); Serial.println(" H");
- mylcd.clear();
- mylcd.setCursor(0, 0);
- mylcd.print("NO:");
- mylcd.print(no);
- mylcd.setCursor(0, 1);
- mylcd.print(String("T:") + String(temperature) + String("C"));
- mylcd.setCursor(9, 1);
- mylcd.print(String("H:") + String(humidity) + String("%"));
- no++;
- delay(3000);//每三秒重新測量
- }
2019年6月9日 星期日
用wemos d1 mini 玩物聯網(4)-2x16LCD顯示器
一、課程目標:
二、接線圖
圖片來源http://www.esp8266learning.com/wemos-bmp180-readings-oled-display-simple-project.php
三、程式碼
- 學習使用I2C 2X16 lcd
- i2c為一種通訊界面,2x16代表lcd為二行,每行可以顯示16個字母。
二、接線圖
- Wemos Mini LCD1602
- GND GND
- 3v3 VCC
- D2 SDA
- D1 SCL
圖片來源http://www.esp8266learning.com/wemos-bmp180-readings-oled-display-simple-project.php
三、程式碼
四、執行結果
- #include <Wire.h>
- #include <esp_LiquidCrystal_I2C.h>
- esp_LiquidCrystal_I2C mylcd(0x27, 16, 2);
- void setup()
- {
- mylcd.init();
- mylcd.backlight();
- mylcd.setCursor(0, 0);
- mylcd.print("Welcome to");
- mylcd.setCursor(0, 1);
- mylcd.print("wemos d1 mini");
- }
- void loop()
- {
- }
伍、參考資料
訂閱:
文章 (Atom)