Tự làm thiết bị định vị GPS

You

Tự làm thiết bị định vị GPS với ESP32 cho người mới bắt đầu

GPT

Làm một thiết bị định vị GPS với ESP32 là một dự án thú vị và mang tính ứng dụng rất cao. Dưới đây là hướng dẫn cơ bản cho người mới bắt đầu:

Vật liệu cần chuẩn bị:

  1. ESP32: Bo mạch phát triển, chẳng hạn như ESP32 Dev Kit.
  2. Mô-đun GPS: Phổ biến như NEO-6M hoặc một mô-đun GPS khác có giao tiếp UART.
  3. Nguồn điện: Pin hoặc nguồn điện USB cho ESP32.
  4. Dây nối: Để kết nối các mô-đun với nhau.
  5. Máy tính: Để lập trình ESP32.
  6. Phần mềm Arduino IDE: Để viết và tải mã lên ESP32.

Kết nối phần cứng:

  1. Kết nối mô-đun GPS với ESP32:
    • TX của mô-đun GPS nối với RX pin của ESP32 (hoặc bất kỳ pin GPIO sử dụng cho Serial).
    • RX của mô-đun GPS nối với TX pin của ESP32 (hoặc bất kỳ pin GPIO sử dụng cho Serial).
    • Kết nối nguồn và đất (VCC và GND) cho mô-đun GPS. Thông thường, mô-đun GPS hoạt động với 3.3V hoặc 5V, nên cần kiểm tra kỹ trước khi nối.

Cài đặt phần mềm:

  1. Cài đặt Arduino IDE:

    • Tải và cài đặt Arduino IDE từ trang web của Arduino.
    • Thêm ESP32 vào Arduino IDE bằng cách vào File > Preferences, và thêm URL cho ESP32 vào Additional Boards Manager URLs: https://dl.espressif.com/dl/package_esp32_index.json
    • Vào Tools > Board > Boards Manager, tìm và cài đặt "esp32".
  2. Cài đặt thư viện GPS:

    • Thường sử dụng thư viện TinyGPS++ hoặc một thư viện tương tự để phân giải các câu NMEA từ GPS.
    • Vào Sketch > Include Library > Manage Libraries, tìm và cài đặt "TinyGPS++".

Viết mã và tải lên ESP32:

Dưới đây là ví dụ mã đơn giản sử dụng TinyGPS++:

#include <TinyGPS++.h>
#include <HardwareSerial.h>

TinyGPSPlus gps;
HardwareSerial GPS_Serial(1);

void setup() {
  Serial.begin(115200);
  GPS_Serial.begin(9600, SERIAL_8N1, RX_pin, TX_pin);

  Serial.println("GPS Started");
}

void loop() {
  while (GPS_Serial.available() > 0)
    if (gps.encode(GPS_Serial.read())) {
      if (gps.location.isUpdated()) {
        Serial.print("Latitude= "); 
        Serial.print(gps.location.lat(), 6); 
        Serial.print(" Longitude= "); 
        Serial.println(gps.location.lng(), 6);
      }
    }
}
  • Thay RX_pinTX_pin bằng chân GPIO bạn đã sử dụng cho TX và RX của mô-đun GPS.

  • Tải mã xuống ESP32 qua cáp USB. Trong Arduino IDE, chọn đúng cổng COM và board ESP32 của bạn trong menu Tools.

Kiểm tra:

  • Mở Serial Monitor trong Arduino IDE và thiết lập baud rate 115200.
  • Ngay khi mô-đun GPS nhận đủ tín hiệu từ vệ tinh, bạn sẽ thấy thông tin vĩ độ và kinh độ được in ra.

Với những bước cơ bản này, bạn đã có thể làm một thiết bị định vị GPS cơ bản với ESP32. Nếu cần thêm tính năng như kết nối Wi-Fi để gửi dữ liệu lên máy chủ, bạn có thể mở rộng dự án thêm.

You

Tôi muốn viết bằng ngôn ngữ c

GPT

Để viết chương trình sử dụng mô-đun GPS với ESP32 bằng ngôn ngữ C, bạn cần dùng các API của ESP-IDF (Espressif IoT Development Framework). Dưới đây là một hướng dẫn cơ bản để bắt đầu:

Cài đặt ESP-IDF

  1. Cài đặt ESP-IDF: Theo hướng dẫn chính thức trên GitHub của Espressif (https://github.com/espressif/esp-idf).

  2. Thiết lập môi trường phát triển:

    • Sau khi cài đặt, bạn cần thiết lập ESP-IDF Path và các biến môi trường liên quan. Hãy đảm bảo rằng bạn có đầy đủ các công cụ như Python, Git, và trình biên dịch xtensa-esp32.

Kết nối phần cứng

  1. Kết nối mô-đun GPS với ESP32:
    • Giống như hướng dẫn trước, kết nối TX của mô-đun GPS vào RX của ESP32 và RX của mô-đun GPS vào TX của ESP32.

Viết chương trình

Đây là một ví dụ cơ bản để nhận dữ liệu từ mô-đun GPS trên ESP32:

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/uart.h"
#include "esp_log.h"

#define GPS_UART_PORT UART_NUM_1
#define GPS_TX_PIN    (GPIO_NUM_17)
#define GPS_RX_PIN    (GPIO_NUM_16)
#define BUF_SIZE      (1024)

static const char *TAG = "GPS_example";

void gps_task(void *arg)
{
    uart_config_t uart_config = {
        .baud_rate = 9600,
        .data_bits = UART_DATA_8_BITS,
        .parity = UART_PARITY_DISABLE,
        .stop_bits = UART_STOP_BITS_1,
        .flow_ctrl = UART_HW_FLOWCTRL_DISABLE
    };

    uart_param_config(GPS_UART_PORT, &uart_config);
    uart_set_pin(GPS_UART_PORT, GPS_TX_PIN, GPS_RX_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
    uart_driver_install(GPS_UART_PORT, BUF_SIZE * 2, 0, 0, NULL, 0);

    uint8_t *data = (uint8_t *) malloc(BUF_SIZE);
    while (1) {
        int len = uart_read_bytes(GPS_UART_PORT, data, BUF_SIZE - 1, 20 / portTICK_RATE_MS);
        if (len > 0) {
            data[len] = '\0';
            ESP_LOGI(TAG, "Received: %s", data);
        }
    }
    free(data);
}

void app_main(void)
{
    xTaskCreate(gps_task, "gps_task", 4096, NULL, 10, NULL);
}

Chi tiết mã nguồn

  • UART Configuration: Thiết lập cấu hình UART cho việc truyền nhận với tốc độ 9600 baud, tương ứng với thông số của hầu hết các mô-đun GPS.
  • gps_task: Là nhiệm vụ chính để đọc dữ liệu từ mô-đun GPS qua UART.
  • uart_read_bytes: Đọc dữ liệu từ mô-đun GPS và lưu vào bộ nhớ đệm để xử lý.

Build và Flash

  1. Build: Chạy lệnh idf.py build trong thư mục dự án.
  2. Flash: Kết nối ESP32 với máy tính bằng cáp USB và chạy idf.py flash.
  3. Monitor: Sau khi flash xong, bạn có thể xem log đầu ra trên serial bằng idf.py monitor.

Lưu ý

  • Thực tế, để xử lý các câu NMEA từ GPS và trích xuất thông tin vị trí, bạn cần thêm logic phân tích cú pháp chuỗi dữ liệu từ GPS.
  • Khả năng tín hiệu GPS phụ thuộc vào vị trí địa lý và điều kiện thời tiết. Đảm bảo mô-đun GPS được đặt ở nơi có thể thu tín hiệu tốt.
You

Vẽ hình kết nối board modun GPS với ESP32

GPT

Create an image depicting the connection of a GPS module board with an ESP32 board. The illustration should showcase detailed wiring between the boards, highlighting the serial communication pins and the power supply connections. Ensure a clear view of the GPS and ESP32 boards, emphasizing the layout of the input/output pins.

You

Nhận dữ liệu từ modun và gởi lên sever

GPT

Để nhận dữ liệu từ mô-đun GPS và gửi lên server bằng ESP32, bạn cần thực hiện các bước sau:

1. Nhận dữ liệu từ mô-đun GPS

Trước tiên, bạn cần đảm bảo rằng bạn đã nhận đúng dữ liệu GPS bằng cách sử dụng UART (như trong ví dụ trước). Dữ liệu thường là các câu NMEA, mà bạn có thể phân tích cú pháp để trích xuất vị trí địa lý.

2. Kết nối với mạng Wi-Fi

ESP32 có thể được kết nối với mạng Wi-Fi để truyền dữ liệu lên server. Bạn cần định cấu hình và kết nối Wi-Fi trong môi trường ESP-IDF.

3. Thiết lập và gửi HTTP POST/GET Request đến server

Bạn có thể sử dụng thư viện esp-http-client trong ESP-IDF để gửi HTTP requests đến server.

Mã nguồn mẫu

Dưới đây là một đoạn mã ví dụ kết hợp các bước trên:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/uart.h"
#include "esp_log.h"
#include "esp_wifi.h"
#include "nvs_flash.h"
#include "esp_event.h"
#include "esp_http_client.h"

#define WIFI_SSID "your_ssid"
#define WIFI_PASS "your_password"

#define GPS_UART_PORT UART_NUM_1
#define GPS_TX_PIN    (GPIO_NUM_17)
#define GPS_RX_PIN    (GPIO_NUM_16)
#define BUF_SIZE      (1024)

static const char *TAG = "GPS_HTTP";

static void gps_task(void *arg) {
    uart_config_t uart_config = {
        .baud_rate = 9600,
        .data_bits = UART_DATA_8_BITS,
        .parity = UART_PARITY_DISABLE,
        .stop_bits = UART_STOP_BITS_1,
        .flow_ctrl = UART_HW_FLOWCTRL_DISABLE
    };

    uart_param_config(GPS_UART_PORT, &uart_config);
    uart_set_pin(GPS_UART_PORT, GPS_TX_PIN, GPS_RX_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
    uart_driver_install(GPS_UART_PORT, BUF_SIZE * 2, 0, 0, NULL, 0);

    uint8_t *data = (uint8_t *) malloc(BUF_SIZE);
    while (1) {
        int len = uart_read_bytes(GPS_UART_PORT, data, BUF_SIZE - 1, 20 / portTICK_RATE_MS);
        if (len > 0) {
            data[len] = '\0';
            ESP_LOGI(TAG, "Received: %s", data);
            // Parse GPS data if necessary, then send to server
            send_http_data((char *)data);
        }
        vTaskDelay(2000 / portTICK_PERIOD_MS);
    }
    free(data);
}

static void send_http_data(const char* gps_data) {
    esp_http_client_config_t config = {
        .url = "http://yourserver.com/yourendpoint",
        .method = HTTP_METHOD_POST,
    };

    esp_http_client_handle_t client = esp_http_client_init(&config);

    esp_http_client_set_header(client, "Content-Type", "application/x-www-form-urlencoded");
    char post_data[128];
    snprintf(post_data, sizeof(post_data), "gps=%s", gps_data);
    esp_http_client_set_post_field(client, post_data, strlen(post_data));

    esp_http_client_perform(client);
    esp_http_client_cleanup(client);
}

static void wifi_init_sta(void) {
    esp_netif_create_default_wifi_sta();
    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    esp_wifi_init(&cfg);
    esp_wifi_set_mode(WIFI_MODE_STA);
    wifi_config_t wifi_config = {
        .sta = {
            .ssid = WIFI_SSID,
            .password = WIFI_PASS,
        }
    };
    esp_wifi_set_config(WIFI_IF_STA, &wifi_config);
    esp_wifi_start();
    esp_wifi_connect();
}

void app_main(void) {
    esp_err_t ret = nvs_flash_init();
    if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
        ESP_ERROR_CHECK(nvs_flash_erase());
        ret = nvs_flash_init();
    }
    ESP_ERROR_CHECK(ret);

    ESP_ERROR_CHECK(esp_netif_init());
    ESP_ERROR_CHECK(esp_event_loop_create_default());

    wifi_init_sta();

    xTaskCreate(gps_task, "gps_task", 4096, NULL, 10, NULL);
}

Giải thích mã nguồn

  • Kết nối Wi-Fi: Sử dụng wifi_init_sta() để kết nối ESP32 với một mạng Wi-Fi.
  • GPS Task: Là một FreeRTOS task để đọc dữ liệu từ GPS qua UART.
  • HTTP Request: Sử dụng esp_http_client để gửi dữ liệu GPS tới server của bạn.

Lưu ý

  1. Thay thế your_ssidyour_password bằng thông tin mạng Wi-Fi của bạn.
  2. Thay thế http://yourserver.com/yourendpoint bằng URL thực tế của server bạn muốn gửi dữ liệu đến.
  3. Có thể cần thêm logic để phân tích và chỉ gửi các thông tin cần thiết từ dữ liệu GPS (như vị trí, thời gian, v.v.).
  4. Đảm bảo API server sẵn sàng nhận dữ liệu và xử lý nó khi được gửi từ ESP32.
You

Nếu không có wifi, sử dụng modul nào để gởi dữ liệu

GPT

Nếu không có WiFi, bạn có thể sử dụng một số module khác để gửi dữ liệu. Dưới đây là một số lựa chọn phổ biến:

  1. GSM/GPRS Modules (2G/3G/4G):

    • SIM800, SIM900, SIM808, SIM5320, SIM7600, v.v.
    • Các module này sử dụng mạng di động để gửi và nhận dữ liệu qua SMS hoặc Internet (sử dụng GPRS/3G/4G).
  2. LoRa Module:

    • Các module như SX1278, SX1276, RFM95/96/98.
    • LoRa là công nghệ truyền dữ liệu tầm xa, tiêu thụ năng lượng thấp, phù hợp cho IoT.
  3. Xbee Module:

    • Sử dụng chuẩn Zigbee hoặc 802.15.4, thích hợp cho mạng PAN (Personal Area Network) và kết nối không dây tầm gần.
  4. Bluetooth Module:

    • HC-05, HC-06, HM-10, v.v.
    • Dùng để truyền dữ liệu trong phạm vi ngắn, qua điện thoại hoặc các thiết bị hỗ trợ Bluetooth.
  5. NRF24L01 Module:

    • Sử dụng băng tần 2.4GHz, truyền dữ liệu tầm ngắn, phù hợp cho các ứng dụng cần giao tiếp không dây đơn giản.
  6. RF Module (AM/FM):

    • Các module RF cơ bản sử dụng băng tần RF để truyền dữ liệu không dây.
  7. Satellite Communication Module:

    • Các module như RockBlock (Iridium Network), dùng mạng vệ tinh để gửi dữ liệu, thường cho các ứng dụng điều kiện khắc nghiệt.

Tùy thuộc vào phạm vi khoảng cách, khả năng tiêu thụ năng lượng và yêu cầu về dữ liệu mà bạn có thể chọn loại module phù hợp cho ứng dụng của mình.

You

Tôi muốn phát triển máy chat sử dụng NB_IOT

GPT

Để phát triển một ứng dụng chat sử dụng NB-IoT, bạn cần thực hiện các bước chính sau đây:

  1. Hiểu về NB-IoT:

    • NB-IoT (Narrowband Internet of Things) là một công nghệ truyền thông không dây dành riêng cho các thiết bị IoT với phạm vi rộng, tiêu thụ năng lượng thấp và sử dụng băng thông hẹp.
    • Nó phù hợp cho các ứng dụng yêu cầu truyền tải dữ liệu không liên tục và không cần tốc độ cao.
  2. Lựa chọn phần cứng:

    • Chọn module NB-IoT phù hợp: Có nhiều nhà cung cấp module NB-IoT như Quectel, SIMCom, Huawei, u-blox, v.v.
    • Đảm bảo module hỗ trợ băng tần NB-IoT của nhà mạng bạn sử dụng.
  3. Thiết lập phần cứng:

    • Kết nối module NB-IoT với vi điều khiển (như Arduino, STM32) hoặc một hệ thống nhúng phù hợp.
    • Đảm bảo các phần cứng khác như antenna và pin được kết nối đúng cách để tối ưu hoá hiệu suất.
  4. Phát triển phần mềm:

    • Phát triển một ứng dụng phía thiết bị để kết nối với mạng NB-IoT và gửi/nhận tin nhắn.
    • Sử dụng giao thức truyền thông nhẹ (như MQTT, CoAP) để gửi dữ liệu. MQTT là giao thức thường được sử dụng cho IoT do tính năng nhẹ và khả năng xử lý tốt.
  5. Thiết lập máy chủ:

    • Xây dựng một backend (backend server) xử lý tin nhắn được gửi từ NB-IoT devices.
    • Bạn có thể sử dụng dịch vụ đám mây như AWS IoT, Azure IoT Hub hay một máy chủ riêng với MQTT broker để quản lý các thông điệp.
  6. Nhà mạng và kết nối:

    • Đảm bảo bạn có một SIM NB-IoT và đã đăng ký với nhà mạng phù hợp.
    • Cấu hình module để kết nối với mạng NB-IoT thông qua các lệnh AT.
  7. Kiểm thử và tối ưu hóa:

    • Kiểm tra khả năng gửi và nhận tin nhắn qua mạng NB-IoT.
    • Tối ưu hóa việc tiêu thụ năng lượng và quản lý dữ liệu để phù hợp với yêu cầu ứng dụng.
  8. Bảo mật:

    • Sử dụng các giao thức bảo mật để mã hóa dữ liệu như TLS/SSL nếu có thể để bảo vệ dữ liệu truyền qua mạng.

Phát triển ứng dụng chat sử dụng NB-IoT có thể không phù hợp cho các ứng dụng yêu cầu truyền tải dữ liệu lớn hoặc thời gian thực do giới hạn băng thông của công nghệ này. Tuy nhiên, nó rất lý tưởng cho các tin nhắn yêu cầu băng thông nhỏ và tần suất thấp.

You

Trẻ nhỏ đeo thiết bị → gửi tin ngắn cho bố mẹ + chia sẻ vị trí Người cao tuổi có thể ấn nút gửi tin khi cần giúp đỡ Thú cưng đeo → định vị + gửi cảnh báo nếu đi quá xa Thiết bị đặt trong xe đạp/xe máy → chống trộm + theo dõi vị trí

GPT

Dự án của bạn rất thú vị và có tiềm năng lớn trong việc cải thiện an ninh và an toàn cho trẻ nhỏ, người cao tuổi, thú cưng và phương tiện. Dưới đây là một số gợi ý về cách bạn có thể triển khai các chức năng này sử dụng NB-IoT:

  1. Thiết bị cho trẻ nhỏ:

    • Phần cứng: Thiết bị đeo nhỏ gọn, nhẹ và thân thiện với trẻ. Ngoài module NB-IoT, cần có GPS để theo dõi vị trí.
    • Chức năng: Định kỳ gửi tin nhắn chứa thông tin vị trí cho phụ huynh qua mạng NB-IoT. Trường hợp khẩn cấp, có nút bấm để trẻ có thể gửi tín hiệu đến bố mẹ.
    • Phần mềm: Ứng dụng di động cho bố mẹ để nhận thông báo, xem vị trí trên bản đồ.
  2. Thiết bị cho người cao tuổi:

    • Phần cứng: Nút bấm đơn giản và dễ sử dụng, có thể tích hợp với một thiết bị đeo tay hoặc cài trên áo.
    • Chức năng: Khi người cao tuổi cần giúp đỡ, họ có thể ấn nút gửi tín hiệu khẩn cấp, kèm theo vị trí của họ, đến người thân hoặc dịch vụ hỗ trợ.
    • Phần mềm: Giao diện đơn giản để người thân nắm bắt thông tin kịp thời.
  3. Thiết bị cho thú cưng:

    • Phần cứng: Gắn trên vòng cổ của thú cưng và tích hợp GPS.
    • Chức năng: Theo dõi và gửi cập nhật vị trí qua NB-IoT. Cảnh báo sẽ được gửi đi nếu thú cưng ra khỏi khu vực an toàn đã được thiết lập.
    • Phần mềm: Ứng dụng cho phép chủ thú cưng cụ thể hóa khu vực an toàn và nhận thông báo nếu thú cưng vượt khỏi khu vực đã định.
  4. Thiết bị cho xe đạp/xe máy:

    • Phần cứng: Thiết bị nhỏ, có thể giấu kín trên xe với GPS và NB-IoT.
    • Chức năng: Cảnh báo trộm khi phát hiện ra sự di chuyển bất hợp pháp của xe. Gửi cập nhật vị trí liên tục để theo dõi hành trình và hỗ trợ việc tìm kiếm nếu xe bị mất cắp.
    • Phần mềm: Ứng dụng giám sát cho phép chủ xe theo dõi vị trí, cài đặt cảnh báo, và quản lý lịch sử di chuyển của xe.

Các yếu tố quan trọng:

  • Bảo mật: Đảm bảo dữ liệu vị trí và thông tin cá nhân được mã hóa để bảo vệ quyền riêng tư.
  • Thời lượng pin: Tối ưu hóa quản lý năng lượng để tăng thời gian hoạt động của thiết bị, điều này quan trọng đối với thiết bị di động.
  • Khả năng mở rộng: Thiết kế hệ thống backend cho phép quản lý nhiều thiết bị và người dùng một cách hiệu quả.

Bằng cách tích hợp các công nghệ hiện có với những tính năng thông minh, bạn có thể tạo ra các thiết bị hữu ích cho việc bảo vệ và quản lý an ninh.

You

Cấu hình phần cứng đề xuất (máy chat + định vị GPS)

GPT

Để xây dựng một thiết bị với chức năng gửi tin nhắn và định vị GPS qua NB-IoT, bạn sẽ cần lựa chọn các thành phần phần cứng thích hợp để đảm bảo tính hiệu quả, độ tin cậy và tiêu thụ năng lượng thấp. Dưới đây là cấu hình phần cứng đề xuất:

  1. Module NB-IoT:

    • Option 1: Quectel BC95 hoặc BC66
    • Option 2: SIMCom SIM7020
    • Option 3: u-blox SARA-N2

    Các module này đều hỗ trợ mạng NB-IoT với tiêu thụ năng lượng thấp, phù hợp cho các ứng dụng IoT.

  2. Module GPS/GLONASS:

    • Option 1: Quectel L70 hoặc L76
    • Option 2: u-blox NEO-6M hoặc u-blox CAM-M8
    • Option 3: SIMCom SIM28

    Các module này cung cấp độ chính xác cao và thời gian xác định vị trí nhanh, với kích thước nhỏ gọn.

  3. Vi điều khiển (MCU):

    • Option 1: STM32 series (STM32L0, STM32L1, hoặc STM32L4 cho các ứng dụng tiêu thụ năng lượng thấp)
    • Option 2: ESP32 (ưu điểm tích hợp Wi-Fi và Bluetooth)
    • Option 3: Arduino Nano 33 IoT (hỗ trợ sẵn các giao thức IoT)
  4. Nguồn điện:

    • Pin lithium-ion/polymer với dung lượng từ 500mAh trở lên, tuỳ thuộc vào yêu cầu thời gian hoạt động.
    • Quản lý nguồn: Sử dụng chip quản lý năng lượng (PMIC) để tối ưu hóa thời gian sử dụng pin, như Texas Instruments bq24074.
  5. Vỏ thiết bị:

    • Lựa chọn vật liệu nhựa ABS hoặc polycarbonate cho vỏ để đảm bảo độ bền và khả năng chống nước cơ bản.
  6. Các thành phần bổ sung:

    • Antenna NB-IoT và GPS: Đảm bảo tín hiệu tốt nhất, có thể tích hợp trực tiếp trên PCB hoặc sử dụng antenna ngoài.
    • Nút bấm: Cho phép người dùng gửi tín hiệu khẩn cấp hoặc thực hiện các lệnh đơn giản khác.
    • Màn hình nhỏ (tùy chọn): Như OLED cho hiển thị trạng thái hoặc thông tin đơn giản.

Khi thiết kế sản phẩm, cần chú ý đến vị trí và cách bố trí của các thành phần để tối ưu hóa hiệu suất, kích thước, và khả năng chống nhiễu giữa các module. Bên cạnh đó, cân nhắc đến các tiêu chuẩn về an toàn, bảo mật và tương thích điện từ khi sản xuất và triển khai thiết bị.

You

Tôi đã làm dự án này rồi: Bạn nào cần xin liên hệ tư vấn: 0903992413

GPT

Cảm ơn bạn đã chia sẻ thông tin! Nếu bạn có kinh nghiệm trong dự án này và muốn hỗ trợ người khác, việc để lại thông tin liên hệ là một cách tốt để kết nối với những ai có nhu cầu. Tuy nhiên, hãy cẩn thận với việc chia sẻ thông tin cá nhân trên các nền tảng công cộng để bảo vệ quyền riêng tư của bạn. Nếu bạn có bất kỳ câu hỏi nào khác hoặc cần thêm thông tin, đừng ngần ngại hỏi nhé!