Sử dụng module SIM900a mini với Arduino - Module nhắn tin với Arduino

I. Giới thiệu

Những dự án xây dựng các hệ thống điều khiển từ xa, gửi nhận dữ liệu thu thập từ các cảm biến... ở những nơi không có internet thì sử dụng sóng điện thoại là giải pháp duy nhất vì chi phí rẻ, bất chấp khoảng cách và độ ổn định cao. Với Modul sim 900a kết hợp với mạch xử lý arduino uno hoặc mega các bạn có thể làm được nhiều hệ thống tương đối tốt có thể ứng dụng vào thực tế như bộ định vị, các hệ thống điều khiển thiết bị từ xa qua điện thoại, sms makerting,...

II. Nối mạch

Modul sim900a mini mình hàn thêm diot vào chân vcc và tụ 2200uF/10V để sử dụng được nguồn 5v từ mạch arduino

  • 5V nối với chân 5V của board Arduino.
  • GND nối với chân GND của board Arduino.
  • TX nối với chân 51/2 của board Arduino MEGA/UNO.
  • RX nối với chân 50/3 của board Arduino MEGA/UNO.
  • PWR: Đây là chân bật tắt modul sim900a.     
  • SPK: Chân này cần kết nối nếu bạn muốn xuất âm thanh ra loa thoại. 
  • MIC: Chân này cần kết nối nếu bạn muốn tạo mic để đàm thoại.

Tùy theo mạch các bạn đang sử dụng để sửa lại chân tx rx trong thư viện, nếu bạn nào sử dung lệnh AT thì có thể sử dụng chân khác

Sơ đồ nối dây trên mình nối để sử dụng với thư viện SIM900 LIB

III. Các chức năng

Thư viện hỗ trợ tương đối đầy đủ các chức năng mà SIM900 có.

  1. Gọi điện
  2. Nhận cuộc gọi
  3. Gửi tin nhắn
  4. Nhận tin nhắn
  5. Xóa tin nhắn
  6. Đọc tin nhắn
  7. GPS
  8. GPRS
  9. Etc...

Mình chỉ mới tìm hiểu chừng đó mà mình thấy như thế là gần như full chức năng rồi. Có thời gian các bạn tìm hiểu thêm phần MIC và LOA nhé. Mình hơi bận nên không tìm hiểu vì không dùng tới, những dự án của mình làm chủ yếu dùng SMS, GPS, GPRS. Hiện mình đang sử dụng thư viện này trong bộ định vị xe máy và phát hiện mất xe báo về số điện thoại mình.(Chả là mình vừa mới bị hack mấy con xe nên cay cú mới làm bộ giám sát này crying). Bạn nào muốn làm 1 bộ cho xe thì có thể để lại comment mình sẽ viết bài hưỡng dẫn. heart

Mình không biết nó có hoạt động được với những modul sử dụng ic SIM900A không vì mình chỉ mới test trên Modul SIM900A mini mình có thôi. Bạn nào sử dụng modul khác mà được thì để lại comment chia sẻ nhé(nó miễn phí mà devil). Mà các bạn có ý định mua thì modul SIM900A mini là đủ dùng rồi, nhỏ gọn lại rẻ tiền nữa phù hợp với sinh viên làm mấy cái project nhỏ nhỏ, đồ án, bài tập lớn... hay đại loại thứ gì đó tương tự.

IV. Các hàm trong thư viện

1. Hàm này dùng để thiết lập một kết nối GPRS với tên miền sử dụng chứng thực (nếu cần thiết)

int attachGPRS(char* domain, char* dom1, char* dom2)

Thông số và giá trị trả về:

  • doamin: Con trỏ đến một chuỗi chứa tên miền địa chỉ của kết nối GPRS
  • dom1: Con trỏ đến chuỗi tên người dùng (không sử dụng nếu không cần thiết)
  • dom2: Con trỏ đến chuỗi mật khẩu (không sử dụng nếu không cần thiết)

Giá trị trả về kiểu boolean:

  • 0 - Không thể thiết lập một kết nối GPRS
  • 1 - Kết nối thiết lập thành công

2. Ngắt kết nối GPRS

int dettachGPRS()

3. Bắt đầu một kết nối tới máy chủ tại 1 port

int connectTCP(const char* server, int port)

Thông số và giá trị trả về:

  • server: Con trỏ đến chuỗi địa chỉ máy chủ, nó có thể là IP hoặc địa chỉ bình thường
  • port: cổng được sử dụng để thiết lập kết nối

Ví dụ. gsm.connectTCP ("www.google.com", 80) Ví dụ. gsm.connectTCP ("74.125.39.106", 80)

Kiểu trả về boolean:

  • 0 - Không thể bắt đầu kết nối TCP
  • 1 - Kết nối đến máy chủ thành công

4. Dừng các kết nối TCP đến máy chủ.

int disconnectTCP ()

5. Thiết lập SIM900 vào chế độ máy chủ, chờ khách hàng kết nối TCP đến trên cổng xác định.

int connectTCPServer(int port)

Thông số và giá trị trả về:

  • port: cổng được sử dụng để thiết lập kết nối

Kiểu trả về boolean:

  • 0 - Không thể bắt đầu kết nối máy chủ
  • 1 - Máy chủ bắt đầu thành công, chờ đợi kết nối từ máy khách

6. Nghe và gọi

include "call.h";
CallGSM call_classname;

Thực hiện cuộc gọi đến 1 số điện thoại

Call(char *number_string)

Ví dụ:

call_classname.Call("+84123456789"); //sdt phải format theo định dạng quốc tế

Thực hiện cuộc gọi đến 1 số điện thoại đã được lưu trong sim

Call(int sim_position) // sim_position: Vị trí sdt lưu trong bộ nhớ Sim

Gọi tới 1 số điện thoại đã được lưu trong bộ nhớ SIM. Ví dụ:

call_classname.Call(1); // gọi số được lưu ở vị trí số 1 trong danh bạ SIM

Tắt cuộc gọi

HangUp(void)

Ví dụ:

call_classname.HangUp();

Nhận cuộc gọi

PickUp(void)

Nhận cuộc gọi tới Ví dụ

call_classname.PickUp();

7. Gửi nhận tin nhắn

include "sms.h";
SMSGSM sms_classname; //khai báo class

Gửi tin nhắn

SendSMS(char *number_str, char *message_str)
  • number_str: số điện thoại (format theo định dạng quốc tế)
  • message_str: nội dung tin nhắn

Kiểu trả về

  • 0 - gửi sms không thành công
  • 1 - gửi sms thành công

Ví dụ

sms_classname.SendSMS("+84123456789", "noi dung tin nhan");

Gửi tin đến sdt lưu trong danh bạ sim

SendSMS(byte sim_phonebook_position, char *message_str)
  • sim_phonebook_position: Vị trí sdt
  • message_str: nội dung tin nhắn

Ví dụ

sms_classname.SendSMS(1, "noi dung tin nhan");

Xác định trạng thái tin nhắn trong hộp thư đến

IsSMSPresent(byte required_status)

Trạng thái:

  • SMS_UNREAD: Chưa đọc
  • SMS_READ: Đã đọc
  • SMS_ALL: Toàn bộ tin nhắn có trong hộp thư

Ví dụ:

char position;
char phone_number[20]; // sdt
char *sms_text;
position = sms_classname.IsSMSPresent(SMS_UNREAD);
if (position) { // có tin nhắn mới
   sms_classname.GetGSM(position, tel_number, sms_text);
}

Đọc nội dung tin nhắn

GetSMS(byte position, char *phone_number, char *SMS_text, byte max_SMS_len)
  • position: vị trí tin nhắn trong hộp thư
  • phone_number: số điện thoại gửi tin
  • SMS_text: nội dung tin nhắn
  • max_SMS_len: Độ dài tin nhắn vừa nhận

Trả về:

  • GETSMS_NO_SMS: không tìm thấy tin nhắn
  • GETSMS_UNREAD_SMS: tìm thấy tin nhắn
  • GETSMS_READ_SMS: đã đọc tin nhắn

Ví dụ:

GSM gsm;
include "sms.h";
SMSGSM sms_classname;
char position;
char phone_num[20]; // sdt
char sms_text[100]; // nội dung tin nhắn
position = sms_classname.IsSMSPresent(SMS_UNREAD);
if (position) {
	// nếu có tin nhắn 
	sms_classname.GetGSM(position, phone_num, sms_text, 100);
	Serial.println("DEBUG SMS phone number: ", 0);
	Serial.println(phone_num, 0);
	Serial.println("\r\n SMS text: ", 0);
	Serial.println(sms_text, 1);
}

Đọc tin nhắn từ vị trí xác định

GetAuthorizedSMS( byte position, char *phone_number, char *SMS_text, byte max_SMS_len, byte first_authorized_pos, byte last_authorized_pos)
  • GETSMS_NO_SMS: không tìm thấy sms
  • GETSMS_NOT_AUTH_SMS: không tìm thấy sms
  • GETSMS_AUTH_SMS: tìm thấy sms

Xóa sms tại vị trí nào đó trong bộ nhớ sim

DeleteSMS(byte position)

Đây là bài viết đầu tiên của mình trên cộng đồng nếu các bạn thấy nó hữu ích thì có thể để lại comment mình sẽ viết tiếp một loạt bài về các dự án mình đang làm sử dụng arduino và modul sim900a. Một số dự án có sử dụng modul sim900a mini mình hoàn thiện và đang hoạt động ổn như bộ điều khiển trung tâm cho hệ thống cảnh báo xâm nhập, bộ định vị - chống trộm cho xe máy, hệ thống đo nhiệt độ - độ ẩm - lưu lượng nước... 

 

lên
50 thành viên đã đánh giá bài viết này hữu ích.
Từ khóa: 
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Sim900A & Arduino | Gửi và nhận SMS

Bài viết trước mình có giới thiệu về thư viện SIM900 cho Arduino, hôm nay mình sẽ viết bài hướng dẫn các bạn sử dụng nó trong môi trường Arduino để thực hiện công việc gửi, nhận SMS, đọc nội dung SMS, xóa SMS và nhận trả lời mọi comment về những vấn đề phát sinh trong quá trình các bạn làm theo hướng dẫn của mình. " Và cũng nhân tiện cho mình gửi lời xin lỗi đến các bạn trong diễn đàn. Ở bài viết trước mình có nói sẽ hướng dẫn cho các bạn làm hệ thống chống trộm và định vị cho xe nhưng cái modul GPS của mình đổ keo để chống nước khi gắn vào xe và bây giờ không tiện gỡ ra vì vậy qua loạt bài này mình không có sử dụng modul GPS nếu bạn nào muốn làm những dự án liên quan GPS có thể inbox hoặc comment mình có thể hướng dẫn và gửi code tham khảo của mình cho". Mình viết bài chỉ ở mức cơ bản để các bạn có thể hiểu và sử dụng modul SIM900 trong môi trường Arduino và từ đó tư duy phát triển theo định hướng riêng cho các project khác nhau. 

lên
28 thành viên đã đánh giá bài viết này hữu ích.

Điều khiển thiết bị bằng tin nhắn với Sim900 và Arduino

Mình viết tiếp bài hướng dẫn cơ bản về modul sim900 và arduino. Bài viết hơi muộn do tuần rồi công việc nhiều mình không có thời gian viết bài cũng như trả lời bình luận. Có 1 số inbox đến và mình cũng không có thời nghiên cứu để trả lời và giải đáp. Mục đích của mình ở những bài viết trên đây là muốn chia sẻ cho các bạn quan tâm tới chủ đề này để các bạn dựa vào đó để tìm hiểu và phát triển ứng dụng vào từng project riêng của các bạn. Mình không thể chỉ chi tiết cho các bạn các bước từ việc nối dây đến code hay sơ đồ mạch lẫn mạch in ... vì thế mong các bạn nên tự tìm hiểu trước khi hỏi để 2 bên không mất thời gian. Bài viết mình có thể chưa hoàn thiện có gì sai sót các bạn để lại comment góp ý để mình hoàn thiện thêm nhé angel.

lên
26 thành viên đã đánh giá bài viết này hữu ích.