SIM900A-NẠP TIỀN TỪ XA VÀO SIM TRÊN MÔ ĐUN

I. Mở đầu

Đây là vấn đề mình đã nghiên cứu ra từ lâu rồi nhưng bận quá, gần cả tháng chưa viết bài lại. Và bây giờ làm một phát vào năm học mới cho nó xôm. Không dài dòng lôi thôi, vấn đề nạp tài khoản từ xa cũng rất là hữu ích cho nhiều dự án có GSM và khai thác rất nhiều về chúng nên việc hao tổn tài khoản là tất nhiên, có thể các bạn có các mẹo tận dụng tài nguyên như dùng sim khuyến mãi, học sinh sinh viên hay các gói các loại thuê bao gì đấy.. để tiết kiệm nhưng về mặt tiện lợi và lâu dài thì đây là giải pháp tối ưu nhất!hehe,vào bài thôi!winkVà trước khi đọc tiếp đề nghị quá vị, quáy bà con cô bác nội ngoại "n" họ xem lại các bài viết khác về Sim900A của mình với từ khóa Sim900 trên thanh tìm kiếm!devil

II. Thực hành

Bài viết này sử dụng các kĩ thuật không hẳn là căn bản để các bạn mới nhập môn không lâu cũng có thể nắm bắt được và gợi các kĩ thuật xử lí String-một kĩ thuật rất hay trên Arduino nên code rất là thô!cheeky những gì vần chuẩn bị thì y chang các bài viết trước và cần thêm cái điện thoại với 1 mã thẻ cào (đúng sai tùy thích, test chơi thôi mà!).ahihi!bà con đọc cho kĩ chỗ này rồi ngẫm nghĩ xem có gì .... không nhé!

1. Phương hướng

Mấu chốt của vấn đề là sử dụng tập lệnh AT để tạo ra chức năng (chức năng kích hoạt phương thức USSD mà thư viện chưa hỗ trợ, tính viết 1 thư viện luôn mà vẫn chưa viết :3!

gsm.SimpleWriteln("AT+CUSD=1,\"*101#\"");

Đây là câu lệnh gọi lệnh AT với cú pháp

gsm.SimpleWriteln();

Phần biến ở trong sẽ là một String đặt giữa cặp dấu nháy " "

bên trong cặp dấu này sẽ là các kí tự bắt buộc để thực hiện chức năng USSD

AT+CUSD=1,\ 

Và phần sau như các bạn quan sát thì sẽ là các mã đặt trưng cho các nhà mạng! để mọi người khỏi rối rắm thì chỉ cần thay đổi *101# như ví dụ trên thôi!

Như trên đã phân tích, lợi dụng đặc điểm đó, ta chỉ cần dùng nhiều thành phần String nói ghép lại với nhau để có được điều mình mong muốn!

Vậy cái thao tác huyền thoại chúng ta cần là *100*mã số thẻ#, ok tronng có thành phần là hằng *100* và #; biến là mã số thẻ!

2. Code

Như trên mình đã phân tích, các bạn tự vận động xem các comment mình ghi trong code đi nha! và Code này mình có kết hợp cả chức năng kiểm tra tài khoản nữa!

#include "SIM900.h"
#include "SoftwareSerial.h"
#include "sms.h"
#include "call.h"
CallGSM call;
SMSGSM sms;
char state[50], msg[50], resp[50], c2[20]="NAPTIEN", phong[100], ahihi[100]="AT+CUSD=1,\"*100*",ohoho[100]="#\"", so[30];//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;   

void setup() 
{
  Serial.begin(9600);
 
  Serial.println("GSM Shield testing.");
 
  if (gsm.begin(2400))
 
    Serial.println("\nstatus=READY");
 
  else Serial.println("\nstatus=IDLE");
  delay(200);
  sms.SendSMS("0163yyyyxxx", "Arduino Community Vietnam");
}

void loop() {
 
    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(strstr (smstext, c2)!=NULL){
          strncpy(so, smstext+7, 13);
          so[30]='\0';
          Serial.println(so);
          strcat(ahihi, so);
          strcat(ahihi, ohoho);
          Serial.println(ahihi);
          delay(100);
          gsm.SimpleWriteln(ahihi);   
          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);          
          strncpy(phong, resp+17, 100);
          Serial.println(phong);//in ra thanh cong
          delay(100);
          sms.SendSMS(number, phong); //nhan tin tra ve noi dung
          delay(100);
        } 
      
        else 
        {
          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
          {
            delay(100);
            gsm.SimpleWriteln("AT+CUSD=1,\"*101#\""); 
            delay(5000);
            char resp[100];
            gsm.read(resp, 100);
            delay(100);
            strncpy(phong, resp+17, 100);
            Serial.println(phong);//in ra thanh cong
            delay(100);
            sms.SendSMS(number, phong); //nhan tin tra ve noi dung
            delay(100);
          }
         }
      }
      sms.DeleteSMS(byte(pos));//xóa sms vừa nhận     
  }
  delay(1000);
}

III. Kết thúc

Nếu các bạn để ý thì trên đấy có các thao tác với String, chưa biết thì mọi người cũng tự tìm thấy trên cộng đồng nhá! Và rồi ai đã từng khúc mắc hay phiền toái với các tin nhắn trả về dài dòng và có nhiều phần không cần thiết thì mình cũng đã tích hợp luôn ở trên!tinh ý là thấy à nha!cool

Các bạn tha hồ sáng tạo với các chức năng nâng cao khác như kiểm tra định kì, tài khoản thấp thì tự báo......

À mém chút quên cái này, bạn nào lấy mã thẻ tồ lô đi test thì ráng tới khi tin nhắn trả về nó là lạ thì hãy chụp ảnh và cho mình thấy ở comment phía dưới nhá!hehehehe!

Thường thì nội dung tin nhắn trả về nó phải thế này:

ma so the cao khong hop le hoac da su dung..... đại loại là thế nhá, khác thì cho mình xem nha!

Mình sẽ sớm up video cho trực quan hên! Đi mượn điện thoại cô hàng xóm nhờ quay hoài cũng ngại!hehehehelaugh

lên
20 thành viên đã đánh giá bài viết này hữu ích.
Chuyên mục: 
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ả

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

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

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

CẢNH BÁO HỎA HOẠN-PHỐI HỢP VÀ MẸO SỬ DỤNG NHIỀU PHƯƠNG TIỆN PHƯƠNG THỨC ĐỂ TĂNG ĐỘ CHÍNH XÁC-MỘT BỘ PHẬN CỦA NHÀ THÔNG MINH

Chào mọi người, bài viết này chúng ta sẽ cùng mở rộng môt tí về hệ thống cảnh báo-xử lí hỏa hoạn, một bộ phận của hệ thống nhà thông minh nhá. Hỏa hoạn là một trong những tai nạn thường xuyên và rất thảm khốc không ai trong chúng ta muốn gặp phải cả! Vậy làm sao để có một hệ thống hiệu quả và chính xác hơn thì hãy tham khảo thử bài viết dưới đây nhé! 

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