PhuPOP gửi vào
- 116112 lượt xem
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ó.
- Gọi điện
- Nhận cuộc gọi
- Gửi tin nhắn
- Nhận tin nhắn
- Xóa tin nhắn
- Đọc tin nhắn
- GPS
- GPRS
- 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 ). 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.
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à ). 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...