ESP8266

**ESP8266**, hay gọi đầy đủ là **ESP8266EX** là một vi mạch Wi-Fi giá rẻ, có hỗ trợ bộ giao thức TCP/IP và có thể tích hợp vào thành phần của vi điều khiển, được sản xuất bởi hãng Espressif Systems ở Thượng Hải, Trung Quốc.

Chip ESP8226 lần đầu tiên được các nhà sản xuất phương Tây chú ý vào tháng 8 năm 2014 với **module ESP-01**, do nhà sản xuất bên thứ ba là Ai-Thinker sản xuất. 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 bằng cách sử dụng các lệnh kiểu Hayes (tập lệnh AT). Tuy nhiên, ban đầu hầu như không có tài liệu tiếng Anh nào về chip và các tập lệnh của nó. Vì mức giá rất thấp với rất ít thành phần bên ngoài khác trên module, các module ESP8266 đã thu hút nhiều hacker khám phá nó và các phần mềm trên đó, cũng như việc dịch thuật các tài liệu tiếng Trung Quốc của chip.

**ESP8285** là một chip ESP8266 với 1&nbsp;MiB bộ nhớ flash được tích hợp, cho phép người dùng có thể sản xuất các thiết bị có khả năng kết nối với Wi-Fi chỉ với một chip đơn.

Dòng chip kế thừa ESP8266 là ESP32, bao gồm cả vi điều khiển ESP32-C3 tương thích chân.

## Tính năng kĩ thuật
nhỏ|Thiết kế tham khảo cho các module sử dụng chip ESP8266EX
Như nhiều vi mạch khác, cần thêm các khối khác để vi mạch ESP8266EX có thể hoạt động được. Một thiết kế tối thiểu cho ESP8266EX cần thêm các khối (tham khảo hình: *Thiết kế tham khảo cho các module sử dụng chip ESP8266EX*):

• Power supply (tạm dịch: khối nguồn)

• Power-on sequence and reset

• Flash

• Crystal oscillator

• RF

• External resistor (tạm dịch: điện trở ngoại)

• UART

Các module ESP8266 như ESP-01, ESP-12,... đều được thiết kế từ chip *ESP8266EX* với các khối như trên.

### Tính năng
Các tính năng của chip ESP8266EX bao gồm:
* Bộ xử lý: Lõi vi xử lý L106 32-bit RISC dựa trên Tiêu chuẩn Tensilica Xtensa Diamond, hoạt động ở tần số 80&nbsp;MHz và SRAM trên chip.
* Bộ nhớ nội: Bộ nhớ nội của ESP8266EX bao gồm SRAM và ROM. ESP8266EX có thể truy xuất các bộ nhớ này thông qua các interface iBus, dBus, và AHB. Kích thước SRAM nhỏ hơn 36kB khi ESP8266EX hoạt động ở chế độ station. ROM của ESP8266EX không lập trình được nên chương trình được lưu trong Flash ngoại.
* Flash ngoại: ESP8266EX sử dụng flash ngoại để lưu trữ chương trình và boot trực tiếp chương trình từ bus SPI. Kích thước flash ngoại mặc định sẽ khác nhau với từng loại module ESP8266, như ESP-01 có kích thước flash ngoại là 1MB, ESP-12E có kích thước flash ngoại là 16MB. Nếu chương trình sử dụng kích thước lớn hơn kích thước mặc định thì bộ flash ngoại với kích thước lớn hơn phải được sử dụng tuy nhiên kích thước flash ngoại tối đa về mặt lý thuyết cho phép là 16 MB. Kích thước bộ nhớ flash nhỏ nhất có thể là 512 kB (tắt chế độ OTA) hoặc 1 MB (bật chế độ OTA).
* IEEE 802.11 b/g/n Wi-Fi:
** Tích hợp TR switch, balun, LNA, bộ khuếch đại công suất và mạng kết hợp
** Xác thực WEP hoặc WPA/WPA2 hoặc mạng mở không có password.
* 17 chân GPIO: Các chân có thể được dồn kênh cho các chức năng I²C, I2S, UART, PWM, IR - điều khiển từ xa,...
*2 hardware timer 23 bit: FRC1 và FRC2.
* 3 SPI: general Slave/Master SPI, Slave SDIO/SPI và general Slave/Master HSPI.
* I²C: Hỗ trợ 1 I²C hoạt động được ở cả chế độ master và slave. Vì các GPIO đều có thể được cấu hình ở chế độ cực máng hở nên các GPIO đều có thể được cấu hình cho các chân SDA hay SCL của I²C bằng 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 là 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 để kết nối bộ nhớ flash của chip nên UART1 chỉ sử dụng được GPIO2 để truyền dữ liệu.
* ADC 10 bit

### Sơ đồ chân của ESP-01

Sơ đồ chân của module ESP-01:

# GND, chân đất (0 V)
# GPIO 2 (General-purpose input/output No. 2)
# GPIO 0 (General-purpose input/output No. 0)
# RX, nhận bit dữ liệu X, cũng là GPIO3
# VCC, chân điện áp (+3.3 V; có thể chịu được điện áp đến 3.6 V)
# RST, Reset
# CH_PD, Chip tắt nguồn (Chip power-down)
# TX, truyền bit dữ liệu X, cũng là GPIO1

## 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), giúp ESP8266 có thể hoạt động như là một vi điều khiển riêng biệt chứ không cần phải sử dụng như là một module hỗ trợ giao tiếp WiFi cho một vi điều khiển khác như trước đó. Kể từ đó, đã có nhiều bản phát hành SDK chính thức từ Espressif; Espressif duy trì hai phiên bản của SDK, ESP8266 NonOS SDK và ESP8266 RTOS SDK (dựa trên FreeRTOS).

Một phiên bản SDK 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 được Max Filippov duy trì. Một SDK thay thế khác là bộ "Unofficial Development Kit" (tạm dịch: "Bộ công cụ phát triển không chính thức") của Mikhail Grigorev, tuy nhiên hiện tại chưa được cộng đồng đánh giá cao (với chỉ 260 sao vào năm 2021) trên Github.

Các SDK khác, chủ yếu là mã nguồn mở, bao gồm:

* Arduino&nbsp;- Bộ firmware dựa trên C++. Với lõi này, CPU ESP8266 và các thành phần Wi-Fi của nó có thể được lập trình giống như bất kỳ thiết bị Arduino nào 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ở giống BASIC được thiết kế riêng cho các ứng dụng Internet of Things. 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ư phát triển nhà thông minh.
* **ESPHome** - ESPHome là hệ thống để điều khiển các board ESP8266 hoặc ESP32 bởi các file cấu hình đơn giản nhưng hiệu quả và điều khiển các board này từ xa thông qua hệ thống nhà thông minh.
* Tasmota - phần mềm mã nguồn mở, rất phổ biến với những người phát triển nhà thông minh.
* ESP-Open-RTOS&nbsp;- Phần mềm mã nguồn mở cho ESP8266 dựa trên FreeRTOS.
* ESP-Open-SDK&nbsp;- SDK tích hợp miễn phí và mở mã nguồn (càng nhiều càng tốt) cho các chip ESP8266 và ESP8285.
* Espruino&nbsp;- Một Javascript SDK đang được phát triển, mô phỏng giống với Node.js. Hỗ trợ một số MCU, bao gồm cả ESP8266.
* ESPurna&nbsp;- Phần mềm mã nguồn mở cho ESP8285 và ESP8266.
* Forthright&nbsp;- Dự án mã nguồn mở của Jones Forth cho vi điều khiển ESP8266.
* MicroPython&nbsp;- Một dự án MicroPython cho nền tảng ESP8266 (nằm trong dự án triển khai Python cho các thiết bị nhúng) 
* Moddable SDK bao gồm ngôn ngữ JavaScript và hỗ trợ thư viện cho ESP8266
* Mongoose OS&nbsp;- Hệ điều hành mã nguồn mở cho các sản phẩm được kết nối. Hỗ trợ ESP8266 và ESP32. Phát triển bằng C hoặc JavaScript.
* NodeMCU&nbsp;- Phần mềm dựa trên ngôn ngữ Lua.
* **PlatformIO**&nbsp;- Một IDE và trình gỡ lỗi hợp nhất đa nền tảng, hỗ trợ mã nguồn và các thư viện Arduino, cùng nhiều framework khác cho nhiều dòng vi điều khiển khác nhau, bao gồm cả ESP8266.
* Punyforth - Ngôn ngữ lập trình lấy cảm hứng từ Forth cho ESP8266.
* Sming - Một framework C/C++ bất đồng bộ đang được phát triển tích cực với hiệu suất vượt trội và hỗ trợ nhiều tính năng mạng.
* uLisp - Một phiên bản của ngôn ngữ lập trình Lisp được thiết kế đặc biệt để chạy trên các bộ vi xử lý có bộ nhớ RAM hạn chế.
* ZBasic cho ESP8266 - Một phần mềm từ Visual Basic 6 của Microsoft, đã được điều chỉnh để làm ngôn ngữ điều khiển cho họ vi điều khiển ZX và ESP8266.
* Zerynth&nbsp;- Một IoT framework để lập trình ESP8266 và các vi điều khiển khác bằng Python.

## Module Espressif
Đây là series các module ESP8266 đã được sản xuất:

Trong bảng trên (và hai bảng tiếp theo), "Số chân hoạt động được" bao gồm các chân GPIO và ADC mà các thiết bị bên ngoài có thể được gắn vào MCU ESP8266. "Khoảng các giữa 2 chân cạnh nhau" là khoảng trống giữa các chân trên module ESP8266, điều quan trọng để biết liệu thiết bị có được sử dụng trên breadboard hay không. "Hệ số hình thức" mô tả cách đóng gói module, ví dụ như là "2 × 9 DIL", có nghĩa là hai hàng 9 chân được sắp xếp theo kiểu "Dual In Line", giống như các chân của IC DIP. "LED" cho biết trên board có LED không. Nhiều module ESP-xx bao gồm một đèn LED nhỏ trên board mạch có thể được lập trình để nhấp nháy từ đó có thể biết hoạt động của module. Có một số tùy chọn loại antenna cho các board ESP-xx bao gồm trace antenna (tạm dịch: antenna chìm trên board), on-board ceramic antenna (tạm dịch: antenna gốm trên board mạch) và đầu nối bên ngoài cho phép gắn antenna Wi-Fi bên ngoài vào. Vì giao tiếp Wi-Fi tạo ra rất nhiều RFI (Radio Frequency Interference, nhiễu tần số vô tuyến), do đó các cơ quan chính phủ như FCC muốn các thiết bị điện tử được che chắn (shielded) để làm giảm thiểu sự gây nhiễu với các thiết bị khác. Một số module ESP-xx được đặt trong một hộp kim loại có đóng dấu phê duyệt FCC trên đó. Thị trường thế giới thứ nhất và thứ hai có thể sẽ yêu cầu FCC phê duyệt và che chắn các 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à vẫn là module có sẵn rộng rãi nhất cho đến thời điểm này. Chúng được gọi chung là "module ESP-xx". Để có thể phát triển được một ứng dụng với các board này yêu cầu thêm một số thành phần phần cứng bổ sung, đặc biệt là bộ chuyển đổi TTL-to-USB nối tiếp (đôi khi được 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. Những nhà phát triển mới làm quen với ESP8266 được khuyến khích sử dụng các board mạch phát triển Wi-Fi ESP8266 cỡ lớn hơn như NodeMCU. Các thành phần như chuyển USB-to-UART và đầu nối Micro-USB cùng với bộ điều chỉnh nguồn 3,3 volt đã được tích hợp sẵn trên board NodeMCU. Trong quá trình xây dựng dự án thực tế, các thành phần kể trên trong board NodeMCU không còn cần thiết nữa và các module ESP-xx rẻ hơn khi ấy là một lựa chọn phù hợp với công suất thấp và kích thước chân nhỏ.

Trong cột Ghi chú, kích thước bộ nhớ Flash áp dụng cho module đã cho và tất cả những module bên dưới module đó trong bảng. Các ngoại lệ áp dụng cho một module đơn được hiển thị trong ().

## Các board khác
Các dòng board ESP8266 khác sau này trở nên phổ biến hơn so với các module ESP-xx ban đầu vì đã hỗ trợ các thành phần cần thiết trong việc phát triển các ứng dụng phần mềm, bao gồm mạch chuyển đổi USB sang UART trên board mạch (như CP2102 của Silicon Labs hoặc WCH CH340G) và đầu nối Micro-USB kết hợp với bộ ổn áp 3,3 volt để cung cấp cả nguồn điện cho board mạch và kết nối với máy tính chủ trong quá trình phát triển phần mềm. Với các module ESP-xx trước đó, bộ chuyển đổi USB-to-serial và bộ ổn áp 3.3V phải được người dùng mua riêng để nối dây vào module ESP-xx. Các board mạch ESP8266 hiện đại như NodeMCU cũng dễ làm việc hơn và cung cấp nhiều chân GPIO hơn. Hầu hết các board mạch được liệt kê ở đây đều dựa trên module ESP-12E. Các module ESP8266 mới khác cũng đang được giới thiệu dường như vài tháng một lần.

## ESP32-C3
Vào năm 2020, Espressif đã công bố một chip mới ESP32-C3, tương thích với các chân của ESP8266. Nó hoạt động dựa trên một CPU RISC-V 32-bit lõi đơn với tốc độ xung nhịp lên đến 160&nbsp;MHz. Nó bao gồm 400 kB SRAM và bộ nhớ ROM 384 kB được tích hợp sẵn.

## Xem thêm

* ESP32
* Internet vạn vật
* Vi điều khiển

## Tài liệu tham khảo

* 
*
*
*

## Chú thích

## Liên kết ngoài

* ESP-01/07/12 Series Modules User's Manual
* ESP8266 AT Instruction Set