Hướng dẫn về SIM900 GSM GPRS Shield với Arduino

Bài đăng này là một hướng dẫn đầy đủ về SIM900 GSM GPRS Shield với Arduino. Tìm hiểu cách gửi và nhận SMS, thực hiện và nhận các cuộc gọi điện thoại với Arduino.

Trong hướng dẫn này, chúng tôi sẽ đề cập đến:

  • Giới thiệu SIM900 GSM GPRS Shield
  • Phần cứng bảo vệ SIM900 GSM GPRS
  • Lệnh SIM900 AT
  • Kiểm tra module
  • Gửi và nhận SMS – ví dụ
  • Thực hiện và trả lời các cuộc gọi điện thoại – ví dụ

Giới thiệu SIM900 GSM GPRS Shield


SIM900 GSM GPRS Shield được hiển thị trong hình bên dưới.

GSM là viết tắt của Global System cho Mobile Communications và là tiêu chuẩn toàn cầu cho thông tin di động.

GPRS là viết tắt của General Packet Radio Service. GPRS là một dịch vụ di động trên giao tiếp di động 2G và 3G.

Các ứng dụng


Module GSM GPRS đặc biệt hữu ích vì nó cho phép:

  • Kết nối Internet qua mạng GPRS
  • Gửi và nhận SMS
  • Thực hiện và nhận cuộc gọi điện thoại

Khả năng của nó làm cho nó hoàn hảo cho các dự án với Arduino như:

  • Điều khiển từ xa các thiết bị điện tử – gửi SMS để bật một thiết bị;
  • Nhận thông báo – gửi SMS đến điện thoại di động của bạn nếu phát hiện chuyển động trong nhà bạn;
  • Nhận dữ liệu cảm biến – gửi SMS định kỳ đến điện thoại di động của bạn với dữ liệu thời tiết hàng ngày.

Tính năng, đặc điểm


Đây là một số tính năng quan trọng nhất của nó:

  • Tương thích với Arduino
  • Dựa trên mô-đun SIM900 từ SIMCOM
  • Cho phép bạn gửi SMS, MMS, GPRS và Audio qua UART bằng các lệnh AT.
  • Nó có 12 GPIO, 2 PWM và ADC buit-in của mô-đun SIM900
  • Băng Quad: 850; 900; 1800 và 1900 MHZ, do đó, nó sẽ hoạt động ở tất cả các quốc gia có mạng GSM (2G)
  • Điều khiển thông qua các lệnh AT
  • Hỗ trợ RTC (đồng hồ thời gian thực) – nó có giá đỡ cho pin 312 CR1220 ở phía sau

  • Có giắc cắm micro và tai nghe cho các cuộc gọi điện thoại

Nơi để mua?


Bạn có thể kiểm tra module SIM900 GSM GPRS trên cachdung.com

Các bước sơ bộ


Trước khi bắt đầu với mô-đun GPRS SIM900 GSM, bạn cần xem xét một số khía cạnh về thẻ SIM và nguồn điện.

Vùng phủ sóng GSM


Đảm bảo bạn có vùng phủ sóng trên mạng GSM 850 MHz, GSM 900 MHz, DCS 1800 MHz hoặc PCS 1900 MHz. Theo GSM, có thể dùng 2G.

Thẻ SIM trả trước


Chúng tôi khuyên bạn nên sử dụng gói trả trước hoặc gói có SMS không giới hạn cho mục đích thử nghiệm. Mặt khác, nếu có sự cố xảy ra, bạn có thể cần phải trả một hóa đơn khổng lồ cho hàng trăm tin nhắn văn bản SMS được gửi do nhầm lẫn. Trong hướng dẫn này, chúng tôi đang sử dụng gói trả trước với SMS không giới hạn.

Module sử dụng kích thước thẻ SIM gốc, không phải micro hoặc nano.

Tắt khóa PIN


Để sử dụng thẻ SIM có module, bạn cần tắt khóa pin. Cách dễ nhất để thực hiện việc này là lắp thẻ SIM vào điện thoại thông minh của bạn và tắt khóa pin trong cài đặt bảo mật điện thoại.

Trong trường hợp của tôi: Settings > Advanced Settings > Security > SIM lock và tắt thẻ sim khóa bằng pin.

Cung cấp nguồn điện phù hợp


Module có ổ cắm DC để cấp nguồn như trong hình bên dưới.

Bên cạnh giắc cắm điện có công tắc bật tắt để chọn nguồn điện. Bên cạnh công tắc bật tắt trên board, có một mũi tên chỉ vị trí bật tắt để sử dụng nguồn điện bên ngoài – di chuyển công tắc bật tắt để sử dụng nguồn điện bên ngoài như hình trên.

Để tăng nguồn cho module, nên sử dụng nguồn điện 5V có dòng 2A như hình dưới đây. Nó cũng có thể được cung cấp năng lượng với 9V/1A, hoặc 12V/1A.

Bạn có thể tìm thấy bộ chuyển đổi nguồn phù hợp cho module này ở đây. Hãy chắc chắn rằng bạn chọn nguồn 5V và 2A.

Phần cứng bảo vệ SIM900 GSM GPRS


Hình dưới đây cho thấy mặt sau của module. Nó có một giá đỡ cho thẻ SIM và pin 3V CR1220 cho RTC (đồng hồ thời gian thực).

Hình dưới đây cho thấy linh kiện quan trọng nhất trên board mà bạn cần chú ý.

Bắt đầu


1) Lắp thẻ SIM vào ngăn chứa thẻ SIM – đảm bảo bạn đã đọc các bước sơ bộ trong phần trước.

2)  Đảm bảo ăng-ten được kết nối tốt.

3)  Trên chân chọn nối tiếp, đảm bảo nắp nhảy được kết nối như thể hiện trong hình bên dưới để sử dụng nối tiếp phần mềm.

4) Cấp nguồn cho module bằng nguồn điện 5V bên ngoài. Đảm bảo bạn chọn nguồn điện bên ngoài bằng công tắc bật tắt bên cạnh giắc DC.

5)  Để bật / tắt nguồn module, nhấn phím nguồn trong khoảng 2 giây.

6)  Sau đó, đèn LED sẽ sáng lên và đèn LED NetLight sẽ nhấp nháy cứ sau 800 ms cho đến khi tìm thấy mạng. Khi tìm thấy mạng, đèn LED NetLight sẽ bắt đầu nhấp nháy cứ sau ba giây.

Lưu ý:  bạn có thể tự động bật module qua phần mềm. Xem cách làm điều đó trong phần Tự động bật module , sau các ví dụ code.

7)  Bạn có thể kiểm tra xem module có hoạt động tốt hay không bằng cách gửi các lệnh AT từ Arduino IDE bằng cách sử dụng FTDI – như chúng tôi sẽ trình bày sau trong hướng dẫn này.

Lệnh SIM900 AT


  • đặt SIM900 thành chế độ văn bản: AT + CMGF = 1 \ r
  • gửi SMS đến một số: AT + CMGS = PHONE_NUMBER (ở định dạng quốc tế)
  • đọc SMS đầu tiên từ hộp thư đến: AT + CMGR = 1 \ r
  • đọc SMS thứ hai từ hộp thư đến: AT + CMGR = 2 \ r
  • đọc tất cả SMS từ hộp thư đến: AT + CMGR = ALL \ r
  • gọi tới một số: ATDP + PHONE_NUMBER (ở định dạng quốc tế)
  • cúp máy: ATH
  • nhận cuộc gọi đến: ATA

Để biết thêm thông tin, bạn có thể kiểm tra hướng dẫn sử dụng lệnh SIM900 AT tại đây.

Kiểm tra Shield với lập trình viên FTDI


Để kiểm tra xem mọi thứ có hoạt động tốt không, bạn có thể kiểm tra module bằng cách gửi các lệnh AT từ màn hình nối tiếp Arduino IDE. Để làm được điều đó, bạn cần một lập trình viên FTDI như người trong hình bên dưới. Bạn có thể có được một lập trình viên FTDI như thế này ở đây.

1)  Kết nối lập trình viên FTDI với module GSM như trong hình bên dưới.

2)  Mở Arduino IDE và chọn cổng COM phù hợp.

3)  Mở màn hình nối tiếp

4)  Chọn tốc độ 19200 baud – cài đặt mặc định là 19200 – Carriage return. Viết AT tại ô được tô sáng màu đỏ và sau đó nhấn enter. Xem hình dưới đây.

5)  Module sẽ phản hồi OK, nếu mọi thứ hoạt động tốt.

Kết nối Shield với Arduino


Kết nối module với Arduino như thể hiện trong sơ đồ bên dưới.

Gửi tin nhắn SMS


Để gửi SMS, tải code bên dưới lên board Arduino của bạn.

#include <SoftwareSerial.h>

// Configure software serial port
SoftwareSerial SIM900(7, 8); 

void setup() {
  // Arduino communicates with SIM900 GSM shield at a baud rate of 19200
  // Make sure that corresponds to the baud rate of your module
  SIM900.begin(19200);
  // Give time to your GSM shield log on to network
  delay(20000);   
  
  // Send the SMS
  sendSMS();
}

void loop() { 
  
}

void sendSMS() {
  // AT command to set SIM900 to SMS mode
  SIM900.print("AT+CMGF=1\r"); 
  delay(100);

  // REPLACE THE X's WITH THE RECIPIENT'S MOBILE NUMBER
  // USE INTERNATIONAL FORMAT CODE FOR MOBILE NUMBERS
  SIM900.println("AT + CMGS = \"+XXXXXXXXXXXX\""); 
  delay(100);
  
  // REPLACE WITH YOUR OWN SMS MESSAGE CONTENT
  SIM900.println("Message example from Arduino Uno."); 
  delay(100);

  // End AT command with a ^Z, ASCII code 26
  SIM900.println((char)26); 
  delay(100);
  SIM900.println();
  // Give module time to send SMS
  delay(5000); 
}

Trong code này, bạn bắt đầu bằng cách nạp thư viện SoftwareSerial.h và tạo một cổng nối tiếp phần mềm trên các chân 7 và 8. (Chân 7 đang được đặt là RX và 8 là TX)

#include <SoftwareSerial.h>
SoftwareSerial SIM900(7, 8);

Hàm sendSMS () được tạo là những gì được gửi SMS. Hàm này sử dụng các lệnh AT: AT + CMGF = 1 \ rAT + CMGS.

Bạn cần thay đổi số điện thoại của người nhận tại: (thay thế số +++ bằng số điện thoại của người nhận)

SIM900.println (“AT + CMGS = \” ++++++++++++++ “”);

Số điện thoại di động của người nhận phải ở định dạng quốc tế.

Sau đó, ở dòng sau bạn có thể chỉnh sửa văn bản bạn muốn gửi.

// REPLACE WITH YOUR OWN SMS MESSAGE CONTENT
SIM900.println("Message example from Arduino Uno.")

Đọc tin nhắn đã nhận


Để đọc SMS đến, tải code bên dưới lên Arduino của bạn. Sau khi tải lên, đợi 20 giây để module thiết lập liên lạc. Sau đó, kiểm tra tập lệnh bằng cách gửi SMS đến số thẻ SIM. SMS được hiển thị trên màn hình nối tiếp Arduino – tốc độ baud: 19200.

#include <SoftwareSerial.h>

// Configure software serial port
SoftwareSerial SIM900(7, 8);
//Variable to save incoming SMS characters
char incoming_char=0;

void setup() {
  // Arduino communicates with SIM900 GSM shield at a baud rate of 19200
  // Make sure that corresponds to the baud rate of your module
  SIM900.begin(19200);
  // For serial monitor
  Serial.begin(19200); 
  // Give time to your GSM shield log on to network
  delay(20000);

  // AT command to set SIM900 to SMS mode
  SIM900.print("AT+CMGF=1\r"); 
  delay(100);
  // Set module to send SMS data to serial out upon receipt 
  SIM900.print("AT+CNMI=2,2,0,0,0\r");
  delay(100);
}

void loop() {
  // Display any text that the GSM shield sends out on the serial monitor
  if(SIM900.available() >0) {
    //Get the character from the cellular serial port
    incoming_char=SIM900.read(); 
    //Print the incoming character to the terminal
    Serial.print(incoming_char); 
  }
}

Trong code này, bạn đặt mô-đun để gửi dữ liệu SMS đến đầu ra nối tiếp:

SIM900.print (“AT + CNMI = 2,2,0,0,0 \ r”);

Bạn lưu trữ các nhân vật đến từ tin nhắn SMS trên biến incoming_char. Bạn đọc ký tự sử dụng hàm SIM900.read ().

Gọi một cuộc điện thoại


Để thực hiện cuộc gọi điện thoại, hãy tải code sau lên Arduino của bạn.

Đừng quên chỉnh sửa code với số điện thoại bạn muốn gọi.

#include <SoftwareSerial.h>

// Configure software serial port
SoftwareSerial SIM900(7, 8); 

void setup() {
  // Arduino communicates with SIM900 GSM shield at a baud rate of 19200
  // Make sure that corresponds to the baud rate of your module
  SIM900.begin(19200);
  // Give time to your GSM shield log on to network
  delay(20000);

  // Make the phone call
  callSomeone();
}

void loop() {
  
}

void callSomeone() {
  // REPLACE THE X's WITH THE NUMER YOU WANT TO DIAL
  // USE INTERNATIONAL FORMAT CODE FOR MOBILE NUMBERS
  SIM900.println("ATD + +XXXXXXXXX;");
  delay(100);
  SIM900.println();
  
 // In this example, the call only last 30 seconds
 // You can edit the phone call duration in the delay time
  delay(30000);
  // AT command to hang up
  SIM900.println("ATH"); // hang up
}

Để thực hiện cuộc gọi, bạn sử dụng hàm callSomeone() sử dụng lệnh ATD .

SIM900.println (“ATD + + XXXXXXXXX;”);

Bạn cần thay thế chữ X (tô sáng màu đỏ) bằng số điện thoại bạn muốn gọi.

Đừng quên kết nối micrô và tai nghe để thực hiện cuộc gọi.

Trong ví dụ code này, cuộc gọi bị ngắt sau 30 giây, sử dụng lệnh ATH:

SIM900.println (“ATH”);

Tắt sau 30 giây không phải là rất hữu ích, nhưng nó hoạt động tốt cho ví dụ. Ý tưởng là bạn sử dụng lệnh ATH khi một sự kiện được kích hoạt. Ví dụ, kết nối một nút ấn với Arduino, khi nhấn sẽ gửi lệnh ATH để cúp điện thoại.

Trả lời các cuộc gọi điện thoại đến


Đoạn code sau trả lời các cuộc gọi đến.

#include <SoftwareSerial.h>

// Configure software serial port
SoftwareSerial SIM900(7, 8); 
char incoming_char=0;

void setup() {
  // Arduino communicates with SIM900 GSM shield at a baud rate of 19200
  // Make sure that corresponds to the baud rate of your module
  SIM900.begin(19200); // for GSM shield
  // For serial monitor
  Serial.begin(19200); 
  // Give time to log on to network.
  delay(20000); 
  
  SIM900.print("AT+CLIP=1\r"); // turn on caller ID notification
  delay(100);
}

void loop() {
  // Display any text that the GSM shield sends out on the serial monitor
  if(SIM900.available() >0) {
    // Get the character from the cellular serial por
    // With an incomming call, a "RING" message is sent out
    incoming_char=SIM900.read();
    //  Check if the shield is sending a "RING" message
    if (incoming_char=='R') {
      delay(10);
      Serial.print(incoming_char);
      incoming_char=SIM900.read();
      if (incoming_char =='I') {
        delay(10);
        Serial.print(incoming_char);
        incoming_char=SIM900.read();
        if (incoming_char=='N') {
          delay(10);
          Serial.print(incoming_char);
          incoming_char=SIM900.read();
          if (incoming_char=='G') {
            delay(10);
            Serial.print(incoming_char);
            // If the message received from the shield is RING
            // Send ATA commands to answer the phone
            SIM900.print("ATA\r");
          }
        }
      }
    }
  }
}

Khi ai đó gọi đến số SIM900, nó sẽ gửi một thông báo có nội dung là “RING”. Để biết ai đó đang gọi cho bạn, bạn có thể đợi các ký tự đến từ SIM900 và sau đó, so sánh nếu đó là tin nhắn RING. Đó là những gì được thực hiện trong code này. Khi nhận được tin nhắn RING, bạn gửi lệnh ATA để trả lời điện thoại.

Tự động bật module


Thay vì nhấn thủ công phím “power” của người dùng để bật module, bạn có thể tự động bật qua phần mềm.

1) Trước tiên, bạn cần hàn các kết nối R13 trên board như trong hình bên dưới – được tô sáng màu đỏ.

2) Kết nối D9 trên module với chân Arduino D9 như thể hiện trong sơ đồ bên dưới.

3)  Thêm đoạn code sau vào hàm setup (). Điều này tương đương với việc nhấn nút “power”.

digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(5000);

Xử lý sự cố


Shield không phản hồi với OK

Kiểm tra kết nối TX và RX của bạn với Arduino. Hãy thử lặp lại quy trình bằng cách thay đổi TX bằng các chân RX.

Đồng thời kiểm tra xem bạn đã chọn nối tiếp phần mềm chưa bằng cách đặt nắp nhảy ở vị trí thích hợp trên bộ chọn nối tiếp.

Không thể xem tin nhắn trong màn hình nối tiếp

Để xem các thông báo trong màn hình nối tiếp, module và tốc độ truyền cổng nối tiếp của Arduino phải giống nhau. Tốc độ baud mặc định của SIM900 GSM GPRS là 19200. Vì vậy, hãy chọn tốc độ baud của Arduino là 19200.

Tuy nhiên, nếu bạn cần thay đổi tốc độ baud, bạn có thể gửi lệnh AT sau để thay đổi thành 19200 hoặc tốc độ baud thích hợp khác.

AT + IPR = 19200

Dịch từ: https://randomnerdtutorials.com/sim900-gsm-gprs-shield-arduino/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *