Hướng dẫn sử dụng Module Sim800C
Bài viết này sẽ hướng dẫn các bạn sử dụng Module Sim800C do MLAB sản xuất một cách nhanh nhất.
Trước khi bắt đầu, các bạn cần chuẩn bị các công cụ và tài liệu đi kèm.
Chuẩn bị về phần cứng:
- Module sim800C đã tích hợp với module nguồn DC-DC
http://mlab.vn/1223236-sim800c-gsm-shield-dung-cho-arduino.html
- Module UART: các bạn có thể lựa chọn module PL2303TA
http://mlab.vn/585225-module-usb-to-uart-pl2303-ta.html
- Nguồn AC-DC: các bạn có thể sử dụng nguồn 12VDC/1A
http://mlab.vn/1272384-adapter-dc-12v-1a.html
Phần mềm và tài liệu:
- Phần mềm SDIAGS
- Phầm mềm Hercules
- Tài liệu của hãng: tập lệnh AT
Các bạn có thể download phầm mềm và tài liệu tại đây.
Mọi thứ đã sẵn sàng, giờ bạn muốn biết Module Sim800C xem nó hoạt động như thế nào? Thực hiện 1 cuộc gọi hoặc nhắn tin bằng cách nào? khi có cuộc gọi đến hoặc tin nhắn đến thì Module Sim800C thể hiện như thế nào? kết nối GPRS?...
Cách nhanh nhất để bạn làm việc đó là các bạn test Module Sim800C với máy tính. Khi các bạn đã hiểu được Module Sim800C hoạt động như thế nào, cách điều khiển nó ra sao? thì việc lập trình một mạch MCU với Module Sim800c chỉ còn ở việc học lập trình truyền nhận giữ liệu UART mà thôi. Các bạn có thể mất vài ngày, hoặc 1 tuần nhưng các bạn sẽ làm được việc đó.
Trong bài viết này mình chỉ có thể hướng dẫn các bạn cách test Module Sim800C với máy tính, phần việc còn lại các bạn sẽ phải tự làm.
1 Các lệnh AT cơ bản hay sử dụng
Các lệnh chung
Mô tả : Kiểm tra đáp ứng của Module Sim 900A, nếu trả về OK thì Module hoạt động
Mô tả : Chế độ echo là chế độ phản hồi dữ liệu truyền đến của module Sim 900A,
x = 1 bật chế độ echo , x = 0 tắt chế độ echo (bạn nên tắt chế độ này khi giao tiếp với vi điều khiển)
Lệnh: AT+IPR=[baud rate] <CR><LF>
Mô tả : cài đặt tốc độ giao tiếp dữ liệu với Module Sim800C, chỉ cài được các tốc độ sau
baud rate : 0 (auto), 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200
Mô tả : lưu lại các lệnh đã cài đặt
Các lệnh điều khiển cuộc gọi
Mô tả : Hiển thị thông tin cuộc gọi đến
Lệnh: ATD[Số_điện_thoại]; <CR><LF>
Mô tả : Lệnh thực hiện cuộc gọi
Mô tả : Lệnh thực hiện kết thúc cuộc gọi , hoặc cúp máy khi có cuộc gọi đến
Mô tả : Lệnh thực hiện chấp nhận khi có cuộc gọi đến
Các l ệnh điều khiển tin nhắn
Mô tả : Lệnh đưa SMS về chế độ Text , phải có lệnh này mới gửi nhận tin nhắn dạng Text
Lệnh: AT+CMGS=”Số_điện _thoại”< CR>< LF>
Đợi đến khi có ký tự ‘> ’ được gửi về thì đánh nối dung tin nhắn
Gửi mã Ctrl+Z hay 0x1A để kết thúc nội dung và gửi tin nhắn
Mô tả : Lệnh gửi tin nhắn
x là địa chỉ tin nhắn cần đọc
Mô tả : Đọc một nhắn vừa gửi đến, lệnh được trả về nội dung tin nhắn, thông tin người gửi, thời gian gửi
Lệnh: AT+CMGDA="DEL ALL" <CR><LF>
Mô tả : Xóa toàn bộ tin nhắn trong các hộp thư
Lệnh: AT+CNMI =2,2<CR><LF>
Mô tả : Hiển thị nội dung tin nhắn ngay khi có tin nhắn đến
Chú ý: sau mỗi lệnh các bạn thường thấy <CR><LF> thực chất nó là hai mã điều khiển <CR> tương ứng 0x0D(hexa) ,<LF> tương ứng 0x0A(hexa) Nếu các bạn test trên máy tính sau mỗi lệnh các bạn chỉ cần ấn phím Enter
2 Giao tiếp Module Sim800C với máy tính để thực hiện chức năng Call/SMS
VIDEO
3 Giao tiếp Module Sim800C với máy tính để truyền nhận dữ liệu với server thông qua GPRS.
(Bổ xung thêm cho video: bạn phải tắt tường lửa windows của máy tính làm server thì module sim mới có thể kết nối được với server)
VIDEO
4 Giao tiếp Module sim800C với Arduino
Code tham khảo, điểu khiển bật tắt thiết bị băng tin nhắn
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Bai toan : nhan tin dieu khien bat tat bong den
// Neu noi dung tin nhan la : LAMP_ON thi bat bong den
// Neu noi dung tin nhan la : LAMP_OFF thi tat bong den
const String myphone = "01689951815"; // Thay so cua ban vao day
const int PWR_KEY = 9; // Chan so 9 arduino uno dung lam chan dieu khien bat tat module sim800C
const int RELAY = 12; // Chan so 12 arduino uno dung lam chan dieu khien dong/cat Relay de On/Off den
String RxBuff = ""; // Khai bao bo dem nhan du lieu
// Tat ca du lieu nhan ve tu module sim deu duoc luu trong day
int Index_Lamp_On = -1; // vi tri cua chuoi "LAMP_ON"
int Index_Lamp_Off = -1; // vi tri cua chuoi "LAMP_OFF"
void Gsm_Power_On(); // Bat module Sim800C
void Gsm_Init(); // Cau hinh Module Sim800C
void Gsm_MakeCall(String phone); // Ham goi dien
void Gsm_MakeSMS(String phone,String content); // Ham nhan tin
void setup() {
Serial.begin(9600); // Cau hinh UART de giao tiep module Sim800C
digitalWrite(RELAY, LOW); // Khai bao chan de dieu khien dong cat RELAY
pinMode(RELAY, OUTPUT);
digitalWrite(PWR_KEY, LOW); // Khai bao chan PWR_KEY de dieu khien bat bat module Sim800C
pinMode(PWR_KEY, OUTPUT);
delay(1000);
Gsm_Power_On(); // Bat Module Sim800C
delay(50000); // Đợi module sim kiểm tra kết nối mạng GSM
Gsm_Init(); // Cau hinh module Sim800C
Gsm_MakeCall(myphone); // Test cuoc goi
Gsm_MakeSMS(myphone,"I'm a test"); // Test tin nhan
}
void loop() {
delay(1000); // tre 1s
Index_Lamp_On = RxBuff.indexOf("LAMP_ON"); // Tim vi tri cua chuoi "LAMP_ON" trong bo dem nhan RxBuff
if(Index_Lamp_On >= 0) // Neu tim thay "LAMP_ON" trong RxBuff
{
Index_Lamp_On = -1; //
RxBuff = ""; // Xoa bo dem
digitalWrite(RELAY, HIGH); // Dong Relay de bat den // Bat bong den
}
else
{ // Neu khong tim thay "LAMP_ON" thi tiep tuc tim "LAMP_OFF"
Index_Lamp_Off = RxBuff.indexOf("LAMP_OFF"); // Tim vi tri cua chuoi "LAMP_OFF" trong bo dem nhan RxBuff
if(Index_Lamp_Off >= 0) // Neu tim thay "LAMP_OFF" trong RxBuff
{
Index_Lamp_Off = -1; //
RxBuff = ""; // Xoa bo dem
digitalWrite(RELAY, LOW); // Cat Relay de tat den
}
}
}
void serialEvent() { // Chuong trinh ngat nhan du lieu
while (Serial.available()) { // Doi den khi co du lieu nhan ve
// get the new byte:
char inChar = (char)Serial.read(); // Doc mot byte du lieu vua nhan ve
RxBuff += inChar; // Ghi byte do vao bo dem nhan RxBuff (ta se xu ly RxBuff trong vong loop())
if(RxBuff.length()>= 128) // Neu bo dem qua dai thi xoa bo dem di
{
RxBuff = "";
}
}
}
void Gsm_Power_On()
{
digitalWrite(PWR_KEY, HIGH); // Du chan PWR_KEY len cao it nhat 1s
delay(1500); // o day ta de 1,5s
digitalWrite(PWR_KEY, LOW); // Du chan PWR_KEY xuong thap
delay(100); // cac ban xem trong Hardware designed sim800C de hieu ro hon
}
void Gsm_Init()
{
Serial.println("ATE0"); // Tat che do phan hoi (Echo mode)
delay(2000);
Serial.println("AT+IPR=9600"); // Dat toc do truyen nhan du lieu 9600 bps
delay(2000);
Serial.println("AT+CMGF=1"); // Chon che do TEXT Mode
delay(2000);
Serial.println("AT+CLIP=1"); // Hien thi thong tin nguoi goi den
delay(2000);
Serial.println("AT+CNMI=2,2"); // Hien thi truc tiep noi dung tin nhan
delay(2000);
}
void Gsm_MakeCall(String phone)
{
Serial.println("ATD" + phone + ";"); // Goi dien
delay(10000); // Sau 10s
Serial.println("ATH"); // Ngat cuoc goi
delay(2000);
}
void Gsm_MakeSMS(String phone,String content)
{
Serial.println("AT+CMGS=\"" + phone + "\""); // Lenh gui tin nhan
delay(3000); // Cho ky tu '>' phan hoi ve
Serial.print(content); // Gui noi dung
Serial.print((char)26); // Gui Ctrl+Z hay 26 de ket thuc noi dung tin nhan va gui tin di
delay(5000); // delay 5s
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
VIDEO