Mô-đun GSM được sử dụng trong nhiều thiết bị truyền thông dựa trên công nghệ GSM (Hệ thống toàn cầu cho truyền thông di động). Nó được sử dụng để tương tác với mạng GSM bằng máy tính. Mô-đun GSM chỉ hiểu các lệnh AT và có thể đáp ứng tương ứng. Lệnh cơ bản nhất là “AT”, nếu GSM phản hồi OK thì nó hoạt động tốt, ngược lại nó phản hồi với “ERROR”. Có nhiều lệnh AT khác nhau như ATA để trả lời cuộc gọi, ATD để quay số cuộc gọi, AT + CMGR để đọc tin nhắn, AT + CMGS để gửi tin nhắn, v.v. Các lệnh AT phải được theo sau bởi Carriage return tức là \ r (0D trong hex), như “AT + CMGS \ r”. Chúng ta có thể sử dụng mô-đun GSM bằng các lệnh này.
Giao diện GSM với 8051
Thay vì sử dụng PC, chúng ta có thể sử dụng vi điều khiển để tương tác với mô-đun GSM và LCD để nhận phản hồi từ mô-đun GSM. Vì vậy, chúng ta sẽ giao tiếp GSM với vi điều khiển 8051 (AT89S52). Rất dễ dàng giao tiếp GSM với 8051, chúng ta chỉ cần gửi lệnh AT từ vi điều khiển và nhận phản hồi từ GSM và hiển thị nó trên màn hình LCD. Chúng ta có thể sử dụng cổng nối tiếp của vi điều khiển để giao tiếp với GSM, nghĩa là sử dụng mã PIN 10 (RXD) và 11 (TXD).
Đầu tiên chúng ta cần kết nối LCD với 8051, bạn có thể tìm hiểu điều này từ đây: Giao diện LCD với Vi điều khiển 8051. Sau đó, chúng ta cần kết nối mô-đun GSM với 8051, bây giờ ở đây chúng ta nên chú ý một số điều. Trước tiên, bạn cần kiểm tra xem mô-đun GSM của bạn có khả năng hoạt động ở logic TTL hay chỉ có thể hoạt động với RS232. Về cơ bản nếu mô-đun của bạn có các Ghim RX và TX (với GND) trên bo mạch thì nó có thể hoạt động trên logic TTL. Và Nếu nó không có bất kỳ chân RX, TX nào và chỉ có cổng RS232 (cổng nối tiếp với 9) thì bạn cần sử dụng IC MAX232 để kết nối cổng nối tiếp với vi điều khiển. Về cơ bản MAX232dùng để chuyển dữ liệu nối tiếp thành logic TTL vì Vi điều khiển chỉ có thể hoạt động trên logic TTL. Nhưng nếu mô-đun GSM có chân RX, TX thì bạn không cần sử dụng MAX232 hoặc bất kỳ bộ chuyển đổi nối tiếp nào, bạn có thể kết nối trực tiếp RX của GSM với TX (PIN 11) của 8051 và TX của GSM với RX (PIN 10) của 8051 Trong trường hợp của chúng tôi, tôi đã sử dụng mô-đun SIM900A và nó có chân RX, TX nên tôi chưa sử dụng MAX232.
Sơ đồ mạch cho giao tiếp GSM với vi điều khiển AT89S52 được trình bày trong hình trên. Bây giờ sau khi kết nối, chúng ta chỉ cần viết chương trình để gửi lệnh AT đến GSM và nhận phản hồi của nó trên LCD. Có nhiều lệnh AT như đã mô tả ở trên, nhưng phạm vi của bài viết này chỉ là giao tiếp GSM với 8051, vì vậy chúng ta sẽ gửi lệnh “AT” theo sau là “\ r” (0D trong hệ lục phân). Điều này sẽ cung cấp cho chúng tôi một phản hồi “OK”. Nhưng bạn có thể mở rộng chương trình này để sử dụng tất cả các tiện ích của GSM.
Giải thích mã
Bên cạnh tất cả các chức năng liên quan đến LCD, ở đây chúng tôi đã sử dụng cổng nối tiếp và thanh ghi chế độ hẹn giờ (TMOD). Bạn có thể tìm hiểu về các hàm LCD và các mã khác bằng cách xem qua phần dự án 8051 của chúng tôi, ở đây tôi giải thích về các hàm mã liên quan đến giao tiếp nối tiếp:
Hàm GSM_init ():
Chức năng này được sử dụng để đặt Baudrate cho vi điều khiển. Baudrate không là gì ngoài Bits / giây được truyền hoặc nhận. Và chúng ta cần phải khớp tốc độ truyền của 8051 với tốc độ truyền của mô-đun GSM tức là 9600. Chúng ta đã sử dụng Bộ định thời 1 ở Chế độ 2 (chế độ tự động tải lại 8-bit) bằng cách đặt thanh ghi TMOD thành 0X20 và byte cao hơn của Bộ định thời 1 (TH1) đến 0XFD để có được tốc độ truyền là 9600. Ngoài ra thanh ghi SCON được sử dụng để thiết lập chế độ giao tiếp nối tiếp, chúng tôi đã sử dụng Mode1 (8-bit UART) với nhận kích hoạt.
Hàm GSM_write:
SBUF (thanh ghi chức năng đặc biệt của bộ đệm nối tiếp) được sử dụng cho giao tiếp nối tiếp, bất cứ khi nào chúng ta muốn gửi byte nào đến thiết bị nối tiếp chúng ta đưa byte đó vào thanh ghi SBUF, khi byte hoàn chỉnh đã được gửi đi thì bit TI được thiết lập bởi phần cứng. Chúng ta cần đặt lại nó để gửi byte tiếp theo. Đó là một cờ cho biết rằng byte đã được gửi thành công. TI là bit thứ hai của thanh ghi SCON. Chúng tôi đã gửi “AT” bằng chức năng này.
Hàm GSM_read:
Tương tự như việc gửi, bất cứ khi nào chúng ta nhận được bất kỳ byte nào từ thiết bị bên ngoài mà byte đó được đưa vào thanh ghi SBUF, chúng ta chỉ cần đọc nó. Và bất cứ khi nào nhận được byte hoàn chỉnh, bit RI được thiết lập bởi phần cứng. Chúng ta cần đặt lại nó để nhận byte tiếp theo. RI là bit đầu tiên của thanh ghi SCON. Chúng tôi đã đọc phản hồi “OK” bằng chức năng này.