Làm việc với Heltec WiFi 32 – ESP32 tích hợp OLED hiển thị thông tin
Trong bài viết này, IoTZone giới thiệu đến bạn cách thiết lập bộ kit Heltec WiFi 32 có tích hợp màn hình OLED. Sau khi xem bài viết, bạn có thể hiển thị các điểm truy cập cục bộ (Local Access Point) trên màn hình OLED tích hợp.
Giới thiệu thêm: Mạch Heltec ESP32 được phát triển dựa trên chip ESP32, có tích hợp WiFi, Bluetooth, màn hình OLED 0.96″, đầu nối sạc pin lithium và CP2102 USB to Serial Interface. Chúng vẫn hỗ trợ lập trình trên Arduino IDE. Bạn có thể tìm mua chúng trên trang sản phẩm Heltec LoRa ESP32 của IoTZone.
Cài đặt ESP32 trên Arduino IDE
Không giống như trước đây, hiện tại trên thư viện của Arduino đã có sẵn phần thiết lập hỗ trợ ESP32. Bạn mở Arduino IDE, chọn vào mục File > Preferences.
Trong thư mục, bạn hãy mở thư mục hardware, tìm và xóa thư mục ESP32 hoặc thư mục Espressif.
Bây giờ, bạn có thể thiết lập thư viện ESP32 để sử dụng với Heltec WiFi 32 dễ dàng hơn.
Tại File > Preferences của Arduino IDE, bạn dán đường link sau vào Additional Boards Manager URL:
https://dl.espressif.com/dl/package_esp32_index.json
Nếu bạn đã có các mục trong trường này thì bạn có thể thêm dòng mới và phân tách chúng bằng dấu phẩy:
Sau đó, bạn mở Tools > Board > Board Manager:
Bạn gõ dòng chữ ESP32 và cài đặt thư viện mới:
Sau khi cài đặt thư viện trên vào Arduino IDE, bạn có thể tìm thấy tất cả các mạch ESP32 được hỗ trợ, trong đó có cả Heltec WiFi 32:
Chương trình đầu tiên của Heltec WiFi 32 trên Arduino IDE
Bây giờ, bạn có thể kết nối Heltec WiFi 32 với máy tính, mọi thứ đã sẵn sàng để lập trình.
Bạn hãy khởi động lại Arduino IDE, chọn đúng mạch ESP32 trong menu Tools > Board và chọn cổng COM đang kết nối với mạch.
Để kiểm tra mạch ESP32 tích hợp OLED có hoạt động ổn định không, bạn có thể mở đoạn code WifiScan và nạp vào chạy thử (bằng cách click vào File> Examples > Wifi > WifiScan). Nếu bạn mở Serial Monitor (Tool >> Serial Monitor) và chọn tốc độ baud giống trong code (thông thường là 115200), bạn sẽ thấy trên màn hình hiển thị tất cả các mạng WiFi ở gần đó.
Thử nghiệm Heltec ESP32 tích hợp OLED
Sau khi cài xong thư viện và kiểm tra thấy mạch hoạt động ổn định (thông qua đoạn code WifiScan trên), bạn có thể làm các dự án nâng cao hơn như hiển thị thông tin trên màn hình OLED tích hợp.
Để làm được điều đó, bạn cần cài thư viện hỗ trợ của OLED. Một thư viện gợi ý nên dùng cho bạn là U8g2. Thư viện này khá dễ cài đặt và chúng đã được tích hợp sẵn trong Arduino IDE, bạn chỉ cần click theo thứ tự Sketch > Include Library > Manage Libraries > Tìm tên thư viện và cài đặt là xong.
Thư viện U8g2 hỗ trợ 3 phương pháp khác nhau để hiển thị thông tin trên OLED. Dưới đây là 3 đoạn code mẫu cho từng phương pháp:
Full Buffer
Bạn click mở File> Examples > U8g2 > full_buffer > GraphicsTest và dán dòng chữ sau vào phía trên dòng // Please UNCOMMENT one of the contructor lines below:
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 15, /* data=*/ 4, /* reset=*/ 16);
Sau đó, bạn upload sketch vào mạch.
Page Buffer
Bạn click mở File> Examples > U8g2 > page_buffer > GraphicsTest và dán dòng chữ sau vào phía trên dòng // Please UNCOMMENT one of the contructor lines below:
U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ 15, /* data=*/ 4, /* reset=*/ 16);
Sau đó, bạn upload sketch vào mạch.
U8x8
Bạn click mở File> Examples > U8g2 > u8x8 > GraphicsTest và dán dòng chữ sau vào phía trên dòng // Please UNCOMMENT one of the contructor lines below:
8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/* clock=*/ 15, /* data=*/ 4, /* reset=*/ 16);
Vậy, các con số clock=*/ 15, /* data=*/ 4, /* reset=*/ 16) ở các ví dụ trên có nghĩa là gì? Đó chính là số chân I2C dùng để điều khiển đèn LED tích hợp trên ESP32.
Nói ngắn gọn, các con số trên nói với thư viện display rằng nên dùng chân nào để giao tiếp với màn hình. Với từng loại mạch Heltec WiFi 32 khác nhau, bạn cần xem sơ đồ GPIO để chỉnh sửa lại số chân cho đúng nhé!
Chương trình đầy đủ
Dưới đây là đoạn code mẫu giúp hiển thị kết quả quét mạng WiFi xung quanh lên OLED, sử dụng phương pháp U8x8 đã trình bày:
#include "WiFi.h" #include <U8x8lib.h> // the OLED used U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/* clock=*/ 15, /* data=*/ 4, /* reset=*/ 16); void setup() { // Cấu hình WiFi ở chế độ Station và ngắt kết nối khỏi AP nếu nó đã được kết nối trước đó WiFi.mode(WIFI_STA); WiFi.disconnect(); delay(100); u8x8.begin(); u8x8.setFont(u8x8_font_chroma48medium8_r); } static void doSomeWork() { int n = WiFi.scanNetworks(); if (n == 0) { u8x8.drawString(0, 0, "Searching networks."); } else { u8x8.drawString(0, 0, "Networks found: "); for (int i = 0; i < n; ++i) { // In tên WiFi SSID cho mỗi mạng được tìm thấy char currentSSID[64]; WiFi.SSID(i).toCharArray(currentSSID, 64); u8x8.drawString(0, i + 1, currentSSID); } } // Chờ 5 giây trước khi thực hiện quét tìm mạng WiFi lại lần nữa } void loop() { doSomeWork(); }
Bạn hãy thử nạp code trên vào mạch ESP32 tích hợp OLED của bạn và thử xem sao nhé!
Lời kết
Trên đây là hướng dẫn chi tiết cơ bản ban đầu khi bạn cần làm việc với Heltec WiFi 32. IoTZone đã minh họa một ví dụ nhỏ về việc hiển thị các mạng WiFi gần đó lên màn hình OLED. Chúc các bạn thành công!
Ngoài ra, Website IoTZone cũng có khá nhiều bài viết hướng dẫn khác thú vị về chủ đề ESP32, bạn có thể tham khảo và làm theo nếu thích:
- ESP32 Timer Interrupt – Ngắt ESP32 là gì?
- Cách dùng ESP32 Telegram điều khiển đèn LED với Arduino IDE
- ESP32 Node Red MQTT – Cách hiển thị dữ liệu từ nhiều cảm biến
- Dự án ESP32 Blynk – Bật tắt đèn LED qua WiFi
IoTZone – Chuyên cung cấp thiết bị điện tử & tài liệu cho Makers
- Website: https://www.iotzone.vn/
- Fanpage: https://www.facebook.com/Iotzonemaker
- SDT: 0364174499
- Zalo: https://zalo.me/0364174499