TTL Phòng gửi vào
- 11349 lượt xem
I. Mở đầu
Hôm nay chúng ta sẽ tiến thêm một bước mới về kiểm soát Sim900A từ xa, một ứng dụng rất cần thiết trong các dự án sử dụng mô đun GSM lâu dài và mở rộng ra sẽ là nạp tài khoản, lấy thông số thời gian, điều khiển nhiều thiết bị bằng DTMF..v.v..
Trước khi bước bào bài viết, ai chưa nắm về mô đun Sim này thì nghiên cứu kĩ trên cộng đồng nhá và phải đọc qua bài viết này để có thể nắm bắt tốt hơn các vấn đề trong bài này nhá!
Thực chất trọng tâm của bài viết này chỉ giúp mọi người có cách xử lí với các chuỗi kí tự để tiến hành nhắn tin có điều kiện....còn bản chất của nó thì pro nào đọc bài trước của mình là ý tưởng nó ào ra ngay thôi! Và mở rộng bài viết này lên tí là Sim sẽ tự kiểm tra tài khoản theo định kì và tự nhắn tin cho ta hoặc khi tài khoản sắo hết nó sẽ nhắn như tổng đài vậy.
Một chia sẻ nhỏ
Mình rất đau khi nhận tin nhắn của các bác tổng đài:tai khoan cua quy khach hien con duoi 1000d,quy khach vui long nap them tien vao tai khoan de su dung dich vu,cam on".
II. Hướng giải quyết
Đây cũng là một chương trình khá là đơn giản, điểm mấu chốt chính là xử lí thông tin cần có như thế nào, thông tin cần có ở đây chính là tài khoản của sim trên mô đun GSM chúng ta sử dụng. Ta sẽ đòi hỏi sim trả lời bằng một tin nhắn (hoặc cuộc gọi) với lệnh thực hiện quá trình kiểm tra tài khoản rồi xử lí thông tin có được phản hồi lại cho ta biết bằng một văn bản SMS. Trong phạm vi bài viết mình chỉ đề cập đến dùng SMS để kiểm tra, cuộc gọi thì tương tự! (ai chưa biết thì hãy click vào các đường dẫn mình đã đánh dấu nhá!).Ở đây chúng ta sử dụng điện thoại hay một công cụ gửi tin nhắn gửi đến sim một tin nhắn tương đương với lệnh thực hiện, lệnh này tùy chúng ta!
1. Code tham khảo
#include "SIM900.h" #include "SoftwareSerial.h" #include "sms.h" SMSGSM sms; char state[50], msg[50], resp[50], phong[100]="TTL Phong";//khoi tao cac xau ki tu char smstext[160];//noi dung tin nhan den char number[20];//so dien thoai tin nhan den theo dinh dang quoc te int numdata;//bien nay dung cho doc du lieu int flag=0; boolean started = false; //trạng thái modul sim void setup() { Serial.begin(9600); Serial.println("GSM Shield testing."); if (gsm.begin(2400)) Serial.println("\nstatus=READY"); else Serial.println("\nstatus=IDLE"); } void loop() { if(started){ char pos; //địa chỉ bộ nhớ sim (sim luu tối đa 40 sms nên max pos = 40) pos = sms.IsSMSPresent(SMS_UNREAD); // kiểm tra tin nhắn chưa đọc trong bộ nhớ //hàm này sẽ trả về giá trị trong khoảng từ 0-40 if((int)pos){//nêu có tin nhắn chưa đọc if(sms.GetSMS(pos, number, smstext, 160)){ Serial.print("So dien thoai: "); Serial.println(number); Serial.print("Noi dung tin nhan: "); Serial.println(smstext); if(strcmp(smstext,"KIEMTRA")==0){//so sánh 2 chuỗi,neu trong SMS gui toi co cuoi ky tu KIEMTRA moi thuc hien kiem tra gsm.SimpleWriteln("AT+CUSD=1,\"*101#\""); delay(5000);//phai doi 5 giay moi gui va doc het du lieu char resp[100];//khoi tao xau cho noi dung tra ve gsm.read(resp, 100); //lay no Serial.println(resp);//in ra lan 2 delay(100); strcpy(phong,resp);//chep toan bo xau noi dung ra xau ta muon Serial.println(phong);//in ra thanh cong delay(100); sms.SendSMS(number, phong); //nhan tin tra ve noi dung delay(100); } else { Serial.println("Co tin nhan den nhung sai cu phap"); } } sms.DeleteSMS(byte(pos));//xóa sms vừa nhận } delay(1000); } }
2. Mở rộng
Lưu ý rằng bạn có thể có một nội dung trả lời ngắn gọn như là chỉ các con số của tài khoản...điều đó sẽ giúp ta tiết kiệm tiền cho sim, muốn được điều đó chỉ cần sử dụng các kĩ thuật xử lí chuỗi kí tự trong ngôn ngữ lập trình C++.
Chúng ta có thể phát triển hơn nữa như sim sẽ tự kiểm tra tài khoản theo định kì và nếu tài khoản còn ít (do chúng ta định nghĩa bao nhiêu là ít) nó sẽ tự động nhắn tin báo cho ta biết...
III. Kết thúc
Chỉ đơn giản thế thôi,chúc bà con cô bác thành công! Mọi người hãy chờ đón các bài viết tiếp theo trong chuỗi công phá chức năng GSM mô đun Sim900A của mình nhá, mong mọi người ủng hộ, mình sẽ up video đề mô lên (có thể là ngày mai khi mình mượn được cái điện thoại để quay,kkk), cảm ơn mọi người.