Các hàm cơ bản cho module Sim 800L với Arduino

27/10/2019
cac-ham-co-ban-cho-module-sim-800l-voi-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 800L 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...

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.

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. 

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)

  1. 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

  1. int dettachGPRS()

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

  1. 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ủ.

  1. 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.

  1. 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

  1. include "call.h";
  2. CallGSM call_classname;

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

  1. Call(char *number_string)

Ví dụ:

  1. 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

  1. 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ụ:

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

Tắt cuộc gọi

  1. HangUp(void)

Ví dụ:

  1. call_classname.HangUp();

Nhận cuộc gọi

  1. PickUp(void)

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

  1. call_classname.PickUp();

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

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

Gửi tin nhắn

  1. 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ụ

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

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

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

Ví dụ

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

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

  1. 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ụ:

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

Đọc nội dung tin nhắn

  1. 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ụ:

  1. GSM gsm;
  2. include "sms.h";
  3. SMSGSM sms_classname;
  4. char position;
  5. char phone_num[20]; // sdt
  6. char sms_text[100]; // nội dung tin nhắn
  7. position = sms_classname.IsSMSPresent(SMS_UNREAD);
  8. if (position) {
  9. // nếu có tin nhắn
  10. sms_classname.GetGSM(position, phone_num, sms_text, 100);
  11. Serial.println("DEBUG SMS phone number: ", 0);
  12. Serial.println(phone_num, 0);
  13. Serial.println("\r\n SMS text: ", 0);
  14. Serial.println(sms_text, 1);
  15. }

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

  1. 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

  1. DeleteSMS(byte position)

(Sưu tầm)

Bình luận (1)
binh-luan

Trương Thảo

27/10/2019

Anh làm khoá cửa bằng vân tay cộng module sim 800l dùng con ras đi anh
VIẾT BÌNH LUẬN CỦA BẠN