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
21 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

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ẢM BIẾN LỬA - MỘT MÔ ĐUN CẢM BIẾN ĐƠN GIẢN VỚI ARDUNIO

Xin chào, hôm nay mình xin giới thiệu với mọi người một mô đun đơn giản để phát hiện lữa nhằm cảnh báo hỏa hoạn, dưới đây chỉ là một loại mô đun cảm biến đơn giản ứng dụng cho các thiết bị nhỏ phù hợp với các dự án ardunio của chúng ta.

lên
14 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.