Lập trình ESP32 từ A tới Z

lap trinh esp32 tu a toi z

Lập trình ESP32 từ A tới Z là một serie giúp các bạn làm quen, tiếp cận với dòng chip ESP32 hiện đang rất nổi tiếng hiện nay. Nếu bạn có mục tiêu trở thành một lập trình viên IOT thì không thể bỏ qua được dòng chip này.

Hãy cùng mình tìm hiểu về ESP32 và lý do tại sao nó đang được ưa chuộng đến vậy nhé

Giới thiệu về ESP32

ESP32 là một vi điều khiển giá rẻ, năng lượng thấp có hỗ trợ 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

CPU

  • CPU: Xtensa Dual-Core LX6 microprocessor.
  • Chạy hệ 32 bit
  • Tốc độ xử lý 160MHZ up to 240 MHz
  • Tốc độ xung nhịp đọc flash chip 40mhz --> 80mhz (tùy chỉnh khi lập trình)
  • RAM: 520 KByte SRAM
  • 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 and BLE

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

  • 8-bit DACs( digital to analog)  2 cổng
  • Analog(ADC)  12-bit  16 cổng.
  • I²C – 2 cổng
  • UART – 3 cổng
  • SPI – 3 cổng (1 cổng cho chip FLASH )
  • I²S – 2 cổng
  • SD card /SDIO/MMC host
  • Slave (SDIO/SPI)
  • Ethernet MAC interface with dedicated DMA and IEEE 1588 support
  • CAN bus 2.0
  • IR (TX/RX)
  • Băm xung PWM (tất cả các chân )
  • Ultra low power analog pre-amplifier’

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

  • IEEE 802.11 standard security features all supported, including WFA, WPA/WPA2 and WAPI
  • Secure boot
  • Flash encryption
  • 1024-bit OTP, up to 768-bit for customers
  • Cryptographic hardware acceleration: AES, SHA-2, RSA, elliptic curve cryptography (ECC), random number generator (RNG)

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

  • Nhiệt độ hoạt động -40 + 85C
  • Điện áp hoạt động: 2.2-3.6V
  • Số cổng GPIOs : 34

Sơ đồ chân của ESP32 (Pinout)

Hiện nay module ESP32 phổ biến nhất là ESP32-WROM với dòng KIT Doit esp32 devkit v1 kinh điển khi học lập trình ESP32

Đây cũng là KIT chúng ta sẽ thực hành các bài học của ESP32.

Chi tiết về KIT bác bạn đọc bài viết:

Tổng quan về DOIT ESP32 devkit ngoại vi và sơ đồ chân

 

Điểm mạnh của ESP32 so với các dòng khác

Có thể nói ESP32 là sự nâng cấp hoàn hảo của ESP8266, với ESP8266 phù hợp với các dự án nhỏ và tiết kiệm chi phí. ESP32 lại phù hợp với các dự án phức tạp hơn, tốc độ xử lý cao hơn và tích hợp nhiều ngoại vi mạnh mẽ hơn.

ESP8266 là 17 chân GPIO, ADC độ phân giải 10 bit, 8 kênh PWM mềm trong khi đó ESP 32 có tới 30/36 chân GPIO, 18 kênh ADC độ phân giải 12-bit, 16 kênh PWM mềm, Touch Sensor, Hall Effect Sensor, Ethernet MAC Interface, Cảm biến nhiệt độ được tích hợp sẵn.

Về bộ nhớ ESP32 có thêm 4MB External Flash và 520KB SRAM (static random access memory) trong đó 8 KB RAM RTC tốc độ cao – 8 KB RAM RTC tốc độ thấp (dùng ở chế độ DeepSleep).

ESP32 hỗ trợ Bluetooth 4.2 và BLE (Bluetooth Low Energy). Việc hỗ trợ cả bluetooth khiến ESP32 có thể tương tác với các thiết bị như là bàn phím, chuột, điện thoại khi mà không có wifi.

Ultra Low Power giải quyết vấn đề năng lượng cho ESP bởi vì sử dụng Wi-Fi sẽ rất ngốn điện đặc biệt khi chúng ta sử dụng pin phải tính toán rất kĩ.

Ngoài ra ESP32 đang được rất nhiều các công ty trong và ngoài nước ưa chuộng, vậy nên làm chủ được dòng chip này sẽ giúp bạn kiếm được thu nhập tốt hơn là điều hiển nhiên. Vậy thì còn chần chừ gì mà không học lập trình ESP32 nhỉ?

Học lập trình ESP32 là học những gì?

Nếu bạn từng học qua các dòng chip như 8051, AVR, PIC, STM32, STM8 thì khi học ESP32 bạn sẽ thấy nó cũng không giống lắm so với các dòng chip khác. Cụ thể như sau:

Các dòng MCU bình thường khi làm nhúng chúng ta sẽ học chủ yếu về các ngoại vi, làm chủ các ngoại vi đó như GPIO, ADC, Timer, SPI…. Nếu các bạn sử dụng các bộ thư viện (SDK) như HAL hoặc SPL thì chúng ta học cách sử dụng các API của thư viện đó. Còn nếu học sâu hơn nữa thì can thiệp vào đến phần thanh ghi, làm sao cho chương trình hiệu quả đến mức tối đa.

Học ESP32 cũng tương tự như vậy khi cũng cần nắm rõ các ngoại vi của ESP32, nhưng bên cạnh đó nắm vững được các giao thức truyền nhận thông tin như Wifi, Bluetooth mới là quan trọng nhất.

Bới vì ESP32 là chip sinh ra cho các sản phẩm IOT (Internet of Things), chính vì vậy học cách kết nối ESP32 với Internet mới là quan trọng nhất đối với dòng chip này. Ngoài ra Lowpower mode (chế độ tiết kiệm năng lượng) cho các ứng dụng dùng pin và FOTA ( Firmware over The Air) nạp firmware từ xa cũng cần thiết không kém.

 

Học lập trình ESP32 hiện nay đều sử dụng 2 gói thư viện chính đó là Arduino và ESP-IDF (Espressif IoT Development Framework). Việc của chúng ta là học sử dụng các API trong các gói thư viện này.

Ok, Vậy là bạn đã có cái nhìn tổng quát về cách học lập trình ESP32 rồi chứ. Tiếp sau đây hãy chuẩn bị máy tính và 1 ít $ (để mua kit ấy) và bắt đầu ngay nhé

Công cụ để bắt đầu học lập trình ESP32

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.

Với Arduino 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 ý (dẫn đến sai chính tả tùm lum) và mình cực ghét bởi điểm này
  • Không thể view source 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 xoạn thảo khác đi 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 code của bạn
  • Không cool ngầu và Pro. Một điều chắc chắn là khi bạn sử dụng VS code, bạn sẽ chả muốn dùng lại arduino đâu

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 đọc trong bài:

Hướng dẫn cài đặt Platform IO trên VS code lập trình ESP32

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

Như mình 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: Được viết dựa trên ESP-IDF, cũng có thể nói Arduino lib là thư viện con của ESP-IDF

Điểm mạnh:

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

Điểm yếu:

  • 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 họ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

Trong serie này, mình sẽ hướng dẫn các bạn bằng thư viện Arduino, lý do là dễ dàng tiếp cận hơn và các bạn có thể làm được ngay các sản phẩm không quá phức tạp sau khi hoàn thành Serie này.

Lộ trình học ESP32 

Lập trình ESP32 với các ngoại vi cơ bản

Bài 1: Lập trình ESP32 GPIO Input Ouput

Bài 2: Lập trình ESP32 ADC

Bài 3: Lập trình ESP32 PWM

Bài 4: Lập trình ESP32 DAC

Bài 5: Lập trình ESP32 Ngắt Ngoài EXTI

Bài 6: Lập trình ESP32 Timer và ngắt Timer

Bài 7: Lập trình ESP32 Touch Pin

Bài 8: Lập trình ESP32 Sleep Mode và các kiểu Wake up

Lập trình ESP32 Webserver cục bộ (local webserver)

Bài 1: Lập trình ESP32 Webserver chế độ WIFI Station

Bài 2: Lập trình ESP32 WIFI Webserver chế độ AP

Bài 3: Lập trình ESP32 WIFI WebSocket webserver

Bài 4: Lập trình ESP32 SPIFFS Webserver

Bài 5: Lưu trữ dữ liệu trên SPIFFS Webserver

Bài 6: Giao tiếp giữa hai ESP32 Webserver trong mạng cục bộ

Các bài Webserver với các loại cảm biến khác nhau.

Lập trình ESP32 với các giao thức

Bài 1: Lập trình ESP32 giao thức http lấy dũ liệu thời tiét trên openweather

Bài 2: Lập trình ESP32 giao thức http gửi nhiệt độ, độ ẩm lên Thingspeak

Bài 3: Lập trình ESP32 Client giao thức MQTT giao tiếp với Hivemq Broker

Bài 4: Lập trình ESP32 giao thức https

Bài 5: Lập trình ESP32 giao thức TCP/IP

Bài 6: Lập trình ESP32 giao thức UDP

Bài 7: Lập trình ESP32 giao thức WIFI MESH

Bài 8: Lập trình ESP32 với ESP NOW

Lập trình ESP32 Bluetooth

Bài 1: Lập trình ESP32 Bluetooth Classic

Bài 2: Lập trình ESP32 BLE Chế độ Client

Bài 3: Lập trình ESP32 BLE Chế độ Server

Lập trình ESP32 giao tiếp với IOT Platform và các hệ thống khác trên Internet

Lập trình Esp32 giao tiếp với Firebase

Lập trình Esp32 giao tiếp Node-Red

Ghi dữ liệu từ Esp32 lên google sheet

Tự động gửi email với Esp32

Tạo chatbot trên Esp32 telegram

Các hướng dẫn hữu ích khi lập trình ESP32

Bài 1: Lập trình ESP32 Smartconfig thiết lập wifi bằng app

Bài 2: Lập trình ESP32 OTA cập nhật firmware bằng web browser

Bài 3: Lập trình ESP32 FOTA nạp firmware qua mạng Internet với OTA Drive

Lập trình ESP32 RTOS

Tổng quan về hệ điều hành thời gian thực RTOS

Lập trình ESP32 với Free RTOS

Các dự án lập trình ESP32 trong IOT

Trạm dư báo thời tiết với Openweather

Hiển thị nhiệt độ, độ ẩm lên Thinkspeak

Làm đèn nhiều màu với ESP32 Neon pixel ws2811

Làm máy chơi điện tử với ESP32

Làm thiết bị định vị GPS với ESP32

Kết

Esp32 là một trong những dòng chip được ưa chuộng nhất hiện nay, bởi sự mạnh mẽ, đa dụng nhưng cũng rất tiết kiệm. Nếu bạn thấy bài viết này có ích hãy bình luận và đừng quên ra nhập Hội Anh Em Nghiện Lập trình nhé.

4.7/5 - (13 bình chọn)

13 những suy nghĩ trên “Lập trình ESP32 từ A tới Z

  1. Phạm Khắc Chính nói:

    Anh Khuê Nguyễn cho e hỏi ạ:
    1 số bài đang bị ẩn không click vào để xem đc. Anh có thể kiểm tra lại được không ạ?

  2. Long nói:

    Dạ anh có thể hướng dẫn liên kết esp-cam lên web không anh, em đang làm mà hơi rối nên làm mãi không xong. Cảm ơn anh đã đọc ạ.

  3. Trần hữu nói:

    Ad ơi! Anh vẫn đang làm những bài tiếp theo phải không ạ?
    Em thấy trong danh sách có nhiều bài vẫn chưa có link full không che…em hóng lắm ạ 😁

  4. Tony Tran nói:

    Chào Ad, hiện tại em đang có 1 kit ESP32 UNO D1 R32 và em đang tập tành lập trình cho nó connect tới wifi mà phạm vi kết nối đang khá ngắn. Em định nắp thêm bộ ăng ten vào kit mà không thấy vị trí nắp ăng ten. Anh có phương pháp nào để nắp thêm ăng ten vào kit hoặc tăng phạm vi thu sóng wifi của bộ kit này không ạ. Em cảm ơn!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *