- Vật liệu thiết yếu:
- Mô-đun GSM:
- Giao tiếp với mô-đun GSM bằng các lệnh AT:
- Sơ đồ mạch:
- Lập trình cho bạn Vi điều khiển PIC:
- Mô phỏng:
- Thực hiện và Nhận cuộc gọi bằng GSM và PIC:
Mô-đun GSM rất hấp dẫn để sử dụng đặc biệt khi dự án của chúng tôi yêu cầu truy cập từ xa. Các mô-đun này có thể thực hiện tất cả các hành động mà điện thoại di động thông thường của chúng ta có thể thực hiện, như thực hiện / nhận cuộc gọi, gửi / nhận SMS, kết nối Internet bằng GPRS, v.v. Bạn cũng có thể kết nối micrô và loa thông thường với mô-đun này và trò chuyện trên cuộc gọi di động. Điều này sẽ mở ra cánh cửa cho nhiều dự án sáng tạo nếu nó có thể được giao tiếp với Bộ vi điều khiển. Do đó, trong hướng dẫn này, chúng ta sẽ học cách có thể Giao tiếp mô-đun GSM (SIM900A) với bộ vi điều khiển PIC của chúng tôi và sẽ chứng minh điều đó bằng cách thực hiện và nhận cuộc gọi bằng Mô-đun GSM. Trước đây chúng tôi đã giao tiếp nó với Arduino và Raspberry Pi để gọi và nhắn tin:
- Gọi và Nhắn tin bằng Arduino và Mô-đun GSM
- Gọi và Nhắn tin bằng Raspberry Pi và Mô-đun GSM
Vật liệu thiết yếu:
- Vi điều khiển PIC (PIC16F877A)
- Mô-đun GSM (SIM900 hoặc bất kỳ loại nào khác)
- Kết nối dây
- Bộ chuyển đổi 12V
- PicKit 3
Mô-đun GSM:
Mô-đun GSM có thể được sử dụng ngay cả khi không có bất kỳ vi điều khiển nào bằng cách sử dụng chế độ lệnh AT. Như được trình bày ở trên, mô-đun GSM đi kèm với bộ điều hợp USART có thể được giao tiếp trực tiếp với máy tính bằng cách sử dụng mô-đun MAX232 hoặc các chân Tx và Rx có thể được sử dụng để kết nối nó với Bộ vi điều khiển. Bạn cũng có thể nhận thấy các chân khác như MIC +, MIC-, SP +, SP- vv nơi có thể kết nối micrô hoặc Loa. Mô-đun có thể được cấp nguồn bằng bộ chuyển đổi 12V thông qua giắc cắm thùng DC thông thường.
Lắp thẻ SIM vào khe của mô-đun và bật nguồn, bạn sẽ thấy đèn LED nguồn BẬT. Bây giờ, hãy đợi khoảng một phút và bạn sẽ thấy đèn LED màu đỏ (hoặc bất kỳ màu nào khác) nhấp nháy một lần sau mỗi 3 giây. Điều này có nghĩa là Mô-đun của bạn có thể thiết lập kết nối với thẻ SIM của bạn. Bây giờ bạn có thể tiến hành kết nối mô-đun của mình với Điện thoại hoặc bất kỳ Vi điều khiển nào.
Giao tiếp với mô-đun GSM bằng các lệnh AT:
Như bạn có thể đã đoán ra, mô-đun GSM có thể giao tiếp thông qua giao tiếp nối tiếp và chỉ có thể hiểu một ngôn ngữ và đó là “ lệnh AT ”. Bất cứ điều gì bạn có thể muốn nói hoặc yêu cầu với mô-đun GSM, nó chỉ nên thông qua các lệnh AT. Ví dụ, nếu bạn muốn biết mô-đun của bạn có đang hoạt động hay không. Bạn nên yêu cầu (gửi) một lệnh như “AT” và mô-đun của bạn sẽ trả lời “OK”.
Các lệnh AT này được giải thích kỹ trong bảng dữ liệu của nó và có thể tìm thấy ở đây trong bảng dữ liệu chính thức của nó. Được chứ! Được chứ! Đó là một biểu dữ liệu 271 trang và bạn có thể mất nhiều ngày để đọc hết chúng. Vì vậy, tôi đã đưa ra một số lệnh AT quan trọng nhất bên dưới để bạn sớm thiết lập và chạy nó.
AT |
Trả lời bằng OK cho lời xác nhận |
AT + CPIN? |
Kiểm tra chất lượng tín hiệu |
AT + COPS? |
Tìm tên nhà cung cấp dịch vụ |
ATD96XXXXXXXX; |
Cuộc gọi đến một số cụ thể, kết thúc bằng dấu chấm phẩy |
AT + CNUM |
Tìm số thẻ SIM (có thể không hoạt động đối với một số SIM) |
ATA |
Trả lời cuộc gọi đến |
ATH |
Ngắt cuộc gọi đến hiện tại |
AT + COLP |
Hiển thị số cuộc gọi đến |
AT + VTS = (số) |
Gửi số DTMF. Bạn có thể sử dụng bất kỳ số nào trên bàn phím di động của mình cho (số) |
AT + CMGR |
AT + CMGR = 1 đọc thông báo ở vị trí đầu tiên |
AT + CMGD = 1 |
Xóa tin nhắn ở vị trí đầu tiên |
AT + CMGDA = "XÓA TẤT CẢ" |
Xóa tất cả tin nhắn khỏi SIM |
AT + CMGL = "TẤT CẢ" |
Đọc tất cả tin nhắn từ SIM |
AT + CMGF = 1 |
Đặt cấu hình SMS. “1” chỉ dành cho chế độ văn bản |
AT + CMGS = “+91 968837XXXX” > CircuitDigest Text
|
Gửi SMS đến một số cụ thể tại đây 968837XXXX. Khi bạn thấy “>”, hãy bắt đầu nhập văn bản. Nhấn Ctrl + Z để gửi văn bản. |
AT + CGATT? |
Cách kiểm tra kết nối internet trên thẻ SIM |
AT + CIPSHUT |
Để đóng kết nối TCP, nghĩa là ngắt kết nối internet của biểu mẫu |
AT + CSTT = “APN”, “tên người dùng”, “Đạt” |
Kết nối với GPRS bằng APN và khóa Pass của bạn. Có thể lấy từ Nhà cung cấp mạng. |
AT + CIICR |
Kiểm tra xem thẻ SIM có gói dữ liệu không |
AT + CIFSR |
Nhận IP của mạng SIM |
AT + CIPSTART = “TCP”, “IP MÁY CHỦ”, “PORT” |
Được sử dụng để đặt kết nối TCP IP |
XU HƯỚNG TẠI + CIPS |
Lệnh này được sử dụng để gửi dữ liệu đến máy chủ |
Sơ đồ mạch:
Sơ đồ kết nối cho module GSM Interfacing với vi điều khiển PIC được hiển thị bên dưới.
Chúng ta chỉ cần giao tiếp các chân Tx và Rx của mô-đun GSM với các chân Rx và Tx của PIC MCU PIC16F877A tương ứng. Điều này sẽ thiết lập kết nối Nối tiếp giữa cả hai. Ngoài ra, đừng quên điểm chung cho cả mô-đun GSM và PIC. Chúng tôi cũng đã sử dụng màn hình LCD để biết trạng thái của mô-đun GSM của chúng tôi. Sau khi kết nối xong, phần cứng của bạn sẽ giống như hình bên dưới.
Bảng PIC Perf được tạo cho loạt bài hướng dẫn về PIC của chúng tôi, trong đó chúng tôi đã học cách sử dụng vi điều khiển PIC. Bạn có thể muốn quay lại các hướng dẫn về Vi điều khiển PIC sử dụng MPLABX và XC8 nếu bạn không biết cách ghi chương trình bằng Pickit 3, vì tôi sẽ bỏ qua tất cả các thông tin cơ bản đó.
Lập trình cho bạn Vi điều khiển PIC:
Chương trình hoàn chỉnh cho dự án này có thể được tìm thấy ở cuối hướng dẫn này. Ở đây tôi sẽ giải thích một số chức năng và đoạn mã quan trọng. Chương trình này cũng có mã LCD từ Giao diện LCD với Vi điều khiển PIC, bạn có thể truy cập hướng dẫn đó nếu bạn muốn biết cách sử dụng LCD với vi điều khiển PIC.
Như đã nói trước đó, chúng ta sẽ giao tiếp giữa PIC và GSM bằng cách sử dụng lệnh AT thông qua phương thức giao tiếp nối tiếp. Vì vậy, trước tiên chúng ta phải khởi tạo mô-đun giao tiếp USART trong bộ vi điều khiển PIC của chúng ta bằng cách sử dụng Initialize _SIM900 (); chức năng. Bên trong hàm này, chúng ta khai báo các chân Tx và RX và khởi tạo chức năng nhận và truyền không đồng bộ ở tốc độ truyền 9600 và chế độ 8-bit.
// *** Khởi tạo UART cho SIM900 ** // void Initialize_SIM900 (void) {// **** Đặt các chân I / O cho UART **** // TRISC6 = 0; // Chân TX được đặt làm đầu ra TRISC7 = 1; // Bộ chân RX làm đầu vào // ________ Bộ chân I / O __________ // / ** Khởi tạo thanh ghi SPBRG cho tốc độ truyền yêu cầu và đặt BRGH cho tốc độ truyền nhanh ** / SPBRG = 129; // SIM900 hoạt động ở tốc độ 9600 Baud nên 129 BRGH = 1; // cho baud_rate cao // _________ Kết thúc cài đặt baud_rate _________ // // **** Kích hoạt cổng nối tiếp không đồng bộ ******* // SYNC = 0; // SPEN không đồng bộ = 1; // Bật các chân cổng nối tiếp // _____ Đã bật cổng nối tiếp không đồng bộ _______ // // ** Cho phép chuẩn bị cho truyền & nhận ** // TXEN = 1; // cho phép truyền CREN = 1; // bật tiếp nhận // __ Mô-đun UART lên và sẵn sàng cho việc truyền và nhận __ // // ** Chọn chế độ 8-bit ** // TX9 = 0; // Tiếp nhận 8 bit đã chọn RX9 = 0;// Chế độ tiếp nhận 8 bit được chọn // Đã chọn chế độ 8 bit __ //} // ________ Mô-đun UART Khởi tạo __________ //
Bây giờ chúng ta cần đọc và ghi thông tin từ / đến mô-đun GSM của chúng ta. Đối với điều này, chúng tôi sử dụng các hàm _SIM900_putch (), _SIM900_getch (), _SIM900_send_string (), _SIM900_print (). Các chức năng này sử dụng thanh ghi bộ đệm truyền và nhận như TXREG và RCREG để đọc hoặc ghi dữ liệu tuần tự.
// ** Hàm gửi một byte ngày tới UART ** // void _SIM900_putch (char bt) {while (! TXIF); // giữ chương trình cho đến khi bộ đệm TX trống TXREG = bt; // Nạp bộ đệm phát với giá trị nhận được} // _____________ Kết thúc hàm ________________ // // ** Hàm lấy một byte ngày từ UART ** // char _SIM900_getch () {if (OERR) // kiểm tra lỗi { CREN = 0; // Nếu lỗi -> Đặt lại CREN = 1; // Nếu lỗi -> Đặt lại} while (! RCIF); // giữ chương trình cho đến khi bộ đệm RX miễn phí trả về RCREG; // nhận giá trị và gửi đến hàm main} // _____________ Kết thúc hàm ________________ // // ** Hàm chuyển chuỗi thành byte ** // void SIM900_send_string (char * st_pt) {while (* st_pt) // if there là một char _SIM900_putch (* st_pt ++);// xử lý nó dưới dạng dữ liệu byte} // ___________ Kết thúc hàm ______________ // // ** Kết thúc mã sửa đổi ** // void _SIM900_print (unsigned const char * ptr) {while (* ptr! = 0) {_SIM900_putch (* ptr ++); }
Các chức năng trên là phổ biến và không cần thay đổi cho bất kỳ ứng dụng nào. Họ chỉ được giải thích để giới thiệu sơ bộ. Bạn có thể đi sâu vào chúng nếu bạn muốn thông qua sự hiểu biết.
Bây giờ bên trong chức năng chính của chúng tôi, chúng tôi khởi tạo kết nối USART và kiểm tra xem chúng tôi có thể nhận được “OK” khi chúng tôi gửi “AT” hay không bằng cách sử dụng dòng mã bên dưới
làm {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Không tìm thấy mô-đun"); } while (! SIM900_isStarted ()); // đợi cho đến khi GSM gửi lại "OK" Lcd_Set_Cursor (2,1); Lcd_Print_String ("Đã phát hiện mô-đun"); __delay_ms (1500);
Hàm SIM900_isStarted (); sẽ gửi “AT” đến GSM và chờ phản hồi “OK” từ nó. Nếu có, nó sẽ trả về 1 else 0;
Nếu mô-đun không được phát hiện hoặc nếu có bất kỳ vấn đề kết nối nào thì màn hình LCD sẽ hiển thị “Không tìm thấy mô-đun”, nếu không nó sẽ hiển thị Mô-đun được phát hiện và tiếp tục bước tiếp theo, chúng tôi kiểm tra xem thẻ SIM có thể được phát hiện bằng cách bên dưới không dòng mã.
/ * Kiểm tra xem thẻ SIM có được phát hiện không * / do {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Không tìm thấy SIM"); } while (! SIM900_isReady ()); // đợi cho đến khi GSM gửi lại "+ CPIN: READY" Lcd_Set_Cursor (2,1); Lcd_Print_String ("Đã phát hiện SIM"); __delay_ms (1500);
Hàm SIM900_isReady () sẽ gửi “AT + CPIN?” tới GSM và chờ phản hồi “+ CPIN: READY” từ nó. Nếu có, nó sẽ trả về 1 else 0;
Nếu một thẻ SIM nếu được tìm thấy, chúng tôi sẽ nhận thấy SIM được hiển thị trên màn hình LCD. Sau đó, chúng ta có thể thử thực hiện cuộc gọi bằng cách sử dụng lệnh “ ATD mobilenumber ; ”. Dưới đây là một ví dụ, tôi đã sử dụng số của mình là ATD93643159XX;. Bạn phải thay thế số điện thoại di động tương ứng của mình ở đó.
/ * Thực hiện cuộc gọi * / do {_SIM900_print ("ATD93643XXXXX; \ r \ n"); // Ở đây chúng ta đang thực hiện cuộc gọi đến số 93643XXXXX Lcd_Set_Cursor (1,1); Lcd_Print_String ("Đang thực hiện cuộc gọi…."); } while (_SIM900_waitResponse ()! = SIM900_OK); // đợi cho đến khi ESP gửi lại "OK" Lcd_Set_Cursor (1,1); Lcd_Print_String ("Cuộc gọi Đã đặt…."); __delay_ms (1500);
Sau khi cuộc gọi được thực hiện, màn hình LCD sẽ hiển thị Cuộc gọi Đã đặt và bạn sẽ nhận được cuộc gọi đến đến số được chỉ định đó.
Bạn cũng có thể gọi đến số điện thoại di động được kết nối với mô-đun GSM và nhận thông báo về nó trên màn hình LCD y bằng cách sử dụng mã bên dưới
while (1) {if (_SIM900_waitResponse () == SIM900_RING) // Kiểm tra xem có cuộc gọi đến không {Lcd_Set_Cursor (2,1); Lcd_Print_String ("Cuộc gọi đến !!."); }}
Khi mô-đun GSM phát hiện cuộc gọi đến, nó sẽ hiển thị Cuộc gọi đến trên dòng thứ hai của mô-đun LCD. Hàm _SIM900_waitResponse () sẽ kiểm tra dữ liệu đến từ mô-đun GSM. Khi nó nhận được SIM900_RING, tương đương với “RING” do waitResponce () , chúng tôi sẽ hiển thị trạng thái “Cuộc gọi đến”.
Bạn có thể tạo các chức năng của riêng mình như thế này để thực hiện hầu hết các loại kích hoạt bằng mô-đun GSM. Nếu bạn muốn mã hóa cứng mọi thứ, bạn chỉ cần sử dụng hàm __SIM900_print () để gửi bất kỳ lệnh AT nào như bên dưới.
_SIM900_print ("AT + CPIN? \ R \ n");
Hãy nhớ rằng tất cả các lệnh của bạn phải được theo sau bằng “\ r \ n” để cho biết rằng lệnh đang kết thúc.
Mô phỏng:
Khi bạn đã hiểu cách chương trình hoạt động, bạn có thể thử mô phỏng và thực hiện các thay đổi để phù hợp với nhu cầu của mình. Mô phỏng sẽ giúp bạn tiết kiệm rất nhiều thời gian. Mô phỏng được thực hiện bằng Proteus và nó trông giống như bên dưới.
Như bạn có thể thấy, chúng tôi đã sử dụng tùy chọn đầu cuối ảo trong Proteus để kiểm tra xem Chương trình có phản hồi như mong đợi hay không. Chúng tôi có thể cung cấp các giá trị thông qua hộp thoại bật lên. Ví dụ ngay sau khi chúng ta nhấn run, một hộp thoại màu đen như trên sẽ xuất hiện và hiển thị AT, điều này có nghĩa là nó đã gửi AT module GSM, bây giờ chúng ta có thể trả lời PIC bằng cách gõ vào ô là “OK” và nhấn enter và PIC sẽ phản hồi. Tương tự, chúng ta có thể thử cho tất cả các lệnh AT.
Thực hiện và Nhận cuộc gọi bằng GSM và PIC:
Sau khi bạn hiểu cách hoạt động của mã và phần cứng, chỉ cần tải chương trình dưới đây lên PIC và bật nguồn mô-đun. Màn hình LCD của bạn sẽ hiển thị “Đã phát hiện mô-đun”, “Đã phát hiện SIM” và “Đã đặt cuộc gọi” nếu mọi thứ hoạt động tốt. Khi bạn nhìn thấy “Cuộc gọi đã thực hiện”, bạn sẽ nhận được một cuộc gọi đến đến số được chỉ định trong chương trình.
Bạn cũng có thể thử gọi đến số có trong mô-đun GSM và màn hình LCD của bạn sẽ hiển thị “Cuộc gọi đến” để cho biết SIM đang được gọi.
Toàn bộ hoạt động của dự án được hiển thị trong video dưới đây. Hy vọng bạn hiểu dự án và thích làm nó. Nếu bạn gặp bất kỳ vấn đề gì trong việc giải quyết công việc, hãy đăng câu hỏi của bạn trên phần bình luận hoặc trên Diễn đàn của chúng tôi và tôi sẽ sẵn lòng trợ giúp bạn.