Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 16

III.

Nối dây
1. Mạch UNO
Module SIM 900A Arduino UNO
TX 2
RX 3
Power 4
VCC VCC
GND GND

2. Mạch MEGA
Module SIM 900A Arduino MEGA
TX 50
RX 51
Power 4
VCC VCC
GND GND

Với mạch MEGA các bạn mở file GSM.cpp trong thư viện ra, ở dòng 27,28

Thay lại pin cho nó trong phần khai báo pin:

1. #define _GSM_TXPIN_ 2
2. #define _GSM_RXPIN_ 3

Thành

1. #define _GSM_TXPIN_ 50
2. #define _GSM_RXPIN_ 51

(Trên đây là cách đơn giản nhất mà mình tìm ra để không phải sửa đổi nhiều thứ
trong thư viện)

IV. Code tham khảo


1. #include "SIM900.h"
2. #include <SoftwareSerial.h>
3. #include "sms.h"
4.
5. SMSGSM sms;
6.
7. int numdata;
8. boolean started=false; //trạng thái modul sim
9. char smstext[160];// nội dung tin nhắn
10. char number[20]; // số điện thoại format theo định dạng quốc tế
11.
12. void setup(){
13. Serial.begin(9600);
14. Serial.println("Gui va nhan tin nhan");
15. if (gsm.begin(2400)){
16. Serial.println("\nstatus=READY");
17. started=true;
18. } else
19. Serial.println("\nstatus=IDLE");
20.
21. if(started){
22. sms.SendSMS("+84123456789", "Online"); //đổi lại số của
bạn nhé :D
23. }
24. }
25.
26. void loop() {
27. if(started){
28. int pos; //địa chỉ bộ nhớ sim (sim luu tối đa 40 sms nên
max pos = 40)
29. pos = sms.IsSMSPresent(SMS_UNREAD); // kiểm tra tin nhắn
chưa đọc trong bộ nhớ
30. //hàm này sẽ trả về giá trị trong khoảng từ 0-40
31. if(pos){//nêu có tin nhắn chưa đọc
32. if(sms.GetSMS(pos, number, smstext, 160)){
33. Serial.print("So dien thoại: ");
34. Serial.println(number);
35. Serial.print("Noi dung tin nhan: ");
36. Serial.println(smstext);
37. sms.SendSMS(number, "Da doc tin");
38. }
39. }
40. delay(1000);
41. } else Serial.println("Offline");
42. }

Các lệnh cơ bản

 AT
Lệnh AT là lệnh kiểm tra. Khi gửi lệnh AT mà SIM900(A) trả lời OK tức SIM900(A) đang hoạt động
bình thường.
Máy tính hỏi:

AT

SIM900(A) trả lời:

AT
OK

 ATD

Lệnh ATD dùng để thực hiện cuộc gọi. Cú pháp ATD[số điện thoại];. Chú ý là có ký tự dấu
chấm phẩy ở cuối. Khi SIM900(A) trả lời OK thì cuộc gọi thực hiện thành công, đang chờ đầu
dây bên kia trả lời. Nếu không hãy kiểm tra lại việc lắp SIM Card, Anten...
Máy tính hỏi:

ATD0913005013;

SIM900(A) trả lời:

ATD0913005013;
OK

 ATH

Lệnh ATH dùng để ngắt/dừng cuộc gọi đang thực hiện.


Máy tính hỏi:

ATH

SIM900(A) trả lời:

ATH
OK
 AT+CMGS

Lệnh AT+CMGS dùng để gửi tin nhắn ký tự. Cú pháp AT+CMGS="[số điện
thoại]". Sau khi SIM900(A) nhận được lệnh này sẽ trả về ký tự ">". Tiếp đó
bạn gửi tiếp nội dung tin nhắn và kết thúc phần tin nhắn bằng 0x1A và 0x00.
Máy tính hỏi:

AT+CMGS="0913005013"

SIM900(A) trả lời:

>

Máy tính hỏi:

Hello$1A$00

SIM900(A) trả lời:

Hello
+CMGS: <mr>
OK

Trong đó <mr> (Message Reference) là một số.

Sử dụng với Arduino

Kết nối

 Kết nối bo Arduino với SIM900(A) Mini như sau:

SIM900(A) Mini Arduino

VCC IOREF/5V/3V3

GND GND
TXD D2

RXD D3

 Kết nối bo Arduino với máy tính bằng cáp USB.


 Cấp nguồn cho SIM900(A) Mini bằng Adapter như
trên.
 Chắc chắn rằng bạn đã lắp SIM Card và Anten cho
SIM900(A) Mini trước khi khởi động bằng cách nhấn
nút PKey trên SIM900(A) Mini.
Tải thư viện

 Cộng đồng nguồn mở đã phát triển thư viện


GSM/GPRS/GPS cho Arduino giúp bạn tiết kiệm
thời gian và dễ dàng tiếp cận với các mô-đun
GSM/GPRS/GPS sử dụng tập lệnh AT.
 Xem link tải về ở phần Tham khảo thêm bên dưới.
 Xem thêm Thư viện Arduino nếu bạn chưa biết cách
sử dụng một thư viện Arduino.

Lập trình điều khiển


Sau khi tải thư viện GSM/GPRS/GMS về và giải nén vào
thư mục Libraries của thư mục chứa Arduino IDE, bạn
mở chương trình Arduino IDE lên để viết chương trình.
Chương trình gọi điện và nhắn tin đơn giản

#include "SIM900.h"
#include <SoftwareSerial.h>
#include "call.h"
#include "sms.h"

CallGSM call; //Tạo mới một đối tượng CallGSM


để thực hiện cuộc gọi
SMSGSM sms; //Tạo mới một đối tượng
SMSGSM để thực hiện nhắn tin
boolean started = false; //Cờ kiểm tra

void setup()
{
Serial.begin(9600); //Khởi động Serial phục vụ việc
debug
Serial.println("GSM Shield testing.");

if (gsm.begin(2400)){ //Khởi động việc kết nối


SIM900(A)
Serial.println("status=READY");
started = true; //Kết mối với SIM900(A) thành công
}
else
{
Serial.println("status=IDLE");
}
};

void loop()
{
if(started){
call.Call("0913005013"); //Thực hiện cuộc gọi đến
số 0913005013
Serial.println("Calling");

delay(10000); //Chờ 10 giây

call.HangUp(); //Gác máy


Serial.println("HangUp");

delay(2000); //Chờ 2 giây

sms.SendSMS("0913005013", "Hello ChipFC");//Gửi


tin nhắn đến số 0913005013
Serial.println("Send sms");

delay(2000); //Chờ 2 giây

Serial.println("Done");
started = false; //Để không thực hiện tiếp
}
delay(1000);
};

Kết quả
Kết quả quan sát qua Serial Monitor của Arduino IDE
GSM Modem with Arduino UNO
How to send an SMS using GSM Modem connected to Arduino UNO
Components Required:

1. Arduino UNO

2. GSM/GPRS Modem (In this I have used SIM900 Module)

3. PC/Laptop

4. Connecting wires and USB cable for connecting Arduino to PC.

Connection Diagram:
For Code Without using Library files:

For Code With Using Library files:


Because the library files for GSM Shield are defined with software serial with Rx as Pin2 and Tx as Pin3
by default, which we can change if we require in the GSM.cpp file inside the library folder.

Code:
Without using Library files:

void setup()
{
Serial.begin(2400); //Baud rate of the GSM/GPRS Module
Serial.print("\r");
delay(1000);
Serial.print("AT+CMGF=1\r");
delay(1000);
Serial.print("AT+CMGS=\"+91944xxxxxx8\"\r"); //Number to which you want to send the sms
delay(1000);
Serial.print("Test SMS -Jay\r"); //The text of the message to be sent
delay(1000);
Serial.write(0x1A);
delay(1000);
}
void loop()
{
}

With using GSM Library file:

#include "SIM900.h"
#include <SoftwareSerial.h>

#include "sms.h"

SMSGSM sms;

void setup()

Serial.begin(9600);

Serial.println("GSM Testing to send SMS");

if (gsm.begin(2400)){

Serial.println("\nstatus=READY");

started=true;

else Serial.println("\nstatus=IDLE");

if(started){

if (sms.SendSMS("+919********8", "Arduino SMS"))// number to which you want to send the sms and
the sms text//

Serial.println("\nSMS sent OK");

};

void loop()

};

KẾT NỐI THIẾT BỊ


Sơ đồ kết nối theo ghi chú trên phần cứng như sau:
Chân RX của Sim900A kết nối với chân 3 của Arduino
Chân TX của Sim900A kết nối với chân 2 của Arduino
Chú ý là hai chân TX và RX trên 2 thiết bị phải kết nối chéo nhau nghĩa là TX->RX, RX->TX.
Tiếp theo nối dây nguồn, mass của hai module lại với nhau. Chú ý đường mass phải đấu chung
các module lại với nhau thì chúng mới làm việc được.
Theo hình dưới đây, chúng ta chỉ quan tâm đến việc kết nối giữa Arduino và SIM900 thôi.
Nguồn của Sim900 thì kết nối ra bên ngoài cho có dòng lớn.

Module rờ le thì kết nối chân nào còn trống cũng được trừ chân 13 ra, vì mỗi lần khởi động lại
module Arduino, chân 13 có kết nối led trực tiếp làm nhiệm vụ thông báo module đã hoạt động
nên sẽ ảnh hưởng đến rờ le. Ví dụ , tôi dùng chân 7 và 8 cho 2 rờ le. Module rờ le được kích
hoạt ở mức không, tức nó sẽ mở relay khi 2 chân điều khiển nối mass.

Đấu dây cho Module CP2102 và Arduino. Cái này chỉ dùng khi nạp chương trình hoặc kiểm
tra lôi phần mềm, còn khi sử dụng thì không cần tới nữa. Tham khảo bài viết để biết chi
tiết: Cách kết nối Mạch chuyển USB UART CP2102 module Arduino Mini Pro | Điện tử NHT

MÃ NGUỒN

Các bạn dán toàn bộ mã nguồn vào chương trình Arduino và nạp chương trình:
#include <SIM900.h>
#include <SoftwareSerial.h>
#include <sms.h>

SMSGSM sms;

char from_phone_number[11];
char phone_number[]="0908901079";
char message[180];
char pos;

void setup(){
Serial.begin(9600);

pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);

Serial.println("GSM Shield testing.");

if (gsm.begin(2400))

{
digitalWrite(7, LOW);
digitalWrite(8, LOW);

Serial.println("\nstatus=READY");

}
else {

Serial.println("\nstatus=IDLE");

}
}

void loop()
{
pos=sms.IsSMSPresent(SMS_UNREAD);
if((byte)pos>0){
message[0]='\0';
if(strstr(message,"R1ON"))
{
digitalWrite(7,LOW);
sms.SendSMS(phone_number,"Relay 4 is ON");
}
if(strstr(message,"R1OFF")){
digitalWrite(7,HIGH);
sms.SendSMS(phone_number,"Relay 4 is OFF");
}
if(strstr(message,"R2ON")){
digitalWrite(8,LOW);
sms.SendSMS(phone_number,"Relay 5 is ON");
}
if(strstr(message,"R2OFF")){
digitalWrite(8,HIGH);
sms.SendSMS(phone_number,"Relay 5 is OFF");
}
if(strstr(message,"ALLOFF")){
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
sms.SendSMS(phone_number,"Relay 7 & 8 is OFF");
}
if(strstr(message,"ALLON")){
digitalWrite(7,LOW);
digitalWrite(8,LOW);
sms.SendSMS(phone_number,"Relay 7 & 8 is ON");
}
sms.DeleteSMS((byte)pos);
}

III. Kết nối


SIM900A Arduino
TX 2
RX 3
GND GND
Các bạn sử dụng nguồn riêng 5v-2A và chung GND với Arduino cho module
SIM900A V3 nhé :) Nguồn dưới 2A sẽ không đủ điện áp cho module SIM900A
chạy, làm cho nó bị reset á :)

IV. Code thoai


1. String tin_nhan;
2. #include <SoftwareSerial.h>
3.
4. SoftwareSerial SIM900(2, 3); // RX, TX
5.
6. void setup()
7. {
8. pinMode(13, OUTPUT);
9. Serial.begin(9600);
10. SIM900.begin(2400);
11. delay(1000);
12. //khởi tạo sim
13. SIM900.println("AT+CMGF=1r"); //Lệnh này đưa tin nhắn về dạng
text, phải có lệnh này mới đọc, gửi tin nhắn dạng text đc nhé :)
14. delay(1000);
15. SIM900.println("AT+CNMI=2,2,0,0,0r"); //Hiển thị ngay nếu tin
nhắn gửi đến
16. delay(1000);
17.
18. Serial.println("San sang!!!");
19. }
20.
21. void loop()
22. {
23. while (SIM900.available() > 0) {
24. char c = SIM900.read(); //Đọc từng ký tự gửi về
25. if (c == '#') {
26. break;
27. } //Nếu phát hiện ký tự "#" thì thoát vòng lặp;
28. tin_nhan += c; //Ghép các ký tự thành 1 xâu tin_nhan
29. }
30. if (tin_nhan.length() > 0) {
31. Serial.println(tin_nhan);
32. if (tin_nhan == "bat_den") {
33. digitalWrite(13, HIGH);
34. }
35. else if (tin_nhan == "tat_den") {
36. digitalWrite(13, LOW);
37. }
38. tin_nhan = "";
39. }
40. }
soạn tin theo cú pháp đến Số điện thoại của module SIM: " bat_den# ",
"tat_den# " để chiêm ngưỡng thành quả

You might also like