Lỗi không chọn được broad esp8266 in ide năm 2024
Phần mềm Arduino sau khi cài chưa tích hợp công cụ cho phép lập trình ESP8266 nên các bạn cần cài đặt công cụ và thư viện vào Arduino để lập trình ESP8266 Show
B1. Mở phần mềm Arduino Vào File > Preferences \>>Vào Additional Board Manager URLs, thêm đường link sau http://arduino.esp8266.com/stable/package_esp8266com_index.json \>> click Ok để đóng lại B2. Vào Tools > Board > Boards Manager \>> Kéo xuống click vào ESP8266 by ESP8266 Community , click vào cài đặt Chờ phần mềm tự động download và cài đặt Các bạn lưu ý, bản cài đặt là 1.6.5 B3. Cấu hình 1 project Chọn Board để lập trình cho ESP8266 Tools > Board > Generic ESP8266 Module \>> Chọn cổng COM (đúng với cổng USB to TTL bạn cắm vào) Tools > Port > COM? \>> Chọn chế độ nạp 3 Chỉnh sửa code mẫu và nạp chương trình: \>>Mở project mẫu Project được mở ra Có hai chỗ bạn cần phải sửa để tương thích với phần cứng của ESP8266 EVB \>>Thay tên , mật khẩu để kết nối với mạng wifi nhà bạn \>>Chân IO trong ví dụ mẫu để GPIO 2 , bạn sửa thành GPIO 5 Sửa phần cấu hình Sửa phần thực thi bật tắt Relay \>>Nạp chương trình cho ESP8266 EVB Để nạp được chương trình cho ÉP8266 thì phím bấm trên ESP8266 EVB phải được ấn trong quá trình reset. Hay đơn giản hơn làm theo quy trình sau : Rút nguồn > Ấn phím bấm >Cấp lại nguồn >Nhả phím (chú ý về kết nối) Sau đó mở lại Code trên Arduino IDE Ấn Verify > Upload (nếu không có lỗi) Tiếp theo cần lấy địa chỉ IP của thiết bị. Trong code mẫu có đoạn lệnh lấy IP và truyền qua công COM lên máy tính Trong bài này, chúng ta sẽ tạo webserver với esp8266 và biến esp8266 thành một máy chủ web để điện thoại, máy tính truy cập tới ! Chúng ta đã quen với việc điều khiển esp8266 qua các lệnh AT command, tuy nhiên các lệnh AT command không phát huy được hết hoàn toàn khả năng của esp8266. Bản thân esp8266 hỗ trợ lập trình trực tiếp như 1 con vi điều khiển, trong bài này, mình sẽ hướng dẫn các bạn tạo web server cho esp8266 Arduino IDE là một môi trường lập trình với hệ thống thư viện đồ sộ, công đồng cực kì lớn mạnh ! Và đương nhiên Arduino IDE cũng hỗ trợ chúng ta lập trình cho esp8266, ngoài arduino ide còn rất nhiều môi trường khác nữa để lập trình cho esp8266, tuy nhiên cộng đồng và thư viện của nó không được mạnh. Do đó, mình sẽ chọn Arduino IDE để viết code Về việc cài dặt arduino IDE, các bạn tham khảo trên google nhé vì nó quá cơ bản rồi. Sau khi cài xong, chúng ta tích hợp thư viện esp8266 để vào arduino ide như sau: (phần này mình tham khảo tại đây) Vào File→ Preferences, vào textbox Additional Board Manager URLs thêm đường link này vào: http://arduino.esp8266.com/stable/package_esp8266com_index.json Click OK để chấp nhận Tiếp theo vào Tool→Board→Boards Manager Đợi một lát để chương trình tìm kiếm. Ta kéo xuống và click vào ESP8266 by ESP8266 Community, click vào Install. Chờ phần mềm tự động download và cài đặt. Chọn Board để lập trình cho ESP8266: Kết nối mudule USB-to-UART vào máy tính. Vào Tool→Board→Generic ESP8266 Module, chọn cổng COM tương ứng với module USB-to-UART tương ứng. Chọn chế độ nạp Arduino as ISP. Vậy là ta đã có môi trường lập trình cho esp8266 rất thân thiện. Thiết kế webserverNgôn ngữ HTMLHTML là chữ viết tắt của Hypertext Markup Language. Nó giúp người dùng tạo và cấu trúc các thành phần trong trang web hoặc ứng dụng, phân chia các đoạn văn, heading, links, blockquotes … Khi làm việc với HTML, chúng ta sẽ sử dụng cấu trúc code đơn giản (tags và attributes) để đánh dấu lên trang web. Ví dụ, chúng ta có thể tạo một đoạn văn bằng cách đặt văn bản vào trong cặp tag mở và đóng văn bản và Các bạn tự tìm hiểu thêm nhé,
Trước khi đi vào lập trình, chúng ta sẽ viết mã html cho server web bằng máy tính trước, giới thiệu với các bạn phần mềm Sublime Text đây là 1 công cụ text editer mà mình rất thích, giao diện đẹp, chuyên nghiệp, hệ thống nhắc lệnh rất ok ! Mình sẽ viết demo mã html trên phần mềm này ! Các bạn vào File -> New tạo 1 file mới và lưu với đuôi .html, ở đây mình lưu file với tên index.html Tiến hành viết mã code html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 .b{width: 100px;height: 40px;font-size: 21px;color: FFF;background-color:4caf50;border-radius: 10px;}.t{width: 100px;height: 40px;font-size: 21px;color: FFF;background-color:f44336;border-radius: 10px;}Sau đó lưu lại và mở file đó lên bằng trình duyệt WEB nhé, ở đây mình dùng Chrome Và đây là kết quả: Giải thích:Cấu trúc của 1 file html như sau: là tiêu đề bắt buộc mở đầu file Cặp thẻ cũng là cặp thẻ bắt buộc. Tiếp đến là cặp thẻ nơi chứa nhưng khai báo mở dầu của trang, ví dụ thêm thư viện, … ThẻTiếp đến khai báo định dạng text – kiểu utf-8 Sau khi đã biên tập file html xong, chúng ta tiến hành viết code trên arduino và nhúng mã html vào esp8266 Server web ở chế độ Access PointỞ chế độ Access Point, mình sẽ cho wifi tự thân phát ra wifi để các thiết bị khác kết nối tới 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 include
include
include ESP8266WebServer server(80); String webPage \= { "" "" " "" " " " " " " "" " "" """ "" }; void TrangChu() { server.send(200, "text/html", webPage); } void setup() { Serial.begin(9600); while (WiFi.softAP("ESP8266 WiFI", "12345678") \== false) { Serial.print("."); delay(300); } IPAddress myIP \= WiFi.softAPIP(); server.on("/", TrangChu); server.begin(); } void loop() { server.handleClient(); } Sau khi include các file thư viện cần thiết, ở dòng số 3, mình khởi tạo 1 đối tượng server hoạt động ở cổng 80. Tiếp đến nhúng toàn bộ đoạn code web đã viết vài biến String webPage Lưu ý: Ở đầu và cuối mỗi dòng chúng ta nhé thêm 1 dấu nháy đôi “ và tất cả các dấu nháy đôi phía trong phải sửa thành dấu nháy đơn ‘ Bạn cũng có thể thêm dấu xổ \ trước nháy đôi thay vì sửa thành nháy đơn Trong hàm setup chúng ta khởi tạo cổng serial với tốc độ baud 9600 và cho esp8266 phát ra wifi với tên ESP8266 WiFI và password 12345678 Hàm server.on(“/”, TrangChu); yêu cầu esp tạo ra 1 callback tới hàm tên là TrangChu khi có thiết bị truy cập tới, và ở hàm TrangChu , mình sẽ cho esp8266 trả lời lại mã html với code reponse là 200 (http code 200 báo truy vấn thành công – mình đã nói ở bài 4 ) Nạp chương trình: Cách nạp chương trình giống như nạp firmwave mà mình đã hướng dẫn ở bài 2. Tuy nhiên chúng ta sẽ nạp trực tiếp bằng phần mềm arduino luôn ! Các bạn chuẩn bị 1 module UART-USB như pl2303, hc340 rồi kết nối như sau: ESP8266PL2303 (hoặc module uart bất kì)3.3V3.3VGNDGNDRXTXTXRXCH_PD3.3VGPIO0GND Sau khi kết nối như trên xong thì chúng ta mới cắm module uart vào máy tính Các bạn vào Tool -> Port để chọn cổng COM tương ứng: Sau đó ấn nút nạp xuống: Sau khi nạp code xong thì gỡ GPIO0 ra khỏi mass và reset esp8266 (cấp lại nguồn hoặc kích GND vào chân reset) Bây giờ lấy máy tính ra, cho nó kết nối vào wifi ESP8266 WiFI với mật khẩu 12345678 Sau đó mở trình duyệt gõ địa chỉ mặc định của server là 192.168.4.1 Chún ta có kết quả Server web ở chế độ StationỞ chế độ station, esp8266 sẽ không phát wifi nữa mà truy cập vào wifi ở nhà 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 include
include
include
include MDNSResponder mdns; ESP8266WebServer server(80); String webPage \= { "" "" " "" " " " " " " "" " "" """ "" }; void TrangChu() { server.send(200, "text/html", webPage); } void setup() { Serial.begin(9600); Serial.println(); Serial.println(); Serial.print("Connecting to "); WiFi.begin("Tang5", "12345678"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); if (mdns.begin("esp8266", WiFi.localIP())) Serial.println("MDNS responder started"); server.on("/", TrangChu); server.on("/bat1", bat1); server.on("/tat1", tat1); server.on("/bat2", bat2); server.on("/tat2", tat2); server.begin(); } void loop() { server.handleClient(); } Trong đó yourSSID và YourPass là tài khoản và mật khẩu wifi nhà bạn ! OK bây giờ esp8266 sẽ tự kết nói vào wifi nhà bạn và in ra địa chỉ IP có dạng 192.168.1.xxx Đây là địa chỉ IP mà modem mạng của bạn cấp phát cho nó, bạn chỉ việc gõ địa chỉ ip vào trinh duyệt web là trang web như trên sẽ hiện ra ESP8266 và thiết bị truy cập phải cùng kết nối tới 1 mạng wifi nhé Code chức năng bật tắt LEDTiếp tục, chúng ta sẽ code thêm chức năng bật tắt led, do ở đây mình dùng esp8266v1 nó chỉ có 2 chân GPIO nên mình sẽ chỉ code chức năng bật tắt cho kênh 1,2. Kênh 3,4 tạm để trạng trí vậy 🙂 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 include
include
include
include MDNSResponder mdns; ESP8266WebServer server(80); String webPage \= { "" "" " "" " " " " " " "" " "" """ "" }; void TrangChu() { server.send(200, "text/html", webPage); } void bat1() { digitalWrite(0, HIGH); Serial.println("Bật LED 1"); server.send(200, "text/html", webPage); } void tat1() { digitalWrite(0, LOW); Serial.println("Tắt LED 1"); server.send(200, "text/html", webPage); } void bat2() { digitalWrite(2, HIGH); Serial.println("Bật LED 2"); server.send(200, "text/html", webPage); } void tat2() { digitalWrite(2, LOW); Serial.println("Tắt LED 2"); server.send(200, "text/html", webPage); } void setup() { pinMode(0, OUTPUT); pinMode(2, OUTPUT); Serial.begin(9600); Serial.println(); Serial.println(); Serial.print("Connecting to "); WiFi.begin("Tang5", "12345678"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); if (mdns.begin("esp8266", WiFi.localIP())) Serial.println("MDNS responder started"); server.on("/", TrangChu); server.on("/bat1", bat1); server.on("/tat1", tat1); server.on("/bat2", bat2); server.on("/tat2", tat2); server.begin(); } void loop() { server.handleClient(); } Code trên mình thêm dòng cấu hình ngõ ra cho GPIO0 và GPIO2, sau đó thêm hàm callback nhận lệnh bặt tắt từ trình duyệt và xuất tin hiệu HIGH LOW ra chân GPIO và in log ra màn hình Serial Mẹo: Có thể tận dụng 2 chân Serial làm GPIO luôn, như thế con espv1 sẽ điều khiển được 4 thiết bị NAT PORTChúng ta đã có thể truy cập vào server của esp8266 thông qua mạng LAN trong gia đình, tuy nhiên, nó chỉ là 1 cái server hoạt động cục bộ trong gia đình, nếu muốn đi ra ngoài mà điều khiển được thì cần phải đưa nó ra ngoài thế giới internet rộng lớn. IP cục bộ và IP công cộngCác bạn có thể thấy ở video demo trên, modem mạng nhà mình đã cấp phát cho esp8266 địa chỉ 192.168.1.11, đây chính là IP cục bộ mà modem đã cấp cho esp8266 để nó phân biệt với các thiết bị khác cũng chung mạng wifi ( điện thoại, laptop, smart tivi cũng đều đc cấp 1 cái ip riêng, không thằng nào dùng chung với thằng nào) Bản thân modem wifi thông thường cùng sẽ lấy địa chỉ 192.168.1.1 hoặc 192.168.0.1 là IP cục bộ mặc định ! Nếu nó được đăng kí internet với nhà mạng (viettel, vina … ) – tức có sợi dây cáp quang gắn vào đấy – thì nhà mạng sẽ cung cấp cho modem 1 IP công cộng, đây là địa chỉ IP duy nhất để phân biệt modem nhà bạn với hàng tỉ thiết bị internet trên thế giới. Như vậy tất cả thiết bị trong LAN muốn giao tiếp với bên ngoài phải thông qua modem. Để biết modem của bạn có IP công cộng (public IP) là gì, bạn hãy ấn vào đây Như ở trên 117.1.165.234 chính là IP của modem wifi nhà mình, bây giờ 1 thiết bị bên ngoài muốn truy cập vào web server của esp8266, nó phải truy cập vào IP này trước, sau đó, nó sẽ thông báo cho modem biết cụ thể là nó muốn truy cập vào esp8266 bằng cách thông báo cổng Ở bức ảnh trên, laptop và esp8266 đều ở trong LAN và có IP riêng, esp muốn cái điện thoại bên ngoài liên lạc được với nó, nó sẽ nói với modem rằng: “Ê modem, tao đăng kí cổng số 207”, tương tự nếu laptop cũng đua đòi tạo web server và muốn điện thoại truy cập vào, nó cũng bào với modem cần đăng kí cổng số 102 Bây giờ, khi điện thoại bên ngoài gõ vào trình duyệt 117.1.165.234:207 nó sẽ truy cập được vào esp8266, còn nếu muốn truy cập vào laptop thì nó sẽ vào 117.1.165.234:102 Hành động khai báo cổng cho modem chính là NAT PORT Để NAT PORT, có 2 cách chính:
Hướng dẫn NAT PORT – tạo webserver với esp8266Tùy vào modem mạng của bạn thuộc hãng nào, phiên bản nào mà sẽ có các cách NAT khác nhau, nhưng nhìn chung đều tương tự nhau và mò tí là ra thôi. Đầu tiên, phải biết được IP cục bộ của modem mạng để tín hành vào trang cài đặt ( chính là cái trang các bạn hay vào để đổi tên, mật khẩu wifi đó), thông thường nó sẽ là 192.168.1.1 hoặc 192.168.0.1 các bạn cứ gõ thử vào trình duyệt để xem cái nào vào được. Nếu cả 2 đều không vào được thì lấy laptop ra, mở cmd lên gõ ipconfig rồi tìm đến dòng Defaut gatewway sẽ thấy ip của modem Sau đó gõ IP đó vào trình duyệt và bạn sẽ được đưa đến trang đăng nhập ( Nguồn tham khảo https://lapcamera247.com/huong-dan-nat-port-va-cau-hinh-ten-mien-modem-viettel-f608-f600w.html ) Thông thường tài khoản là admin và mật khẩu là admin hoặc 123456 . Nếu thử không được thì lật mặt dưới modem wifi lên xem sẽ thấy ! Nếu vẫn không được thì ấn giữ nút reset modem để khôi phục mật khẩu về mặc định
Sau đó save lại Kiểm tra xem đã thông được ra internet chưaVào https://canyouseeme.org/ gõ IP công cộng của modem và port mà lúc nãy bạn đã mở, nếu báo OK là ok rùi đó Từ giờ mình có thể đi ra Úc, hay Tây Ban Nha rồi gõ 117.1.165.234:207 là có thể ung dung vào điều khiển các thiết bị trong nhà Khắc phục lỗi NAT mãi không được – tạo webserver với esp8266Chủ yếu có 2 nguyên nhân: Nguyên nhân 1, là mạng bang đang dùng là mạng đa lớp Như hình trên, có thể thấy esp8266 của chúng ta không kết nối trực tiếp với modem wifi gốc mà qua 1 roter tp-link nữa. Vậy nên bạn phải NAT cả cho roter tp-link luôn ( NAT 2 lần). Nếu bạn đang ở phòng trọ thì đến 99% là dùng qua mạng nhiều lớp ! Cái modem mà của vina, vietel, FPT mà có cái dây cáp quang cắm vào ý, cái ấy mới là modem gốc Nguyên nhân 2 là nhà mạng chưa cập nhật đúng IP công cộng của modem nhà bạn Khắc phục rất đơn giản, alo cho tổng đài bảo nó reset lại modem wifi (nó reset ở trên tổng chứ không phải cái nút reset ở modem đâu :v ) Bài đã dài, có thể bạn nghĩ tới đây đã hết, nhưng chưa đâu, vào 1 ngày đẹp trời cái web server lại đ*o vào được >< , Nguyên nhân là do khi modem wifi bị mất điện hay khởi động lại nó sẽ được nhà mạng phát ip mới, bạn lên trang https://whatismyipaddress.com/ sẽ thấy cái ip mới đét >< Để khắc phục vấn đề này chúng ta cần tới DDNS Hướng dẫn cấu hình DDNS – tạo webserver với esp8266Hiểu nôm na DDNS là 1 tên miền để bạn gõ vào trình duyệt thay vì gõ mấy cái số ip khô khan. Lúc nhà mạng phát ip công cộng mới cho modem ta vẫn vào được. Vào trang https://www.noip.com/ đăng kí tài khoản và đăng kí 1 tên miền có dạng yourname.ddns.com, mà ngày trước nó free giờ nó đồi phí hay sao ấy, để rảnh mình kiếm cái trang free khác up lên sau Sau khi đăng kí xong và đã có tên miền riêng thì quay trở lại rang quản lí của modem wifi, tìm đến phần DDNS setting và điền thông tin tên miền + user name + password mà bạn vừa đăng kí vào |