山姆的編程實作分享。。。

Sam Blog, Sam Sharing, Sam Studio

2020年4月24日

[Arduino][ESP8266] WiFi Switch 的實作


[Arduino][ESP8266]

WiFi Switch 的實作

實作準備

整個實作可以切成以下4部分:

  1. WiFi Switch 的硬體線路:也就ESP8266 以及 Relay 的接線圖。

  2. ESP8266 的程式碼:用來接收Cloud Server傳送來的指令,進而控制家中的電器,如燈泡。

  3. Cloud Server:用來接收手機傳來的指令,然後將指令傳送到你家中的ESP8266 / WiFi Switch。

  4. App:用來連接Blynk Cloud Server,然後控制你家中WiFi Switch以及電器的App。 

WiFi Switch 的硬體線路

我們先從 WiFi Switch 硬體線路這個點開始解說,然後再延伸到整個系統,這樣會比較有感;

實作中我採用的是ESP8266控制板,且選用GPIO13 (D7) ,當作Relay 的控制訊號,

來開關Relay負載端的輸出;Relay的DC+/- ,我依照我手中Relay 的規格,連接DC 5V,

至於Relay負載端的輸出,則是接110 伏特以及燈泡;實際Relay負載端的輸出線路,

大家請依照你手上Relay的規格連接負載,切勿直接套用範例線路。


ESP8266 的程式碼

Step1:安裝 Blynk Library

有了WiFi Switch硬體線路,接下來,當然就是控制WiFi Switch硬體線路的程式碼;

程式碼因為要配合Blynk Cloud Server,所以必須要包含 Blynk Library,也就是說,

要先安裝 Blynk Library for Arduino IDE

How to install Blynk Library for Arduino IDE

上面連接提供了3種方式來安裝 Blynk Library,我個人建議使用第3種-“手動安裝”,

這樣你會更清楚知道 Arduino IDE 以及Blynk Library的檔案結構;安裝完Blynk Library後,

在Arduino IDE安裝路徑下,會分別在\libraries以及 \tools目錄下,新增以下4個資料夾:

/libraries/Blynk
/libraries/BlynkESP8266_Lib
/tools/BlynkUpdater
/tools/BlynkUsbScript

Step2:新增 WiFi Switch 專案

接著就是開啟Arduino IDE,然後按照下面圖示,

選取 ESP8266_Standalone範例來當作 WiFi Switch 的專案;

以下就是ESP8266_Standalone.ino 原始程式碼,這原始程式碼還也3處必須修改,

才能和Blynk Cloud Server連接上。

  1. #define BLYNK_PRINT Serial  

  2.   

  3. #include <ESP8266WiFi.h>  

  4. #include <BlynkSimpleEsp8266.h>  

  5.   

  6. // You should get Auth Token in the Blynk App.  

  7. // Go to the Project Settings (nut icon).  

  8. char auth[] = "YourAuthToken";  

  9.   

  10. // Your WiFi credentials.  

  11. // Set password to "" for open networks.  

  12. char ssid[] = "YourNetworkName";  

  13. char pass[] = "YourPassword";  

  14.   

  15. void setup()  

  16. {  

  17.   // Debug console  

  18.   Serial.begin(9600);  

  19.   

  20.   Blynk.begin(auth, ssid, pass);  

  21. }  

  22.   

  23. void loop()  

  24. {  

  25.   Blynk.run();  

  26. }  

Step3:修改程式碼以連接Blynk Cloud Server

首先是 行12以及行13,請修改成為你要連接WiFi AP的ID以及密碼,請注意這WiFi AP 必須能連到外網,

這樣才能連上 Blynk Cloud Server。

再來就是 行8的 auth[],它應該是呈現以下型式:

char auth[] = "53e4da8793764b6197fc44a673ce4e21";

而這串Auth Token,會在你使用Blynk App,來建立一個新專案時被產生,

Blynk 會把這個Token寄到你註冊郵件信箱,目前我們就留空,收到Token,記得要回來改!

做到這個步驟,你就擁有控制WiFi Switch 的ESP8266的程式碼了。

到這個階段,你若有仔細觀看ESP8266_Standalone.ino 原始程式碼,你會發覺,

這原始程式碼並沒有設定以及控制GPIO13 (D7)相關的程式碼,為什麼?這樣Relay 會做動?

告訴你,會的!

至於為何,等我們利用Blynk App 建立專案時,你就會知道原因了😊

Cloud Sever

這塊,Blynk 處理掉了,我們碰不到;

但是 Blynk 有釋出原始碼,放在GitHub,有興趣了解的人,可以參考以下連結。

(https://github.com/blynkkk/blynk-server )

Blynk App

Step1:安裝 Blynk App

Android 手機Blynk - IoT for Arduino, ESP8266/32, Raspberry Pi

iOS 手機 Blynk - IoT for Arduino, ESP32, ESP8266, Raspberry Pi, NodeMCU

Step2:透過Blynk App建立WiFi Switch 控制頁面


打開Blynk ,然後參照以下畫面建立控制頁面




結論

利用Blynk的資源完成WiFi Switch 的IoT實作有何感想?

或實作過程有遇到任何問題,都歡迎留言給我喔!


利用Blynk實現了IoT Home Assistant,我個人有以下幾點感想:

優點:

  1. 省去了手機App 的開發,你只要動動手指頭,把Widget設定好,就可以有美美的控制畫面。

  2. 省去架設Server時間以及費用。

缺點:

  1. 天下沒有白吃的午餐,Blynk這樣類似的應用,基本上都有流量計費的,做實驗還可以,想商業化或長期使用,必須精算一下。

  2. Blynk Library這黑盒子,我個人不喜歡,Blynk 掌控太多了;GPIO的控制,我竟然不必做…


想實現IoT,只能依靠3rd Party App? 

第19集的影片,讓我來介紹另一種,掌控在我們自己手裡的做法吧,敬請期待!


2020年4月14日

[Arduino][ESP8266] WiFi Switch


[Arduino][ESP8266]

WiFi Switch

What is WiFi-Switch

在這裡我將針對以下3點來做說明:

第一點:什麼是 WiFi Switch,WiFi Switch 它的功能為何?

第二點: WiFi Switch 是否屬於目前討論度最高的 IoT (Internet of Thing)領域 ?

最後一點:我將會說明WiFi Switch的主要組成元件。


首先讓我用以下的圖示來說明什麼是 “WiFi Switch”

簡單的說,就是我們可以透過手機的WiFi , 連結到家裡的AP,再和WiFi Switch做溝通,進而去控制連結在WiFi Switch上電器, 例如燈泡,來做到WiFi無線遙控的功能。

更深究探討,上圖解說的場景,只是一個 WiFi Home 的概念而已,這樣的 WiFi Switch 還稱不上是 IoT ,我們必須再把Internet導入,這才算是真正的IoT。

在導入Internet 後,若你家的網路有申請固定IP 的話 ,那WiFi Switch 的控制路徑會是 :手機 ->internet ->WiFi Switch。

至於家裡網路沒有固定IP 的人, 這時候就可以透過第3方 (3rd party) 提供的雲端伺服器來做中介,例如,Blynk,進而達到外出後還可以遠端控制你家中的WiFi Switch以及連結在WiFi Switch上的電器,這樣的控制路徑就變成是 手機 ->internet ->3rd Party Cloud Server ->WiFi Switch。

What is the inside of WiFi-Switch

WiFi Switch 它的主要組成元件有兩個:

第一個主要元件就是一塊有WiFi功能控制板,例如像ESP32,ESP8266 或 UNO + WiFi Module

第二個主要元件就是Relay,中文稱做繼電器。

在這裡我就不再對ESP32, ESP8266或控制板多做說明,而Relay則是在我的文章中首次出現,所以就容我,簡單說明Relay工作原理,再進入實作部分。

這個圖示是從維基百科取得的,他清楚的說明"傳統"繼電器的工作原理。

首先,在左半部我們可以看到直流電源先是連接一個Switch,再連接到線圈磁閥;而當Switch被按下時,線圈磁閥也就通電而產生磁力,把Anker往下吸;這個下吸的動作,就讓右半部迴路連接起來了,而連接在線路上的燈泡或電器也就過電,作動起來了;以上就是繼電器的工作原理。

了解繼電器的工作原理後,接著我們來看"市面上"繼電器元件。

這時你應該會發覺"市面上"繼電器元件的接點好像比"傳統"繼電器的接點還多,是的!市面上的繼電器除了提供"Normal Open "的接點外,還提供了"Normal Close"的接點。

WiFi Switch 教學影片


下一篇,就來就讓我來說明WiFi-Switch的實際接線以及怎麼利用3rd Party App 來遠端遙控你家中的電器吧!


2020年4月12日

2020年4月11日

[咖啡烘焙] 藍眼曼特寧


這是從印尼藍眼曼特寧挑出的瑕疵豆,200克挑出14.5克,真的有點多 !
這還是在烘豆機熱機的同時挑出來的 (機子已經達250度,熱機完成了,等待下豆了),
若改為事先先挑好,相信超20克~

PS: 賣家在產品說明就有說 "曼特寧" 瑕疵豆多,但還是比我預計的還要多;
市面上烘培好的曼特寧,大都是中深焙以上,是否和瑕疵豆多有關 (為了掩飾瑕疵豆) ???

2020年4月6日

[DART] Google 為何推出 Dart ?


Google 為何推出 Dart ?

官方說法

  • JavaScript 適合小型的script,當script 愈加龐大後,維護一個JavaScript Web app 就愈加困難了。

  • JavaScript 有時代的包袱,無法與時俱進,很多新的創意,或已存在像Python  好的做法都無法在JavaScript被採用。

以上這兩點我都同意,但以上兩點都不是壓倒駱駝的最後一根稻草,我個人認為還有一個不可說的秘密。

我先說一個情境,有工作經驗的你,相信對這情境會很有感;就是當一個點子出現時,而這點子不是對錯問題,而是路線問題時,最後這點子的執行往往落在上面的主事者,而非全員無異議通過。

而現今火紅的Android是Google 培養出的金雞母,但他的核心的程式語言就是Java,而Java 又掌控別人手裡 (Oracle),也就說Java核心的改動,不是Google 說的算,無疑的就掉入上面我說的情境了,你說Google 會不會想擺脫 Java 這個金箍咒 ?

而今,擁有Java 版權的 Oracle告Android 侵權的官司也還在進行式階段,換成你是Google,不會想推另一個自己孵出的程式語言 (DART) ?

有空到DART 官網瞧瞧下面這圖的詳細的的說明,你就會發現DART就是生來取代Java的!



2020年4月5日

[Python] Python Internal


Python Internal

有需要了解Python 內部是如何運作 ?

從組合語言、C語言一路學習上來,學習新的程式語言,總是會先探究他的內部,雖然不必深入了解他內部的運作,但是清楚的知道他的優劣運作流程以及他已經為我們做哪些,個人覺得是必要的。

Python Benefit

  1. 擁有其他眾多程式語言的優點,例如 C++、 Java …

  2. OOP (Object Oriented Programming) 程式語言, like C++

  3. 直譯式 (Interpreted) 程式語言, like Java

  4. 可攜性( Portability of source code and VM), Like Java

  5.  記憶體管理 (memory management) (註1)

Python Internal

這篇Design of the CPython Compiler 可以清楚知道Python 是如何將我們程式碼轉換成CPU可執行的程式碼了。

以下就是文中列出Python 2.5 轉換的步驟:

  1. Parse source code into a parse tree (Parser/pgen.c)

  2. Transform parse tree into an Abstract Syntax Tree (Python/ast.c)

  3. Transform AST into a Control Flow Graph (Python/compile.c)

  4. Emit bytecode based on the Control Flow Graph (Python/compile.c)


更確切說是,轉換成bytecode 再交給(emit) VM (Virtual Machine)執行。

Python 不像C語言,會直接轉成CPU 看的懂的機器語言 (machine language),而是像Java language 會有一個 VM來執行bytecode,

這也讓Python 具有可攜性 (Portability) 的優點;同一套程式碼只要配上相對平台的VM,就可以在不必修改程式碼的情況下,在任何平台上執行了。

整個Python 內部運作就好像下圖

Python code 經過 pgen.c、ast.c、compile.c 轉換成bytecode,emit PVM (Python Virtual Machine) 執行。


註1 :

個人認為這點是讓他火紅的重中之重,第一,不像C語言的程式設計人員,總是在為記憶體的漏洞煩惱;再者,對於剛接觸程式語言的新手,學習Python,記憶體管理已不再是必要選項;少了記憶體管理的煩惱,相對地,增加程式設計帶來的成就感,這也讓他的效率 (Performance) 的缺點被眾人給忽略了,讓坊間的教育單位一致的推薦Python 為入門的程式語言。


2020年4月3日

[Dart] 先從DartLang 開始吧 !


App 的設計工作,想說 DartLang 可以邊做邊學,直接從Flutter切入,
看來事與願違,對DartLang 的特性沒有全盤的認識,只是跟著做,
完全沒有主體意識!不知道以下這3點的原因,直接從Flutter切入,
過快了!
  • Optimized for UI
  • Productive development
  • Fast on all platforms
還是乖乖地,從 DartLang 開始吧 !




熱門文章