- 29a Bùi Xuân Phái, P.Tây Thạnh, Quận Tân Phú, TPHCM
- linhkienduchuy2018@gmail.com
- TƯ VẤN, GIẢI ĐÁP, HƯỚNG DẪN, MUA HÀNG (ZALO): 0966515049 - 0942954739
Giao miễn phí chuyển phát nhanh trong nội thành TPHCM đối với đơn hàng trên 1 triệu đồng
Giảm 5k cho đơn hàng trên 300k đồng
Giảm 10k cho đơn hàng trên 500k đồng
Giảm 15k hoặc freeship chuyển phát nhanh cho đơn hàng trên 1tr đồng
Giảm 25.000đ hoặc freeship cho đơn hàng trên 2tr đồng.
SIM808 được tích hợp GPS/GSM/GPRS/BLUETOOTH trên cùng 1 module, vì lẽ đó khi chỉ cần sử dụng 1 module này ta có thể : nhắn tin, nghe, gọi, biết được vị trí (GPS), truyền nhận dữ liệu qua bluetooth...vậy thì quá tuyệt vời, thay vì phải sử dụng 3 module ( 1 GSM, 1 GPS, 1 BLUETOOTH) để có cùng chức năng như trên.
TÀI LIỆU KỸ THUẬT MODULE SIM808:
+ Nguồn cấp: 5 -26VDC. Được tích hợp IC ổn áp nên dải điện áp đầu vào rộng.
+ Có hỗ trợ chân cấp nguồn pin Lithium - Ion: 3.5 - 4.2V.
+ Chức năng truyền nhận dữ liệu qua bluetooth.
+ Tích hợp 2 jack phone + micro trên cùng board mạch để tiện cho việc nghe thoại.
+ Tích hợp 3 ăng ten cho các chức năng: GSM/GPRS; GPS; BLUETOOTH
+ Hỗ trợ đầy đủ các sim 2G, 3G, 4G
+ Gửi và nhận dữ liệu GPRS (TCP / IP, HTTP, v.v.).
+ Nhận dữ liệu GPS và dữ liệu A-GPS.
+ Gửi và nhận tin nhắn SMS.
+ Thực hiện cuộc gọi, trả lời tin nhắn tự động.
SƠ ĐỒ GIAO TIẾP ARDUINO VỚI SIM808:
SƠ ĐỒ GIAO TIẾP USB-TTL VỚI SIM808:
TẬP LỆNH AT GIAO TIẾP CƠ BẢN VỚI MODULE SIM:
LỆNH KIỂM TRA MODULE SIM HOẠT ĐỘNG:
Lệnh: AT<CR><LF>
MODULE SIM Trả lời: OK
Mô tả : Kiểm tra đáp ứng , nếu trả về OK thì Module hoạt động tốt
LỆNH KIỂM TRA TỐC ĐỘ BAUD GIAO TIẾP VỚI MODULE SIM:
Lệnh: AT+IPR=[baud rate]<CR><LF>
Trả lời: OK
Mô tả : cài đặt tốc độ giao tiếp dữ liệu với module SIM, chỉ cài được các tốc độ sau
Baud rate : 0 (auto), 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200
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
Mô tả : Lệnh thực hiện cuộc gọi, với XXXXX: là số điện thoại cần 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
XXXXXXX: là số điện thoại cần gửi tin nhắn.
Đợ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
Mô tả : Xóa toàn bộ tin nhắn trong các hộp thư
Mô tả : Hiển thị nội dung tin nhắn ngay khi có tin nhắn đến
TẬP LỆNH AT GPS GIAO TIẾP MODULE SIM808:
AT + CGPSPWR=1<CR><LF> lệnh bật/tắt nguồn cho GPS. Trả về OK nếu mạch chấp nhận.
AT + CGPSPWR=?<CR><LF> lệnh kiểm tra các chế độ hiện có của GPS. Trả về giá trị (0-1)
AT + CGPSPWR?<CR><LF> lệnh kiểm tra GPS đang bật/ tắt trả về tín hiệu
0: đang tắt GPS, 1: đang bật GPS.
AT+ CGPSSTATUS?<CR><LF> lệnh trả về trạng thái hiện tại của chân GPS CONTROL PIN. tín hiệu trả về:
( Location Not Fix ) Hệ thống GPS chưa có dữ liệu vị trí chính xác
( Location 3D Fix ) Hệ thống GPS đã xác định được vị trí với độ chính xác 3 chiều (vĩ độ, kinh độ, và độ cao)
( Location 2D Fix ) GPS đã xác định được vị trí với độ chính xác 2 chiều (vĩ độ và kinh độ)
AT + CGPSINF=0<CR><LF> để nhận thông tin vị trí GPS dưới dạng chuỗi dữ liệu
CODE GIAO TIẾP ARDUINO VỚI SIM808:
#include <SoftwareSerial.h>
#include <TinyGPS++.h>
boolean GetGPS_flag = false;
boolean Location_isValid_flag = false;
boolean Password_flag = false;
String value;
String phone_number;
String message_text;
String password = "Hello";
String Message;
#define PIN_TX 10
#define PIN_RX 11
SoftwareSerial mySerial(PIN_TX, PIN_RX);
// The TinyGPS++ object
TinyGPSPlus gps;
String SIM808(String value)
{
String Out;
mySerial.println(value);
delay(10);
while (mySerial.available()) {
Out = (mySerial.readString());
}
Out.trim();
Out.remove(0, value.length() + 3);
return Out;
}
String SIM808(String value, int count) {
String Out;
mySerial.println(value);
delay(10);
while (mySerial.available()) {
Out = (mySerial.readString());
}
Out.trim();
Out.remove(0, value.length() + 3 + count);
return Out;
}
void setup() {
mySerial.begin(9600);
Serial.begin(9600);
}
void loop() {
//ĐOẠN CHƯƠNG TRÌNH NHẬN TIN NHẮN SMS
Serial.println("Start\n");
Serial.println("Power Down The GPS");
SIM808("AT+CGPSPWR=0");
Serial.println("Check AT Connection");
value = SIM808("AT");
Serial.println(value);
Serial.println("");
Serial.println("Put The Module in SMS Text Mode");
SIM808("AT+CMGF=1");
delay(1000);
Serial.println("Delete All Previous Messages");
SIM808("AT+CMGD=1,4");
delay(2000);
value = SIM808("AT+CMGL=\"REC UNREAD\"");
value = SIM808("AT+CMGL=\"REC UNREAD\"");
value = SIM808("AT+CMGL=\"REC UNREAD\"");
do {
delay(2000);
Serial.println("No new Messages Received");
Serial.println("Check for New Messages!");
value = SIM808("AT+CMGL=\"REC UNREAD\"");
//Serial.println("end");
} while (value == "OK");
SIM808("AT+CMGL=\"REC UNREAD\"");
Serial.println("Message Recieved");
value = SIM808("AT+CMGL=\"ALL\"");
Serial.println(value);
phone_number = value;
phone_number.remove(0, 20);
phone_number.remove(15, phone_number.length());
message_text = value;
message_text.remove(0, 63);
message_text.remove(message_text.length() - 6, message_text.length());
Serial.println("Phone Number:");
Serial.println(phone_number);
Serial.println("Message Text:");
Serial.println(message_text);
if (message_text == password) {
GetGPS_flag = true;
Password_flag = true;
Serial.println("password is correct!");
}
//KẾT THÚC
//***********ĐOẠN CHƯƠNG TRÌNH NHẬN DỮ LIỆU GPS*********
if (GetGPS_flag) {
do {
Serial.println("Power Down The GPS");
SIM808("AT+CGPSPWR=0");
//Serial.println("end");
Serial.println("Check The GPS Power");
value = SIM808("AT+CGPSPWR?");
value.remove(11, 17);
Serial.println(value);
//Serial.println("end");
Serial.println("Power Up The GPS");
SIM808("AT+CGPSPWR=1");
//Serial.println("end");
Serial.println("Disable The GPS Output");
SIM808("AT+CGPSOUT=0");
//Serial.println("end\n");
Serial.println("Wait For The GPS To Find Location");
while (!SIM808("AT+CGPSSTATUS?" , 13).startsWith("Location 3D Fix")) {
Serial.println("Location Not Fixed Yet, Please Wait!");
delay(2000);
}
Serial.println("Location Found!");
Serial.println("end\n");
//Get and Analyse The GPS Output
Serial.println("Get and Analyse The GPS Output");
String Out = "";
mySerial.println("AT+CGPSOUT=2");
delay(10);
while (mySerial.available()) {
mySerial.readStringUntil('\n');
mySerial.readStringUntil('\n');
Out = (mySerial.readStringUntil('\n')); Out += "\r\n";
}
mySerial.println("AT+CGPSOUT=0");
delay(100);
mySerial.println("AT+CGPSOUT=32");
delay(10);
while (mySerial.available()) {
mySerial.readStringUntil('\n');
mySerial.readStringUntil('\n');
Out += (mySerial.readStringUntil('\n')); Out += "\r\n";
}
mySerial.println("AT+CGPSOUT=0");
Out.trim();
Serial.println(Out);
Serial.println("");
//GPS Output Analized
int buffint = Out.length();
char buff[buffint];
Out.toCharArray(buff, buffint);
const char *gpsStream = buff;
while (*gpsStream)
if (gps.encode(*gpsStream++))
displayInfo();
Serial.println("");
Serial.println("");
delay(100);
if (gps.location.isValid())
{
Location_isValid_flag = true;
Message = String(gps.location.lat(), 6);
Message += ",";
Message += String(gps.location.lng(), 6);
Message += " ";
Serial.println(Message);
}
} while (!Location_isValid_flag);
}
//******************* KẾT THÚC NHẬN GPS *******************
//******************* SENDING SMS *******************
Serial.println("Start Sending The SMS\n");
Serial.println("Sending The SMS to");
Serial.println(phone_number);
SIM808("AT+CMGS=" + phone_number );
delay(200);
if (Password_flag == true) {
mySerial.println("Open This Link:");
mySerial.print("https://www.google.com/maps/place/");
SIM808(Message);
}
else {
mySerial.println("Password Incorrect! ");
}
Serial.println("Message Sent!");
Serial.println("Delete All Previous Messages");
SIM808("AT+CMGD=1,4");
delay(2000);
//******************* SENDING SMS END*******************
//reinitializing flags
GetGPS_flag = false;
Location_isValid_flag = false;
Password_flag = false;
}
void displayInfo()
{
Serial.print(F("Location: "));
if (gps.location.isValid())
{
Serial.print(gps.location.lat(), 6);
Serial.print(F(","));
Serial.print(gps.location.lng(), 6);
}
else
{
Serial.print(F("INVALID"));
}
Serial.println();
}
char * floatToString(char * outstr, double val, byte precision, byte widthp) {
char temp[16];
byte i;
// compute the rounding factor and fractional multiplier
double roundingFactor = 0.5;
unsigned long mult = 1;
for (i = 0; i < precision; i++)
{
roundingFactor /= 10.0;
mult *= 10;
}
temp[0] = '\0';
outstr[0] = '\0';
if (val < 0.0) {
strcpy(outstr, "-\0");
val = -val;
}
val += roundingFactor;
strcat(outstr, itoa(int(val), temp, 10)); //prints the int part
if ( precision > 0) {
strcat(outstr, ".\0"); // print the decimal point
unsigned long frac;
unsigned long mult = 1;
byte padding = precision - 1;
while (precision--)
mult *= 10;
if (val >= 0)
frac = (val - int(val)) * mult;
else
frac = (int(val) - val ) * mult;
unsigned long frac1 = frac;
while (frac1 /= 10)
padding--;
while (padding--)
strcat(outstr, "0\0");
strcat(outstr, itoa(frac, temp, 10));
}
// generate space padding
if ((widthp != 0) && (widthp >= strlen(outstr))) {
byte J = 0;
J = widthp - strlen(outstr);
for (i = 0; i < J; i++) {
temp[i] = ' ';
}
temp[i++] = '\0';
strcat(temp, outstr);
strcpy(outstr, temp);
}
return outstr;
}
Bình luận