Tiếp tục trong Series này, mình sẽ giới thiệu về Serial Monitor trong Arduino, Serial Monitor là thành phần của Arduino IDE, giúp ích rất nhiều khi ta sử dụng Arduino. Đầu tiên chúng ta hãy bắt đầu tìm hiểu về Serial Monitor nhé.
Serial Monitor là gì ?
Serial Monitor là một thành phần trong Arduino IDE, giúp bo mạch và máy tính có thể gửi và nhận dữ liệu với nhau qua giao tiếp USB. Cơ bản là vậy, ta có thể nói rõ hơn bằng cách chia nó làm 2 phần :
- Arduino → PC: PC nhận dữ liệu từ Arduino và hiển thị dữ liệu trên màn hình. Điều này thường được sử dụng để debug và giám sát kết quả
- PC → Arduino: Gửi dữ liệu hay lệnh từ PC đến Arduino.
Khởi chạy Serial Monitor
Sau khi bạn đã kết nối Arduino với PC qua USB và cấu hình đúng cổng COM cho Port ( nếu bạn chưa rõ về cấu hình cổng COM cho Port, bạn có thể xem ở đây ) , ta có thể nhấp vào biểu tượng Serial Monitor để khởi chạy nó :
Ta có được màn hình Serial Monitor như sau:
Các thành phần của Serial Monitor
- Output console: Hiển thị dữ liệu nhận được từ Arduino
- Autoscroll checkbox: Tùy chọn để chọn giữa tự động cuộn hoặc không
- Show timestamp checkbox: Cho phép hiển thị thời gian khi dữ liệu được hiển thị trên Serial Monitor
- Clear output button: Xóa sạch dữ liệu hiểu thị trên Output console
- Baud rate selection: Chọn tốc độ truyền ( baud rate ) giữa Arduino và PC. Giá trị này PHẢI giống với giá trị được khai báo trong code Arduino khi ta sử dụng hàm :
Ta sẽ nói rõ hơn về cái này ở phần dưới.Serial.begin(<baud rate>)
- Textbox: Nơi người dùng nhập dữ liệu gửi tới Arduino
- Ending selection: Chọn các ký tự kết thúc được thêm vào dữ liệu khi nó được gửi đến Arduino:
- No line ending: Không thêm gì
- Newline: Thêm kí tự xuống dòng (LF, hoặc '\n')
- Carriage return: Thêm kí tự di chuyển con trỏ về đầu dòng (CR, hoặc '\r')
- Both NL and CR: Kết hợp giữa newline và carriage return (CRLF, hoặc '\r\n')
- Send button: Gửi dữ liệu từ Textbox và Ending selection đến Arduino
Cách sử dụng Serial Monitor
Arduino → PC
Để gửi dữ liệu từ Arduino đến PC, chúng ta làm như sau:
Thêm vào trong hàm setup() của Arduino :
Serial.begin(<baud rate>)
Hàm này có tác dụng khai báo baud rate sử dụng là bao nhiêu và bắt đầu Serial port.
Đến đây thì bạn có thể thắc mắc baud rate là gì, nó là số bit truyền được trong 1s, ở truyền nhận không đồng bộ ở đây thì ở các bên truyền và nhận phải thống nhất Baud rate, nghĩa là Arduino gửi với Baud rate 9600 thì PC cũng cần đọc ở Baud rate 9600. Các thông số tốc độ Baud rate thường hay sử dụng để giao tiếp với máy tính là 600, 1200, 2400, 4800, ...
Thực ra để hiểu rõ về Baud rate thì nó khá là phức tạp, nếu bạn chỉ muốn hiểu để sử dụng Arduino thì không cần biết rõ cái này, bạn chỉ cần quan tâm 2 điều sau:
- Bạn set baud rate cho Arduino bao nhiêu thì khi bật Serial Monitor trên PC cũng phải để giống hệt như thế thì nó mới giao tiếp được, nếu không lỗi hoặc không hiển thị gì.
- Thường thì để mức Baud rate là 9600 hầu hết các trường hợp, một số trường hợp đặc biệt sẽ yêu cầu mức Baud rate khác như 115200, cái đó ta sẽ nói ở các ví dụ thực tế khác sau.
Để gửi dữ liệu dạng String lên Serial Monitor ta có thể sử dụng hàm:
Serial.print(<String>) // in ra chuỗi
hoặc
Serial.println(<String>) // in ra chuỗi và xuống dòng
Đây là 2 hàm được sử dụng phổ biến nhất, còn một số hàm khác bạn có thể tự tra cứu lấy khi cần
Bây giờ ta sẽ đi vào ví dụ đơn giản: In chuỗi Hello World ra màn hình sau mỗi 1 giây.
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.print("Hello world");
delay(1000);
}
Bạn nạp code cho Arduino xong, rồi bật Serial Monitor lên, chỉnh mức Baud rate là 9600, ta sẽ được như sau :
PC → Arduino
Để gửi dữ liệu từ PC đến Arduino và làm cho Arduino đọc và xử lý nó, chúng ta làm như sau:
Thêm vào trong hàm setup() của Arduino :
Serial.begin(<baud rate>)
Và trong hàm loop() ta cần thêm:
if(Serial.available())
{
// xử lý lệnh ở đây
}
Hàm Serial.available() trả về true nếu có lệnh từ PC gửi đến Arduino thông qua Serial Monitor.
Để Arduino đọc được sữ liệu được gửi tới, ta có thể sử dụng các hàm: Serial.read(), Serial.readBytes(), Serial.readString(), ... Bạn có thể tự tìm hiểu lấy, trong bài viết này mình sẽ sử dụng hàm mình hay dùng :
Serial.readStringUntil(<kí tự dừng>) // cho phếp đọc toàn bộ chuỗi được gửi đến cho đến khi gặp kí tự dừng.
Bây giờ ta sẽ đi vào ví dụ đơn giản: Bật tắt đèn LED khi gõ ON / OFF trên Serial Monitor
Ta sẽ sử dụng lại mạch mà mình đã nói ở bài viết trước, bạn có thể xem nó tại đây
Ở đây ta code như sau:
void setup()
{
Serial.begin(9600);
pinMode(8, OUTPUT);
digitalWrite(8, LOW); // lúc đầu ta để LED tắt
}
void loop()
{
if(Serial.available()) { // nếu có dữ liệu gửi đến
text = Serial.readStringUntil('\n'); // đọc giá trị gửi đến cho đến khi gặp kí tự xuống dòng \n
if(text == "ON") {
digitalWrite(8,HIGH); // bật LED
Serial.println("LED is turned ON"); // gửi lại thông báo lên Serial Monitor
}
if(text == "OFF") {
digitalWrite(8,LOW); // tắt LED
Serial.println("LED is turned OFF");
}
}
}
Sau đó bạn nạp code cho Arduino xong, rồi bật Serial Monitor lên, chỉnh mức Baud rate là 9600 và để Ending selection là newline, cuối cùng bạn nhập ON hoặc OFF để tận hưởng thành quả :
Vậy là mình đã hướng dẫn xong Serial Monitor cơ bản, ở các bài sau mình sẽ giới thiệu tiếp các dự án khác về Arduino và sẽ ứng dụng Serial Monitor để dựa vào đó bạn có thể lập trình Arduino một cách thành thạo hơn.
Hẹn gặp lại.