1 / 49

物 聯 網 IoT Level-01 https://goo.gl/BSNZYP

物 聯 網 IoT Level-01 https://goo.gl/BSNZYP. 設備檢查 一、環境設定 二、程式基礎( LED 測試) 三、數位讀取. 四、類比讀取 五、蜂鳴器 六、溫溼度計 七、 LCD 八、超音波. 一、開發環境設定. NodeMcu-32s 布局. ESP32 Pin map. 18 x Analog-to-Digital :可接類比或數位感測 ( 粉紅色標示 ) 3 x SPI interfaces(MOSI,MISO,SCK,SS) : SD card, RFID( 藍色標示 )

krobert
Télécharger la présentation

物 聯 網 IoT Level-01 https://goo.gl/BSNZYP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 物聯網IoTLevel-01https://goo.gl/BSNZYP 設備檢查 一、環境設定 二、程式基礎(LED測試) 三、數位讀取 四、類比讀取 五、蜂鳴器 六、溫溼度計 七、LCD 八、超音波

  2. 一、開發環境設定

  3. NodeMcu-32s布局

  4. ESP32 Pin map • 18 x Analog-to-Digital:可接類比或數位感測(粉紅色標示) • 3 x SPI interfaces(MOSI,MISO,SCK,SS): SD card, RFID(藍色標示) • 3 x UART interfaces:藍芽、相機(不限腳位編號) • 2 x I2C interfaces(SDA,SCL) and I2S interfaces:LCD、氣壓、陀螺儀(GPIO 21,22) • 16 x PWM output channels:數位輸出也可類比輸出(不限定腳位編號) • 2 x Digital-to-Analog Converters (DAC):不太需要用 • 10 x Capacitive sensing GPIOs:提供觸控電容(棕色標示) • GPIO 34,35,36,39:Input only • GPIO 1,2,3,6,7,8,9,10,11:系統用,勿使用(淺灰色標示) • GPIO 18:重開機

  5. 一、環境設定 • 下載ESP32驅動程式 • 下載Arduino IDE • 下載ESP32核心檔案 • 設定Arduino IDE for NodeMcu-32s1~4的打包檔案:https://goo.gl/M32fbS • 簡單測試程式:HelloWorld • ESP32函式庫安裝

  6. 解壓縮到指定的資料夾 • 下載1~4打包檔案:https://goo.gl/M32fbS本版本為免安裝版,解壓縮後即可執行 • 建議解壓縮到D硬碟中,也可放到USB中 • 例如本例,解壓縮到d:\arduino1.8.5\

  7. 安裝驅動 • 解壓縮後後,將NodeMcu-32s插入USB • 此時會出現安裝畫面,但由於沒有驅動程式,因此自行指定驅動程式 • ESP32驅動程式位於以下資料夾D:\arduino-1.8.5\drivers\CP210x_6.7.4 • 安裝驅動完畢後 • 在我的電腦/右鍵/管理/,開啟電腦管理 • 點選左側裝置管理員 • 點選右側連接埠,檢查是否有一個Silicon Lab CP210x USB to UART (COMX) • 請注意最後的ComX代表獲得的COM位置,每次可能都會不同,請紀錄在記事本,以後會用到。

  8. 設定Arduino開發界面 • 開啟arduino-1.8.5下的Arduino主程式:arduino.exe • 點選功能表/工具/開發版並往下拉,直到選擇NodeMCU-32s • 更改序列埠為COMX,依照投影片頁碼6的第6點選擇 • UploadSpeed選擇:921600 8

  9. 簡單測試程式:HelloWorld • 1.HelloWorld.txt

  10. 注意事項 • Arduino IDE 上傳程式碼,出現……______.......____時,須按住右側Flash鍵 • 後續程式撰寫與一般Arudino幾乎無異 • 若需要函式庫,請Google關鍵字:ESP32+所需功能 • Reset Flash

  11. 麵包版結構 • 中間左右通路 • 兩側上下通路 • 一般我們會將正電5V及GND接至兩側就像電源分接一樣

  12. 二、基礎語法 • 程式結構 • LED燈(長正短負) • 將三色LED分別接在7,8,9的序號上 • 實際的編號其實是4,16,17

  13. 1.Arduino程式結構 Void Setup() { 設定的部份僅執行一次 //代表註解 } Void loop() { 工作內容 例如:讀取 例如:輸出電壓 }

  14. 常用語法 • 數位感測輸入(人體、觸摸) • pinMode(腳位編號,INPUT); //宣告為輸入 • Statue=digitalRead(腳位編號);//讀取的值(1或0) • 數位輸出(LED、繼電器) • pinMode(腳位編號, OUTPUT); //宣告為輸出 • digitalWrite(腳位編號,HIGH);//輸出5V • digitalWrite(腳位編號,LOW);//輸出0V • 數位模擬類比PWM輸出(RGB LED、DC馬達) • 須宣告PWMchannels=0~15, FREQ=5000, resolution = 8 • ledcAttachPin(GPIO, channel) • ledcWrite(channel, dutycycle)

  15. 常用語法-2 • 類比輸入(火焰、水位、光敏、振動)sensorValue= analogRead(腳位編號); //讀取的數值 • 序列監視視窗可以觀察類比輸入的數值 • 在setup()加入此行 • Serial.begin(9600);//宣告讀取數值及速率 • 在loop()加入以下 • delay(500); • int sensorValue = analogRead(腳位); //讀取數值 • Serial.println(sensorValue);//輸出數值

  16. 2.LED燈第一個程式:讓LED亮起 • Blink,讓LED亮起 在setup的地方宣告 pinMode(4, OUTPUT); //宣告pin4是輸出 在loop的地方執行 digitalWrite(4, HIGH);// pin4輸出5V

  17. 讓LED隔一秒閃耀 • 思路:開停一秒關停一秒 在loop的地方執行 digitalWrite(4, HIGH); delay(1000); digitalWrite(4, LOW); delay(1000);

  18. 完整程式 void setup() { // 宣告4為輸出 pinMode(4, OUTPUT); } //loop內重複執行不停止 void loop() { digitalWrite(4,HIGH);// turn the LED on delay(1000); // wait for a second digitalWrite(4,LOW); // turn the LED off delay(1000); // wait for a second }

  19. 數位感測裝置 • Arduino感測環境參數須使用感測器,主要分成三大類 • 數位讀取:只有1或0,例如人體、觸控 • 類比讀取:火焰、水位、土壤、氣體等 • 特定函數讀取:須透過特定函數讀取設備感測資訊,例如溫濕度DHT11、超音波、陀螺儀、相機 • Arduino互動裝置,用於與使用者產生互動 • 燈號:LED、LCM、OLED、TFT等顯示裝置 • 聲音:蜂鳴器、喇叭、MP3等 • 動作:伺服馬達、步進馬達 • 遙控:藍芽、無線、紅外線、WIFI

  20. 三、人體感測器 • 利用紅外線來偵測是否有物體經過 • 請將旋鈕逆時針轉至最底 • 狀態約五秒才能再啟動

  21. 基礎練習 將紅外線的OUT接在GPIO 15(順序4) void setup(){ pinMode(15, INPUT); Serial.begin(9600); delay(1000); } void loop(){ int val=digitalRead(15); Serial.println(val); delay(1000); } 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1

  22. 互動式紅綠燈實做 • 目標:無人時為紅燈,偵測到有人等候時,立即開啟綠燈,並延遲10秒後轉為黃燈,再3秒後轉紅燈 if(val==1) {//有人 …. } else {//沒人 …. }

  23. 觸控裝置 • 感測人體靜電,預設0,觸摸時則顯示1 • 改成平常為紅燈,觸控時綠燈10秒,黃燈,再3秒後轉紅燈

  24. 一、類比讀取 • 類比讀取語法 • 類比讀取設備 • 序列數值顯示 • 序列繪圖家 • 氣體感測器(MQ系列) • 在setup處宣告pin為 Serial.begin(9600);pinMode(腳位,INPUT); • 讀取值方法,在loop處 int val=analogRead(腳位); Serial.print("狀態="); Serial.println(val);

  25. 小夜燈練習 • 當亮度>=1000,意思環境很暗,就把三顆LED點亮 • 否則當亮度<1000,意思是環境夠亮,就把LED關掉 if(val>=1000){ digitalWrite(4,HIGH); } else{ digitalWrite(4,LOW); }

  26. 2.類比讀取設備 • 氣體品質 • 雨滴感測 • 光度感測 • 火焰感測 • 特徵:腳位會有編號A0代表analog • 是否提供類比請查詢規格書或詢問賣家 • ESP32腳位不分數位類比,但UNO系列有區分 數位腳位 類比腳位

  27. 實做:亮度警報器 • 接綠色、紅色LED • 接亮度感測器 • 持續偵測數值 • 先了解現在的環境的偵測數值,例如X • 再設定一個門檻值X=6/5x,例如穩定狀態200,門檻值設定為240,如果超過門檻值,就開啟紅色LED,如果沒有超過門檻值,就開啟綠色LED。

  28. 3.序列數值顯示 通常在setup中第一句為: Serial.begin(9600);//代表9600速率傳輸到序列監控

  29. 4.序列繪圖家 • 工具/序列繪圖家 • 須先關閉序列視窗,不可與序列視窗共用 • Print必須只有數值,意思是:intstatus=analogRead(腳位);Serial.print("狀態=");Serial.println(status);

  30. 5.氣體感測器 • 一般為MQ系列 • 價格約在90-150之間 • 無法偵測詳細數值 • 僅能作為測試

  31. Datasheet規格表 • 其實是很不準? • 該怎麼辦? • 長期讀取一般狀態數值設定為正常數值然後再設定一個門檻值,超越即發布警報 RL=20; Vout = analogRead(); Rs = RL * (6204.5 – Vout)/Vout;

  32. 危險氣體警示 • 噴了酒精以後,要亮燈,並發出警示聲音。 • 10秒後,恢復關燈,關閉聲音

  33. 蜂鳴器 ESP32 蜂鳴器函式庫下載 EasyBuzzer https://goo.gl/pHKczH

  34. 發出Do,Ri,Mi各一秒 • 注意事項 • 蜂鳴器設定響時間,同時必須預留相同的delay時間 • 蜂鳴器範例:https://goo.gl/aSCnMJ

  35. 來編曲一首小星星

  36. 1.溫濕度 • LM35三極體感測器 • DHT-11溫濕度傳感器 • DHT須載入dht lib函式庫 • 函式庫請至此處下載https://goo.gl/sJU1r1

  37. 引入函式庫方式 • 下載函式庫後,將函式庫包裝為資料夾,例如DHT,內部包含兩個程式 • 將函式庫複製到規定的位置UNO系列->D:\arduino-1.8.5\librariesESP32系列->D:\arduino-1.8.5\hardware\espressif\esp32\libraries

  38. DHT11關鍵語法 • dht DHT11;//宣告一個DHT11為dht的物件類別 • DHT11.read11(15);//讀取溫度計資料,接在15,序號4 • 執行read11後 • 濕度為DHT11.humidity • 溫度為DHT11.temperature

  39. #include <dht.h> dhtDHT11;//宣告一個DHT為dht11的物件類別 void setup() { Serial.begin(9600);//序列傳輸9600 Serial.println("溫濕度測試"); delay(1000);//等候一秒暖機 } void loop() { DHT11.read11(15);//讀取溫度計資料 Serial.print("濕度="); Serial.print(DHT11.humidity); Serial.print("%,"); Serial.print("溫度="); Serial.print(DHT11.temperature); Serial.println("C"); delay(1000);//讀取資料的頻率 }

  40. 利用LCD提供訊息 • 將LCD接上Arduino設備 • 透過LCD顯示訊息 • 不可換腳位,接法固定 旋轉至適當亮度

  41. 利用i2C • i2C是一種序列轉換IC,用於傳輸複雜的資料。由於控制LCD需要大量接腳,因此可透過I2C用傳輸資料的方式。 • 利用方式: • 1.掃描I2C位址:獲得位址之後,在步驟2使用 • 2.連線I2C裝置,並顯示資料 • 決定顯示的位置:例如第一行第一個字開始 • 決定顯示內容:例如hello world

  42. i2C掃描 • 由於i2C裝置不同版本會有不同的位置,建議先行掃描 • 請複製範例程式I2C掃描.txthttps://goo.gl/ykRGeC • 執行後觀察序列視窗,取得0x3F

  43. i2C函式庫取得 • 下載i2clib,並複製到lib資料夾https://goo.gl/rPxY6D • 下載LCD範例程式 • https://goo.gl/VR6fPh • 修改LiquidCrystal_I2C lcd(0x3F,16,2);//16個字、2行 • lcd.begin();//啟動LCD • lcd.backlight();//開啟背光 • lcd.setCursor(3,0);//將游標移動到第0行第三個字 • lcd.print(“Hello, world!”);//顯示Hello, world • 注意背光亮度

  44. 結合進度四:溫度計進度五:LCD將溫度濕度顯示在LCD上結合進度四:溫度計進度五:LCD將溫度濕度顯示在LCD上

  45. 超音波 • 用超音波發射來回計算時間來偵測距離 • 有效距離約2cm~200cm • CM_Value = pulseIn(EchoPin, HIGH); • CM_Value = CM_Value * 34 / 1000 / 2; • 一般來說聲音在空氣中傳遞的速度, 大約會是每秒中340公尺. 溫度和氣壓都可能改變聲音傳遞的速度. 但我們先簡單化問題, 這裡乎略不計. • 所以公式如下 • 1秒 : 340公尺 = EhcoTime() : S(距離)/2 • S(距離) = EchoTime * 34 / 1000毫秒 / 2

  46. const int TrigPin=39;//發出聲波 constintEchoPin=36 ;//接收聲波 float CM_Value; void setup(){ Serial.begin(9600); pinMode(TrigPin, OUTPUT); pinMode(EchoPin, INPUT); } void loop() { digitalWrite(TrigPin, LOW); //關閉 delayMicroseconds(2); digitalWrite(TrigPin, HIGH);//啟動 delayMicroseconds(10); digitalWrite(TrigPin, LOW); //關閉 CM_Value = pulseIn(EchoPin, HIGH); //傳回時間 CM_Value = CM_Value * 34 / 1000 / 2; //轉換成距離 Serial.print(CM_Value); //Serial.print(" cm"); delay(1000); }

  47. 練習:靠近警示 • 當物體太過靠近時,發出聲音警告

  48. 實做、火災警報或氣體警報 • 目標:每一秒都讀取數值,若正常則關閉警報,若出現異常數值時,就響警報,直到以下狀況1.手動解除2.狀況復原

  49. 觸摸感測器 • 用來作為解除按鈕 • 規格:數位 • 當觸摸時,靜電會讓SIG傳入1,否則0 • 是否人工解除代表觸摸是否=1

More Related