Chúng ta hãy thảo luận về cách bắt đầu phát triển các ứng dụng mạng cho chip ESP8266 bằng cách sử dụng Mongoose Embedded Web Server trong Linux. Tôi sẽ sử dụng Ubuntu, nhưng mọi thứ đều có thể dễ dàng điều chỉnh cho bất kỳ bản phân phối Linux nào.

Chọn một loại hoạt động với Linux (về cơ bản là hầu hết các loại) và có chân 3,3V và hãy nhớ rằng: hầu hết các bộ chuyển đổi UART-USB đều có chân cho cả 3,3V và 5V nhưng bạn không nên kết nối ESP với chân 5V. Thiết bị này không chịu được điện áp và có thể làm cháy mô-đun của bạn.
Bây giờ hãy kết nối (Bộ chuyển đổi ESP ->):
VCC -> 3,3V
GND -> GND
RX0 -> TX (không phải RX)
TX0 -> RX
CH_PD -> 3.3V
Bạn có thể sử dụng lệnh dmesg | grep usb để tìm thiết bị của bạn.
Ví dụ, sau khi kết nối NodeMCU, bạn sẽ thấy thông báo như sau rằng:
Như bạn thấy, NodeMCU hiện có sẵn dưới dạng /dev/ttyUSB0.
Để kiểm tra cuối cùng, hãy sử dụng bất kỳ thiết bị đầu cuối nào để kết nối với thiết bị mới; Tôi sẽ sử dụng picocom. Đây là thiết bị đầu cuối nhẹ. Trong Ubuntu, bạn có thể cài đặt bằng:
Đang thử:
Nếu mọi thứ đều ổn, bạn sẽ thấy "Terminal ready" trong đầu ra picocom.
Chạy:
lệnh, đăng xuất, đăng nhập lại và thử kết nối ESP một lần nữa. “Access denied” phải biến mất.
Mongoose được cung cấp kèm theo một ví dụ cho ESP8266 và RTOS SDK. Hướng dẫn và mã mẫu cho nó nằm ở tại đây.
Lưu ý: ESP8266 có hai phiên bản SDK. Phiên bản đầu tiên không phải là hệ điều hành và phiên bản thứ hai dựa trên RTOS. Trong bài viết này, tôi sẽ sử dụng phiên bản sau. Để tìm ra sự khác biệt giữa chúng, hãy tìm kiếm trên Google hoặc đọc câu trả lời này tại diễn đàn chính thức.
Để xây dựng ví dụ, bạn có hai lựa chọn:
Hướng dẫn cài đặt docker có sẵn tại đây. Hãy thử xem, nó thực sự đơn giản, bạn chỉ cần thêm kho lưu trữ docker vào Linux của mình và cài đặt nó như một chương trình thông thường với apt.
Sau khi docker được cài đặt, hãy vào thư mục mongoose/examples/ESP8266_RTOS và chạy build.sh
Trong lần dựng đầu tiên, docker sẽ tải xuống hình ảnh cần thiết. Có thể mất một lúc, tùy thuộc vào kênh internet của bạn. Nhưng, sau khi build.sh hoàn tất trong thư mục ./bin, bạn sẽ tìm thấy hai tệp .bin.
Đó là chương trình cơ sở. Bạn đã làm điều này!
Nó khó hơn một chút và nhàm chán, nhưng không quá phức tạp. Đặc biệt, vì Cesanta đã xây dựng một số công cụ cho bạn và bạn không cần phải xây dựng chúng từ nguồn.
Đây là cách hoạt động:
Bây giờ chạy:
Và bây giờ, nếu mọi thứ được cài đặt đúng cách, bạn sẽ có chương trình cơ sở trong thư mục ./bin
Bạn lại làm được rồi!
Bây giờ, hãy ngắt kết nối picocom nếu vẫn đang kết nối (Gợi ý: nhấn Ctrl+A; Ctrl+D để thoát khỏi nó) và chạy:
Lưu ý quan trọng: [/b]nếu mô-đun của bạn không phải là NodeMCU, bạn cần nối đất GPIO0 trước khi nhấp nháy (nối đất GPIO0 sẽ chuyển mô-đun sang chế độ nhấp nháy). Sau khi nhấp nháy, ngắt kết nối GPIO0 khỏi đất và khởi động lại ESP.
Nếu không có lỗi nào xảy ra, bạn sẽ thấy đầu ra như thế này:
Sẵn sàng! Bây giờ thiết bị đã được flash bằng chương trình cơ sở của bạn.
Xin chúc mừng! Bạn vừa chạy Web Server trên ESP8266!
Xem tệp user_main.c [/b] của nó. Nó thiết lập điểm truy cập WiFi và khởi động máy chủ web. Bạn có thể dễ dàng thay đổi chế độ AP thành chế độ trạm (và kết nối với mạng WiFi của mình) và sử dụng API Mongoose để triển khai bất cứ điều gì bạn muốn. Đây là cách sử dụng Mongoose phổ biến, vì vậy, bạn có thể sử dụng ví dụ Mongoose khác để xây dựng chương trình của mình và có http, tcp, udp, mqtt cùng nhiều tính năng khác trên thiết bị ESP của bạn.
Sử dụng tài liệu Espressif (ví dụ tài liệu này) để tìm hiểu cách điều khiển mô-đun WiFi ESP8266 (và không chỉ WiFi) và tài liệu của Mongoose để khám phá các tính năng của Mongoose.
Punks chưa chết!
Who is who
Vì bạn đã bắt đầu đọc bài viết này, tôi cho rằng bạn đã biết về Linux, ESP8266 và Mongoose. Vì vậy, chỉ là phần giới thiệu ngắn gọn.ESP8266
Chip giá rẻ có WiFi tích hợp, do Expressif phát triển. Nếu bạn muốn tìm hiểu sâu hơn, hãy xem trang web chính thức.Mongoose
Mongoose là một thư viện đa giao thức hoàn chỉnh với lõi dưới 40kB do Cesanta phát triển. Tìm thông tin chế độ về nó trên trang web Cesanta.Linux
Thật sao?Kết nối ESP8266 với máy tính của bạn
Được rồi, trước tiên chúng ta cần kết nối chip ESP8266 với máy tính của bạn. Bạn có thể thực hiện theo nhiều cách.NodeMCU
Nếu bạn có mô-đun NodeMCU, với bộ chuyển đổi UART sang USB tích hợp, tất cả những gì bạn phải làm là kết nối mô-đun với máy tính qua USB. KISS!Kết nối với bộ chuyển đổi UART-USB bên ngoài
Nếu mô-đun ESP của bạn không có bộ chuyển đổi UART-USB bên trong, bạn cần một bộ chuyển đổi bên ngoài. Có rất nhiều loại - chỉ cần google nó.Chọn một loại hoạt động với Linux (về cơ bản là hầu hết các loại) và có chân 3,3V và hãy nhớ rằng: hầu hết các bộ chuyển đổi UART-USB đều có chân cho cả 3,3V và 5V nhưng bạn không nên kết nối ESP với chân 5V. Thiết bị này không chịu được điện áp và có thể làm cháy mô-đun của bạn.
Bây giờ hãy kết nối (Bộ chuyển đổi ESP ->):
VCC -> 3,3V
GND -> GND
RX0 -> TX (không phải RX)
TX0 -> RX
CH_PD -> 3.3V
Kết nối với Arduino
Nếu bạn không có bộ chuyển đổi UART-USB nhưng có Arduino với chân 3.3V, bạn có thể dễ dàng sử dụng nó để kết nối ESP:- Kết nối Arduino với máy tính qua USB
- Kết nối RESET của Arduino với GND của nó: cần phải tắt bộ xử lý chủ, vì chúng ta chỉ cần mô-đun UART-USB
- Kết nối ESP (ESP -> Arduino)VCC -> 3.3V
- GND -> GND
- RX0 -> RX0 (không phải TX)
- TX0 -> TX
- CH_PD -> 3.3V
Đang xác minh kết nối
Nếu kết nối của bạn ổn, ESP sẽ xuất hiện dưới dạng thiết bị tty mới. Thông thường, NodeMCU và ESP được kết nối qua bộ chuyển đổi UART-USB sẽ xuất hiện dưới dạng /dev/ttyUSBx (x = 0, 1, 2, v.v.) và phiên bản của Arduino sẽ xuất hiện dưới dạng /dev/ttyACMx (x = 0, 1, 2, v.v.)Bạn có thể sử dụng lệnh dmesg | grep usb để tìm thiết bị của bạn.
Ví dụ, sau khi kết nối NodeMCU, bạn sẽ thấy thông báo như sau rằng:
Mã:
[ 1496.765417] usb 2-3.3: new full-speed USB device number 15 using xhci_hcd
Mã:
[ 1496.867729] usb 2-3.3: New USB device found, idVendor=10c4, idProduct=ea60
Mã:
[ 1496.867740] usb 2-3.3: Product: CP2102 USB to UART Bridge Controller
Mã:
[ 1497.900384] usbcore: registered new interface driver usbserial
Mã:
[ 1497.903897] usbcore: registered new interface driver cp210x
Mã:
[B][ 1497.904382] usb 2-3.3: cp210x converter now attached to ttyUSB0[/b]
Như bạn thấy, NodeMCU hiện có sẵn dưới dạng /dev/ttyUSB0.
Để kiểm tra cuối cùng, hãy sử dụng bất kỳ thiết bị đầu cuối nào để kết nối với thiết bị mới; Tôi sẽ sử dụng picocom. Đây là thiết bị đầu cuối nhẹ. Trong Ubuntu, bạn có thể cài đặt bằng:
Mã:
sudo apt install picocom
Mã:
picocom /dev/ttyUSB0 -b 115200
Sửa lỗi "Access Denied"
Nếu picocom hiển thị "Access Denied", điều đó thường có nghĩa là người dùng hiện tại không phải là thành viên của nhóm dialout: trong Linux, để truy cập vào các cổng nối tiếp, người dùng phải là thành viên của nhóm này.Chạy:
Mã:
sudo usermod -aG docker $USER
Building Mongoose
Tải xuống bản phát hành Mongoose mới nhất từ tại đây.Mongoose được cung cấp kèm theo một ví dụ cho ESP8266 và RTOS SDK. Hướng dẫn và mã mẫu cho nó nằm ở tại đây.
Lưu ý: ESP8266 có hai phiên bản SDK. Phiên bản đầu tiên không phải là hệ điều hành và phiên bản thứ hai dựa trên RTOS. Trong bài viết này, tôi sẽ sử dụng phiên bản sau. Để tìm ra sự khác biệt giữa chúng, hãy tìm kiếm trên Google hoặc đọc câu trả lời này tại diễn đàn chính thức.
Để xây dựng ví dụ, bạn có hai lựa chọn:
- Sử dụng docker và hình ảnh docker sẵn sàng sử dụng
- Cài đặt SDK và toolchain trên máy tính của bạn
Sử dụng Docker
Cách này đơn giản hơn và tôi tin là cách tốt hơn. Hình ảnh docker của Cesanta chứa mọi thứ bạn cần để xây dựng Mongoose cho ESP (và không chỉ Mongoose - bất kỳ ứng dụng ESP nào). Vì vậy, bạn không cần phải cài đặt cục bộ và bạn có thể dễ dàng chia sẻ mã của mình với bạn bè và đồng nghiệp để họ có thể xây dựng chương trình cơ sở của bạn và nhận được kết quả chính xác như vậy.Hướng dẫn cài đặt docker có sẵn tại đây. Hãy thử xem, nó thực sự đơn giản, bạn chỉ cần thêm kho lưu trữ docker vào Linux của mình và cài đặt nó như một chương trình thông thường với apt.
Sau khi docker được cài đặt, hãy vào thư mục mongoose/examples/ESP8266_RTOS và chạy build.sh
Trong lần dựng đầu tiên, docker sẽ tải xuống hình ảnh cần thiết. Có thể mất một lúc, tùy thuộc vào kênh internet của bạn. Nhưng, sau khi build.sh hoàn tất trong thư mục ./bin, bạn sẽ tìm thấy hai tệp .bin.
Đó là chương trình cơ sở. Bạn đã làm điều này!
Sử dụng SDK cục bộ
Nếu docker quá đơn giản đối với bạn hoặc vì bất kỳ lý do gì bạn muốn sử dụng các công cụ được cài đặt cục bộ, bạn cũng có thể làm như vậy.Nó khó hơn một chút và nhàm chán, nhưng không quá phức tạp. Đặc biệt, vì Cesanta đã xây dựng một số công cụ cho bạn và bạn không cần phải xây dựng chúng từ nguồn.
Đây là cách hoạt động:
- Sao chép ESP RTOS SDK từ kho lưu trữ này. Tệp makefile mẫu sẽ tìm kiếm tệp này trong thư mục /opt/ESP8266_RTOS_SDK, do đó, bạn có thể đặt một kho lưu trữ đã sao chép vào thư mục này hoặc sửa đổi đường dẫn đến kho lưu trữ đó trước khi xây dựng ví dụ (xem bên dưới).
- Tải xuống xtensa-lx106-elf.tar.bz2 từ thư mục công khai này.
- Giải nén tệp xtensa-lx106-elf.tar.bz2. Ví dụ, vào thư mục /opt:
sudo tar -xvf xtensa-lx106-elf.tar.bz2 -C /opt
- Sửa đổi biến PATH của bạn, ví dụ, nếu bạn giải nén toolchain vào thư mục /opt, hãy sử dụng lệnh sau:
export PATH=/opt/xtensa-lx106-elf/bin:$PATH
Bây giờ chạy:
Mã:
$ export SDK_PATH=/opt/ESP8266_RTOS_SDK # Put your path to SDK here
Mã:
$ make clean; make BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=dio SPI_SIZE_MAP=0
Bạn lại làm được rồi!
Đèn ESP
Có rất nhiều công cụ có sẵn để flash ESP8266. Chúng ta sẽ sử dụng esptool. Để sử dụng, hãy sao chép kho lưu trữ này và thêm đường dẫn đến esptool.py vào biến PATH của bạn (tùy chọn này và rất tiện lợi).Bây giờ, hãy ngắt kết nối picocom nếu vẫn đang kết nối (Gợi ý: nhấn Ctrl+A; Ctrl+D để thoát khỏi nó) và chạy:
Mã:
esptool.py --port /dev/ttyUSB0 --baud 230400 \[B]write_flash --flash_mode=dio --flash_size=4m \
0x00000 ${BIN_PATH}/eagle.flash.bin \
0x20000 ${BIN_PATH}/eagle.irom0text.bin \
0x7e000 ${SDK_PATH}/bin/esp_init_data_default.bin
Nếu không có lỗi nào xảy ra, bạn sẽ thấy đầu ra như thế này:
Mã:
Connecting...[B]
Erasing flash...
Took 0.58s to erase flash block
Wrote 35840 bytes at 0x00000000 in 1.8 seconds (157.5 kbit/s)...
Erasing flash...
Took 2.02s to erase flash block
Wrote 301056 bytes at 0x00020000 in 15.4 seconds (156.7 kbit/s)...
Erasing flash...
Took 0.11s to erase flash block
Wrote 1024 bytes at 0x0007e000 in 0.1 seconds (163.5 kbit/s)...
Leaving…
Kết quả đầu tiên
Bây giờ bạn sẽ thấy mạng WiFi "Mongoose" xuất hiện. Ví dụ thiết lập một AP. Sử dụng mật khẩu “Mongoose” để kết nối, sau đó điều hướng đến http://192.168.4.1/ và bạn sẽ thấy trang chào mừng “Hello, world”.Xin chúc mừng! Bạn vừa chạy Web Server trên ESP8266!
Các bước tiếp theo
Các bước tiếp theo tùy thuộc vào bạn. Bạn có thể sử dụng ví dụ được mô tả làm điểm bắt đầu.Xem tệp user_main.c [/b] của nó. Nó thiết lập điểm truy cập WiFi và khởi động máy chủ web. Bạn có thể dễ dàng thay đổi chế độ AP thành chế độ trạm (và kết nối với mạng WiFi của mình) và sử dụng API Mongoose để triển khai bất cứ điều gì bạn muốn. Đây là cách sử dụng Mongoose phổ biến, vì vậy, bạn có thể sử dụng ví dụ Mongoose khác để xây dựng chương trình của mình và có http, tcp, udp, mqtt cùng nhiều tính năng khác trên thiết bị ESP của bạn.
Sử dụng tài liệu Espressif (ví dụ tài liệu này) để tìm hiểu cách điều khiển mô-đun WiFi ESP8266 (và không chỉ WiFi) và tài liệu của Mongoose để khám phá các tính năng của Mongoose.
Punks chưa chết!