用Android Studio創(chuàng)建一個Android應(yīng)用程序,使用NodeMCU通過WiFi控制LED
大家好,歡迎回到我們的Android Studio for Internet of Things系列的另一部分。在本教程中,我們將繼續(xù)我們的android應(yīng)用程序。我們已經(jīng)開發(fā)了我們的應(yīng)用程序的基礎(chǔ),通過添加一個燈泡的圖像,一個按鈕,和一些功能來建立藍(lán)牙連接。但現(xiàn)在我們要添加一個Wi-Fi功能來控制NodeMCU板的內(nèi)置LED。
我們要建造什么?
讓我們看看我們將在本教程中構(gòu)建什么。在下面的圖片中,你可以發(fā)現(xiàn)我們已經(jīng)添加了一個燈泡、一個按鈕、一個工具欄和藍(lán)牙功能的圖像。
現(xiàn)在讓我們看看下面的圖片。Wi-Fi功能在菜單列表中。用戶將通過點(diǎn)擊“WiFi”被重定向到Wi-Fi活動。如果WiFi已經(jīng)關(guān)閉,那么用戶會彈出一個打開WiFi的窗口,如下圖所示。
當(dāng)用戶的WiFi被打開時,用戶將被重定向到WiFi活動,在那里我們將添加一些輸入部分來獲取IP地址和連接按鈕。你可以看看下面的圖片作為參考。
當(dāng)用戶輸入IP地址后按下按鈕,就會被重定向到主活動頁面,并連接wifi。在下圖中,你可以看到在工具欄部分顯示了一條消息“連接到WiFi”。
到目前為止,我只給了您一個應(yīng)用程序的概述?,F(xiàn)在,讓我們構(gòu)建應(yīng)用程序。在下面的圖片中,你可以看到我們已經(jīng)在之前的教程中討論過的文件夾結(jié)構(gòu)。在本教程中,我們需要創(chuàng)建更多的類、活動和布局。我在下面的圖片中用紅色標(biāo)記了這些文件。
所以我們需要創(chuàng)建一個名為“WifiActivityDevices”的活動。相應(yīng)的布局文件“activity_wifi_devices.xml”文件將使用此活動創(chuàng)建,正如我在上圖中的紅色圓圈中提到的那樣。在我們開始android應(yīng)用程序的編碼部分之前,我們需要在AndroidMenifest.xml文件中添加幾行代碼。我們需要在“構(gòu)建”中添加一個依賴項(xiàng)。gradle”文件。在下面的圖像中,您可以看到我已經(jīng)標(biāo)記了清單文件和構(gòu)建。Gradle文件帶有紅色方塊。
下圖中突出顯示的代碼需要添加到Manifest文件中。這段代碼是為了允許Wifi到應(yīng)用程序。第二個圖像是依賴。需要將突出顯示的代碼添加到構(gòu)建中。gradle文件。在添加依賴項(xiàng)后,你需要點(diǎn)擊右上角的“sync”。
activity_wifi_devices.xml文件
activity_wifi_device.xml文件是WifiActivityDevices.java文件的布局。這里我們需要添加一個EditText來接收來自用戶的輸入。我們需要添加一個按鈕來連接到wifi并重定向到MainActivity文件。
在上面的圖像中,我們有一個EditText,它指示輸入IP地址。下面的代碼可用于在布局中添加EditText。
EditText的代碼:
以上代碼用于EditText。我通過使用“ android: ID =”@+ ID /ip_input"屬性給這個部分指定了一個ID。你可以找到一些高度和寬度屬性,我用它們來給EditText一個維度。“android:hint”用于給用戶一個提示。它將在EditText為空時顯示?,F(xiàn)在,我們需要為Button添加代碼。
按鈕代碼:
代碼的解釋:
按鈕id為“ip_button”,文本為“Connect”。我不打算討論按鈕,因?yàn)槲乙呀?jīng)在前面的教程中討論了按鈕。
WifiActivityDevices.java文件
正如我們之前所討論的WifiActivityDevices.java文件是用于wifi特性的。我們需要在“WifiActivityDevices.java”文件中添加以下代碼。在下面的代碼中,我們有“ipAddress”通過訪問布局文件中的EditText的ID來獲取NodeMCU的IP地址,但是我們還將應(yīng)用一個額外的任務(wù)來檢查輸入文本是否與IP地址的格式匹配?!癐nputFilter”用于應(yīng)用一些模式檢查器來檢查輸入的字符串是否是IP地址。“setFilters”函數(shù)將對輸入IP地址的“ipAddress”應(yīng)用過濾器?!癷pButton”用于通過使用按鈕的ID從布局文件中訪問按鈕。然后我們需要添加一個“setOnClickListener”到“ipButton”。在“onClick()”方法中,你可以找到“intent2”。這用于將用戶重定向到MainActivity.java文件。
MainActivity.java文件
我們需要對MainActivity.java文件做一些修改。您需要在MainActivity.java文件的onCreate()方法之外添加以下代碼。CreateConnectThread2類用于創(chuàng)建一個“線程”?!皉un()”方法用于與我們在“WifiActivityDevices.java”文件中獲得的IP地址建立連接。
下面的“ConnectedThread2”類用于管理createconnconnected線程。我們在“ConnectedThread2”類下有一個send()方法。這個send()方法可以在用戶按下MainActivity布局文件中的按鈕時調(diào)用。在send()方法中,你可以看到我們有一個“url”,它被用作NodeMcu板的地址。我們對這個HTTP連接使用“POST”方法。每當(dāng)用戶點(diǎn)擊按鈕時,按鈕的狀態(tài)就會改變,打開或關(guān)閉led的命令將通過“StringRequest”方法作為字符串?dāng)?shù)據(jù)發(fā)送。
我們使用“Volley”庫來創(chuàng)建HTTP連接。
NodeMCU的代碼
下面的代碼用于NodeMCU。您可以看到我們已經(jīng)包含了ESP8266WebServer、WiFiClient和ESP8266WiFI庫。在這里,我使用ESP8266作為Wifi接入點(diǎn)。它將創(chuàng)建一個以“ESP8266”作為SSID的WiFi網(wǎng)絡(luò)。在setup函數(shù)中,我定義了led的引腳模式(即NodeMCU內(nèi)置led的GPIO 2)。設(shè)置WiFI模式為“WIFI_AP”模式。server.on()用于啟動HTTP服務(wù)器。HTTP_handleRoot()函數(shù)是在setup()函數(shù)之外創(chuàng)建的。HTTP_handleRoot()用于通過使用“ data ”作為參數(shù)從android應(yīng)用程序獲取數(shù)據(jù)。然后使用“command”變量將數(shù)據(jù)存儲為字符串。如果數(shù)據(jù)為“1”,則內(nèi)置LED將打開,否則將關(guān)閉。
希望你喜歡這個項(xiàng)目,并且學(xué)到了一些有用的東西,關(guān)于用android studio創(chuàng)建一個android應(yīng)用程序,使用NodeMCU通過WiFi控制LED。
本文編譯自iotdesignpro