Giới thiệu.

  • TRONG ESP32 CÓ TẤT CẢ 34 CHÂN GPIO:
    • GPIO 00 – GPIO 19
    • GPIO 21 – GPIO 23
    • GPIO 25 – GPIO 27
    • GPIO 32 – GPIO 39
  • LƯU Ý:
    • KHÔNG BAO GỒM CÁC CHÂN 20, 24, 28, 29, 30 VÀ 31.
    • CÁC CHÂN GPIO34 – GPIO39 CHỈ THIẾT LẬP Ở CHẾ ĐỘ INPUT VÀ KHÔNG CÓ CHỨC NĂNG PULLUP HOẶC PULLDOWN CHO PHẦN MỀM.
    • CÁC CHÂN GPIO06 – GPIO11 THƯỜNG ĐƯỢC DÙNG ĐỂ GIAO TIẾP VỚI THẺ NHỚ NGOÀI THÔNG QUA GIAO THỨC SPI NÊN HẠN CHẾ SỬ DỤNG ĐỂ THIẾT LẬP IO.
  • Dưới đây là ví dụ đơn giản nhấp nháy LED sử dụng board ESP32-Wifi-Uno.

Chuẩn bị.

PHẦN CỨNG LINK
Board ESP32-Wifi-Uno https://github.com/esp32vn/esp32-iot-uno

Kết nối.

  • Trên board ESP32-Wifi-Uno đã có đèn D3 nối với chân GPIO23.

Demo

Hướng dẫn

Tải dự án mẫu:

git clone https://github.com/espressif/esp-idf.git

Include

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
  • driver/gpio.h: Bao gồm cấu hình đầu vào và đầu ra với mục đích cơ bản.

Define

#define BLINK_GPIO 23
  • Định nghĩa BLINK_GPIO là GPIO23.

GPIO

gpio_pad_select_gpio (uint8_t gpio_num);
  • Chọn pad làm chức năng GPIO từ IOMUX.
gpio_set_direction (gpio_num_t gpio_num, gpio_mode_t mode);
  • Định hướng GPIO, chẳng hạn như output only, input only, output and input.
  • CÓ 2 ĐỐI SỐ ĐƯỢC TRUYỀN VÀO HÀM:
    • GPIO_NUM_T GPIO_NUM: LỰA CHON PIN
      • GPIO_NUM_0 … GPIO_NUM_39 HOẶC 0 … 39.
    • GPIO_MODE_T MODE : LỰA CHỌN MODE
      • GPIO_MODE_INPUT: INPUT ONLY
      • GPIO_MODE_OUTPUT: OUTPUT ONLY MODE
      • GPIO_MODE_OUTPUT_OD: OUTPUT ONLY WITH OPEN-DRAIN MODE
      • GPIO_MODE_INPUT_OUTPUT_OD: OUTPUT AND INPUT WITH OPEN-DRAIN MODE
      • GPIO_MODE_INPUT_OUTPUT: OUTPUT AND INPUT MODE
gpio_set_level (gpio_num_t gpio_num, uint32_t level);
  • Thiết lập mức (LOW hoặc HIGH) cho GPIO.
  • CÓ 2 ĐỐI SỐ ĐƯỢC TRUYỀN VÀO HÀM:
    • GPIO_NUM_T GPIO_NUM: LỰA CHON PIN
      • GPIO_NUM_0 … GPIO_NUM_39 HOẶC 0 … 39.
    • UINT32_T LEVEL : LỰA CHỌN MỨC LOGIC
      • 0: MỨC THẤP
      • 1: MỨC CAO

Make file:

PROJECT_NAME := myProject
include $(IDF_PATH)/make/project.mk
  • PROJECT_NAME := myProject : Tạo ra một mã nhị phân với tên này tức là – myProject.bin, myProject.elf.

Lập trình

Bây giờ, bạn có thể xem code hoàn chỉnh.
/* Blink Example
   This example code is in the Public Domain (or CC0 licensed, at your option.)
   Unless required by applicable law or agreed to in writing, this
   software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
   CONDITIONS OF ANY KIND, either express or implied.
*/
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"

#define BLINK_GPIO 23

void blink_task(void *pvParameter)
{
    /* Configure the IOMUX register for pad BLINK_GPIO (some pads are
       muxed to GPIO on reset already, but some default to other
       functions and need to be switched to GPIO. Consult the
       Technical Reference for a list of pads and their default
       functions.)
    */
    gpio_pad_select_gpio(BLINK_GPIO);
    /* Set the GPIO as a push/pull output */
    gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
    while(1) {
        /* Blink off (output low) */
        gpio_set_level(BLINK_GPIO, 0);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
        /* Blink on (output high) */
        gpio_set_level(BLINK_GPIO, 1);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}

void app_main()
{
    xTaskCreate(&blink_task, "blink_task", 512, NULL, 5, NULL);
}

Lưu ý

Để lại một bình luận

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 *