這篇文章來源于DevicePlus.com英語網站的翻譯稿。
許多應用都用過ESP-WROOM-02,并且通過Arduino程序利用了該開發板的wifi通信功能。今天,我們要實現一個更具創意性的項目,根據天氣API的天氣信息制作另一款炫麗的圣誕裝飾品。
今天的電子設計技巧
估計完成時間:90分鐘
所需部件
ESP-WROOM-02 開發板
面包板
LED – 綠色
電阻220Ω/180Ω/91Ω
高功率RGB LED
為了啟用ESP-WROOM-02開發板的Arduino程序無線通信功能,我想首先嘗試一個示例程序。選擇File → Sketch Example → ESP 8266 WiFi → WiFi Web Server。該示例程序負責處理與Arduino的Wifi通信。
圖1 加載程序示例
這個示例程序能讓ESP-WROOM-02成為服務器。程序啟動后,它會一直等待來自其他終端的請求,當收到帶有參數的請求后,程序就會處理該參數。在我們的例子中,我們將使用這個程序來點亮LED。
我想使用上次的電路進行測試。將示例程序中的引腳“2”更改為引腳“13”。
圖2 LED控制電路
/* * This sketch demonstrates how to set up a simple HTTP-like server. * The server will set a GPIO pin depending on the request * https://server_ip/gpio/0 will set the GPIO2 low, * https://server_ip/gpio/1 will set the GPIO2 high * server_ip is the IP address of the ESP8266 module, will be * printed to Serial when the module is connected. */ #include #include const char *ssid = "Provide SSID of wireless router here"; const char *password = "Provide the wireless router password here"; // Create an instance of the server // specify the port to listen on as an argument WiFiServer server(80); void setup() { Serial.begin(115200); delay(10); // prepare GPIO2 pinMode(2, OUTPUT); digitalWrite(2, 0); // Connect to WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); // Start the server server.begin(); Serial.println("Server started"); // Print the IP address Serial.println(WiFi.localIP()); } void loop() { // Check if a client has connected WiFiClient client = server.available(); if (!client) { return; } // Wait until the client sends some data Serial.println("new client"); while(!client.available()){ delay(1); } // Read the first line of the request String req = client.readStringUntil('r'); Serial.println(req); client.flush(); // Match the request int val; if (req.indexOf("/gpio/0") != -1) val = 0; else if (req.indexOf("/gpio/1") != -1) val = 1; else { Serial.println("invalid request"); client.stop(); return; } // Set GPIO2 according to the request digitalWrite(2, val); client.flush(); // Prepare the response String s = "HTTP/1.1 200 OKrnContent-Type: text/htmlrnrnrnrnGPIO is now "; s += (val)high":"low"; s += "n"; // Send the response to the client client.print(s); delay(1); Serial.println("Client disonnected"); // The client will actually be disconnected // when the function returns and 'client' object is detroyed }
啟動程序后,請嘗試連至路由器。如果已經連接,那么系統會在串行監視器上顯示IP地址等。所以,請嘗試從瀏覽器訪問該IP地址。連至/gpio/1時,LED亮起;連至/gpio/0時,LED熄滅。
圖3 Wifi訪問成功
圖4 智能手機連接
通過程序控制伺服電機
接下來我們通過一個實際例子試著用Wifi控制伺服電機。伺服電機的控制基本上應與LED控制相同。我將在LED程序中添加一些修改,并通過從瀏覽器訪問時添加一些HTML。
#include #include const char *ssid = "Provide SSID of wireless router here"; const char *password = "Provide the wireless router password here"; Servo myservo; WiFiServer server(80); void setup() { Serial.begin(115200); delay(10); Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); server.begin(); Serial.println("Server started"); Serial.println(WiFi.localIP()); myservo.attach(2); } void loop() { WiFiClient client = server.available(); if (!client) { return; } Serial.println("new client"); while(!client.available()){ delay(1); } String req = client.readStringUntil('r'); Serial.println(req); client.flush(); // Match the request int val; if (req.indexOf("/gpio/0") != -1){ val = 0; } else if (req.indexOf("/gpio/30") != -1){ val = 30; } else if (req.indexOf("/gpio/60") != -1){ val = 60; } else if (req.indexOf("/gpio/90") != -1){ val = 90; } else if (req.indexOf("/gpio/120") != -1){ val = 120; } else if (req.indexOf("/gpio/150") != -1){ val = 150; } else { Serial.print("REQ:"); Serial.println(req); Serial.println("invalid request"); client.stop(); return; } myservo.write(val); client.flush(); String s = "HTTP/1.1 200 OKrnContent-Type: text/htmlrnrnrnrnGPIO is now "; s += (val)high":"low"; s += "
"; s += "
0
n"; s += "
30
n"; s += "
60
n"; s += "
90
n"; s += "
120
n"; s += "
150
n"; s += "
n"; s += "n"; client.print(s); delay(1); Serial.println("Client disonnected"); }
在這個程序中,瀏覽器顯示的角度為0到150。當點擊每個數值時,伺服電機會移動到一個指定角度。
圖5 通過Wifi進行伺服電機控制
讓我們來制作我們的天氣預報雪人吧!
圣誕節即將到來,我決定做一個圣誕節裝飾品。大量的炫彩LED裝飾燈固然不錯,但是桌子上的可愛飾品則更具圣誕節韻味。所以,我用123d設計創建了一個雪人模型。這款工具可以在組合不同形狀的同時進行建模,所以即使是初學者也可以輕松創建3D模型。
雪人模型
圖6 雪人建模
請根據個人喜好隨意更改雪人的形狀或大小。建模完成后,我試著用3D打印機輸出自己設計的雪人。不幸的是,手臂沒有打印出來。
圖7 3D打印的雪人
現在我們需要一個全彩LED。讓我們將全彩LED和WiFi通信整合到一個桌面設備中,使得該設備能夠根據特定位置的天氣數據改變LED的顏色。
設備配置
像往常一樣
審核編輯:湯梓紅
-
API
+關注
關注
2文章
1487瀏覽量
61827 -
開發板
+關注
關注
25文章
4958瀏覽量
97213 -
Arduino
+關注
關注
187文章
6464瀏覽量
186675
發布評論請先 登錄
相關推薦
評論