Module ESP-01 sản xuất bởi Ai-Thinker với chip ESP8266EX SoC | |
Nhà chế tạo | Espressif Systems |
---|---|
Loại | Vi điều khiển 32-bit |
CPU | Tensilica Diamond Standard 106Micro (còn gọi là L106) @ 80 MHz (mặc định) hoặc 160 MHz |
Bộ nhớ | 32 KiB instruction, 80 KiB user data |
Đầu vào | 17 chân GPIO |
Năng lượng | 3.3 V DC |
Sản phẩm sau | ESP32 |
ESP8266, còn được biết đến với tên đầy đủ là ESP8266EX, là một vi mạch Wi-Fi giá rẻ, hỗ trợ giao thức TCP/IP và có thể tích hợp vào các vi điều khiển, được sản xuất bởi Espressif Systems tại Thượng Hải, Trung Quốc.
Chip ESP8266 lần đầu tiên thu hút sự chú ý của các nhà sản xuất phương Tây vào tháng 8 năm 2014 nhờ vào module ESP-01, được sản xuất bởi Ai-Thinker. Module này cho phép các vi điều khiển kết nối với mạng Wi-Fi và thực hiện các kết nối TCP/IP đơn giản qua các lệnh kiểu Hayes (tập lệnh AT). Mặc dù lúc đầu rất ít tài liệu tiếng Anh về chip và lệnh của nó, giá thành thấp và thiết kế đơn giản của module đã thu hút nhiều hacker khám phá và dịch tài liệu tiếng Trung Quốc của chip.
ESP8285 là phiên bản của chip ESP8266 với bộ nhớ flash 1 MiB tích hợp, giúp người dùng có thể tạo ra các thiết bị kết nối Wi-Fi chỉ với một chip duy nhất.
Dòng vi mạch tiếp theo của ESP8266 là ESP32, bao gồm cả vi điều khiển ESP32-C3 tương thích với chân.
Đặc điểm kỹ thuật
Giống như nhiều vi mạch khác, để ESP8266EX hoạt động hiệu quả, cần thêm các thành phần hỗ trợ. Một thiết kế cơ bản cho ESP8266EX cần bổ sung các khối chức năng (tham khảo hình: Hướng dẫn thiết kế cho các module sử dụng vi mạch ESP8266EX):
• Khối cấp nguồn
• Quy trình khởi động và reset
• Bộ nhớ flash
• Tinh thể dao động
• Tầng RF
• Điện trở bên ngoài
• Cổng UART
Các module ESP8266 như ESP-01, ESP-12,... được chế tạo dựa trên vi mạch ESP8266EX với các thành phần như đã nêu.
Đặc điểm
Những đặc điểm nổi bật của vi mạch ESP8266EX bao gồm:
- Bộ xử lý: Sử dụng lõi vi xử lý L106 32-bit RISC theo tiêu chuẩn Tensilica Xtensa Diamond, hoạt động ở tần số 80 MHz và tích hợp SRAM trên chip.
- Bộ nhớ trong: ESP8266EX trang bị SRAM và ROM. Các bộ nhớ này có thể được truy xuất qua các giao diện iBus, dBus, và AHB. SRAM có kích thước nhỏ hơn 36kB khi vi mạch hoạt động ở chế độ station. ROM không thể lập trình, vì vậy chương trình được lưu trữ trong bộ nhớ flash ngoài.
- Flash ngoài: ESP8266EX sử dụng bộ nhớ flash ngoài để lưu trữ chương trình và khởi động trực tiếp từ bus SPI. Kích thước flash ngoài thay đổi tùy theo module ESP8266, ví dụ ESP-01 có kích thước 1MB, còn ESP-12E có thể lên đến 16MB. Nếu chương trình cần bộ nhớ lớn hơn, cần sử dụng flash ngoài có kích thước lớn hơn, với tối đa lý thuyết là 16 MB. Kích thước nhỏ nhất có thể là 512 kB (không bật chế độ OTA) hoặc 1 MB (bật chế độ OTA).
- Wi-Fi IEEE 802.11 b/g/n:
- Trang bị TR switch, balun, LNA, bộ khuếch đại công suất và mạng tích hợp
- Hỗ trợ xác thực WEP, WPA/WPA2, hoặc mạng mở không cần mật khẩu.
- 17 chân GPIO: Các chân có thể được cấu hình cho các chức năng I²C, I2S, UART, PWM, IR - điều khiển từ xa, v.v.
- 2 bộ đếm phần cứng 23 bit: FRC1 và FRC2.
- 3 SPI: SPI Slave/Master thông thường, Slave SDIO/SPI và HSPI Slave/Master.
- I²C: Hỗ trợ 1 I²C có thể hoạt động ở cả chế độ master và slave. Tất cả các GPIO có thể được cấu hình cho các chân SDA hoặc SCL của I²C qua phần mềm.
- Giao diện I²S với DMA (sử dụng chung chân với GPIO)
- UART: Hỗ trợ 2 UART, UART0 và UART1. UART0 sử dụng GPIO3 (RX) và GPIO1 (TX). UART1 sử dụng GPIO2 (TX) và GPIO8 (TX). Tuy nhiên, GPIO8 được dùng cho bộ nhớ flash, nên UART1 chỉ có thể sử dụng GPIO2 để truyền dữ liệu.
- ADC 10 bit
Sơ đồ chân của ESP-01
Sơ đồ chân của ESP-01 bao gồm:
- GND, chân nối đất (0 V)
- GPIO 2 (Chân I/O số 2)
- GPIO 0 (Chân I/O số 0)
- RX, chân nhận dữ liệu X, cũng là GPIO3
- VCC, chân cấp điện (+3.3 V; chịu được điện áp lên đến 3.6 V)
- RST, chân reset
- CH_PD, chân tắt nguồn của chip (Chip power-down)
- TX, chân truyền dữ liệu X, cũng là GPIO1
Bộ công cụ phát triển (SDK)
Vào tháng 10 năm 2014, Espressif Systems phát hành bộ công cụ phát triển phần mềm (SDK) cho phép ESP8266 hoạt động như một vi điều khiển độc lập, không còn chỉ là module hỗ trợ WiFi cho các vi điều khiển khác. Kể từ đó, nhiều phiên bản SDK chính thức đã được phát hành bởi Espressif, bao gồm hai phiên bản chính là ESP8266 NonOS SDK và ESP8266 RTOS SDK (dựa trên FreeRTOS).
Một lựa chọn thay thế cho SDK chính thức của Espressif là bộ SDK mã nguồn mở ESP-Open-SDK, dựa trên Bộ trình dịch GNU (GCC), hiện do Max Filippov duy trì. Một tùy chọn khác là bộ công cụ phát triển không chính thức (Unofficial Development Kit) của Mikhail Grigorev, nhưng nó chưa được cộng đồng đánh giá cao (với chỉ 260 sao trên GitHub vào năm 2021).
Các SDK khác, chủ yếu là mã nguồn mở, bao gồm:
- Arduino - Bộ firmware dựa trên C++, cho phép lập trình ESP8266 và các thành phần Wi-Fi của nó như các thiết bị Arduino khác. Mã nguồn của ESP8266 Arduino Core có sẵn trên GitHub.
- ESP8266 BASIC - Một trình biên dịch mã nguồn mở tương tự BASIC, thiết kế cho các ứng dụng Internet of Things với môi trường phát triển dựa trên trình duyệt tự lưu trữ.
- ESP Easy - Được phát triển bởi cộng đồng kỹ sư cho các ứng dụng nhà thông minh.
- ESPHome - Hệ thống điều khiển các board ESP8266 hoặc ESP32 thông qua các file cấu hình đơn giản và quản lý từ xa qua hệ thống nhà thông minh.
- Tasmota - Phần mềm mã nguồn mở phổ biến trong cộng đồng phát triển nhà thông minh.
- ESP-Open-RTOS - Phần mềm mã nguồn mở dựa trên FreeRTOS cho ESP8266.
- ESP-Open-SDK - SDK tích hợp miễn phí và mở mã nguồn cho các chip ESP8266 và ESP8285.
- Espruino - SDK JavaScript đang được phát triển, tương tự như Node.js, hỗ trợ nhiều MCU bao gồm ESP8266.
- ESPurna - Phần mềm mã nguồn mở cho ESP8285 và ESP8266.
- Forthright - Dự án mã nguồn mở của Jones Forth dành cho vi điều khiển ESP8266.
- MicroPython - Dự án MicroPython cho nền tảng ESP8266, nằm trong dự án triển khai Python cho thiết bị nhúng.
- Moddable SDK - Bao gồm ngôn ngữ JavaScript và thư viện hỗ trợ cho ESP8266.
- Mongoose OS - Hệ điều hành mã nguồn mở cho các sản phẩm kết nối, hỗ trợ ESP8266 và ESP32, phát triển bằng C hoặc JavaScript.
- NodeMCU - Phần mềm dựa trên ngôn ngữ Lua.
- PlatformIO - IDE và trình gỡ lỗi đa nền tảng, hỗ trợ mã nguồn và thư viện Arduino cùng nhiều framework khác cho nhiều vi điều khiển, bao gồm ESP8266.
- Punyforth - Ngôn ngữ lập trình lấy cảm hứng từ Forth dành cho ESP8266.
- Sming - Framework C/C++ bất đồng bộ phát triển tích cực với hiệu suất cao và nhiều tính năng mạng.
- uLisp - Phiên bản của ngôn ngữ Lisp được thiết kế cho các bộ vi xử lý có bộ nhớ RAM hạn chế.
- ZBasic cho ESP8266 - Phần mềm từ Visual Basic 6 của Microsoft, điều chỉnh để làm ngôn ngữ điều khiển cho vi điều khiển ZX và ESP8266.
- Zerynth - IoT framework để lập trình ESP8266 và các vi điều khiển khác bằng Python.
Module của Espressif
Dưới đây là các mô-đun ESP8266 đã được phát hành:
Tên | Số chân hoạt động được | Khoảng các giữa 2 chân cạnh nhau | Hệ số hình thức | LED | Antenna | Shielded | Kích thước (mm) | Ghi chú |
---|---|---|---|---|---|---|---|---|
ESP-WROOM-02 | 18 | 1,5 mm | Không | Có | 18 × 20 | Có | 18 x 20 | FCC ID 2AC7Z-ESPWROOM02. |
ESP-WROOM-02D | 18 | 1,5 mm | Không | Có | 18 × 20 | Có | 18 x 20 | FCC ID 2AC7Z-ESPWROOM02D. Bản sửa đổi của ESP-WROOM-02 tương thích với cả chip nhớ flash 150-mil và 208-mil. |
ESP-WROOM-02U | 18 | 1,5 mm | Không | Có | 18 × 20 | Có | 18 x 20 | Khác với ESP-WROOM-02D khi có đầu cắm antenna tương thích U.FL. |
ESP-WROOM-S2 | 20 | 1,5 mm | Không | Có | 16 × 23 | Có | 16 x 23 | FCC ID 2AC7Z-ESPWROOMS2. |
Trong các bảng dưới đây, 'Số chân hoạt động' bao gồm các chân GPIO và ADC mà thiết bị bên ngoài có thể kết nối với MCU ESP8266. 'Khoảng cách giữa các chân' cho biết khoảng cách giữa các chân trên module ESP8266, điều này quan trọng để xác định xem module có phù hợp với breadboard hay không. 'Hệ số hình thức' mô tả cấu trúc đóng gói của module, ví dụ như '2 × 9 DIL', có nghĩa là hai hàng 9 chân theo kiểu 'Dual In Line', giống như các chân của IC DIP. 'LED' cho biết có đèn LED trên board không. Nhiều module ESP-xx có một đèn LED nhỏ trên board mà có thể lập trình để nhấp nháy, từ đó người dùng có thể theo dõi hoạt động của module. Các tùy chọn antenna cho các board ESP-xx bao gồm antenna chìm trên board, antenna gốm trên board mạch, và đầu nối cho phép gắn antenna Wi-Fi ngoài. Do giao tiếp Wi-Fi tạo ra nhiều nhiễu tần số vô tuyến (RFI), các cơ quan chính phủ như FCC yêu cầu các thiết bị điện tử phải được che chắn để giảm thiểu sự nhiễu loạn. Một số module ESP-xx được đóng gói trong hộp kim loại có chứng nhận FCC. Các thị trường chính và thứ hai có thể yêu cầu chứng nhận FCC và che chắn thiết bị Wi-Fi.
Module Ai-Thinker
Đây là loại module đầu tiên được sản xuất với ESP8266 bởi nhà sản xuất bên thứ ba Ai-Thinker, và nó vẫn là một trong những module phổ biến nhất hiện nay. Các module này được gọi chung là 'module ESP-xx'. Để phát triển ứng dụng với các board này, bạn cần thêm một số thành phần phần cứng như bộ chuyển đổi TTL-to-USB (còn gọi là cầu chuyển đổi USB-to-UART) và nguồn điện 3,3 volt cấp từ bên ngoài. Các nhà phát triển mới thường được khuyên dùng các board phát triển Wi-Fi ESP8266 lớn hơn như NodeMCU, vì nó tích hợp sẵn bộ chuyển đổi USB-to-UART và đầu nối Micro-USB cùng bộ điều chỉnh nguồn 3,3 volt. Trong các dự án thực tế, khi các board NodeMCU đã được sử dụng, các module ESP-xx với chi phí thấp và kích thước chân nhỏ sẽ là lựa chọn tiết kiệm hơn.
Cột Ghi chú hiển thị kích thước bộ nhớ Flash áp dụng cho module hiện tại và tất cả các module bên dưới trong bảng. Các ngoại lệ sẽ được ghi chú trong ngoặc đơn.
Tên | Số chân hoạt động được | Khoảng các giữa 2 chân cạnh nhau | Hệ số hình thức | LED | Antenna | Shielded | Kích thước (mm) | Ghi chú |
---|---|---|---|---|---|---|---|---|
ESP-01 | 6 | 0.1 in | 2×4 DIL | Có | PCB trace | Không | 14.3 × 24.8 | Module có 2 phiên bản: loại 512 KiB bộ nhớ Flash và mạch in có màu xanh, loại 1 MiB Flash từ AI-Cloud hoặc module từ AI-Thinker có PCB màu đen. |
ESP-01S | 6 | 0.1 in | 2×4 DIL | Có | PCB trace | Không | 14.4 × 24.7 | 1 MiB Flash |
ESP-01M | 16 | 1.6 mm | 2×9 edge connector | Không | PCB trace | Có | 18.0 × 18.0 | Dùng ESP8285 (1 MiB built-in flash). |
ESP-02 | 6 | 0.1 in | 2×4 castellated | Không | U.FL socket | Không | 14.2 × 14.2 | |
ESP-03 | 10 | 2 mm | 2×7 castellated | Không | Ceramic | Không | 17.3 × 12.1 | |
ESP-04 | 10 | 2 mm | 2×4 castellated | Không | Không | Không | 14.7 × 12.1 | |
ESP-05 | 3 | 0.1 in | 1×5 SIL | Không | U.FL socket | Không | 14.2 × 14.2 | |
ESP-06 | 11 | various | 4×3 dice | Không | Không | Có | 14.2 × 14.7 | Không được FCC chấp thuận |
ESP-07 | 14 | 2 mm | 2×8 pinhole | Có | Ceramic + U.FL socket | Có | 20.0 × 16.0 | Không được FCC chấp thuận |
ESP-07S | 14 | 2 mm | 2×8 pinhole | Không | U.FL socket | Có | 17.0 × 16.0 | Được FCC và CE chấp thuận |
ESP-08 | 10 | 2 mm | 2×7 castellated | Không | Không | Có | 17.0 × 16.0 | Không được FCC chấp thuận |
ESP-09 | 10 | various | 4×3 dice | Không | Không | Không | 10.0 × 10.0 | |
ESP-10 | 3 | 2 mm | 1×5 castellated | Không | Không | Không | 14.2 × 10.0 | |
ESP-11 | 6 | 1.27 mm | 1×8 pinhole | Không | Ceramic | Không | 17.3 × 12.1 | |
ESP-12 | 14 | 2 mm | 2×8 castellated | Có | PCB trace | Có | 24.0 × 16.0 | Được FCC và CE chấp thuận |
ESP-12E | 20 | 2 mm | 2×8 castellated | Có | PCB trace | Có | 24.0 × 16.0 | 4 MiB flash. |
ESP-12F | 20 | 2 mm | 2×8 castellated | Có | PCB trace | Có | 24.0 × 16.0 | Được FCC và CE chấp thuận.
Cải thiện hoạt động của antenna. |
ESP-12S | 14 | 2 mm | 2×8 castellated | Có | PCB trace | Có | 24.0 × 16.0 | Được FCC chấp thuận |
ESP-13 | 16 | 1.5 mm | 2×9 castellated | Không | PCB trace | Có | W18.0 × L20.0 | Được đánh dấu "FCC". So với module ESP-12, module ESP-13 có shield được được đặt ở một bên của board. |
ESP-14 | 22 | 2 mm | 2×8 castellated +6 | Có | PCB trace | Có | 24.3 × 16.2 | Được quảng cáo là "AI Cloud Inside". |
Các board khác
Các board ESP8266 mới ngày càng trở nên phổ biến hơn so với các module ESP-xx ban đầu nhờ hỗ trợ các thành phần cần thiết cho việc phát triển phần mềm. Chúng thường tích hợp mạch chuyển đổi USB sang UART (như CP2102 của Silicon Labs hoặc WCH CH340G) và đầu nối Micro-USB cùng bộ ổn áp 3,3 volt, cung cấp nguồn điện cho board và kết nối với máy tính chủ. Ngược lại, các module ESP-xx trước đó yêu cầu người dùng phải mua riêng bộ chuyển đổi USB-to-serial và bộ ổn áp 3,3V. Các board ESP8266 hiện đại như NodeMCU không chỉ dễ sử dụng mà còn cung cấp nhiều chân GPIO hơn. Hầu hết các board mạch được liệt kê ở đây dựa trên module ESP-12E. Các module ESP8266 mới tiếp tục được giới thiệu gần như mỗi tháng.
Tên | Số chân hoạt động được | Pitch | Form factor | LED | Antenna | Shielded | Kích thước (mm) | Ghi chú |
---|---|---|---|---|---|---|---|---|
Bolt IoT | 14 | 0.1 in | 2×14 DIL | Có | PCB trace | Có | 30 × 40 | Module hỗ trợ khe cắm thẻ nhớ và các tính năng như Lib-Discovery và Fail Safe Mode. Có khả năng kết nối IoT cloud riêng từ nhà sản xuất. |
Olimex MOD-WIFI-ESP8266 | 2 | 0.1 in | UEXT module | Có | PCB trace | Không | ? | Chỉ 2 chân RX/TX được kết nối đến UEXT connector. |
Olimex MOD-WIFI-ESP8266-DEV | 20 | 0.1 in | 2×11 DIL + castellated | Có | PCB trace | Không | 33 × 23 | Toàn bộ các GPIO đều được nối, có pad để hàn UEXT connector (với chân tín hiệu RX/TX và SDA/SCL). |
NodeMCU DEVKIT | 14 | 0.1 in | 2×15 DIL | Có | PCB trace | Có | 49 × 24.5 | Sử dụng module ESP-12; bao gồm cả bộ chuyển đổi USB-serial. |
Adafruit Huzzah ESP8266 breakout | 14 | 0.1 in | 2×10 DIL | Có | PCB trace | Có | 25 × 38 | Dùng module ESP-12. |
SparkFun ESP8266 Thing WRL-13231 | 12 | 0.1 in | 2×10 DIL | Có | PCB trace + U.FL socket | Không | 58 × 26 | Có header cho FTDI, cổng Micro-USB, và khe cắm pin Li-ion để sạc. |
KNEWRON Technologies smartWIFI | 12 | 0.1 in | 2×20 DIL | Có 1 RGB | PCB trace | Có | 25.4 × 50.8 | Hỗ trợ chip chuyển đổi USB-UART CP2102, khe cắm pin sạc, cổng micro-USB để cấp nguồn và sạc pin, 1 LED RGB và nút nhấn USER/Reflash. |
ArduCAM ESP8266 UNO | 12+ | 0.1 in | Arduino Uno | Có | PCB trace | Có | 53.4 × 68.6 | Sử dụng module ESP8266MOD của AI Thinker, hỗ trợ cổng Micro-USB, chân cắm pin, camera và thẻ nhớ uSD. Kích thước tương thích với các shield Arduino Uno. |
DoIT ESPduino | 12 | 0.1 in | Arduino Uno | Có | PCB trace | Có | 53.4 × 68.6 | Sử dụng module ESP-WROOM-02 (ESP-13) và cổng USB Type B. Tương thích hoàn toàn với shield Arduino Uno. |
WeatherPlus - SwitchDoc Labs | 26+Grove | 0.1 in | Custom | Có | PCB trace | Có | 86.0 × 50.0 | Sử dụng module AI Thinker Model ESP8266MOD (ESP-13) và FTDI cho việc lập trình và cổng Mini-USB để cấp nguồn. Hoàn toàn tương thích với phần mềm Adafruit Huzzah. Bao gồm áp kế BMP280, các connector ADS1115 và Grove I2C. Hỗ trợ khe cắm cho máy đo gió (anemometer)/Wind Vane/Rain Bucket. |
WeMos D1 | 12 | 0.1 in | Arduino Uno | Có | PCB trace | Có | 53.4 × 68.6 | Sử dụng module ESP-12F và hỗ trợ khe cắm Micro-USB. Đã ngừng sản xuất vì có dòng module kế thừa là WeMos D1 R2. |
WeMos D1 R2 | 12 | 0.1 in | Arduino Uno | Có | PCB trace | Có | 53.4 × 68.6 | Sử dụng module ESP-12F và có socket Micro-USB. |
WeMos D1 mini | 12 | 0.1 in | 2×8 DIL | Có | PCB trace | Có | 25.6 × 34.2 | Sử dụng module ESP-12S và có khe cắm Micro USB. Bộ nhớ flash 4MB. |
WeMos D1 mini Lite | 12 | 0.1 in | 2×8 DIL | Có | PCB trace | Có | 25.6 × 34.2 | Sử dụng chip ESP8285, thuộc loại chip ESP8266 với bộ nhớ flash 1 MiB flash; có khe cắm Micro USB. |
WeMos D1 mini Pro | 12 | 0.1 in | 2×8 DIL | Có | Ceramic và U.FL socket | Có | 25.6 × 34.2 | Sử dụng chip ESP8266EX; có khe cắm Micro-USB, đầu cắm antenna U.FL, và bộ nhớ flash 16 MiB. |
ESPert ESPresso Lite | 16 | 0.1 in | 2×8 DIL | Có | PCB trace | Có | 26.5 × 57.6 | Sử dụng module ESP-WROOM-02. Số lượng board sản xuất giới hạn vì là phiên bản beta. |
ESPert ESPresso Lite V2.0 | 24 | 0.1 in | 2×10 DIL | Có | PCB trace | Có | 28 × 61 | Phiên bản cái tiến của ESPresso Lite. |
In-Circuit ESP-ADC | 18 | 0.1 in | 2×9 DIL | Không | U.FL socket | Có | 22.9 × 14.9 | Sử dụng ESP8266EX chip. |
Watterott ESP-WROOM02-Breakout | 14 | 0.1 in | 2×10 DIL | Có | PCB trace | Có | 40.64 × 27.94 | Sử dụng module Espressif ESP-WROOM-02. |
Geek Wave Solution IOT WROOM-02 Dev. Board | 20 | 0.1 in | ? | Có | PCB trace | Có | 93.80 × 80.02 | Board phát triển với module Espressif ESP-WROOM-02 module và 4 relay. |
Witty 2-piece board | 20 | 0.1 in | ? | Có | PCB trace | Có | ? | Board phát triển với chip Espressif ESP8266 ESP-12E và board rời cho CH340G USB. |
ESP32-C3
Vào năm 2020, Espressif đã giới thiệu con chip mới ESP32-C3, tương thích với các chân của ESP8266. Chip này hoạt động dựa trên CPU RISC-V 32-bit lõi đơn, đạt tốc độ xung nhịp tối đa 160 MHz. Nó được trang bị 400 kB SRAM và 384 kB ROM tích hợp.
- ESP32
- Internet of Things
- Vi điều khiển
Tài liệu tham khảo
- Espressif (2019). Hướng dẫn thiết kế phần cứng ESP8266 (PDF). Espressif. Truy cập ngày 1 tháng 12 năm 2021.
- Espressif (2020). Tài liệu tham khảo kỹ thuật ESP8266, Phiên bản 1.7 (PDF). Truy cập ngày 15 tháng 5 năm 2021.
- AI-Thinker, ESP-01 (2015). Module WiFi ESP-01, Phiên bản 1.0 (PDF). AI-Thinker. Truy cập ngày 2 tháng 12 năm 2021.
- AI-Thinker, ESP-12E (2015). Module WiFi ESP-12E Phiên bản 1.0 (PDF). AI-Thinker. Truy cập ngày 2 tháng 12 năm 2021.