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

漫畫圖解 電感器 抗干擾元器件指南(全彩PDF版)
《ESP32S3 Arduino開發(fā)指南》第二章 Arduino基礎(chǔ)知識
PCB封裝圖解
地下車庫一氧化碳監(jiān)測及風(fēng)機(jī)控制系統(tǒng)方案

地下車庫CO監(jiān)測告警與風(fēng)機(jī)遠(yuǎn)程控制IoT解決方案
地下車庫智能照明方案
智能地下車庫照明系統(tǒng)
車庫智能燈光控制系統(tǒng)架構(gòu)與功能優(yōu)勢
開源項目!基于 Arduino 的 MIDI 架子鼓
基于Arduino的串口通信項目
stm32與Arduino的比較
淺談地下車庫電動汽車火災(zāi)施救策略與研究

評論