Phát triển ứng dụng IOT với PlatformIO
Platformio là gì ? Công dụng của nó lợi hại như thế nào, tại sao khi nó kết hợp với Sublime lại được coi là sự thay thế hoàn hảo cho các IDE hiện có như Arduino, mình cùng tìm hiểu xem thế nào ?
Note 2020: Bài này cũng 3 năm mùa chuối rồi, hiện tại mình cũng không dùng Sublime nữa nên sẽ update phần mới với Visual Studio Code. Anh em có thể tham khảo nhanh tại Link trang chủ
Sublime Text/ PlatformIO là gì ?
Sublime Text là một editor, nói cho dễ hiểu thì nó là một trình soạn thảo giống như Notepad. Tuy nhiên nó nhanh, nhỏ gọn,đẹp và tiện dụng hơn rất nhiều, riêng mình đã chăm chỉ code hơn khi dùng cái này.
PlatformIO là mội plugin có khả năng lập trình Arduino/ ARM mbed nó hỗ trợ tới hơn 250 board khác nhau. Các bạn có thể xem danh sách hỗ trợ của platformio tại http://platformio.org/boards. Riêng với các board thông dụng hiện nay như Arduino Uno, Mega, ESP 8266, TIVA đều hỗ trợ hết, nghĩa là chỉ dùng 1 cái bạn có thể lập trình tất cả.
PlatformIO có thể tích hợp được vào rất nhiều Text Editor khác nhau, ở bài này mình sẽ dùng Sublime kết hợp với Deviot, Deviot là plugin giúp thao tác cài đặt PlatformIO được dễ dàng hơn
Cài đặt
Chuẩn bị đồ nghề trước đã
- Sublime Text 3 tải tại https://www.sublimetext.com/3 , có 2 bản cài và bản portable, mình dùng bản cài. Cài như chương trình bình thường.
- Python 2.7 tải tại https://www.python.org/downloads/, python thì lưu ý là phải dùng bản 2.7 nhé, các bản khác không dùng được. Và lưu ý khi cài phải chọn add python.exe to path
Coi như xong bước cài ban đầu, tiếp tục cài Package Control bằng cách vào sublime ấn tổ hợp nút Ctrl+Shift+P hoặc vào Preferences-> PackageControl trên menu
Cài Plugin Deviot bằng cách ấn tiếp Ctrl+Shift+P, sau đó gõ Install, gõ tiếp Deviot
Kết quả PlatformIO sẽ được cài đặt, việc còn lại là chờ
Tạo project mới
Cái này thì giống như tạo mới với Arduino thôi.
Tiếp tục mình thử với chương trình Blink LED
Giờ thì chọn board, rất nhiều board cho mọi người lựa chọn, ở đây mình dùng NodeMCU luôn cho tiện.
Thử build và load chương trình vào board
Lưu ý để nhanh thì bạn có thể chọn luôn Upload thì Sublime sẽ tự build và nạp chương trình.
Sử dụng project có sẵn
Nếu không tạo mới mà bạn muốn dùng trên cái có sẵn của mình thì chỉ việc kéo thả file .ino vào trong Sublime Text sau đó chọn Upload thì Sublime sẽ tự build và load chương trình xuống.
Thêm thư viện
Đây là phần quan trọng, nếu chỉ có Blink LED thôi thì quá đơn giản, giờ project của mình có rất nhiều thư viện khác nữa thì xài thế nào ?
Đầu tiên chọn Deviot -> Library Option -> Open Library Folder (phím tắt Alt+O)
Copy thư viện của bạn vào đây, như mình thì copy toàn bộ thư viện của bên Arduino vào luôn :D.
Ví dụ minh họa luôn cho dễ hiểu nhé
Mình dùng thư viện Firebase của bài ESP8266 với Firebase với ví dụ 1
Đầu tiên là copy thư viện firebase vào thư mục lib (thông thường là AppData\Roaming\SPB_Data.platformio\lib), nếu dùng bản từ Gihub Firebase sẽ có báo lỗi thiếu thư viện ESP8266HTTPClient
, bạn chỉ cần copy từ bên Arduino sang hoặc dùng sẵn cái của mình tại link.
Tạo project mới hoặc build dựa trên file .ino có sẵn
#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>
#define FIREBASE_HOST "hocarm1.firebaseio.com" //Thay bằng địa chỉ firebase của bạn
#define FIREBASE_AUTH "" //Không dùng xác thực nên không đổi
#define WIFI_SSID "ten_wifi" //Thay wifi và mật khẩu
#define WIFI_PASSWORD "mat_khau"
void setup() {
Serial.begin(9600);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("connecting");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println();
Serial.print("connected: ");
Serial.println(WiFi.localIP());
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}
void loop() {
Firebase.setFloat("led", 0);
int i = 0;
for (i = 0; i < 10; i++) {
Firebase.setFloat("led", i);
// handle error
if (Firebase.failed()) {
Serial.print("setting /number failed:");
Serial.println(Firebase.error());
return;
}
Serial.println(i);
delay(200);
}
}
Kết quả sau khi build và upload xuống ESP8266.
Sử dụng terminal
Một phần cũng quan trọng không kém là nếu debug Serial với Arduino IDE thì mình sẽ vào biểu tượng kính lúp, còn với cái này thì làm sao ?
Bạn chọn Deviot -> Monitor Serial -> Run để chạy với baudrate mặc định là 9600, nếu muốn đổi thì bạn vào phần baudrate chỉnh lại thôi.
Để mở 2 cửa sổ trong Sublime bạn ấn tổ hợp Shift + Alt + 2, trở về như cũ thì Shift + Alt + 1
Giờ thì Sublime đã phát huy hiệu quả chia đôi màn hình 1 code 1 debug rất thuận tiện cho anh em rồi.
Cấu hình lại output
Mục đích của việc này là để output ra thông tin về RAM và bộ nhớ để dễ nắm bắt được, mình bị lỗi hết RAM của Uno 1 lần mà không biết cũng vì không bật cái này.
Build lại và xem kết quả sẽ có như sau
Các lỗi thường gặp
- Lỗi không cài được PlatformIO: cần cài đúng python 2.7 và add path khi cài
- Lỗi không build được: cần chuột phải chọn đúng board trước sau đó mới build
- Lỗi thư viện: cần copy thư viện vào đúng thư mục lib
- Lỗi không nạp được cho TIVA: cài CCS Cloud để lấy driver của TIVA.
- Lỗi nạp code Arduino Uno nhưng không chạy: thường do hết RAM, cần đổi board khác.
- Lỗi “python.exe” could not be run: [Error 5] Access is denied thực hiện các bước sau
- Chuột phải chọn Properties
- Vào thẻ “Security”
- Chọn “EDIT”
- Chọn “ADD”
- Chọn “Full control” để có full quyền admin
- Chọn OK 2 lần là xong
- Tắt mở sublime text lại
Tạm kết
Mãi mới xong, coi như đã gần đủ hết đồ nghề cho bạn dev các ứng dụng IOT rồi, coi như có thể tạm quên Arduino IDE thôi. Như mình từ ngày chuyển sang đây dùng thì chăm chỉ code hơn nhiều 😀 . Có một chút buồn là bị xung đột với Aformatter nên không auto format code được, mình đang tìm cách fix, sẽ bổ sung lại cho mọi người sau. Còn nữa, bản gốc của PlatformIO dùng Atom, mình có dùng qua nhưng thấy không tiện lắm, ngoài ra PlatformIO còn dùng được với VisualCode, Visual Studio, Emac, VIM, QT,… các bạn nếu không thích Sublime có thể xem thêm tại Doc của PlatformIO.