Lập trình sử dụng module SIM để gửi tin nhắn và gọi điện
Chuẩn bị
- Mạch arduino, esp8266 hoặc esp32,… có hỗ trợ Arduino IDE
- Module SIM A7680C, A7670C, A7600C, SIM7600CE
- Mạch hạ áp LM2596 hoặc tương đương (Đối với A7680C không tích hợp mạch hạ áp)
- Nguồn 6-15V 10W
- Jack DC
- Dây Bus và dây điện
- SIM điện thoại di động có thể gọi và gửi tin nhắn
- Phần mềm Arduino IDE
Các module 4G thông dụng xem tại đây: Tổng hợp các loại module 4G 5G NB-IoT thông dụng
Kết nối
- Đối với module A7680C (Kết nối tương tự SIM800L)
- Đối với các dòng SIM A7670C, A7600C, SIM7600CE không cần mạch LM2596 hạ áp và có thể kết nối trực tiếp nguồn vào với module SIM (module SIM đã tích hợp mạch hạ áp DCDC)
Code mẫu(Đây là code mẫu giao tiếp với ESP32 bạn có thể điều chỉnh để phù hợp với Arduino):
#include <HardwareSerial.h>
#define simSerial Serial2 //Sửa cho phù hợp với module đang dùng
#define MCU_SIM_BAUDRATE 115200
#define MCU_SIM_TX_PIN 17 //Sửa cho phù hợp với module đang dùng
#define MCU_SIM_RX_PIN 16 //Sửa cho phù hợp với module đang dùng
#define MCU_SIM_EN_PIN 15 //Sửa cho phù hợp với module đang dùng
// Thay bằng thông tin WiFi của bạn
const char* ssid = "..."; // Tên mạng WiFi
const char* password = "..."; // Mật khẩu WiFi
// Please update number before test
#define PHONE_NUMBER "+8498*****" // Nhập SĐT của bạn
void sim_at_wait()
{
delay(100);
while (simSerial.available()) {
Serial.write(simSerial.read());
}
}
bool sim_at_cmd(String cmd){
simSerial.println(cmd);
sim_at_wait();
return true;
}
bool sim_at_send(char c){
simSerial.write(c);
return true;
}
void sent_sms()
{
sim_at_cmd("AT+CMGF=1");
String temp = "AT+CMGS=\"";
temp += (String)PHONE_NUMBER;
temp += "\"";
sim_at_cmd(temp);
sim_at_cmd("ESP32-SIM7600X From linhkienthuduc.com");
// End charactor for SMS
sim_at_send(0x1A);
}
void call()
{
String temp = "ATD";
temp += PHONE_NUMBER;
temp += ";";
sim_at_cmd(temp);
delay(20000);
// Hang up
sim_at_cmd("ATH");
}
void setup()
{
/* Power enable */
pinMode(MCU_SIM_EN_PIN,OUTPUT);
digitalWrite(MCU_SIM_EN_PIN,LOW); //Sửa cho phù hợp với module đang dùng
delay(20);
Serial.begin(115200);
Serial.println("\n\n\n\n-----------------------\nSystem started!!!!");
// Delay for power on
delay(12000);
// Đặt ESP32 ở chế độ Station (kết nối với WiFi)
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.print("Connecting to ");
Serial.println(ssid);
// Chờ kết nối WiFi
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// Khi kết nối thành công
Serial.println("");
Serial.println("WiFi connected!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP()); // Hiển thị địa chỉ IP
Serial.print("RSSI: ");
Serial.println(WiFi.RSSI()); // Hiển thị cường độ tín hiệu (dBm)
Serial.print("MAC Address: ");
Serial.println(WiFi.macAddress()); // Hiển thị địa chỉ MAC
simSerial.begin(MCU_SIM_BAUDRATE, SERIAL_8N1, MCU_SIM_RX_PIN, MCU_SIM_TX_PIN);
// Check AT Command
Serial.println("Checking AT command...");
sim_at_cmd("AT");
// Product infor
sim_at_cmd("ATI");
// Check SIM Slot
sim_at_cmd("AT+CPIN?");
// Check Signal Quality
sim_at_cmd("AT+CSQ");
sim_at_cmd("AT+CIMI");
if (WiFi.status() == WL_CONNECTED) {
Serial.println("Still connected to WiFi");
Serial.print("RSSI: ");
Serial.println(WiFi.RSSI());
} else {
Serial.println("WiFi disconnected! Attempting to reconnect...");
WiFi.reconnect();
}
sent_sms();
// Delay 5s
delay(5000);
call();
}
void loop()
{
if (Serial.available()){
char c = Serial.read();
simSerial.write(c);
}
sim_at_wait();
call();
delay(10000);
// Chuyển tiếp dữ liệu từ module SIM tới máy tính
if (simSerial.available()) {
char c = simSerial.read();
Serial.write(c); // Gửi dữ liệu từ module SIM về PC
}
}
No Comments