lightblue使用教程_使用LightBlue Bean和IFTTT自动化LIFX灯
lightblue使用教程
LightBlue Bean是一款小型低功耗藍牙Arduino微控制器,具有內置3軸加速度計和溫度傳感器。 通過藍牙連接而不是Wi-Fi向對象添加連接是非常有趣的方法。 它具有像典型的Arduino一樣的數字和模擬引腳,因此您可以通過在設置中添加新元素來擴展其功能。
為了添加新元素,需要一點焊接。 對于本文,我想要一個無焊點的演示,任何擁有LightBlue Bean的人都可以遵循,因此我們將專注于內置加速度計。 幾個月前,我在SitePoint上整理了一個IFTTT演示, 當我將Jawbone UP24設置為睡眠模式時 ,該演示會自動關閉LIFX燈 。 這是一個不錯的選擇,但我仍然需要每天晚上拿出我的智能手機來打開燈。 我更喜歡自動的東西,因此決定嘗試一些技術實驗,以方便的方式打開燈。 在本文中,我將介紹我的第一個原型-我將使用LightBlue Bean檢測我的門的移動并根據我的門是打開還是關閉來打開或關閉燈。
對于那些喜歡LightBlue Bean的人來說,在Kickstarter上有一個更新版本的LightBlue Bean,現在叫做LightBlue Bean + ,看起來很漂亮! 它具有可充電電池,無焊連接器和許多其他有用的功能。 僅剩幾天時間可以保證您的承諾!
這將如何工作
我們的演示將像這樣工作:
稍后可以在我們的節點服務器中包含其他規則,以確保代碼也僅在一天的特定時間運行(以避免在真正不需要的時候亮燈)。 甚至更好–附加一個光電電阻器以自動檢測是否需要照明!
設置您的LightBlue Bean
如果您不熟悉LightBlue Bean,則需要在Windows 8.1或Mac計算機上同時安裝最新的Arduino軟件和Bean Loader軟件(顯然,Bean Loader軟件在較舊的Windows PC上不起作用)。 在LightBlue Bean網站上,將LightBlue Bean連接到Mac或PC的指南非常詳盡:
- Mac OSX入門
- Windows 8.1入門
該演示已經在Mac OSX上進行了設置,但理論上也應該在Windows上也可以運行。
本文中的步驟將假定您熟悉將草圖放到LightBlue Bean上的基礎知識,如果沒有,請首先通過上面操作系統的“入門”鏈接運行。
我們的Arduino素描代碼
GitHub上提供了所有代碼,供您使用和適應您選擇的任何目的!
我們的Arduino草圖包含門后注視的大部分大腦,看起來像這樣:
int minXVal = 0; int maxXVal = 0; int minYVal = 0; int maxYVal = 0; int minZVal = 0; int maxZVal = 0; int movement = 15; bool ready = false;void setup() {Serial.begin(); }void loop() {AccelerationReading acceleration = Bean.getAcceleration();if (!ready) {for (int i = 0; i maxXVal) {maxXVal = acceleration.xAxis;} else if (acceleration.xAxis maxYVal) {maxYVal = acceleration.yAxis;} else if (acceleration.yAxis maxZVal) {maxZVal = acceleration.zAxis;} else if (acceleration.zAxis maxZVal + movement) {String stringToPrint = "OPEN";Serial.println(stringToPrint);}}Bean.sleep(1000); }我們的草圖代碼說明
首先,您將看到一系列名為minXVal , maxXVal , minYVal , maxYVal , minZVal和maxZVal 。 這些跟蹤我們的LightBlue Bean的初始加速度計讀數。 在我的演示代碼中,我們僅真正使用z值,但是我將其他值留在了這里,因為您可能需要使用它們的值進行自己的實現(例如,如果將Bean放在門上的其他方向,或者另一扇門,例如推拉門)。 加速度計跟蹤Bean兩側的重力。 我們只想知道這些力的變化,因此我們需要知道當Bean固定在我們敞開的門上時,最初作用在Bean上的力的范圍。 這是我們存儲這些值的地方:
int minXVal = 0; int maxXVal = 0; int minYVal = 0; int maxYVal = 0; int minZVal = 0; int maxZVal = 0;接下來,我們設置一個稱為movement的變量,該變量是觸發動作之前我們將接受的移動級別。 您需要根據自己的情況進行調整(您的門在打開時可能比我的門移動得更細微)。 在示例代碼中,我們允許在觸發任何操作之前將最小值和最大值從-15移到+15。
int movement = 15;我們將需要時間來運行最小和最大值的初始測試,因此我們使用ready變量告訴循環是否準備好開始觀察最小和最大范圍內的門移動:
bool ready = false;在我們的setup() Arduino函數中,我們將串行連接設置為在Arduino準備就緒時開始運行:
void setup() {Serial.begin(); }在我們的循環中,我們對Bean中的加速度計值進行了所有觀察。 所有這些都可以通過在loop()函數開始時設置的acceleration變量來讀取:
void loop() {AccelerationReading acceleration = Bean.getAcceleration();// Our accelerometer tests }我們的第一個加速度計讀數將是實現最小值和最大值的讀數。 當ready最初為false時,將運行這些命令。 讀取初始讀數100次,每10毫秒一次,應該準備好最小值和最大值,大約一秒鐘。 一旦通過此循環,我們將ready設置為true,以便可以進入下一階段。 但是,我們在那里領先一步,首先我們將介紹本循環中的內容。
if (!ready) {for (int i = 0; i Within each 10 millisecond reading, we read in each axis' accelerometer value viaacceleration.xAxis , acceleration.yAxis and acceleration.zAxis . We compare each to the current max and min values we have stored for each axis and if it is greater than or less than the respective value, we update it to the new minimum or maximum:[code language="c"] if (acceleration.xAxis > maxXVal) {maxXVal = acceleration.xAxis; } else if (acceleration.xAxis The next phase is the one in which we watch for movement that occurs outside of the min/max values that is greater than our movement variable.For the door movement, I only needed to test the z values as that was the axis which changed most when my door swung open and closed. If they were less than the minimum resting value, then my door was being closed and if they were greater than the maximum resting value, the door was being opened. This may be different for your if your LightBlue Bean is placed differently on your door. Experiment and see what works for you!
For each, we send either "OPEN" or "CLOSED" over the software serial port via Serial.println(stringToPrint) .[code language="c"] else {if (acceleration.zAxis maxZVal + movement) {String stringToPrint = "OPEN";Serial.println(stringToPrint);} }
裝豆
在將該代碼粘貼到Bean之前,請以您喜歡的方式將LightBlue Bean粘貼到您的門上。 我將Blu Tack用作臨時工具,但Bean看起來足夠輕,可以完美地粘在它上面。 對于我的示例代碼,我像這樣附加了LightBlue Bean:
免費學習PHP!
全面介紹PHP和MySQL,從而實現服務器端編程的飛躍。
原價$ 11.95 您的完全免費
設置LIFX和IFTTT
為了能夠告訴我們的LIFX燈泡打開和關閉,我們將設置一個IFTTT規則來執行此操作。 我設置了一些食譜,可以在門關上時打開燈,如果我再次打開門離開房間,則可以關閉燈。
我假設讀者了解本文的IFTTT基礎知識。 如果沒有,請快速閱讀我以前的文章“ 使用IFTTT將LIFX燈泡連接到IoT” 。
我們創建的兩個配方將使用Maker通道作為觸發通道,并使用事件名稱“ bean_door_closed”(打開燈)和“ bean_door_opened”(關閉燈)。 動作通道為LIFX,動作為“打開燈”或“關閉燈”。 完成后,它們應如下所示:
我們的節點服務器代碼說明
節點服務器的代碼如下所示:
var port = process.env.PORT || 5000,SerialPort = require("serialport").SerialPort,serialPort = new SerialPort("/dev/cu.LightBlue-Bean", {baudrate: 57600}),request = require('request');serialPort.on("open", function () {console.log("Connected to LightBlue Bean serial port");serialPort.on("data", function(data) {console.log("Data: " + data);data = data + "";if (data == "CLOSED") {request.post({url: "http://maker.ifttt.com/trigger/bean_door_closed/with/key/YOURKEYHERE"}, function(error, response, body) {console.log(body);if (error) console.log("Error was ", error);});} else if (data == "OPEN") {request.post({url: "http://maker.ifttt.com/trigger/bean_door_open/with/key/YOURKEYHERE"}, function(error, response, body) {console.log(body);if (error) console.log("Error was ", error);});}}); });服務器的啟動通過node-serialport模塊設置了我們的串行端口功能,將其設置為以57600波特觀看。 我們還定義了我們的請求模塊,該模塊將對IFTTT進行HTTP調用。
var SerialPort = require("serialport").SerialPort,serialPort = new SerialPort("/dev/cu.LightBlue-Bean", {baudrate: 57600}),request = require('request');然后,我們打開與串行端口的連接,并開始查看串行端口中是否有任何消息。 它注銷接收到的所有消息(當門打開和關閉時,我們應該看到“數據:打開”和“數據:關閉”日志的列表)。
serialPort.on("open", function () {console.log("Connected to LightBlue Bean serial port");serialPort.on("data", function(data) {console.log("Data: " + data);data = data + "";// Responding to "OPEN" and "CLOSED"} }如果我們收到的數據是字符串"CLOSED" ,我們向http://maker.ifttt.com/trigger/bean_door_closed/with/key/YOURKEYHERE發出HTTP請求(用密鑰IFTTT替換YOURKEYHERE會在Maker頻道上為您提供頁 )。 成功完成后,我們將記錄來自IFTTT的響應,該響應應類似于"Congratulations! You've fired the bean_door_closed event" 。
我們只對URL中的操作從bean_door_closed到bean_door_open進行"OPEN"操作。
if (data == "CLOSED") {request.post({url: "http://maker.ifttt.com/trigger/bean_door_closed/with/key/YOURKEYHERE"}, function(error, response, body) {console.log(body);if (error) console.log("Error was ", error);}); } else if (data == "OPEN") {// Same pattern! }運行一切
如果尚未安裝,請按照前面所述將Bean粘貼到門上,然后使用草圖對LightBlue Bean進行編程。
然后,右鍵單擊Bean Loader中的Bean,然后選擇“用于虛擬串行”。 這將為從LightBlue Bean傳輸來的所有消息設置虛擬串行端口。
通過運行以下命令為節點服務器安裝所有依賴項:
npm install然后運行服務器:
node index.js(如果以上任何一個命令對您來說看起來都是胡言亂語,我建議您先嘗試一下Node上的內容,然后再嘗試!)
打開和關閉那扇門! 您應該看到日志顯示了根據門的擺動對您的IFTTT服務器的呼叫。 我發現需要對movement靈敏度進行一些調整才能使其正常工作,因此您可能需要對其進行一些調整。
如果您將LightBlue Bean放在門的另一側,我認為您可能需要在Arduino草圖中切換“ CLOSED”和“ OPEN”的輸出,因為Bean朝向相反的方向。
結論
這就是如何使用LightBlue Bean,IFTTT,LIFX和Node神奇地關閉和打開燈,具體取決于門是打開還是關閉! 您可以修改此代碼以代替檢測是否拾起或移動了一個對象(想象一下,有人試圖打開盒子或抽屜時,向您的帳戶發送一條推文)。 LightBlue Bean足夠小,以至于不會礙事并且很容易附著在東西上!
如果您確實使用此代碼創建了一個天才的安全系統,以保護您的愛糖同事免于食用您的甜食(或與筆記本電腦同樣重要的東西!),或其他我沒想到的有趣用途–請不要使用請在評論中注明或在Twitter( @thatpatrickguy )上與我聯系,我很想聽聽您的建造!
我還在我的新隨附網站DevDiner.com上整理了一組與LightBlue Bean開發相關的精選鏈接 。 因此,如果您確實在網上找到了有關此主題的鏈接,并且覺得非常有用,請與我聯系,以便將其添加到指南中!
翻譯自: https://www.sitepoint.com/automating-lifx-lights-with-the-lightblue-bean-and-ifttt/
lightblue使用教程
總結
以上是生活随笔為你收集整理的lightblue使用教程_使用LightBlue Bean和IFTTT自动化LIFX灯的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 看雪KSSD-windows驱动
- 下一篇: Win8.1激活方法