SIM900(A)-Kiểm Tra Tài Khoản Trên Mô Đun Sim

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á!cool

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,kekekedevil.

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, kkklaugh

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!smiley

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ó!cheeky) 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á!!heart 

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,kkkenlightened).

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ả!smiley

một biểu hiện mọi người nhận ra ngay boy nhà nghèo cheeky

"Đố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!heart

TTL Phong

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

Bộ điều khiển PID - ứng dụng phần 2 - xe dò line dùng thuật toán PID

Tiép nối bài viết về xe dò line cảm ơn Đỗ Hữu Toàn đã viết hộ mình phần 4. hôm nay mình sẽ làm cho chiếc xe dò line đi mượt và có hồn hơn 

lên
34 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

CÁCH HỒI SINH MÔ ĐUN SIM900A MINI BỊ HƯ TỤ - NHÌN NHẬN VỀ KHẮC PHỤC CÁC HƯ HỎNG CỦA CÁC THIẾT BỊ ĐIỆN TỬ

Chào tất cả mọi người, bài viết này xin hướng dẫn những ai đã từng ngậm ngùi khi vô tình sơ suất làm hỏng tụ mô đun Sim900A và giúp những bạn trẻ mới vọc vạch về điện tử như mình đã từng phương hướng hồi sinh các mô đun điện tử bị hỏng hóc cái gì đó ại một vị trí nào đó.

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

Điều khiển thiết bị bằng cuộc gọi với module Sim 900A

Xin chào mọi người, để tiếp nối chuỗi bài về Sim900A của anh PhuPOP, hôm nay mình xin giới thiệu với mọi người về một chức năng nữa cũng rất mạnh mẽ của Sim900A đó là "ĐIỀU KHIỂN THIẾT BỊ BẰNG CUỘC GỌI". Lần đầu viết bài có gì thiếu sót mong mọi người thông cảm và góp ý! 

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