Công nghệ

Cách nạp firmware cho esp32

null
Written by lbtmicr06

Nếu bạn dùng ESP32-WROOM-32 + Arduino IDE, cách nạp firmware (upload code) đơn giản nhất là qua cáp USB.

Bước 1: Cài Arduino IDE

Tải và cài:

Arduino IDE


Bước 2: Cài board ESP32

Trong Arduino IDE:

File → Preferences

Thêm URL này vào “Additional Boards Manager URLs”:

https://espressif.github.io/arduino-esp32/package_esp32_index.json

Sau đó:

Tools → Board → Boards Manager

Tìm:

esp32

Cài:

ESP32 by Espressif Systems. (Arduino Docs)


Bước 3: Kết nối ESP32

Dùng cáp Micro-USB hoặc USB-C tùy board.

Lưu ý:

  • Nhiều cáp chỉ có chức năng sạc.
  • Nếu máy tính không thấy cổng COM, hãy thử cáp khác. (OceanRemote)

Bước 4: Chọn đúng board

Vào:

Tools
 └── Board
      └── ESP32 Arduino
           └── ESP32 Dev Module

Đối với ESP32-WROOM-32, lựa chọn ESP32 Dev Module thường là đúng. (OceanRemote)


Bước 5: Chọn cổng COM

Vào:

Tools
 └── Port

Ví dụ:

COM3
COM5
COM8

Rút ESP32 ra rồi cắm lại:

  • Cổng nào xuất hiện thêm chính là ESP32.

Bước 6: Nạp chương trình thử

Dán code:

void setup()
{
  Serial.begin(115200);
}

void loop()
{
  Serial.println("ESP32 OK");
  delay(1000);
}

Nhấn nút:

Upload (→)

Arduino IDE sẽ:

  1. Compile.
  2. Kết nối bootloader.
  3. Nạp firmware vào Flash.
  4. Reset ESP32. (Espressif Systems)

Nếu bị lỗi “Failed to connect to ESP32”

Đây là lỗi phổ biến nhất.

Khi IDE hiện:

Connecting.....

Hãy:

  1. Nhấn giữ nút BOOT trên ESP32.
  2. Bấm Upload.
  3. Khi IDE bắt đầu chạy phần trăm upload, thả nút BOOT. (OceanRemote)

Nếu vẫn không nhận COM

ESP32 thường dùng chip USB-UART:

  • CP2102
  • CH340

Bạn có thể cần cài driver tương ứng.

Driver CP210x

Silicon Labs CP210x Driver

Driver CH340

WCH CH340 Driver


Bước 7: Mở Serial Monitor

Sau khi nạp thành công:

Tools
 └── Serial Monitor

Baud rate:

115200

Bạn sẽ thấy:

ESP32 OK
ESP32 OK
ESP32 OK

Kiểm tra trước khi nạp code Follow-Me

Trước khi nạp code BLE Follow-Me, hãy cho mình biết:

  1. Bạn dùng Arduino IDE 1.8.x hay 2.x?
  2. ESP32 board package đang là phiên bản mấy (2.x hay 3.x)?
  3. Board ESP32 của bạn dùng chip USB:
    • CP2102
    • CH340
    • hay CH9102?

Chỉ cần gửi ảnh mặt trước và mặt sau của board ESP32-WROOM-32, mình sẽ chỉ chính xác:

  • driver cần cài,
  • board cần chọn,
  • và chỉnh lại code BLE/L298N để chạy ngay trên phiên bản ESP32 của bạn.
  • #include <BLEDevice.h>
    #include <BLEUtils.h>
    #include <BLEScan.h>
    #include <BLEAdvertisedDevice.h>
    // ================= MOTOR =================
    #define IN1 25
    #define IN2 26
    #define IN3 27
    #define IN4 14
    #define ENA 33
    #define ENB 32
    const char* TARGET_NAME = “FOLLOW_ME”;
    BLEScan* pBLEScan;
    int filteredRSSI = -100;
    // ================= MOTOR FUNCTIONS =================
    void motorForward()
    {
      digitalWrite(IN1, HIGH);
      digitalWrite(IN2, LOW);
      digitalWrite(IN3, HIGH);
      digitalWrite(IN4, LOW);
      analogWrite(ENA, 180);
      analogWrite(ENB, 180);
    }
    void motorBackward()
    {
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, HIGH);
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, HIGH);
      analogWrite(ENA, 150);
      analogWrite(ENB, 150);
    }
    void motorStop()
    {
      analogWrite(ENA, 0);
      analogWrite(ENB, 0);
    }
    // ================= BLE CALLBACK =================
    class MyAdvertisedDeviceCallbacks
    : public BLEAdvertisedDeviceCallbacks
    {
      void onResult(BLEAdvertisedDevice device)
      {
        std::string name = device.getName();
        if(name == TARGET_NAME)
        {
          int rssi = device.getRSSI();
          filteredRSSI =
          (0.8 * filteredRSSI) +
          (0.2 * rssi);
          Serial.print(“FOUND “);
          Serial.print(TARGET_NAME);
          Serial.print(” RSSI=”);
          Serial.println(filteredRSSI);
        }
      }
    };
    // ================= SETUP =================
    void setup()
    {
      Serial.begin(115200);
      pinMode(IN1, OUTPUT);
      pinMode(IN2, OUTPUT);
      pinMode(IN3, OUTPUT);
      pinMode(IN4, OUTPUT);
      pinMode(ENA, OUTPUT);
      pinMode(ENB, OUTPUT);
      motorStop();
      BLEDevice::init(“”);
      pBLEScan = BLEDevice::getScan();
      pBLEScan->setAdvertisedDeviceCallbacks(
          new MyAdvertisedDeviceCallbacks());
      pBLEScan->setActiveScan(true);
      Serial.println(“BLE Follow-Me Start”);
    }
    // ================= LOOP =================
    void loop()
    {
      BLEScanResults results =
          pBLEScan->start(2, false);
      Serial.print(“Filtered RSSI: “);
      Serial.println(filteredRSSI);
      if(filteredRSSI > -55)
      {
        Serial.println(“TOO CLOSE -> BACKWARD”);
        motorBackward();
      }
      else if(filteredRSSI > -65)
      {
        Serial.println(“GOOD DISTANCE -> STOP”);
        motorStop();
      }
      else if(filteredRSSI > -90)
      {
        Serial.println(“TOO FAR -> FORWARD”);
        motorForward();
      }
      else
      {
        Serial.println(“SIGNAL LOST -> STOP”);
        motorStop();
      }
      pBLEScan->clearResults();
      delay(300);
    }

About the author

lbtmicr06

Leave a Comment