TTL Phòng gửi vào
- 19443 lượt xem
I. Mở đầu
Chào mọi người, hôm nay chúng ta quay lại với chủ đề với Sim900(A) và vấn đề ở đây là kiểm tra tài khoản khi sim vẫn hoạt động trên mô đun. Tại sao lại cần điều này???Vì việc kiểm tra tài khoản sau một thời gian hoạt động là điều quan trọng giúp hệ thống GSM của bạn hoạt động hiệu quả nhưng lấy ra gắn vào thiết bị khác là rất bất tiện. Và bài viết này sẽ là tiền đề để chúng ta phát triển các hoạt động tiện lợi khác với sim, khai thác hết và hiệu quả các khả năng của nó...như kiểm tra-nạp tài khoản từ thiết bị khác, lấy thông tin thời gian cuộc gọi, ngày giờ...chúng ta sẽ nói đến trong các bài viết sau nhá!
II. USSD
Đầu tiên ta làm quen với một giao thức (nó quen ta nhưng ta chưa biết nó) mà mọi điện thoại khi sử dụng các dịch vụ GTGT hay tra cứu tài khoản phải sử dụng đó là USSD (Unstructured Supplementary Service Data). Hiển một cách đơn giản nhất đó là nó giống với các giao thức nhắn tin,nhưng thay vì được sử dụng để truyền tin nhắn ngắn (SMS) giữa người dùng điện thoại, nó nhằm mục đích để cả nhà sản xuất thiết bị và nhà mạng xây dựng các dịch vụ gia tăng cho điện thoại và mạng.
Giống như tin nhắn, tin nhắn USSD ngắn (tối đa 182 ký tự) nhưng không như tin nhắn, chúng có thể thực sự mở một kết nối mạng hai chiều giữa một thiết bị và một điểm kết cuối (network endpoint), cho nên chúng đáp ứng hơn so với SMS và có thể được sử dụng cho các dịch vụ tương tác theo thời gian thực.
USSD được áp dụng cho nhiều dịch vụ như mobile banking, cập nhật phần mềm qua OTA, mạng xã hội, nạp tiền/ gửi tiền vào tài khoản thuê bao...
Bà con dân IT sẽ nghe nhiều về nó ở vấn đề xâm nhập hệ thống bằng lỗ hỏng USSD này,kekeke.
Một ví dụ thực tế khi ta tiến hành kiểm tra tài khoản trên một điện thoại ta có thể thấy như hình bên phải.
Vậy với Sim900A này thì sau nhỉ, chắ ai từng dùng nó cũng chơi câu lệnh này thôi, kkk
call.Call("*101#");
Vậy khi đó tín chúng ta sẽ đọc được trên Serial Monitor thế này
Rõ ràng là thông tin trả về không phải là là một chuỗi các kí tự văn bản như SMS ta không thể xử lí bằng hàm "get" nữa. :3 nhưng rõ ràng nó là một chuỗi các kí tự đúng không, vậy vấn đề mấu chốt là moi chúng ở đâu!
III. Tập lệnh AT trong thư viện
Lệnh AT, một trong các phương thức giao tiếp của nhiều thiết bị kĩ thuật số trong đó có cả các thiết bị GSM mà ở đây chính là Sim900A của chúng ta. Về bản chất mà thư viện chúng ta đang sử dụng cũng chỉ là một cách đơn giản hóa việc sử dụng lệnh AT mà thôi. Mình đã gặp nhiều vấn đề về việc sử dụng Sim900A này rất nhiều với thư viện do nhiều chức năng thư viện không đáp ứng (vạn vật biến hóa, ai mà biết các bạn có những ý tưởng sét đánh gì với nó mà viết hết trong thư viện, vậy tại sao chúng ta không tự khai thác nó!) và giải phát đó chính là sử dụng tập lệnh AT. Đúng là một giải pháp tối ưu nhưng đối tượng chúng ta nhắm đến là giúp mọi người dễ tiếp cận nên mình sẽ bám sát vào thư viện! Đối với các cụ làng, trưởng buông, chùm sóc của chúng ta thì AT chẳng đáng mà nói,kkeeke. Vậy để mở rộng kiến thức về lệnh AT thì mọi người tự nghiên cứu nhá!!
1. Gửi lệnh AT
Đây là một câu lệnh để ra lệnh cho mô đun sim lấy thông tin tài khoản của sim từ máy chủ nhà mạng(giống như thao tác đã trở thành kinh điển, *101#-ấn nút ok hoặc nút gọi)kkkk!
gsm.SimpleWriteln("AT+CUSD=1,\"*101#\"");
Tại sao phải dùng lệnh này? Vì như trước đã nói thư viện chúng ta chưa có sẵn(khi rỗi biết đâu mình viết cho,kkk).
Lệnh này nó phải sử dụng một thư viện để hoạt động đó là GSM, chắc hẳn ai hay vọc vạch thì khi cài IDE thì nó đã có sẵn nhằm sử dụng cho các mô GSM. Và khi ta khai báo sử dụng thư viện Sim900 thì thư viện GSM cũng sẵn kích hoạt. Về thành phần, câu lệnh này cho phép chúng ta thực hiện bất kì lệnh AT nào, hãy nghiên cứu nó, sẽ rất thú vị đấy!
gsm.SimpleWriteln("_");
2.Đón bắt nội dung trả về
Cũng giống như khi call.Call("*101#"), nội dung trả về là tương tự nhưng chúng ta sẽ lấy được văn bản nhờ vào một xâu kí tự mặc định khi lệnh này trả về với chương trình sau:
#include "SIM900.h" #include "SoftwareSerial.h" char state[50], msg[50], resp[50], phong[100]="TTL Phong";//khoi tao cac xau ki tu int numdata;//bien nay dung cho doc du lieu int flag=0; int tt=0;//de chuong trinh chay mot lan thoi 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(tt==0) { 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); Serial.println(phong);//in xau nay xem choi,gion chu de thay su thanh cong,kkk strncpy(phong,resp,25);//chep xau noi dung ra xau ta muon Serial.println(phong);//in ra thanh cong tt=1;//cho dung chuong trinh } }
Trong chương trình trên có sử dụng một số kĩ thuật xử lí xâu nhằm có xâu ta mong muốn để phục vụ nhiều mục đích.
3. Thao tác với xâu(chuỗi kí tự)
Nếu bạn là một sinh viên hay người hiểu biết chuyên ngành CNTT thì thao tác với xâu tròg C++ là không còn gì để nói nhưng với người mới thì là một vấn đề vậy mình xin nó sơ qua. Trong chương trình trên mình sử dụng một thủ tục sao chép một phần xâu để có xâu mới và việc mình muốn như gửi tin nhắn, lưu trữ... muốn rõ hơn hãy xem tại đây nhá!
strncpy(phong,resp,25);
chép xâu resp vào xâu kí tự phong bắt đầu từ kí tự đầu tiên với 25 kí tự. Và đây là thành quả!
một biểu hiện mọi người nhận ra ngay boy nhà nghèo
"Đối với nhà mạng khác nhau nội dung trả về sẽ khác nhau!, mọi người tùy biến để lấy ra nọi dung mình cần nhé!"
IV.Kết thúc
"Chúc mọi người thành công, bài viết này sẽ mở đầu chuỗi công phá GSM của mô đun Sim900A, bài sao có thể sẽ là nạp tài khoản bằng điện thoại khác vào sim, lấy RTC... thấy hay thì like và RATE NOTE nha bà con! Cảm ơn mọi người!
TTL Phong