Home Ứng dụng IoT - Internet of Things Giới thiệu module ESP32

Giới thiệu module ESP32

0
Giới thiệu module ESP32

ESP32 là một series các vi điều khiển trên một vi mạch giá rẻ, năng lượng thấp có tích hợp WiFi và dual-mode Bluetooth (tạm dịch: Bluetooth chế độ kép). Dòng ESP32 sử dụng bộ vi xử lý Tensilica Xtensa LX6 có hai biến thể lõi kép và lõi đơn, và bao gồm các công tắc antenna tích hợp, RF balun, bộ khuếch đại công suất, bộ khuếch đại thu nhiễu thấp, bộ lọc và module quản lý năng lượng.

ESP32 được chế tạo và phát triển bởi Espressif Systems, một công ty Trung Quốc có trụ sở tại Thượng Hải, và được sản xuất bởi TSMC bằng cách sử dụng công nghệ 40 nm. ESP32 là sản phẩm kế thừa từ vi điều khiển ESP8266.

Cấu hình của ESP32

Cấu hình phần cứng của ESP32

CPU

  • CPU: Xtensa Dual-Core LX6 microprocessor.
  • Chạy hệ 32 bit
  • Tốc độ xử lý từ 160 MHz đến 240 MHz
  • ROM: 448 Kb
  • Tốc độ xung nhịp từ 40 Mhz ÷ 80 Mhz (có thể tùy chỉnh khi lập trình)
  • RAM: 520 Kb SRAM liền chip. Trong đó 8 Kb RAM RTC tốc độ cao – 8 Kb RAM RTC tốc độ thấp (dùng ở chế độ DeepSleep).

Hỗ trợ 2 giao tiếp không dây

  • Wi-Fi: 802.11 b/g/n/e/i
  • Bluetooth: v4.2 BR/EDR và BLE

Hỗ trợ tất cả các loại giao tiếp

  • 2 bộ chuyển đổi số sang tương tự (DAC) 8 bit
  • 18 kênh bộ chuyển đổi tương tự sang số (ADC) 12 bit.
  • 2 cổng giao tiếp I²C
  • 3 cổng giao tiếp UART
  • 3 cổng giao tiếp SPI (1 cổng cho chip FLASH )
  • 2 cổng giao tiếp I²S
  • 10 kênh ngõ ra điều chế độ rộng xung (PWM)
  • SD card/SDIO/MMC host
  • Ethernet MAC hỗ trợ chuẩn: DMA và IEEE 1588
  • CAN bus 2.0
  • IR (TX/RX)

Cảm biến tích hợp trên chip ESP32

  • 1 cảm biến Hall (cảm biến từ trường)
  • 1 cảm biến đo nhiệt độ
  • Cảm biến chạm (điện dung) với 10 đầu vào khác nhau.

 Bảo mật

  • Hỗ trợ tất cả các tính năng bảo mật chuẩn IEEE 802.11, bao gồm WFA, WPA/WPA2 và WAPI
  • Khởi động an toàn (Secure boot)
  • Mã hóa flash (Flash encryption)
  • 1024-bit OTP, lên đến 768-bit cho khách hàng
  • Tăng tốc phần cứng mật mã: AES, SHA-2, RSA, mật mã đường cong elliptic (ECC – elliptic curve cryptography), bộ tạo số ngẫu nhiên (RNG – random number generator)

Nguồn điện hoạt động

  • Điện áp hoạt động: 2,2V ÷ 3,6V
  • Nhiệt độ hoạt động: -40oC ÷ + 85oC
  • Số cổng GPIO: 36

Ứng dụng

  • Module được dùng nhiều trong các ứng dụng thu thập dữ liệu và điều khiển thiết bị qua WiFi, Bluetooth.
  • Sử dụng cho các ứng dụng tiết kiệm năng lượng, điều khiển mạng lưới cảm biến, mã hóa hoặc xử lí tiếng nói, xử lí Analog-Digital trong các ứng dụng phát nhạc, hoặc với các file MP3…
  • Module cũng có thể dùng cho các thiết bị điện tử đeo tay như đồng hồ thông minh…

Sơ đồ chân của ESP32 

Chip ESP32 bao gồm 48 chân với nhiều chức năng khác nhau. Không phải tất cả các chân đều lộ ra trrên các module ESP32 và một số chân không thể được sử dụng.

Mặc dù bạn có thể định nghĩa các thuộc tính chân trên phần mềm, nhưng có các chân được gán theo mặc định như trong hình sau (đây là ví dụ cho module ESP32 DEVKIT V1 DOIT có 36 chân – vị trí chân có thể thay đổi tùy thuộc vào nhà sản xuất).

Sơ đồ chân module ESP32

Chân Input Only

GPIO từ 34 đến 39 là các chân chỉ đầu vào. Các chân này không có điện trở kéo lên hoặc kéo xuống bên trong. Chúng không thể được sử dụng làm đầu ra, vì vậy chỉ sử dụng các chân này làm đầu vào:

  • GPIO34
  • GPIO35
  • GPIO36
  • GPIO39

Chân tích hợp Flash trên ESP32

GPIO 6 đến GPIO 11 dùng để kết nối Flash SPI trên chip ESP-WROOM-32, không khuyến khích sử dụng cho các mục đích sử dụng khác.

  • GPIO6 (SCK/CLK)
  • GPIO7 (SDO/SD0)
  • GPIO8 (SDI/SD1)
  • GPIO9 (SHD/SD2)
  • GPIO10 (SWP/SD3)
  • GPIO11 (CSC/CMD)

Chân cảm biến điện dung

ESP32 có 10 cảm biến điện dung bên trong. Các cảm biến này có thể phát hiện được sự thay đổi về điện áp cảm ứng trên các chân GPIO. Các chân cảm ứng điện dung cũng có thể được sử dụng để đánh thức ESP32 khỏi chế độ ngủ sâu (deep sleep).

Các chân ESP32 này có chức năng như 1 nút nhấn cảm ứng, có thể phát hiện sự thay đổi về điện áp cảm ứng trên chân.

Các cảm biến cảm ứng bên trong đó được kết nối với các GPIO sau:

  • TOUCH0 (GPIO4)
  • TOUCH1 (GPIO0)
  • TOUCH2 (GPIO2)
  • TOUCH3 (GPIO15)
  • TOUCH4 (GPIO13)
  • TOUCH5 (GPIO12)
  • TOUCH6 (GPIO14)
  • TOUCH7 (GPIO27)
  • TOUCH8 (GPIO33)
  • TOUCH9 (GPIO32)

Bộ chuyển đổi tương tự sang số ADC (Analog to Digital Converter)

ESP32 có 18 kênh đầu vào ADC 12 bit (trong khi ESP8266 chỉ có 1 kênh ADC 10 bit). Đây là các GPIO có thể được sử dụng làm ADC và các kênh tương ứng:

  • ADC1_CH0 (GPIO36)
  • ADC1_CH1 (GPIO37)
  • ADC1_CH2 (GPIO38)
  • ADC1_CH3 (GPIO39)
  • ADC1_CH4 (GPIO32)
  • ADC1_CH5 (GPIO33)
  • ADC1_CH6 (GPIO34)
  • ADC1_CH7 (GPIO35)
  • ADC2_CH0 (GPIO4)
  • ADC2_CH1 (GPIO0)
  • ADC2_CH2 (GPIO2)
  • ADC2_CH3 (GPIO15)
  • ADC2_CH4 (GPIO13)
  • ADC2_CH5 (GPIO12)
  • ADC2_CH6 (GPIO14)
  • ADC2_CH7 (GPIO27)
  • ADC2_CH8 (GPIO25)
  • ADC2_CH9 (GPIO26)

Các kênh đầu vào ADC có độ phân giải 12 bit. Điều này có nghĩa là bạn có thể nhận được các giá trị tương tự từ 0 đến 4095, trong đó 0 tương ứng với 0V và 4095 đến 3,3V. Bạn cũng có thể thiết lập độ phân giải cho các kênh thông qua chương trình (code).

Bộ chuyển đổi số sang tương tự DAC (Digital to Analog Converter)

Có 2 kênh DAC 8 bit trên ESP32 để chuyển đổi tín hiệu số sang tương tự. Các kênh này chỉ có độ phân giải 8 bit, nghĩa là có giá trị từ 0 ÷ 255 tương ứng với 0 ÷ 3.3V

Đây là các kênh DAC:

  • DAC1 (GPIO25)
  • DAC2 (GPIO26)

Các chân thời gian thực RTC

Các chân này có tác dụng đánh thức ESP32 khi trong chế độ ngủ sâu (Low Power Mode). Sử dụng như 1 chân ngắt ngoài.

Các chân RTC:

  • RTC_GPIO0 (GPIO36)
  • RTC_GPIO3 (GPIO39)
  • RTC_GPIO4 (GPIO34)
  • RTC_GPIO5 (GPIO35)
  • RTC_GPIO6 (GPIO25)
  • RTC_GPIO7 (GPIO26)
  • RTC_GPIO8 (GPIO33)
  • RTC_GPIO9 (GPIO32)
  • RTC_GPIO10 (GPIO4)
  • RTC_GPIO11 (GPIO0)
  • RTC_GPIO12 (GPIO2)
  • RTC_GPIO13 (GPIO15)
  • RTC_GPIO14 (GPIO13)
  • RTC_GPIO15 (GPIO12)
  • RTC_GPIO16 (GPIO14)
  • RTC_GPIO17 (GPIO27)

Chân PWM

ESP32 LED PWM có 16 kênh độc lập có thể được cấu hình để tạo tín hiệu PWM với các thuộc tính khác nhau. Tất cả các chân có thể hoạt động như đầu ra đều có thể được sử dụng làm chân PWM (GPIO từ 34 đến 39 không thể tạo PWM).

Để xuất PWM, bạn cần định nghĩa các thông số này trong code:

  • Tần số tín hiệu
  • Chu kỳ làm việc
  • Kênh PWM
  • Chân GPIO xuất tín hiệu ra

Chân I2C

ESP32 có hai kênh I2C và bất kỳ chân nào cũng có thể được đặt làm SDA hoặc SCL. Khi sử dụng ESP32 với Arduino IDE, các chân I2C mặc định là:

  • GPIO21 (SDA)
  • GPIO22 (SCL)

Nếu các bạn muốn sử dụng chân khác cho việc điều khiển I2C có thể sử dụng câu lệnh:

Wire.begin(SDA, SCL);

Chân SPI

Theo mặc định, ánh xạ chân cho SPI là:

SPIMOSIMISOCLKCS
VSPIGPIO 23GPIO 19GPIO 18GPIO 5
HSPIGPIO 13GPIO 12GPIO 14GPIO 15

Chân ngắt ngoài

Tất cả các chân ESP32 đều có thể sử dụng ngắt ngoài.

Môi trường lập trình ESP32

ESP32 có thể được lập trình trong các môi trường lập trình khác nhau. Bạn có thể dùng:

  1. Arduno IDE
  2. Espressif IDF
  3. Micropython
  4. JavaScript
  5. LUA

Môi trường lập trình (IDE)

Trên thế giới mọi người lập trình ESP32 thông qua 2 IDE đó là VS Code và Arduino IDE.

Với Arduino IDE thì quá là nổi tiếng rồi, thế nhưng có những điểm hạn chế như:

  • Không có khả năng tự hoàn thiện code, gợi ý.
  • Không thể xem được các thư viện include vào. Dẫn tới việc bạn không biết dùng thư viện đó như thế nào, và phải dùng 1 trình soạn thảo khác để mở ra.
  • Không thể tìm tới hàm gốc. Khi lập trình bạn quên mất việc truyền tham số nào vào thì với VS Code chỉ cần thao tác đơn giản là Ctr + Click, nó sẽ mở file chứa hàm gốc đó lên, thế nhưng Arduino thì không có điều này ảnh hưởng rất nhiều tới quá trình viết code.
  • Thiếu chuyên nghiệp. Một điều chắc chắn là khi bạn sử dụng VS code, bạn sẽ không còn muốn dùng lại arduino IDE nữa.

Vậy nên mình sử dụng VS Code và Extension Platform IO để lập trình ESP32 (kể cả lập trình Arduino cũng vẫn được nhé). Hướng dẫn cài đặt các bạn xem tham khảo bài viết sau đây:

Lập trình Arduino trên Visual Studio Code.

Thư viện lập trình (SDK)

Như đã nói nói ở trên có 2 gói thư viện chính đó là Arduino và ESP-IDF. Vậy ưu nhược điểm của các gói này ra sao.

Arduino IDE: Được viết dựa trên ESP-IDF, cũng có thể nói Arduino là thư viện con của ESP-IDF.

Ưu điểm:

  • Quen thuộc với người sử dụng Arduino
  • Code nhanh dễ, có nhiều nguồn hỗ trợ

Nhược điểm:

  • Không tối ưu code
  • Thiếu một số chức năng

ESP-IDF: là gói thư viện do hãng phát hành, có nguyên 1 bản hướng dẫn sử dụng API, phù hợp với các bạn đọc được tiếng anh.

Tham khảo: https://docs.espressif.com/projects/esp-idf/en/stable/esp32/index.html

Điểm mạnh:

  • Tối ưu
  • Được các nhà phát triển sử dụng trong các sản phẩm thương mại
  • Tài liệu đầy đủ, chính xác

Điểm yếu:

  • Ít được cộng đồng hỗ trợ hơn

LEAVE A REPLY

Please enter your comment!
Please enter your name here