步驟1:您需要的內容
我用于該項目的材料是:
帶以太網屏蔽的Arduino UNO :我的是用于Arduino的Vilros以太網R3,但是以太盾或等效設備應該沒問題
一個備用的Linksys路由器 :我用DD-WRT刷新了固件(自此以后,我將不介紹該步驟在線上有許多有關如何執行此操作的教程)用作WiFi中繼器橋。在Craigslist上找到一個。它們非常便宜
iPhone :我的是7顆
5V繼電器 :我從這里訂購了我的產品。從中國到達大約需要兩個星期。但是它們足夠便宜,因此訂購一堆
3D打印盒(可選) :存放電子設備
Xcode的副本 (Apple應用程序開發軟件)
第2步:設置調試硬件
首先,讓我們設置用于調試目的的硬件。我將Arduino和以太網屏蔽以及面包板臨時安裝在一個小平臺上。如圖所示,我插入了LED和電阻。如果您需要有關如何將LED連接到Arduino的更多詳細信息,本教程可能會有所幫助。但是這些教程的數量與彩虹的顏色一樣多,因此請選擇您喜歡的。最后,我將Arduino的以太網端口連接到路由器,然后通過USB電纜將Arduino插入筆記本電腦。就是這樣。
步驟3:編寫Arduino代碼
下一步是確定Arduino將如何執行我想要它做什么。最初,當用戶的iPhone首次連接到LAN時,Arduino應該傳達門的當前狀態。然后,Arduino會從用戶的iPhone接收命令來打開/關閉門,并更新Arduino代碼中的變量來跟蹤門的狀態。
我認為最好的方法是傳遞JSON(Java腳本對象表示法)消息。我喜歡它們,因為它們具有鍵值結構以及標頭信息。事實證明,如果您下載ArduinoJSON庫,則Arduino可以支持此功能。他們有許多有關如何與該庫進行交互的示例。您需要密切注意幾個使用這些類的示例:
EthernetServer
EthernetClient
DynamicsJsonBuffer
或者您可以看一下我的代碼以了解如何使用這些類中的函數。
loop()
p》
我也盡可能地在interwebz上尋找示例代碼。一個半相關的應用程序是用于Arduino和iPhone的溫度傳感器應用程序。這是一個非常完整的示例,其中包含很多很好的解釋和可下載的代碼。
好,所以接下來讓我傷腦筋的是我將Arduino用作 server 還是 client 。似乎當用戶最初連接時Arduino應該是服務器,因為它正在為iPhone的初始門狀態提供服務。另外,當Arduino從iPhone接收命令時,我認為它應該是客戶端,因為它被動地接收數據。
事實證明,在兩種情況下,使Arduino成為服務器都是可行的。代碼的本質分解方式在主要的Arduino
SendAndReceiveJSONData()
調用中,我定義了一個名為
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/
的函數,該函數使Arduino成為服務器它會監聽所有客戶。如果找到一個,它將忽略客戶端的JSON頭信息(不重要),并嘗試解析數據。如果它找到可以解析的數據,則我們知道iPhone已向我們發送了有關門的狀態信息,Arduino會相應地更新這些變量。另一方面,如果我們找不到要解析的數據,那么我們知道這是用戶第一次連接(因此他不可能向我們發送有關門的任何信息),并且向他發送了一條JSON消息,通知他的門的當前狀態是什么。
如果我上面說的話似乎令人困惑,請告訴我,但您也可以在我的倉庫中查看代碼。
步驟4:在編寫iPhone代碼之前免責聲明
Apple 。..哦,Apple。 [提示重嘆] 。我曾經愛過蘋果。但是這個小雜物與這個討論無關。
Swift是用于在iPhone上設計應用程序的最新語言。伙計們,我真的不在乎。潮流似乎在改變,說實話,我什至不知道我在Xcode上安裝了哪個版本。此外,在查找示例/教程時,由于語言的更改速度很快,因此并非所有內容都相關。
現在,如果這還不夠糟糕,(我保證這會發生的話),我在編譯后發現了/構建我的XCode項目,使其不會在我的iPhone上加載。原因是因為我的機器很舊(2010年的MacBook Pro),所以我擁有的最高操作系統是10.11.6(El Capitan)。本質上,這意味著我無法在支持iPhone中最新iOS(11.1或11.2)的計算機上安裝最新的Xcode。該錯誤通過說出諸如“無法找到設備支持文件”之類的東西來體現。
事實證明,如果您遇到相同的問題,則可以通過修復來解決問題。將錯誤輸入Google會導致大量類似的解決方案。這是一個。結果是您需要下載最新版本的Xcode(這很重要,因此它不會自動安裝并隨后失敗),然后導航到:
PerformRestCall()
并復制所有這些您當前的Xcode版本沒有相同目錄的目錄。之后,重新啟動Xcode,并嘗試編譯等,它應該可以正常工作。
步驟5:編寫iPhone代碼
在控制版本問題的情況下,我不得不拼湊一些資源來編寫應用程序,我不想花一個月學習Swift。話雖如此,我確實發現與Chris一起合作的Code是非常好的資源和時間投入。他的教程特別出色,因為它向您展示了如何實現觸摸屏功能以及 Main.Storyboard 與實際代碼之間的交互。特別是在最近的一些教程中。因此,我真的鼓勵您在開始使用Xcoding之前先觀看它們。另外,我和其他人一樣,尋找相似的Swift實例,并嘗試向他們學習。我不是Swift專家,但我找到了我需要的東西。
該應用的背后想法是設計自定義的 Open 和 Close 觸摸按鈕您擁有的任何繪畫應用程序都可以按預期運行。當應用首次啟動時,它會使用一個名為
handleResultsOfWebCall()
的函數,該函數隨后會調用:
leftOpenImageTapped()
leftClosedImageTapped()
rightOpenImageTapped()
rightClosedImageTapped()
,該函數實際上是繁重的工作并解析來自Arduino的初始JSON數據描述了門的當前狀態。
我使用的其他功能是:
CreateJSONMessage()
,它們在被調用時會更新門的當前狀態。門,然后調用函數:
實際創建要發送到Arduino的必要JSON。
有關更多詳細信息,您可以在此處看到該項目的代碼,由于我試圖對其進行合理地注釋,因此該代碼應進行更多說明。老實說,我有點把它砍在一起,以使其能夠完成我想要的工作。
在編寫代碼之后,我將其上傳到iPhone并開始調試。
第6步:調試
編寫我的代碼并將其上傳到Arduino和iPhone上,就該進行調試了。由于我還沒有將所有東西連接到車庫,因此我想以某種方式模仿它的行為。提示LED。
我拿起了兩個紅色和兩個綠色LED的鉤子,如上圖所示。一組綠色和紅色代表左門,其余代表右門。如果任一扇門關閉,則綠燈將不停閃爍。否則,如果任何門打開,則紅燈將閃爍。我選擇了要關閉的門的初始狀態(綠色閃爍的燈),因為當我第一次將Arduino連接到開門器時,我將確保門已關閉。
看看它如何可以,您可以觀看正在播放的簡短視頻(糟糕透頂-對不起!)。瞧!到目前為止可以正常工作!
步驟7:連接
自從維修了3D打印機以來,我還沒有機會打印箱子。我以此為基礎的先前說明,具有可供下載的.stl文件。(注意:如果您打算使用.stl文件,則單位以厘米為單位,與作者相對應。我不得不縮放我的.stl文件的大小是原來的10倍,因為我的打印機以毫米為單位工作。我必須修改設計,因為我有兩個門,因此需要兩個繼電器。但是由于我渴望將所有東西都連接起來,所以我開始將電子設備安裝在我躺在的一塊廢舊木頭上。因此,我不會在這種指導中展示絕對的成品。
一旦將電子設備安裝到我擁有的木頭上,在其上找到臨時住所就很簡單了。壁。在圖片中,您可以看到從路由器到Arduino,從Arduino到繼電器,再到繼電器到車庫門按鈕的電線。當我彈出實際按鈕并從墻上擰下外殼時,只有兩個接線端子。因此,就像我以前作為基礎的指導一樣,您可以按任意順序將繼電器的電線鉤到門按鈕上的端子上。
在此之后,整個設置第一次神奇地起作用了!抱歉,不發布視頻。我必須暫時將其取下來,然后才能捕獲它的視頻,但我發誓確實如此!
步驟8:最終想法
之后玩了一點,我確實注意到了一些問題,我將在下面提到。這些是很重要的,因此在決定重復該項目之前,請先考慮它們。
按下iPhone上的按鈕與讓車庫門響應之間存在一些不一致的延遲。
一個大問題:將應用程序加載到iPhone應用程序后,我注意到幾天后我試圖打開該應用程序。應用程序,它只會返回主屏幕。這是一致的行為。掙扎了一段時間之后,我終于崩潰了,并在stackoverflow上發布了問題。一個人的答案似乎是正確的:邪惡的帝國使Apple決定,如果您不是開發人員,那么您從Xcode獲得的信任證書對您剛開發的應用程序僅有效1周。之后,除非您重新安裝它(并重置1周的倒計時),否則您將無法在iPhone上使用它,或者需要為更長的證書支付99美元的費用。我發現這完全令人沮喪。就像我浪費時間一樣。但是,如果您是開發人員,那么這對您來說就不是問題了。。
我想到的一個想法是,如果有人手動按下車庫門按鈕,則不會捕獲此事件在Arduino代碼中因此,就Arduino而言,在按下按鈕之前,門的狀態保持不變。此外,如果有人站在門底下,而另一個人正在使用該應用程序將其關閉。門傳感器將迫使門再次返回,并且此事件也未在Arduino代碼中捕獲。不用說,這是要弄清楚的另一點。
責任編輯:wv
-
iPhone
+關注
關注
28文章
13491瀏覽量
202843 -
Arduino
+關注
關注
188文章
6478瀏覽量
188275
發布評論請先 登錄
相關推薦
智能地下車庫照明系統
如何用Arduino制作一個簡易自動喂魚器
如何制作自己的Arduino電容計

評論