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

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Cảm ứng -Thành tựu công nghệ nở rộ của thế kỷ XX - Một ứng dụng cở bản: Sử dụng cảm biến chạm

Trong khi chờ đợi các phần cứng để tiếp tục các chuỗi bài về Sim900A, Khóa thông minh, và cảm biến hiệu ứng Hall (ai quan tâm thì lăn xuống dưới để xem các bài viết cùng tác giả nhá!) thì mình thực hiện bài viết này để giới thiệu một công nghệ đã làm mưa làm gió khắp thế giới đó là cảm ứng.

Đầu tiên chúng ta cần phân biệt công nghệ cảm ứng này với cảm ứng hay ứng động của giới sinh học nha!

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

Arduino - Processing Basic 1

Xin chào mọi người, lâu nay trên cộng đồng của chúng ta đã có nhiều bài viết về arduino-processing, một phương thức điều khiển arduino bằng máy tính sử dụng ngôn ngữ Java tuy đã xuất hiện từ lâu nhưng nó rất hữu ích cho các dự án cần về giao diện điều khiên hay giúp chúng ta luyện tập về ngôn ngữ Java. Những bài đã có trên cộng đồng đa số là về những dự án mẫu ứng dụng processing nên gây khó khăn cho các bạn newbie muốn tìm hiểu và ứng dụng nên mình xin có một vài bài viết hướng dẫn cơ bản về Processing.

lên
14 thành viên đã đánh giá bài viết này hữu ích.
Từ khóa: