Mục lục:

Hue Magic: 4 bước (có hình ảnh)
Hue Magic: 4 bước (có hình ảnh)

Video: Hue Magic: 4 bước (có hình ảnh)

Video: Hue Magic: 4 bước (có hình ảnh)
Video: HUE Animation Studio (magic unboxing video)! 2024, Tháng sáu
Anonim
Image
Image

Chào mừng các pháp sư!

Vài tháng trước, tôi đã tạo ra một chiếc hộp ma thuật nhỏ với cây đũa phép cho cậu con trai 3 tuổi của mình. Khi anh ta chạm vào hộp bằng đũa phép, một ánh sáng màu thay đổi sẽ bắt đầu phát ra từ hộp. Khi nhìn thấy một màu sắc mà mình đặc biệt thích, anh ta có thể hướng cây đũa về phía đèn bàn (với bóng đèn Philips Hue bên trong), làm phép và màu sắc từ hộp sẽ chuyển sang đèn một cách kỳ diệu! Đèn và ánh sáng từ hộp đột nhiên có cùng màu…

Sau một vài giây, màu sắc mờ dần và đèn bàn trở lại trạng thái trước khi câu thần chú. Cho đến khi một câu thần chú mới được sử dụng…

Bước 1: Những gì bạn cần để tạo dự án này

Những gì bạn cần để tạo dự án này
Những gì bạn cần để tạo dự án này
Những gì bạn cần để tạo dự án này
Những gì bạn cần để tạo dự án này
Những gì bạn cần để tạo dự án này
Những gì bạn cần để tạo dự án này

Để tạo dự án này, bạn sẽ cần các tài liệu sau:

    • 1 (hoặc nhiều) bóng đèn màu Philips Hue và Hue Bridge
    • 1 Wemos D1 mini hoặc vi điều khiển dựa trên esp8266 tương tự
    • Cảm biến chạm 1 (Arduino) (ví dụ: TTP223R)
    • 1 (Arduino) nút tạm thời
    • 1 tụ điện 10uF
    • 1 đèn LED RGB (loại cực dương chung)
    • 5 điện trở (10, 22 và 47 Ohm, 2x 10K Ohm)
    • 2 PCB tạo mẫu nhỏ (2x3 inch hoặc khoảng 5x7 cm phải đủ lớn)
    • một số (jumper) dây
    • một cái mỏ hàn
    • một cây đũa thần (có thể mua ở dạng làm sẵn ở cửa hàng đồ chơi hoặc bạn có thể tự làm)
    • một hộp nhỏ bằng bìa cứng hoặc gỗ (có thể là hộp hiện có, nhưng tất nhiên bạn cũng có thể làm hộp từ đầu)
    • một số băng
    • một số keo và / hoặc đai ốc và bu lông để gắn PCB vào hộp.
    • tùy chọn: giấy gói cho hộp

NB: Một chút kinh nghiệm trong việc đọc sơ đồ mạch sẽ rất hữu ích khi xem qua phần hướng dẫn này. Sơ đồ của tôi không quá phức tạp: nếu bạn có thể phân biệt tụ điện với điện trở, có lẽ bạn sẽ ổn.

Một số kinh nghiệm lập trình Arduino bằng Arduino IDE cũng rất hữu ích. Kinh nghiệm cơ bản là đủ, vì tôi sẽ cung cấp mã hoàn chỉnh để bạn sao chép / dán. Tuy nhiên, bạn sẽ cần phải điều chỉnh một số điều để làm cho nó hoạt động trong thiết lập cụ thể của bạn (ví dụ: cài đặt mạng của bạn và một số chi tiết từ cấu hình Hue của bạn). Nếu điều này nghe có vẻ hơi đáng sợ, đừng lo lắng, tôi sẽ giúp bạn truy xuất tất cả thông tin bạn cần.

Bước 2: Hộp & Đũa phép

Hộp & Đũa phép
Hộp & Đũa phép
Hộp & Đũa phép
Hộp & Đũa phép

Các bước đầu tiên thường là khó nhất, nhưng không có trong hướng dẫn này! Để có một khởi đầu dễ dàng, bạn có thể mua một cây đũa thần từ một cửa hàng đồ chơi và đối với chiếc hộp, bạn có thể chỉ cần sử dụng lại một chiếc hộp nhỏ hiện có mà bạn đã nằm xung quanh. Chỉ cần đảm bảo rằng hộp không được làm bằng kim loại, vì điều này sẽ chặn tín hiệu wifi và chúng ta cần những thứ đó cho điều kỳ diệu;-).

Khi bạn sử dụng lại một chiếc hộp hiện có, điều duy nhất bạn phải làm là tạo hai lỗ trên đầu hộp: 1 lỗ nhỏ (kích thước 5mm = 0,2 ") cho đèn LED RGB và một lỗ lớn hơn (khoảng 12- 14mm hoặc khoảng 0,5 ") đối với cảm biến cảm ứng.

Vị trí chính xác của các lỗ không quan trọng, chỉ cần đặt chúng theo cảm quan thẩm mỹ của bạn nhưng hãy ghi nhớ một số điều sau:

  • Giữ một khoảng cách giữa cả hai lỗ để đảm bảo các thành phần sẽ được gắn bên dưới các lỗ (đèn LED RGB và cảm biến cảm ứng) đều được phép chiếm đủ không gian để lắp và đi dây.
  • Lỗ hổng lớn nhất là dành cho cảm biến cảm ứng. Cảm biến này sẽ được gắn ngay bên dưới lỗ, theo cách mà cây đũa phép có thể chạm vào (và thậm chí có thể ấn nhẹ). Vì vậy, hãy chắc chắn rằng cây đũa phép bạn mua không quá dày!

Bạn có thể tùy ý sử dụng (phun) sơn hoặc giấy gói và bọc nhựa để làm cho hộp của bạn đẹp hơn một chút và để bảo vệ hộp khỏi tràn thức ăn và tay bẩn.

Nếu bước đầu tiên này hơi quá không theo ý muốn của bạn, hãy tiếp tục tạo một chiếc hộp và hoàn toàn từ đầu! Có rất nhiều cấu trúc có thể giúp bạn tạo ra một cây đũa phép tuyệt đẹp

Dù bạn chọn con đường nào, bây giờ đã đến lúc khám phá bên trong chiếc hộp.

Bước 3: Phần cứng bên trong

Phần cứng bên trong
Phần cứng bên trong
Phần cứng bên trong
Phần cứng bên trong
Phần cứng bên trong
Phần cứng bên trong

Dùng mỏ hàn nối các linh kiện điện tử theo sơ đồ mạch điện trên. Có một số điều cần đặc biệt chú ý:

  • Dây dẫn giữa Wemos D1 Mini và đèn LED RGB phải đủ dài để đèn LED RGB có thể được gắn vào lỗ bạn đã tạo trên nắp hộp.
  • Các số lượng tương tự đối với các dây được gắn vào công tắc tạm thời và cảm biến cảm ứng vì chúng phải được tiếp cận thông qua lỗ khác trên nắp.
  • Nút của công tắc tạm thời phải được dán vào mặt dưới (mặt không nhạy) của cảm biến cảm ứng, theo cách đó bạn có thể đặt lại nút trên công tắc tạm thời với cảm biến cảm ứng được dán ở trên (xem hình). Cảm biến cảm ứng được gắn trên đầu công tắc tạm thời để phát hiện các thao tác nhấn nút do ngón tay thực hiện, trong trường hợp đó, thao tác nhấn nút sẽ bị bỏ qua. Chỉ khi cây đũa thần được nhấn nút (không dẫn điện nên nhựa và gỗ đều được), chu kỳ ma thuật sẽ bắt đầu.
  • Gắn nút bấm tạm thời có cảm biến cảm ứng ở trên không quá sâu dưới lỗ trên nắp vì cần đũa thần có thể chạm tới được để thiết lập phép thuật chuyển động.
  • Đảm bảo quan sát cực của tụ điện khi hàn nó. Nếu bạn đảo ngược các dây dẫn dương và âm, tụ điện có thể sẽ phát ra một số khói ma thuật và đưa mạch của bạn vào giấc ngủ vĩnh viễn.
  • Keo, băng dính và hoặc vặn chặt ngăn chứa pin và (các) PCB vào đúng vị trí. Nó không cần phải gọn gàng, vì nó sẽ không được nhìn thấy. Nó chỉ nên là bằng chứng rơi.

Trên phần mềm!

Bước 4: Phần mềm

Đảm bảo bạn có trình chỉnh sửa phần mềm Arduino mới nhất (miễn phí), có thể tải xuống tại https://www.arduino.cc/en/Main/Software. Để thêm hỗ trợ cho Wemos D1 mini và các bo mạch dựa trên ESP8266 khác, hãy thực hiện các bước sau:

  • Sau khi cài đặt, khởi động phần mềm Arduino và mở cửa sổ Preferences.
  • Nhập https://arduino.esp8266.com/stable/package_esp8266com_index.json vào trường "URL Trình quản lý Hội đồng bổ sung". Bạn có thể thêm nhiều URL, phân tách chúng bằng dấu phẩy.
  • Mở Trình quản lý bảng từ menu Công cụ> Bảng và cài đặt nền tảng esp8266 (và đừng quên chọn bảng ESP8266 của bạn từ menu Công cụ> Bảng sau khi cài đặt. "LOLIN (WEMOS) D1 R2 & mini" hoạt động tốt nhất cho Wemos D1 mini v2 và v3 bảng.

Nếu bạn cần thêm trợ giúp để cài đặt Arduino và thiết lập trình điều khiển, bạn có thể xem tại

Trong trình chỉnh sửa Arduino, mở một tệp mới (Tệp> Mới) và sao chép / dán mã bên dưới vào cửa sổ vừa mở. Chỉ cần ghi đè lên các dòng đã có trong cửa sổ mới (void setup và void loop).

Bây giờ bạn gần như đã sẵn sàng, nhưng bạn sẽ phải điều chỉnh một vài đoạn mã cho thiết lập cụ thể của mình.

Điều đầu tiên cần làm là thay đổi địa chỉ ip trên dòng 34 (trong trình soạn thảo Arduino, các dòng mã được đánh số) thành địa chỉ ip của cầu Huế của bạn. Nếu bạn không biết địa chỉ IP Hue Bridge của mình, hãy truy cập https://discovery.meethue.com/ và địa chỉ IP phù hợp nó sẽ xuất hiện ngay trong trình duyệt của bạn. Địa chỉ ip là số có dấu chấm đứng trước "địa chỉ nội bộ".

Để giao tiếp với Hue light, bạn sẽ phải tạo một người dùng Hue API cho Wemos D1 mini, để Wemos có thể giao tiếp với Hue light thông qua Hue API. Để làm điều đó, hãy làm theo hướng dẫn tại https://developers.meethue.com/develop/get-started-2/ và sao chép / dán tên người dùng đã tạo (khá dài) vào cửa sổ mã Arduino. Chỉ cần thay thế mọi "TÊN NGƯỜI DÙNG API HUẾ CỦA BẠN" bằng tên người dùng API đã tạo.

Sau đó, bạn cần chọn ánh sáng Hue phù hợp để thay đổi màu sắc. Trong Hue API, mỗi đèn đều có một số, vì vậy bạn cần tìm ra số tương ứng với đèn mà bạn muốn sử dụng cho dự án này. Một trong những cách dễ nhất để tìm ra con số cụ thể của đèn là tải xuống Ứng dụng Hue Viewer dành cho Android hoặc iOS. Thay thế văn bản "SỐ ĐÈN CỦA BẠN" bằng số chính xác ở mọi nơi trong cửa sổ mã Arduino.

Điều cuối cùng cần làm là thiết lập Wemos để kết nối với mạng wifi của bạn. Điều này được thực hiện bằng cách tải mã lên Wemos và trên máy tính xách tay của bạn chuyển sang mạng wifi khác: thành "AutoConnectAP". Sau đó, trình duyệt của bạn sẽ hiển thị một trang nơi bạn có thể thêm SSID (tên) và mật khẩu của mạng wifi mà bộ điều khiển Wemos sẽ sử dụng để kết nối với mạng wifi của bạn (và với cầu Huế).

NB: Nếu việc tải mã lên Wemos D1 mini của chúng tôi qua USB không hoạt động, bạn có thể cần tải xuống trình điều khiển cho chip USB trên Wemos. Trình điều khiển cho nền tảng của bạn (Windows, Mac) có thể được tải xuống tại

Bây giờ bạn đã sẵn sàng để kiểm tra tác phẩm của mình!

// ESP8266 Hue Magic Wand // Richard van Kampen - 2018 // Mã này được thử nghiệm trên Wemos D1 mini, nhưng có thể cũng sẽ hoạt động trên các bảng phát triển dựa trên ESP8266 khác // Để thêm hỗ trợ cho Wemos D1 mini và các bảng ESP8266 khác vào trình soạn thảo Arduino, hãy thực hiện các bước sau: // - Khởi động Arduino và mở cửa sổ Preferences. // - Nhập https://arduino.esp8266.com/stable/package_esp8266com_index.json vào trường URL Trình quản lý bảng bổ sung. Bạn có thể thêm nhiều URL, phân tách chúng bằng dấu phẩy. // - Mở Boards Manager từ menu Tools> Board và cài đặt nền tảng esp8266 (và đừng quên chọn board ESP8266 của bạn từ menu Tools> Board sau khi cài đặt). // thư viện đã sử dụng: #include "ESP8266WiFi.h" // Thư viện WiFi lõi ESP8266 #include "DNSServer.h" // Máy chủ DNS cục bộ được sử dụng để chuyển hướng tất cả các yêu cầu đến cổng cấu hình WiFiManager nếu không có cài đặt WIFI (SSID, mật khẩu) chưa được thiết lập. #include "ESP8266WebServer.h" // Local WebServer được sử dụng để cung cấp cổng cấu hình WiFiManager #include "WiFiManager.h" // Thư viện WiFi Configuration Magic, nếu chưa được cài đặt, vui lòng tham khảo https://github.com/tzapu/WiFiManager # install-through-library-manager #include "RestClient.h" // https://github.com/fabianofranca/ESP8266RestClient, cần thiết để sử dụng Philips Hue API (xem https://developers.meethue.com/develop/ hue-api /). #include "ArduinoJson.h" // https://github.com/bblanchon/ArduinoJson, cần thiết để phân tích phản hồi API Hue, vui lòng cài đặt phiên bản 5.x thông qua trình quản lý thư viện trong Arduino (Menu "Sketch"> Bao gồm Thư viện> Quản lý Thư viện> tìm kiếm ArduinoJson và thay đổi phiên bản thành 5.x mới nhất). Phiên bản 6 (hiện đang trong giai đoạn thử nghiệm) gặp lỗi. // các biến và init: Phản hồi chuỗi; const int redPin = 13; // trên Wemos đây là d7 const int greenPin = 12; // trên Wemos đây là d6 const int bluePin = 14; // trên Wemos đây là d5 const int touchSensor = 5; // trên Wemos cái này là d1 const int activationPin = 4; // trên Wemos đây là d2 bool kích hoạt = HIGH; bool touch = LOW; const char * aan_restore; int bri_restore; gấp đôi x_restore; nhân đôi y_restore; nhân đôi x_magic; nhân đôi y_magic; bool đầu tiên = true; unsigned long startMillis; unsigned long currentMillis; thời gian dài không ký tênMillis; RestClient client = RestClient ("192.168.178.23"); // "địa chỉ IP Cầu Huế của bạn" // Nếu bạn không biết địa chỉ IP Cầu Huế của mình, hãy truy cập https://discovery.meethue.com và địa chỉ này sẽ xuất hiện ngay trong trình duyệt của bạn. Địa chỉ ip là số có dấu chấm đứng trước "internalipaddress" void setup () {analogWriteRange (255); Serial.begin (9600); // Bắt đầu với đèn LED tắt. pinMode (kích hoạtPin, INPUT_PULLUP); pinMode (touchSensor, INPUT); startMillis = millis (); checkWand (); } void loop () {// không có gì để làm ở đây, để trống…} void checkWand () {int rgbColour [3]; // Mã màu RGB của James Harton, https://gist.github.com/jamesotron/766994 // Bắt đầu bằng màu đỏ. rgbColour [0] = 255; rgbColour [1] = 0; rgbColour [2] = 0; kích hoạt = digitalRead (kích hoạtPin); // THẤP có nghĩa là cây đũa phép đang được sử dụng. touch = digitalRead (touchSensor); // HIGH có nghĩa là ngón tay được sử dụng thay vì đũa phép, điều này không đúng trong trường hợp này. while (kích hoạt == LOW && chạm vào == LOW) {// Chọn màu để tăng và giảm. for (int decColour = 0; decColour <3; decColour + = 1) {int incColour = decColour == 2? 0: decColour + 1; // = toán tử bậc ba, có nghĩa là: int incColour; if (decColour == 2) {incColour = 0;} else {incColour = decColour +1;} // làm mờ chéo hai màu. for (int i = 0; i <255; i + = 1) {rgbColour [decColour] - = 1; rgbColour [incColour] + = 1; // vì led RGB của chúng ta có cực dương chung thay vì cực âm (vì vậy chúng ta cần kết nối với + 3.3V thay vì nối đất), chúng ta cần các giá trị nghịch đảo cho RGB: int red = 255 - rgbColour [0]; int green = 255 - rgbColour [1]; int blue = 255 - rgbColour [2]; analogWrite (redPin, đỏ); analogWrite (greenPin, xanh lục); analogWrite (bluePin, xanh lam); chậm trễ (8); kích hoạt = digitalRead (kích hoạtPin); if (kích hoạt == HIGH) {// HIGH có nghĩa là cây đũa phép được nâng lên. goto stopColorCycling; }}}} stopColorCycling: currentMillis = millis (); thời lượngMillis = (currentMillis - startMillis); if (thời lượngMillis> 1000) {RGBtoxy (rgbColour [0], rgbColour [1], rgbColour [2]); } else {// đưa Wemos vào chế độ ngủ: ESP.deepSleep (0); }} void RGBtoxy (int red, int green, int blue) {// xem https://developers.meethue.com/documentation/color-conversions-rgb-xy double R = map (red, 0, 255, 0, 1000); R / = 1000; double G = map (xanh, 0, 255, 0, 1000); G / = 1000; double B = map (blue, 0, 255, 0, 1000); B / = 1000; R = (R> 0,04045f)? pow ((R + 0,055f) / (1,0f + 0,055f), 2,4f): (R / 12,92f); G = (G> 0,04045f)? pow ((G + 0,055f) / (1,0f + 0,055f), 2,4f): (G / 12,92f); B = (B> 0,04045f)? pow ((B + 0,055f) / (1,0f + 0,055f), 2,4f): (B / 12,92f); nhân đôi X = R * 0,649926f + G * 0,103455f + B * 0,197109f; gấp đôi Y = R * 0,234327f + G * 0,743075f + B * 0,022598f; gấp đôi Z = R * 0,0000000f + G * 0,053077f + B * 1,035763f; kép x = X / (X + Y + Z); nhân đôi y = Y / (X + Y + Z); // chuyển đổi chưa hoàn thành hoàn toàn, nhưng có lẽ đủ tốt cho những gì chúng ta muốn đạt được, vì vậy hãy để nó ở mức này và gửi các giá trị XY đến đèn: sendtoHue (x, y); } void sendtoHue (double a, double b) {// sự thay đổi màu thực tế từ phép thuật đũa phép if (first) {// lần truyền đầu tiên: lấy trạng thái đèn hiện tại getCurrentValues (); } // sau đó gửi màu đũa thần: // wait for spell: long wait; x_magic = a; y_magic = b; // bật đèn màu đũa thần: response = ""; int temp = random (2, 9); const char * state = "true"; for (int i = 1; i <= temp; i ++) {// tạo mảng char để gửi tới bridge: String temp_body1 = "{" on / ":" + String (state) + ", \" bri / ": 220, / "xy \": ["+ String (x_magic) +", "+ String (y_magic) +"], / "transitiontime \": 1} "; int str_len1 = temp_body1.length () + 1; char post_body1 [str_len1]; temp_body1.toCharArray (post_body1, str_len1); // bây giờ chúng ta có post_body1 dưới dạng mảng char; // thực hiện lệnh gọi còn lại: int statusCodePut1 = client.put ("/ api / NGƯỜI DÙNG API HUẾ CỦA BẠN / lights / SỐ ĐÈN CỦA BẠN / trạng thái", post_body1, & response); đợi = ngẫu nhiên (100, 600); trì hoãn (chờ đợi); if (state == "true") {state = "false"; } else {state = "true"; }} // giảm độ sáng…: response = ""; temp = ngẫu nhiên (4, 17); // tạo mảng char để gửi tới bridge: String temp_body2 = "{" on / ": true, \" bri / ": 154, \" transitiontime / ":" + String (temp) + "}"; int str_len2 = temp_body2.length () + 1; char post_body2 [str_len2]; temp_body2.toCharArray (post_body2, str_len2); // bây giờ chúng ta có post_body2 dưới dạng mảng char; // thực hiện lệnh gọi còn lại: int statusCodePut2 = client.put ("/ api / NGƯỜI DÙNG API HUẾ CỦA BẠN / lights / SỐ ĐÈN CỦA BẠN / trạng thái", post_body2, & response); đợi = ngẫu nhiên (1000, 2500); trì hoãn (chờ đợi); //..và làm sáng hơn một lần nữa: response = ""; temp = ngẫu nhiên (4, 17); // tạo mảng char để gửi tới bridge: String temp_body3 = "{" bri_inc / ": 100, \" transitiontime / ":}"; int str_len3 = temp_body3.length () + 1; char post_body3 [str_len3]; temp_body3.toCharArray (post_body3, str_len3); // bây giờ chúng ta có post_body3 dưới dạng mảng char; // thực hiện lệnh gọi còn lại: int statusCodePut3 = client.put ("/ api / NGƯỜI DÙNG API HUẾ CỦA BẠN / lights / SỐ ĐÈN CỦA BẠN / trạng thái", post_body3, & response); đợi = ngẫu nhiên (2500, 5000); // đợi trễ 2-5 giây (wait); // và mờ dần về giá trị cũ: response = ""; // tạo mảng char để gửi tới bridge: String temp_body4 = "{" on / ":" + String (aan_restore) + ", \" bri / ":" + String (bri_restore) + ", \" xy / ": ["+ String (x_restore) +", "+ String (y_restore) +"], / "transitiontime \": "+ String (20) +"} "; int str_len4 = temp_body4.length () + 1; char post_body4 [str_len4]; temp_body4.toCharArray (post_body4, str_len4); // bây giờ chúng ta có post_body4 dưới dạng mảng char; // thực hiện lệnh gọi còn lại: int statusCodePut4 = client.put ("/ api / NGƯỜI DÙNG API HUẾ CỦA BẠN / lights / SỐ ĐÈN CỦA BẠN / trạng thái", post_body4, & response); ESP.deepSleep (0); // ngủ tiếp…. } unsigned int getCurrentValues () {connectWifi (); // kết nối đầu tiên với Wifi response = ""; // thực hiện lệnh gọi còn lại: int statusCodeGet = client.get ("/ api / NGƯỜI DÙNG API HUẾ CỦA BẠN / lights / SỐ ĐÈN CỦA BẠN", & response); Serial.print ("Mã trạng thái từ máy chủ sau khi GET:"); Serial.println (statusCodeGet); Serial.print ("Nội dung phản hồi từ máy chủ:"); Serial.println (phản hồi); StaticJsonBuffer jsonBuffer; // Phân tích cú pháp phản hồi Json // Gốc của cây đối tượng. // // Đó là một tham chiếu đến JsonObject, các byte thực tế nằm bên trong // jsonBuffer với tất cả các nút khác của cây đối tượng. // Bộ nhớ được giải phóng khi jsonBuffer vượt ra khỏi phạm vi. JsonObject & root = jsonBuffer.parseObject (phản hồi); JsonObject & state = root ["state"]; // Kiểm tra xem quá trình phân tích cú pháp có thành công hay không. if (! root.success ()) {Serial.println ("parseObject () không thành công"); } // Tìm nạp giá trị. aan_restore = state ["on"]; Serial.println (aan_restore); bri_restore = state ["bri"]; x_restore = state ["xy"] [0]; y_restore = state ["xy"] [1]; first = false;} void connectWifi () {// Intialization cục bộ. Khi hoạt động kinh doanh của nó đã hoàn thành, không cần phải giữ nó xung quanh WiFiManager wifiManager; // đặt lại cài đặt - để kiểm tra: //wifiManager.resetSettings (); // đặt lệnh gọi lại được gọi khi kết nối với WiFi trước đó không thành công và vào chế độ Điểm truy cập wifiManager.setAPCallback (configModeCallback); // tìm nạp ssid và vượt qua và cố gắng kết nối // nếu nó không kết nối, nó bắt đầu một điểm truy cập với tên được chỉ định // tại đây "AutoConnectAP" // và chuyển sang vòng lặp chặn đang chờ cấu hình if (! wifiManager.autoConnect ()) {Serial.println ("không kết nối được và hết thời gian chờ"); // đặt lại và thử lại, hoặc có thể đưa nó vào chế độ ngủ sâu ESP.reset (); chậm trễ (1000); } // nếu bạn đến đây, bạn đã kết nối với WiFi Serial.println ("đã kết nối… yeey:)"); Serial.print ("Đã kết nối với:"); Serial.println (WiFi. SSID ()); Serial.print ("Địa chỉ IP:"); Serial.println (WiFi.localIP ()); // Địa chỉ IP được gán cho ESP (Wemos) của bạn // in cường độ tín hiệu nhận được: long rssi = WiFi. RSSI (); Serial.print ("cường độ tín hiệu (RSSI):"); Serial.println (rssi); } void configModeCallback (WiFiManager * myWiFiManager) {Serial.println ("Đã nhập chế độ cấu hình"); Serial.println (WiFi.softAPIP ()); // nếu bạn đã sử dụng SSID được tạo tự động, hãy in nó ra Serial.println (myWiFiManager-> getConfigPortalSSID ()); }

Đề xuất: