發表文章

目前顯示的是有「物聯網(IoT)」標籤的文章

【物聯網相關】利用單晶片與虛擬主機發送email~

圖片
Document 網路上看到了一篇文章,內容說明了如何經由email傳送感測器獲得的資料到你的手機上。 我認為如果你是對物務聯網(IoT)有興趣的人,這個技巧是必須要學習的。因為物聯網的目的就是要讓各種東西都可以相互連結並且遠端控制,所以我認為完成型態的物聯網應該是要與網際網路做整合的。 而這篇文章提供的方式簡單而且不需要太多設備就可以完成,是非常適合入門的第一步~ 在開始之前,先要說明一下整個系統的架構 基本上要讓手機收到email 要先有一個可以發送email的系統,而這裡就使用網路上提供的免費web hosting(虛擬主機), 有了發送email的地方後,需要有可以上網的工具才有辦法把資料傳到這個地方。這時候可以使用ESP8266或是NodeMCU等等的單晶片將資料連上網去傳送。 如此一來,我們就可以使用各種不同的感測器去擷取資料,然後把擷取到的資料透過單晶片與虛擬主機傳送出去。 本篇我們會使用的工具是NodeMCU與BME280(大氣壓力感測器) 先將原文網址付上,這篇基本上就是解說原文的內容 https://randomnerdtutorials.com/esp32-esp8266-send-email-notification/ 整體架構說明: 上面的圖顯示了這個專案的整體架構,將BME280接收到的資料(大氣壓力,溫度與濕度)經由NodeMCU連接上wifi傳送到網路上的虛擬主機再由虛擬主機將數據發email到個人的信箱 準備工具: 單晶片NodeMCU 大氣壓力感測器BME280 (購買3.3V的) 申請虛擬主機:這篇是使用【000webhost】 若有自己習慣的也可以使用 可以連上網際網路的wifi,並且知道帳號與密碼 設定虛擬主機: 原文中有推薦2個虛擬主機: Bluehost:原文推薦使用的虛擬主機,使用起來照著原文的步驟操作就好。但是似乎一定要收費 Digital Ocean:Linux系統,操作上要使用指令來操作,建議高階使用者使用 原文的步驟畫面是擷取第一個Bluehost的畫面去做的,所以如果想照著原文一步一步去做,...

【單晶片】連結wifi的好用單晶片~

Document 如果對單晶片沒有概念的話,可以參考下面的文章: https://fastquicknotes.blogspot.com/2019/10/mcu.html 介紹一些物聯網開發上好用的單晶片:ESP8266、ESP32、NodeMCU 這幾個單晶片都可以讓你非常方便的跟WIFI做連結,讓你的硬體連上網際網路。 ESP8266 是一款具有TCP/IP協定的單晶片,所以在無線控制領域相當受歡迎。ESP8266這個單晶片是由上海的樂鑫信息科技所開發的,而後來AI-thinker又使用了ESP8266去製作出其他不同型號的單晶片,所以現在使用的型號會是ESP-**這類的型號。 而型號目前有很多種,ESP01,ESP07,ESP12...等等(同理,ESP32這個單晶片也有各種型號)。當然這些型號的晶片有不同的功用,詳細功能可以在下列網站中查詢。 Ai-thinker官網: https://www.ai-thinker.com/product/esp8266 ESP8266開源社區: https://www.esp8266.com/ ESP8266這類的單晶片對於物聯網開發上是相當有用的,利用WIFI就可以讓使用者實現用網路做遠端控制,減低了空間上的限制,讓物聯網的應用可以更全面。 而除了AI-thinker開發的各種單晶片之外,ESP8266開源社區也有開發出一些功能強大的單晶片。NodeMCU就是一款功能強大好用的單晶片。內建WIFI模組,操作起來就像arduino一樣有許多的輸出與輸入腳位。詳細腳位說明不再這裡詳細介紹,有時間另外說明吧。 這裡主要是想說明在物聯網開發的工具中,我們會常常需要用到可以連接上無線網路的模組,好讓我們可以藉由網際網路來控制設備或是傳送資料等等,這時候ESP8266或是NodeMCU這樣的單晶片就是非常好用的工具。 單晶片腳位說明: ESP32 https://randomnerdtutorials.com/esp32-pinout-reference-gpios/ ...

【 Arduino相關】 好用的APP線上開發工具~

圖片
Document 這裡介紹一個好用的APP開發工具。我想大家在開發物聯網相關硬體或軟體的時候都會遇到一個挑戰,那就是開發APP... 這對開發物連網的人我想未必是熟悉的,一來APP這個近幾年來才興起的東西比較沒有參考資料,另一方面是一般熟悉單晶片開發的工程師比較注重於[功能]上的開發,對於APP這種需要考慮到使用者介面的設計模式較不熟悉。但是對於物聯網這件事情來說,移動裝置上的APP是相當重要的,畢竟物聯網的精神就是可以把各個東西連上網,並且可以讓人控制,而控制的介面當然是要讓使用者可以隨時隨地控制物品,這樣的物聯網才是有意義的。 就像之前提到的,開發APP可能讓每個人都很頭痛, 因此為了讓開發者可以輕鬆開發手機使用的APP, 知名的Google公司開發了一套非常直觀的線上開發系統名稱叫做AI2。 這套線上開發軟體不需要寫程式,只需要手動將需要的物件移動到想要的位置,然後手動將我們需要的程式[流程]手動安排好就可以簡單設計好一款APP並且在手機上使用。 這篇對AI2會先做一個最簡單的介紹。因為主要是讓各位可以先快速使用與迅速練習如何製作APP, 所以很多細節本篇都會先跳過,待續有空時再補上 登入AI2 AI2的官網 www.appinventor.mit.edu 登入上方官網後,要開始開發App的第一步就是點選左上角的【Create Apps!】。點選後會看到登入的畫面,基本上你將你的gmail信箱登入後,按照步驟點下去就可以開始使用。登入後會看到像是圖片中的畫面,如果需要中文的朋友,可以在右上角選擇【繁體中文】 介面 上方可以看到最上面有幾個選項:專案、連線、打包......我的專案... 下面一排還有:新增專案、刪除專案、發布作品到Gallery 我們這邊只說明幾個功能: 打包:將製作完成的APP打包好後傳到手機或現在到電腦,就是像是把商品包裝好要賣出去的感覺 我的專案:會列出你現有的專案有哪些。 新增專案:要設計新專案時就按這個按鈕,就會開始給一個空白的專案,我們就可以開始開發想要的功能。 刪除專案:如果要把專案刪除,就使用這個紐把專案刪掉。 按下新增專案...

【單晶片】單晶片/微控制器/MCU 是什麼?

Document 單晶片也稱做微控制器(MicroController Unit/MCU),這個聽起來很厲害的東西我想很多人都有聽過,但是應該也很多人不知道這是什麼。其實這個東西在生活上也真的們什麼機會用到,當然如果你是電學相關科系的人,那你可能不想再去碰這個東西了XD 微控制器有個微字其實大家應該就可以嗅出一些端倪,簡單的講,他就是把一個應該很大的東西變小,然後可以達到某種程度的功能。 至於是怎麼樣的東西跟功能呢? 先來說說電腦是什麼樣的結構? 一台電腦的最基本組成可以分成四個主要單元:CPU,輸入單元,輸出單元,記憶體。 這幾個主要的結構可以組合出一台電腦。以下針對這些單元稍做說明: CPU:電腦的核心,負責處理電腦的工作與運算。換句話說,CPU會執行程式與加,減,乘,除與比較等等的運算。可說是電腦的主體.. 輸入單元(Input):顧名思義是要輸入資料的單元。像是鍵盤滑鼠這些東西 輸出單元(Output):有輸入當然也有輸出。輸出資料的地方我們就稱作輸出單元,就像是像螢幕這類的設備。 記憶體(RAM):存放各種執行中的程式與資料,讓CPU可以在此區工作。所以說是一個工作區的概念,當某個程式要執行的時候,CPU會把資料放到記憶體區,然後可以直接寫入或讀出資料。 (記憶種類很多,一般沒特別說明的話說的都是隨機存取記憶體RAM。其他種類我們暫時先不談) 為何要介紹電腦有哪些單元呢? 因為微控制器就是將上述幾個單元做成一個很小片的晶片讓人可以簡單的使用,把這幾個單元縮小成一個小小的晶片,對於設計電路與功能開發來說可說是省略了巨大的時間與空間成本。當然,能把東西縮得這麼小,就表示他在功能上一定不可能會像一整台電腦一樣可以處理很多事情,或是性能與運算速度會一樣強大。微處理器在設計上會是具有特定的功能的。就像ESP8266這個型號的晶片就是具有wifi功能的微處理器,8051就是為了自動控制而設計的單晶片,Arduinoru則是以微控制器作為核心製作出來的開發工具,所以也很多人把他歸類為MCU的一種。 下面網站有列出一些常見的MCU,大家可以參考看看。 The list of common MCU 微控制器的英文是Micro...

【Arduino 指令】: Arduino常用指令_02

Document 這篇也是介紹一些基本且常常要使用的指令,基本上這些指令也可以說是一定會用到的基本指令。請各位要熟記下來~ Serial.begin() Serial.begin(鮑率); 這個指令用在要開啟序列阜傳送資料時使用。 簡單說,假設現在Arduino要傳送資料給電腦,那就要經由電腦的序列阜傳送,而這個指令就是要把序列阜打開,並且設定用什麼鮑率來做傳送。 (所設定的鮑率要與軟體上選擇的鮑率一樣,例如都為9600會是11520等等) Serial.print() Serial.print(); 這個指令用在要經由序列阜輸出資料,例如可以用這個指令輸出文字在銀幕上。就像在程式中打入Serial.print("Arduino is ready");然後開啟IDE右上角的序列阜監控視窗後,就可以看到Arduino is ready的文字出現在上面。 另外,這個指令不只可以輸出文字,也可以輸出數字跟變數。而且,還可以選擇數字的進位方式(二進位,八進位,十進位,十六進位) 只要在打指令時在後面加上逗號與進位方式就可以。 Serial.print(9, BIN); 就會得到用二進位輸出的數字9,也就是1001 (BIN 代表二進位,OCT代表八進位,DEC代表十進位,HEX代表十六進位) Serial.println() Serial.println(); 這個指令基本上跟上個指令一樣,差別在於使用Serial.println()輸出的資料會單獨佔據一行,然後自動換行。假設程式中打入Serial.println("Arduino"); Serial.println("is"); Serial.println("ready");輸出的結果就會是 Arduino is ready Serial.available() Serial.available(); 這個指令是擷取序列阜收到的資料(字元/byte)。當資訊輸入到序列阜後,要先擷取到這些資料我們才會用另外一個指令【Serial.read()】把這個資料讀出來使用。因此這個指令通常會搭配【if()】跟【Seria...

【 Arduino 指令】: Arduino常用指令_01

圖片
Document 以下先介紹幾個Arduino最基本的使用指令,這些指令是在開發功能時會常常用到的,學會這先指令就像是學英文要先學會單字才能會句子的感覺。所以一定要記熟。 當然說明指令之前,先了解Arduino程式的基本結構, 先了解程式是依照怎樣的邏輯去跑,寫起來也才知道要如何設計 #程式架構 打開Arduino的IDE會先看到他給了你2個部分分別是1.void setup() 2.void loop(){} 看到的畫面如下: void setup(){} 寫在void setup裡面的東西基本上是要做一次性的設定用的。例如要設定某一個腳位要做為輸出或是輸入,或是設定某個腳位的初始直為LOW等等,這些動作在Arduino開機的時候我們只需要他做一次設定,當設定好後就可以依照這樣的環境設定去執行我們要他去跑的程式(而這些程式就是在void loop裡面的程式)。 void loop(){} 寫在裡面的程式是要Arduino一直去執行的,基本上這邊放的會是你真正要執行的功能,所以你會讓Arduino一直去執行。 簡單說,如果你要做出一個功能是按一個鈕可以讓LED閃5秒,這時按鈕後讓LED閃爍這件事情因為需要被一直重複執行(每次按鈕都要閃LED),所以會寫在void loop裡,而設定哪一個腳位要輸出電壓給LED這樣的設定就只需要一開始設定好就可以,所以會寫在void setup #基本指令 pinMode() pinMode(腳位,INPUT/OUTPUT); 這個指令就是在告訴Arduino某一個腳位要做輸出或是輸入使用。例如你要藉由D3這個腳位提供5V特的電壓給LED讓LED發光,那麼你就要告訴Arduino說D3這個腳位是要輸出5V的電壓給某個元件。反之,如果某個腳位是要讀取某個訊號,那你也要告訴他某個腳位是要接受訊號用的。所以這個指令會有2個參數,一個參數就是要告訴Arduino我現在要使用哪個腳位,另一個參數就是說明這個腳位要做輸出或是輸入的功能。 digitalWrite() digitalWrite(腳位,HIGH/LOW); 當我們設定好哪一隻腳要做輸出或輸入後,我們必須告訴Arduino什麼時候要去執行輸...

【Arduino相關】 Arduino基礎介紹~ 腳位,PWM輸出,IDE...

圖片
Document Arduino 是一個很小很簡單的輸入輸出控制單元,他可以接受數位訊號和類比訊也可以輸出數位訊號。 簡單來說,你可以利用Arduino感測數位或類比訊號(例如溫度等等),然後輸出5V的類比訊號給電子元件(例如LED等等)去達到控制某個元件或開關等等。 再搭配各種開發模組,Arduino可以搭配出許多有趣的功能。 Arduino官方網站: https://www.arduino.cc/ Arduino的板子型號 Arduino的開發板型號很多,上網一查可以看到Uno,Yun,Nano....等等。這些板子都有不同的特性,開發者會依照不同情況與需求去選擇合適的板子,本篇介紹會以型號是Uno的板子。Uno在義大利文裡面是1的意思,因此顧名思義他是一個最原型最基礎的板子,因此搞懂Uno其他特性要理解也不會太難。 注意事項 使用Arduino前,幾件事情是要先注意 腳位不可短路(任兩個pin角不要相接) 電源腳不可接反(會燒掉IC) Pin腳位輸出電流小於20mA 總電流小於200mA Arduino 輸出輸入腳位 這裡先簡單介紹常用腳位 D0~D13 為數位輸出腳位,可以輸出5V的訊號。 (3,5,6,9,10,11此6個腳位可做PWM輸出) A0~A5 為類比輸入腳位,可以接收類比訊號。 (此5個腳位亦可做數位輸出) GND:接地 5V:輸出5V 3.3V:輸出3.3V VIN:可藉由這個腳位提供電源給Arduino PWM輸出 什麼叫做PWM輸出? 簡單的說就是當要使用數位訊號輸出類比訊號時的一種輸出方式。因為現實中不一定只會用到0V與5V兩種電壓輸出,我們常常也會使用連續的電壓做輸出去控至元件。所以說 Arduino的A0-A5腳位獲取類比訊號後,如果我們需要依照這個類比訊號的強弱去控制元件,就會用PWM的方式用數位訊號模擬出類比訊號再藉由D3,D5,D6,D9,D10,D11這6個腳位輸出模擬出來的訊號。例如用0到5V的電壓控制LED的強到弱(0V是關,5V是全亮 0~5V之間就是依照比例產生的亮度,就像2.5是半亮) 另外,說明一下,Arduino的A0-A5輸入類比訊號會使用1...