Tư vấn: 0979.466.469 / 0938.128.290

MENU

Kết nối mô-đun GSM bằng Proteus

Gia cong pcb 600*150px

Kết nối mô-đun GSM bằng Proteus

 

Kết nối Mô-đun GSM sử dụng Proteus - Mô phỏng tích hợp thời gian thực để Phát triển Hiệu quả

Phần mềm mô phỏng Proteus mang lại khả năng mạnh mẽ để tương tác mượt mà với các mô-đun thời gian thực như Mô-đun GSM. Bằng cách sử dụng tính năng mô phỏng này, các nhà thiết kế có thể phát triển hệ thống trong phần mềm, cho phép kiểm thử toàn diện tất cả các tính năng của hệ thống đang được thiết kế mà không cần sử dụng bất kỳ thành phần phần cứng nào. Phương pháp này cho phép tiêu chuẩn hóa bằng cách so sánh hiệu suất của các thành phần khác nhau, chẳng hạn như một vi điều khiển microcontroller phù hợp.

Kết nối Mô-đun với Môi trường Proteus - Kết nối Mô-đun GSM để Mô Phỏng Mượt Mà

Các mô-đun GSM mang lại tính linh hoạt bằng cách kết nối với cổng serial của máy tính thông qua DB-9 Connector hoặc có thể tương tác với một vi điều khiển bằng cách sử dụng tính năng TTL-UART. Phần mềm Proteus có tùy chọn kết nối với các cổng COM của máy tính. Nếu cổng serial không khả dụng trên máy tính của bạn, thì có thể sử dụng một bộ chuyển đổi USB-Serial. Sơ đồ mạch được hiển thị dưới đây.




Thành phần 'COMPIM' - Mô Hình Giao Diện Vật Lý Cổng Comport được sử dụng để kết nối mạch Proteus với cổng serial của máy tính. Bảng điều khiển ảo trong tab 'Instruments' được sử dụng để xem dữ liệu được truyền và nhận thông qua cổng serial đã chọn



Tiếp theo, chúng ta cần cấu hình COMPORT trong phần mềm Proteus. Mặc định, các mô-đun hoạt động ở tốc độ baud 9600. Nếu có bất kỳ sự cố nào liên quan đến dữ liệu nhận được, thì tốc độ baud tiếp theo có thể là 38400. Dữ liệu hoạt động ở chế độ 8-bit với một bit stop và không có bit chẵn lẻ. Tất cả các tham số này cần được thiết lập trong COMPORT và bảng điều khiển ảo trong menu chỉnh sửa thuộc tính của chúng

 

 

Các chi tiết về số cổng mà Bộ chuyển đổi Serial đang kết nối có thể được lấy từ Control Panel trong tab Devices and Printers

 



Chúng ta sẽ bắt đầu kết nối với mô-đun. Để kiểm tra xem kết nối đã được thiết lập hay chưa, hãy chạy mô phỏng và sau đó bật nguồn cho mô-đun. Mô-đun sẽ gửi một số dữ liệu liên quan đến trạng thái sẵn sàng của mô-đun. Dưới đây là video mô phỏng hiển thị các phản hồi sau khi bật nguồn

Sau khi nhận được phản hồi 'call ready', mô-đun sẵn sàng sử dụng. Tất cả các ký tự lệnh được xem xét là các ký tự ASCII. Trong các trình biên dịch C, lệnh temp='0'; sẽ lưu giá trị ASCII của số không (=48) vào biến temp. Mỗi lệnh được gửi đến mô-đun đều phải kết thúc bằng , tức là ký tự CR=Carriage return có giá trị ASCII là 13 và LF=Line Feed có giá trị ASCII là 10

Để kiểm tra kết nối, chúng ta có thể gửi 'lệnh Attention' 'AT'. Nếu kết nối được thiết lập, sẽ nhận được 'OK'. Mô-đun sẽ gửi lại các ký tự mà nó nhận được. Điều này được gọi là chế độ Echo và có thể tránh được bằng cách sử dụng lệnh 'ATE0'. Sau khi thực hiện thành công, sẽ nhận được 'OK'.



Thực hiện Cuộc gọi điện thoại

Lệnh để thực hiện cuộc gọi điện thoại là 'ATD'. Điều này được gọi là tạo ra một cuộc gọi điện thoại từ mô-đun. Lệnh được sử dụng theo định dạng sau,

ATD SỐ ĐIỆN THOẠI;

Ví dụ: ATD1234567890;

Hãy thử lệnh này để tạo ra một cuộc gọi điện thoại. Dưới đây là kết quả đầu ra

 

 

Lệnh này được phát từ terminal ảo có sẵn trong phần mềm. Tuy nhiên, trong thực tế, chúng ta phải phát lệnh này từ vi điều khiển của chúng ta. Hãy tạo và phát lệnh thông qua vi điều khiển. Bằng cách sử dụng mảng trong chương trình C, chúng ta có thể dễ dàng truyền các lệnh. Để mục đích này, chúng ta cần định nghĩa một hàm để gửi 'lệnh gsm' và một hàm nữa để gửi dữ liệu từ UART. Dưới đây là định nghĩa hàm.






Hàm 'gsm send command’ được sử dụng để gửi các từ khóa của lệnh dưới dạng văn bản được viết trong dấu ngoặc kép, như ví dụ, gsm_send_command("ATD"); là lệnh quay số đã sử dụng trước đó. Sau khi gửi từ khóa này, chúng ta phải gửi số điện thoại đích, tức là số liên lạc mà chúng ta muốn gọi. Bất kỳ dữ liệu nào cũng nên được lưu trữ dưới dạng mảng để có thể được xử lý bởi tất cả các hàm trong chương trình. Đối với việc thực hiện cuộc gọi điện thoại, chúng ta phải khai báo một mảng để lưu trữ số liên lạc. Kích thước của mảng có thể là khoảng 20 byte (mô-đun cho phép lên đến 45 chữ số) và nó phải có kiểu 'char' vì dữ liệu ở định dạng ASCII. Số liên lạc được khai báo như là char contact_number[20]; Điều này có thể được gán với một số mặc định như char contact_number[20] = {'1', '2', '3', '4', '5', '6', 13}; Viết một ký tự trong dấu ngoặc đơn tải giá trị ASCII của ký tự vào địa chỉ tương ứng. Ký tự cuối cùng nên là giá trị thập phân 13 để xác định kết thúc dữ liệu mảng, để trong quá trình gửi dữ liệu, chúng ta có thể dừng nó sau khi tìm thấy '13'. Điều này có thể được điều chỉnh tùy thuộc vào người lập trình. Số liên lạc được gửi bằng cách sử dụng vòng lặp for,




Đọc Và Hiểu Chi Tiết Cuộc Gọi Đến

Thông tin người gọi được mô-đun gửi mỗi khi phát hiện có cuộc gọi đến. Bằng cách đọc dữ liệu đã nhận, chúng ta có thể thu thập thông tin về người gọi như tên liên lạc (nếu đã lưu trữ trước đó trong bộ nhớ) và số liên lạc. Dữ liệu được mô-đun gửi khi có cuộc gọi đến được hiển thị trong hình ảnh dưới đây

 

 

Từ hình ảnh trên, định dạng của dữ liệu có thể được hiểu như sau:

-

RING

+CLIP: “NUMBER”, loại số,””,,”NAME”,0

CR và LF không phải là các ký tự hiển thị vì chúng kiểm soát vị trí con trỏ nhưng chúng là các ký tự ASCII có thể đếm được. Để trích xuất số và tên từ chuỗi nhận được, hãy áp dụng cách tiếp cận sau đây. Dữ liệu nhận được được lưu trữ trong một mảng với địa chỉ bắt đầu là không và vị trí này chứa ‘’. Qua quá trình xác minh, hãy tìm ký tự ngoặc đơn đầu tiên bằng vòng lặp 'do while'.

temp=0;    //Khởi tạo một biến tạm thời

 

do

{

    temp++;    //Tăng giá trị của biến tạm thời lên một

 

} while(received_data[temp]!=34);   //Kiểm tra xem ký tự có phải là " hay không

Giá trị ASCII của " là 34. Khi tìm thấy dấu ngoặc kép, Bộ chỉ thị thoát khỏi vòng lặp vì điều kiện không được đáp ứng. Bây giờ, biến tạm thời chứa địa chỉ của ký tự ngoặc kép và địa chỉ tiếp theo có chứa chữ cái đầu tiên của số và điều này tiếp tục cho đến khi gặp Dấu ngoặc kép tiếp theo. Vì vậy, hãy lưu trữ số vào một mảng bằng cách sử dụng vòng lặp 'for'.

temp++;

 

for(index=0; received_data[temp]!=34; index++, temp++)

{

    number[index]=received_data[temp];  //Lưu trữ số

 

}

 

number[index]=13;  //Ký tự kết thúc để xác định

 



Khi có cuộc gọi đến, chúng ta có thể phải trả lời cuộc gọi hoặc từ chối cuộc gọi. Các lệnh tương ứng cho các hoạt động này là,

ATA sẽ trả lời cuộc gọi

ATH sẽ từ chối cuộc gọi

Module điện tử 932*50

Bằng cách gửi các lệnh này, các hoạt động tương ứng sẽ được thực hiện. Nếu chúng ta kết nối tai nghe hoặc tai nghe đến Mô-đun GSM, chúng ta có thể sử dụng nó như một điện thoại thông thường.

Đến lúc này, chúng ta đã thảo luận về cách đọc dữ liệu đã nhận được cho một tình huống cụ thể như khi nhận được 'RING'. Chúng ta đã xem nó trong terminal ảo và thực hiện hành động. Nhưng, trong thời gian thực, vi điều khiển phải đọc dữ liệu và xác định rằng 'RING' đã được nhận. Mô-đun GSM có hàng trăm từ khóa và chỉ một số ít được sử dụng cho các ứng dụng cụ thể khác ngoài điện thoại di động đầy đủ. Bây giờ, hãy thảo luận về cách xác định các từ khóa và thực hiện các hoạt động mong muốn

Đọc các từ khóa từ dữ liệu nhận được

 

Tính năng UART có một Ngắn mạch RXC sẽ tạo ra một ngắn mạch khi một byte được nhận. Bằng cách kích hoạt ngắn mạch này, mỗi byte được gửi bởi mô-đun sẽ được lưu trữ trong một biến của kiểu mảng và chỉ số mảng sẽ được tăng lên. Mô-đun GSM không gửi bất kỳ lệnh nào để chỉ ra kết thúc truyền. CR và LF chỉ được sử dụng để phát hiện việc kết thúc dòng lệnh và chúng được gửi giữa một dòng lệnh. Do đó, để xác định rằng việc truyền đã hoàn tất bởi mô-đun, một bộ hẹn giờ được sử dụng. Sau khi nhận mỗi byte, bộ hẹn giờ được dừng, byte được lưu trữ trong biến và bộ hẹn giờ được khởi tạo lại. Nếu bộ đếm đạt đến một giá trị đã được thiết lập trước khi đọc byte tiếp theo, thì được hiểu là truyền đã hoàn tất và dữ liệu được xử lý. Sau khi xử lý dữ liệu, chỉ số mảng phải được đặt về 0. Mã cho quy trình đã thảo luận được hiển thị dưới đây.

 

Giá trị được thiết lập trước cho bộ hẹn giờ/đếm số là sao cho một khoảng thời gian xấp xỉ từ 100 đến 200 mili giây được đạt được. Đối với ATMEGA 32, được sử dụng trong bài viết này có giá trị dưới đây cho Đồng hồ CPU 16Mhz và bộ hẹn giờ chạy ở Fcpu/1024.

 

OCR1AH=0X0E;

OCR1AL=0X00;

 

Byte đầu tiên của dòng lệnh nhận được sẽ là CR (Giá trị thập phân=13) và byte thứ hai sẽ là LF (Giá trị thập phân=13). Vì vậy, chúng ta có thể bắt đầu xác minh từ byte thứ ba hoặc thứ tư, tức là từ địa chỉ thứ hai hoặc thứ ba của mảng tùy thuộc vào từ khóa đang xem xét. Điều này áp dụng cho tất cả các từ khóa vì chúng ta biết chúng trong quá trình lập trình. Đối với các hoạt động liên quan đến cuộc gọi điện thoại, có một tùy chọn để nhận các từ khóa dưới dạng số thay vì từ. Một số phản hồi được ánh xạ thành số được hiển thị dưới đây. Giá trị số chỉ là thay thế cho các từ tương ứng, nhưng định dạng còn lại như CR và LF vẫn giống nhau.

Chế độ số được chọn bằng cách gửi lệnh 'ATV0'. ‘ATV1’ được gửi để nhận ở định dạng word như đã đề cập trong tiêu đề của bảng trên.

 

Lệnh liên quan đến SMS

Các hệ thống dựa trên SMS phổ biến hơn và có thể được sử dụng để thực hiện nhiều nhiệm vụ từ xa. Ở đây, chúng ta sẽ thảo luận về SMS dạng văn bản. Để thực hiện các hoạt động dựa trên SMS, việc thiết lập định dạng liên quan đến tin nhắn với các tham số mong muốn là bắt buộc. Các tham số cơ bản đủ cho các hoạt động chung được thảo luận dưới đây.

AT+CMGF=1

Lệnh này thiết lập định dạng tin nhắn sang chế độ văn bản.

AT+CNMI=2,1,0,0,0

Khi thực hiện lệnh này, mô-đun sẽ gửi biểu hiện sau khi một tin nhắn mới được nhận. CNMI là viết tắt của New SMS Message Indications.

AT+CMGS – Gửi SMS Lệnh này được sử dụng để gửi một SMS từ mô-đun. Định dạng của lệnh này là,

AT+CMGS=”Số điện thoại đích”

Chờ đến khi nhận ký tự ‘>’ và nhập nội dung tin nhắn.

Nhấn ‘ctrl-z’.

Tin nhắn sẽ được gửi và nhận lại là sự xác nhận với chỉ số lưu trữ.

Quy trình trên cần được thực hiện bởi vi điều khiển. Hãy phát triển mã chương trình để gửi một SMS. Như đã thảo luận trong ví dụ về cuộc gọi điện thoại, số điện thoại đích được lưu trữ trong một mảng và sử dụng hàm 'gửi lệnh gsm'. Sau khi nhập số, chúng ta phải đợi cho đến khi nhận được ký tự ‘>’. Vì vậy, chúng ta sẽ bao gồm một hàm trễ. Nhưng, làm thế nào để nhấn ‘ctrl+z’? Giá trị ASCII cho lệnh đó là '26'. Vì vậy, sau khi gửi văn bản của tin nhắn, hãy gửi giá trị '26' dưới dạng ký tự ASCII. Dưới đây là mã chương trình cho quy trình đã thảo luận



Lệnh AT+CMGR – Đọc một SMS Mô-đun gửi các biểu hiện về tin nhắn mới nhận được. Dưới đây là dữ liệu được gửi bởi mô-đun sau khi nhận được một tin nhắn mới.

+CMTI: “SM”,Chỉ số tin nhắn

SM - bộ nhớ sim Do mô-đun không có bộ nhớ ngoại vi, bộ nhớ sim được sử dụng để lưu trữ các tin nhắn đã nhận, đã gửi và chưa gửi. Chỉ số tin nhắn là vị trí địa chỉ của tin nhắn, được sử dụng để đọc tin nhắn. Định dạng của lệnh này là,

AT+CMGR=

Vi điều khiển phải phân tích dữ liệu nhận được dưới dạng phản hồi cho lệnh này và lấy chi tiết tin nhắn như số điện thoại của người gửi, tên liên lạc, dấu thời gian và cuối cùng là nội dung tin nhắn. Hình ảnh dưới đây cho thấy định dạng




Bây giờ, hãy đọc phản hồi và trích xuất tin nhắn từ dữ liệu đã nhận được.

Đối với mỗi tin nhắn, có bốn chi tiết tin nhắn và một chuỗi tin nhắn. Từ hình ảnh trên, trạng thái đã đọc/chưa đọc bắt đầu sau dấu ngoặc kép đầu tiên. Vì vậy, để đọc trạng thái này, chúng ta có thể sử dụng 'do while loop' như đã sử dụng trước đó khi thực hiện một cuộc gọi điện thoại. Tương tự, các chi tiết còn lại như số điện thoại, tên và dấu thời gian được lưu trữ. Sau dấu ngoặc kép của dấu thời gian, tin nhắn được nhận trong dòng mới. Điều này cho thấy rằng được gửi trước khi tin nhắn. Vì vậy, tăng biến tạm thời hai lần và lưu trữ dữ liệu trong biến tin nhắn cho đến khi đọc được





Lệnh AT+CMGD – Xóa một SMS

Khi phát triển các hệ thống tự động không liên quan đến giao diện hoặc giám sát của con người, việc xóa tin nhắn rất quan trọng. Nếu bộ nhớ sim đầy, mô-đun sẽ ngừng gửi các biểu hiện tin nhắn mới. Do đó, việc xóa tin nhắn đã xử lý là tốt nhất. Nếu tin nhắn phải được sử dụng trong tương lai, thì nó phải được lưu trữ trong bộ nhớ ngoại vi. Để xóa một tin nhắn, chỉ số của nó phải được biết. Dòng lệnh là,

AT+CMGD=,

Chỉ số này có sẵn trong RAM khi đọc tin nhắn. Loại xóa liên quan đến 5 loại

Chỉ số của tin nhắn không phải là một biến liên tục, tức là nếu một tin nhắn mới đến tại chỉ số 10, tin nhắn tiếp theo đến sẽ chiếm giữ vị trí địa chỉ trống có thể hoặc không phải là 11. Điều này là do lệnh xóa. Giả sử có 15 tin nhắn từ chỉ số 1 đến 15, nếu chúng ta xóa một tin nhắn với chỉ số 5, thì tin nhắn mới đến tiếp theo sẽ chiếm giữ vị trí này, tức là chỉ số 5 và chỉ khi đó chỉ số 16 sẽ được chiếm giữ bởi tin nhắn tiếp theo.

Lệnh AT+CMGW – Ghi tin nhắn vào bộ nhớ

Lệnh này được sử dụng để ghi một tin nhắn vào bộ nhớ và gửi nó khi cần thiết, thay vì việc viết tin nhắn mỗi lần. Tùy chọn này hữu ích trong việc phát triển các hệ thống cần gửi một số tin nhắn cố định như các mẫu. Các tin nhắn đã lưu trữ có thể được gửi bằng cách sử dụng chỉ số của chúng. Đối với mục đích này, tin nhắn được lưu trữ trước và chỉ số nhận được được lưu trữ trong bộ nhớ không bay của hệ thống. Khi cần gửi tin nhắn, chỉ số này được sử dụng.

AT+CSPN – Tra cứu tên Nhà cung cấp dịch vụ

Tên của nhà cung cấp dịch vụ có thể được biết bằng cách sử dụng lệnh này. Định dạng lệnh là,

AT+CSPN?

Phản hồi sẽ là,

+CSPN: Tên, Chế độ hiển thị

Dưới đây là đầu ra thực thi lệnh




Lệnh AT+CCLK – Để lấy thời gian đồng hồ

Lệnh này được sử dụng để lấy thời gian đồng hồ. Nhưng, đồng hồ này phải được đặt trước khi đọc. Lệnh để đặt thời gian đồng hồ là,

AT+CCLK=”yy/mm/dd,hh:mm:ss+zz”

+zz là chỉ số chênh lệch múi giờ. Giá trị này nằm trong khoảng từ -47 đến +48. Giá trị này nên được đặt theo múi giờ của bạn. Ví dụ, nếu múi giờ là GMT+4:30 giờ, giá trị zz là ‘+18’, tức là thêm 2 cho mỗi nửa giờ. 4:30 giờ chứa 9 nửa giờ và vì vậy giá trị là 18.

Một khi đồng hồ này được đặt, thời gian có thể được thẩm vấn. Phản hồi sẽ là

+CCLK=”yy/mm/dd,hh:mm:ss+zz”

AT+GSMBUSY – Đặt mô-đun vào chế độ bận rộn Chúng ta có tùy chọn để đặt mô-đun vào chế độ bận rộn để từ chối cuộc gọi đến. Tùy chọn này được sử dụng để cung cấp tính năng chờ cuộc gọi.

AT+GSMBUSY=0 sẽ cho phép cuộc gọi ngay cả khi có cuộc gọi đến trong trạng thái trả lời.

AT+GSMBUSY=1 sẽ tắt cuộc gọi đến bất kể trạng thái của mô-đun.

Khi thiết kế các hệ thống dựa trên SMS, chúng ta có thể kích hoạt chế độ này để ngay cả khi ai đó gọi đến hệ thống này, họ sẽ nhận được tín hiệu bận

Gia công pcb 932*150
Sản phẩm nổi bật
Sale 0%
50000 /Cái
/ Cái

Code: DV146 Còn hàng

Lưu xem sau
Sale 0%
Liên hệ /
/

Code: DV111 Còn hàng

Lưu xem sau
Sale 0%
550000 /Cái
/ Cái

Code: DV117 Còn hàng

Lưu xem sau
Sale 0%
50000 /Cái
/ Cái

Code: DV145 Còn hàng

Lưu xem sau
Hỗ trợ liên kết
0979466469
0899909838
0938128290
0899909838
Khiếu nại: 0964238397
0979466469
0868565469
0868565469

Hotline: 0979 466 469

Loading
0979 466 469
Bạn cần linh kiện mẫu ? 7-11 ngày