Module GSM SIM900 là chip GSM/GPRS quad-band do SIMCom sản xuất, hỗ trợ đầy đủ bốn băng tần 850/900/1800/1900 MHz, giao tiếp với vi điều khiển qua cổng UART bằng tập lệnh AT Commands. Module này được tích hợp sẵn trên các dạng Shield Arduino hoặc breakout board rời, cho phép lập trình viên và kỹ sư nhúng xây dựng hệ thống kết nối di động mà không cần hạ tầng Wi-Fi hay cáp mạng. Điện áp hoạt động từ 3.4V đến 4.4V, kích thước nhỏ gọn và giá thành thấp khiến SIM900 trở thành lựa chọn phổ biến cho các dự án IoT thế hệ đầu.
Module GSM SIM900 hỗ trợ đầy đủ bốn tính năng cốt lõi theo thứ tự: gửi và nhận SMS, thực hiện và nhận cuộc gọi thoại, kết nối dữ liệu GPRS và điều khiển thiết bị từ xa qua cả hai kênh SMS lẫn Internet. Mỗi tính năng được kích hoạt thông qua tập lệnh AT Commands gửi qua cổng nối tiếp UART, giúp quá trình lập trình trở nên đơn giản và có thể tích hợp với Arduino, ESP32, STM32 hay bất kỳ vi điều khiển nào có cổng Serial. Để đạt hiệu quả tốt nhất, người dùng cần nắm rõ từng nhóm lệnh AT tương ứng với từng tính năng riêng biệt.
Bài viết dưới đây đi sâu vào từng tính năng theo đúng thứ tự trên tiêu đề, đồng thời mở rộng sang phần so sánh SIM900 với các module GSM thế hệ mới và tình trạng tương thích mạng 2G tại Việt Nam, giúp bạn đưa ra quyết định lựa chọn phù hợp cho dự án dài hạn.
Module GSM SIM900 là gì?

Module GSM SIM900 là module thông tin di động tích hợp chip SIM900 do SIMCom Wireless Solutions sản xuất, hỗ trợ chuẩn GSM/GPRS quad-band, giao tiếp với vi điều khiển qua UART bằng tập lệnh AT Commands, điện áp hoạt động từ 3.4V đến 4.4V.
Để hiểu rõ hơn về cấu tạo và thông số của Module GSM SIM900, phần dưới đây trình bày chi tiết từng thành phần phần cứng và đặc tính kỹ thuật cốt lõi:
Cấu tạo phần cứng của Module GSM SIM900
Module GSM SIM900 bao gồm các thành phần phần cứng chính là chân giao tiếp UART (TX/RX), chân cấp nguồn, khe cắm SIM dạng Micro hoặc Standard SIM, và đầu nối ăng-ten ngoài dạng SMA hoặc IPEX.
Cụ thể hơn, phần cứng SIM900 được bố trí như sau:
- Chân UART (TX/RX): Đây là giao diện giao tiếp chính giữa SIM900 và vi điều khiển. Tốc độ baud mặc định thường là 9600 hoặc 115200 bps, có thể cấu hình qua lệnh AT+IPR.
- Chân nguồn (VCC và GND): Module yêu cầu điện áp ổn định trong khoảng 3.4V đến 4.4V. Trong quá trình truyền dữ liệu hoặc thực hiện cuộc gọi, dòng điện đỉnh có thể đạt 2A, do đó nguồn cấp cần đủ dòng.
- Khe cắm SIM: Chấp nhận SIM 2G của tất cả nhà mạng hỗ trợ băng tần GSM 850/900/1800/1900 MHz.
- Đầu nối ăng-ten: Ăng-ten ngoài giúp cải thiện cường độ tín hiệu, đặc biệt quan trọng khi triển khai trong nhà hoặc vùng phủ sóng yếu.
- Nút PWRKEY (Power Key): Dùng để bật/tắt module bằng cách kéo chân này xuống GND trong khoảng 1 giây.
Thông số kỹ thuật cốt lõi của Module GSM SIM900
Module GSM SIM900 hoạt động ở bốn băng tần 850/900/1800/1900 MHz, điện áp từ 3.4V đến 4.4V, tốc độ GPRS tối đa 85.6 kbps tải xuống và 42.8 kbps tải lên theo chuẩn Class 10.
Bảng dưới đây tóm tắt các thông số kỹ thuật quan trọng nhất của SIM900, giúp bạn đối chiếu nhanh khi lựa chọn module cho dự án:
| Thông số | Giá trị |
|---|---|
| Chip lõi | SIMCom SIM900 / SIM900A |
| Loại module | GSM/GPRS Quad-Band Module (2G) |
| Chuẩn mạng | GSM / GPRS (2G) |
| Băng tần | 850 / 900 / 1800 / 1900 MHz |
| Class công suất RF | Class 4 (2W @ 850/900 MHz), Class 1 (1W @ 1800/1900 MHz) |
| Tốc độ GPRS | Tối đa 85.6 kbps (download) / 42.8 kbps (upload), Class 10 |
| Điện áp hoạt động (chip/module) | 3.2V – 4.8V DC (typical 4.0V) |
| Điện áp module breakout | 5V (qua mạch ổn áp onboard hoặc VCC5) |
| Dòng tiêu thụ đỉnh | ~2A (khi phát sóng GSM) |
| Dòng standby | ~1–10 mA (sleep mode, tùy chế độ) |
| Giao tiếp | UART (TTL), I2C (một số module mở rộng) |
| Mức logic UART | 2.8V (chip) / 3.3V–5V (module có level shifting) |
| Giao thức điều khiển | AT Commands (GSM 07.07 / 07.05 + SIMCom extended) |
| Chức năng | SMS, Voice call, GPRS data, USSD, Fax |
| TCP/IP stack | Có tích hợp (trên firmware SIMCom) |
| Khe SIM | SIM 1.8V / 3V |
| Antenna | SMA / IPX tùy module |
| Audio | MIC + Speaker (nhiều board breakout hỗ trợ) |
| Reset | Có (hardware reset pin) |
| ESD protection | Có trên module breakout phổ biến |
| Nhiệt độ hoạt động | -40°C đến +85°C |
| Kích thước chip | 24 × 24 × 3 mm |
| Kích thước module board | ~50 × 50 mm (tùy phiên bản Mini V4.0) |
| Tương thích | Arduino, STM32, Raspberry Pi, MCU 3.3V/5V |
Hai dạng phổ biến: Module SIM900 rời và Shield SIM900
Module GSM SIM900 tồn tại dưới hai dạng chính là breakout board (module rời) phù hợp cho mọi vi điều khiển và Shield SIM900 gắn trực tiếp lên Arduino UNO/Mega.
Cụ thể hơn, sự khác biệt giữa hai dạng này ảnh hưởng đến cách kết nối và triển khai:
- Module SIM900 rời (Breakout Board): Kích thước nhỏ, kết nối qua dây jumper đến bất kỳ vi điều khiển nào (Arduino, ESP32, STM32, Raspberry Pi). Người dùng cần tự cấp nguồn riêng và kết nối đúng mức logic điện áp.
- Shield SIM900 (Arduino Shield): Gắn trực tiếp lên header của Arduino UNO hoặc Mega, chọn chân UART qua jumper (phần cứng hoặc phần mềm serial). Tiện lợi hơn cho người mới bắt đầu, tuy nhiên kích thước lớn hơn và giá thành cao hơn.
Module GSM SIM900 có thể gửi và nhận SMS không?

Có, Module GSM SIM900 hỗ trợ đầy đủ chức năng gửi và nhận SMS qua lệnh AT, bao gồm cả Text Mode đơn giản và PDU Mode cho tin nhắn mã hóa, hoạt động ổn định với tất cả nhà mạng GSM 2G tại Việt Nam.
Để khai thác tính năng SMS của SIM900 một cách hiệu quả, phần dưới đây hướng dẫn chi tiết quy trình gửi SMS và nhận SMS với các lệnh AT cụ thể:
Cách gửi SMS bằng Module GSM SIM900 như thế nào?
Gửi SMS bằng Module GSM SIM900 thực hiện theo 4 bước chính: khởi tạo module, chọn Text Mode bằng AT+CMGF=1, chỉ định số điện thoại bằng AT+CMGS, nhập nội dung rồi kết thúc bằng ký tự Ctrl+Z (mã hex 0x1A).
Cụ thể hơn, quy trình gửi SMS hoàn chỉnh được thực hiện theo các bước sau:
Bước 1: Kiểm tra module đã sẵn sàng
“`
AT → Module phản hồi OK
AT+CREG? → Kiểm tra đăng ký mạng, kết quả mong đợi: +CREG: 0,1
AT+CSQ → Kiểm tra cường độ tín hiệu (giá trị >10 là đủ dùng)
“`
Bước 2: Chọn chế độ Text Mode
“`
AT+CMGF=1 → Chọn Text Mode (dễ sử dụng hơn PDU Mode)
“`
Bước 3: Nhập số điện thoại đích
“`
AT+CMGS=”+84912345678″ → Nhập số điện thoại có mã quốc gia
“`
Module phản hồi dấu > báo hiệu sẵn sàng nhận nội dung tin nhắn.
Bước 4: Nhập nội dung và gửi
“`
Hello from SIM900 → Nhập nội dung
[Ctrl+Z / 0x1A] → Gửi tin nhắn
“`
Ví dụ code Arduino gửi SMS:
“`cpp
#include <SoftwareSerial.h>
SoftwareSerial sim900(7, 8); // RX, TX
void setup() {
Serial.begin(9600);
sim900.begin(9600);
delay(1000);
sim900.println(“AT+CMGF=1”); // Text Mode
delay(500);
sim900.println(“AT+CMGS=\”+84912345678\””);
delay(500);
sim900.print(“Canh bao: Nhiet do cao!”);
delay(500);
sim900.write(0x1A); // Ctrl+Z để gửi
delay(3000);
}
void loop() {}
“`
Lưu ý về tiếng Việt có dấu: Text Mode mặc định không hỗ trợ Unicode. Để gửi tin nhắn tiếng Việt có dấu, bạn cần chuyển sang chế độ UCS2 với lệnh AT+CSCS=”UCS2″ và mã hóa nội dung sang định dạng UCS2 trước khi gửi. Cách đơn giản hơn là dùng tin nhắn không dấu cho hệ thống cảnh báo tự động.
Xử lý lỗi thường gặp:
- Module không phản hồi AT: Kiểm tra kết nối UART, tốc độ baud, và chân PWRKEY đã khởi động module chưa.
- +CREG: 0,0 (chưa đăng ký mạng): Kiểm tra SIM đã lắp đúng chiều, SIM còn hoạt động và có sóng 2G trong khu vực.
- Lỗi +CMS ERROR: 330: SIM chưa kích hoạt dịch vụ SMS hoặc tín hiệu yếu.
Cách nhận và đọc SMS bằng Module GSM SIM900 như thế nào?
Nhận và đọc SMS bằng Module GSM SIM900 thực hiện bằng cách cấu hình chế độ thông báo AT+CNMI để tự động nhận SMS mới, sau đó đọc bằng AT+CMGL hoặc AT+CMGR theo vị trí lưu trong bộ nhớ SIM.
Dưới đây là các lệnh AT cần thiết để quản lý SMS đến:
Cấu hình thông báo SMS mới tự động:
“`
AT+CNMI=2,2,0,0,0
“`
Với cấu hình này, mỗi khi có SMS mới, module sẽ tự động xuất nội dung tin nhắn lên cổng Serial mà không cần hỏi thủ công. Đây là cách phổ biến nhất trong các hệ thống điều khiển từ xa.
Đọc tất cả tin nhắn trong bộ nhớ:
“`
AT+CMGL=”ALL” → Liệt kê tất cả tin nhắn (đã đọc và chưa đọc)
AT+CMGL=”REC UNREAD” → Chỉ liệt kê tin chưa đọc
“`
Đọc tin nhắn tại vị trí chỉ định:
“`
AT+CMGR=1 → Đọc tin nhắn tại vị trí số 1 trong bộ nhớ SIM
“`
Kết quả trả về bao gồm số điện thoại người gửi, thời gian nhận và nội dung tin nhắn.
Xóa tin nhắn sau khi xử lý:
“`
AT+CMGD=1 → Xóa tin nhắn tại vị trí 1
AT+CMGD=1,4 → Xóa tất cả tin nhắn trong bộ nhớ
“`
Việc xóa tin nhắn định kỳ rất quan trọng vì bộ nhớ SIM thường chỉ lưu được 20 đến 30 tin nhắn. Nếu bộ nhớ đầy, module sẽ không nhận được tin nhắn mới.
Lấy số điện thoại người gửi từ chuỗi phản hồi:
Khi sử dụng AT+CNMI, module trả về chuỗi dạng:
“`
+CMT: “+84912345678″,””,”24/01/15,10:30:00+28″
BAT
“`
Vi điều khiển cần phân tích chuỗi này để lấy số điện thoại và nội dung lệnh tương ứng.
Module GSM SIM900 có hỗ trợ gọi điện thoại không?

Có, Module GSM SIM900 hỗ trợ đầy đủ cuộc gọi thoại (voice call) và cuộc gọi dữ liệu (data call) thông qua tập lệnh AT, tuy nhiên cần bổ sung loa và micro để truyền nhận âm thanh thực tế.
Để triển khai tính năng gọi điện trên SIM900, phần dưới đây hướng dẫn cách thực hiện cuộc gọi ra và nhận cuộc gọi đến kèm mã lệnh AT cụ thể:
Cách thực hiện cuộc gọi ra (outgoing call) với Module GSM SIM900?
Thực hiện cuộc gọi ra với Module GSM SIM900 bằng lệnh ATD theo sau là số điện thoại có mã quốc gia và dấu chấm phẩy, sau đó dùng ATH để kết thúc cuộc gọi khi cần.
Quy trình thực hiện cuộc gọi ra hoàn chỉnh như sau:
Bước 1: Quay số điện thoại
“`
ATD+84912345678; → Gọi đến số +84912345678 (dấu ; ở cuối = voice call)
“`
Dấu chấm phẩy (;) ở cuối lệnh ATD là bắt buộc để chỉ định đây là cuộc gọi thoại. Nếu không có dấu chấm phẩy, module sẽ cố thực hiện cuộc gọi dữ liệu (data call).
Bước 2: Kiểm tra trạng thái cuộc gọi
“`
AT+CLCC → Liệt kê trạng thái tất cả cuộc gọi hiện tại
“`
Kết quả trả về bao gồm chỉ số cuộc gọi, hướng (gọi ra/vào), trạng thái (đang đổ chuông, đang kết nối…) và số điện thoại.
Bước 3: Điều chỉnh âm lượng loa
“`
AT+CLVL=8 → Đặt âm lượng loa (0–9, mặc định thường là 5)
“`
Bước 4: Kết thúc cuộc gọi
“`
ATH → Cúp máy, kết thúc cuộc gọi
“`
Ví dụ ứng dụng thực tế: Hệ thống cảnh báo trộm tự động gọi điện cho chủ nhà khi cảm biến chuyển động kích hoạt. Vi điều khiển sẽ gửi lệnh ATD đến SIM900, đợi tín hiệu kết nối, phát âm thanh cảnh báo qua loa, sau đó gửi ATH để kết thúc sau khoảng 30 giây.
Yêu cầu phần cứng bổ sung:
- Loa (Speaker): Kết nối vào chân SPK+ và SPK- của module SIM900 (trở kháng 8 Ohm, công suất tối thiểu 500mW).
- Micro (Microphone): Kết nối vào chân MIC+ và MIC- để truyền âm thanh hai chiều.
Cách nhận cuộc gọi đến (incoming call) với Module GSM SIM900?
Nhận cuộc gọi đến với Module GSM SIM900 bằng cách phát hiện chuỗi RING xuất hiện trên cổng Serial, sau đó gửi lệnh ATA để nghe máy hoặc ATH để từ chối cuộc gọi.
Chi tiết các lệnh xử lý cuộc gọi đến như sau:
Phát hiện cuộc gọi đến:
Khi có cuộc gọi đến, module SIM900 tự động xuất chuỗi RING lên cổng Serial sau mỗi 3 đến 5 giây. Vi điều khiển cần liên tục theo dõi Serial để bắt được chuỗi này.
“`cpp
if (sim900.available()) {
String response = sim900.readString();
if (response.indexOf(“RING”) != -1) {
// Có cuộc gọi đến
sim900.println(“ATA”); // Nghe máy
}
}
“`
Lấy số điện thoại người gọi (Caller ID):
“`
AT+CLIP=1 → Kích hoạt hiển thị số người gọi
“`
Sau khi bật AT+CLIP, khi có cuộc gọi đến, module xuất thêm chuỗi:
“`
+CLIP: “+84912345678″,145,””,,””,0
“`
Vi điều khiển phân tích chuỗi này để lấy số điện thoại người gọi, từ đó quyết định có nghe máy hay không (dựa trên whitelist số điện thoại được phép).
Các lệnh xử lý cuộc gọi đến:
“`
ATA → Nghe máy (Answer)
AT+CHUP → Từ chối cuộc gọi (không nghe)
ATH → Kết thúc cuộc gọi đang diễn ra
“`
Kết nối GPRS trên Module GSM SIM900 hoạt động như thế nào?

GPRS (General Packet Radio Service) trên Module GSM SIM900 là công nghệ truyền dữ liệu gói qua mạng GSM 2G, đạt tốc độ tối đa 85.6 kbps tải xuống theo chuẩn Class 10, cho phép module kết nối Internet để gửi dữ liệu cảm biến và nhận lệnh điều khiển từ xa.
Để khai thác kết nối GPRS trên SIM900, phần dưới đây hướng dẫn cấu hình kết nối và gửi nhận dữ liệu HTTP thực tế:
Cách cấu hình và kết nối GPRS với Module GSM SIM900?
Cấu hình GPRS trên Module GSM SIM900 thực hiện qua chuỗi lệnh AT+SAPBR để thiết lập Bearer Settings, trong đó quan trọng nhất là cấu hình đúng APN của nhà mạng đang sử dụng tại Việt Nam.
Quy trình khởi tạo kết nối GPRS đầy đủ như sau:
Bước 1: Khai báo loại kết nối
“`
AT+SAPBR=3,1,”Contype”,”GPRS”
“`
Bước 2: Cấu hình APN theo nhà mạng
“`
AT+SAPBR=3,1,”APN”,”v-internet” → Viettel
AT+SAPBR=3,1,”APN”,”m3-world” → Vinaphone
AT+SAPBR=3,1,”APN”,”m-wap” → Mobifone
“`
Bảng APN các nhà mạng phổ biến tại Việt Nam (thông tin cần thiết để cấu hình đúng GPRS):
| Nhà mạng | APN | Username | Password |
|---|---|---|---|
| Viettel | v-internet | (để trống) | (để trống) |
| Vinaphone | m3-world | mms | mms |
| Mobifone | m-wap | mms | mms |
| Vietnamobile | 3g.vnmobile.vn | (để trống) | (để trống) |
Bước 3: Mở kết nối Bearer
“`
AT+SAPBR=1,1 → Mở kết nối GPRS
“`
Module cần 5 đến 15 giây để thiết lập kết nối. Nếu không có phản hồi OK, kiểm tra lại APN và cường độ tín hiệu.
Bước 4: Kiểm tra địa chỉ IP
“`
AT+SAPBR=2,1 → Đọc địa chỉ IP được cấp
AT+CIFSR → Cách khác để lấy địa chỉ IP
“`
Nếu kết quả trả về địa chỉ IP hợp lệ (ví dụ: 10.x.x.x hoặc 100.x.x.x), kết nối GPRS đã thành công.
Xử lý lỗi mất kết nối GPRS:
“`
AT+SAPBR=0,1 → Đóng kết nối Bearer
AT+SAPBR=1,1 → Mở lại kết nối
“`
Trong môi trường thực tế, nên lập trình cơ chế tự động kiểm tra và khôi phục kết nối GPRS định kỳ mỗi 30 đến 60 giây.
Cách gửi và nhận dữ liệu HTTP qua GPRS với Module GSM SIM900?
Gửi dữ liệu HTTP qua GPRS với Module GSM SIM900 thực hiện theo chuỗi lệnh AT+HTTPINIT, AT+HTTPPARA, AT+HTTPACTION và AT+HTTPREAD, hỗ trợ cả GET và POST request để tương tác với server hoặc API.
Dưới đây là hướng dẫn chi tiết cho từng loại request:
Gửi HTTP GET Request:
“`
AT+HTTPINIT → Khởi tạo dịch vụ HTTP
AT+HTTPPARA=”CID”,1 → Dùng Bearer ID 1 (đã cấu hình GPRS trước)
AT+HTTPPARA=”URL”,”http://api.thingspeak.com/update?api_key=XXXX&field1=25.5″
AT+HTTPACTION=0 → Thực hiện GET request (0=GET, 1=POST)
AT+HTTPREAD → Đọc phản hồi từ server
AT+HTTPTERM → Kết thúc dịch vụ HTTP
“`
Gửi HTTP POST Request:
“`
AT+HTTPINIT
AT+HTTPPARA=”CID”,1
AT+HTTPPARA=”URL”,”http://yourserver.com/api/data”
AT+HTTPPARA=”CONTENT”,”application/json”
AT+HTTPDATA=50,10000 → Báo sẽ gửi 50 byte dữ liệu, timeout 10 giây
{“temperature”:25.5,”humidity”:60} → Nhập JSON data
AT+HTTPACTION=1 → Thực hiện POST
AT+HTTPREAD
AT+HTTPTERM
“`
Ví dụ thực tế: Gửi dữ liệu nhiệt độ lên ThingSpeak
ThingSpeak là nền tảng IoT miễn phí phổ biến. Chuỗi lệnh để gửi dữ liệu nhiệt độ (25.5°C) từ cảm biến DHT22 lên ThingSpeak:
“`cpp
void sendToThingSpeak(float temperature) {
String url = “http://api.thingspeak.com/update?apikey=YOURAPI_KEY&field1=”;
url += String(temperature);
sim900.println(“AT+HTTPINIT”);
delay(1000);
sim900.println(“AT+HTTPPARA=\”CID\”,1″);
delay(500);
sim900.print(“AT+HTTPPARA=\”URL\”,\””);
sim900.print(url);
sim900.println(“\””);
delay(500);
sim900.println(“AT+HTTPACTION=0”);
delay(5000);
sim900.println(“AT+HTTPREAD”);
delay(1000);
sim900.println(“AT+HTTPTERM”);
}
“`
Kết nối TCP/IP trực tiếp (thay thế cho HTTP):
“`
AT+CIPSTART=”TCP”,”yourserver.com”,”80″ → Mở kết nối TCP
AT+CIPSEND=50 → Báo sẽ gửi 50 byte
[Nhập dữ liệu + Ctrl+Z] → Gửi dữ liệu
AT+CIPCLOSE → Đóng kết nối TCP
“`
Điều khiển thiết bị từ xa bằng Module GSM SIM900 như thế nào?

Điều khiển thiết bị từ xa bằng Module GSM SIM900 thực hiện qua hai phương thức chính là điều khiển qua SMS (phù hợp vùng không có Internet) và điều khiển qua GPRS/Internet (phù hợp hệ thống giám sát thời gian thực), mỗi phương thức có ưu điểm riêng tùy bối cảnh.
Để triển khai hệ thống điều khiển từ xa hiệu quả, phần dưới đây hướng dẫn chi tiết cả hai phương thức kèm sơ đồ kiến trúc và lưu ý bảo mật:
Điều khiển thiết bị từ xa qua SMS với Module GSM SIM900?
Điều khiển thiết bị từ xa qua SMS với Module GSM SIM900 hoạt động theo nguyên lý: vi điều khiển liên tục đọc SMS đến,phân tích chuỗi nội dung tin nhắn để nhận dạng lệnh, sau đó kích hoạt relay hoặc thiết bị tương ứng dựa trên từ khóa trong tin nhắn.
Chi tiết hơn, quy trình xử lý lệnh điều khiển qua SMS được thực hiện như sau:
Lưu đồ thuật toán xử lý lệnh SMS:
- Module SIM900 nhận SMS mới, chuỗi +CMT xuất hiện trên Serial
- Vi điều khiển đọc toàn bộ chuỗi phản hồi
- Trích xuất số điện thoại người gửi và nội dung tin nhắn
- Kiểm tra số điện thoại người gửi có trong danh sách whitelist không
- Nếu hợp lệ: so khớp nội dung với bảng lệnh định nghĩa sẵn
- Kích hoạt hoặc tắt relay/thiết bị tương ứng
- Gửi SMS xác nhận lại cho người dùng
Ví dụ code Arduino điều khiển relay qua SMS:
“`cpp
#include <SoftwareSerial.h>
SoftwareSerial sim900(7, 8);
const String ALLOWED_NUMBER = “+84912345678”; // Whitelist
const int RELAY_PIN = 9;
void setup() {
Serial.begin(9600);
sim900.begin(9600);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
sim900.println(“AT+CMGF=1”);
delay(500);
sim900.println(“AT+CNMI=2,2,0,0,0”); // Tự động nhận SMS
delay(500);
}
void loop() {
if (sim900.available()) {
String msg = sim900.readString();
// Kiểm tra số điện thoại whitelist
if (msg.indexOf(ALLOWED_NUMBER) != -1) {
if (msg.indexOf(“BAT”) != -1) {
digitalWrite(RELAY_PIN, HIGH);
sendSMS(ALLOWED_NUMBER, “Den da BAT”);
}
else if (msg.indexOf(“TAT”) != -1) {
digitalWrite(RELAY_PIN, LOW);
sendSMS(ALLOWED_NUMBER, “Den da TAT”);
}
}
}
}
void sendSMS(String number, String content) {
sim900.println(“AT+CMGF=1”);
delay(300);
sim900.print(“AT+CMGS=\””);
sim900.print(number);
sim900.println(“\””);
delay(300);
sim900.print(content);
delay(300);
sim900.write(0x1A);
delay(3000);
}
“`
Ví dụ thực tế điều khiển đèn qua SMS:
- Gửi tin nhắn “BAT” đến số SIM cắm trong module để bật đèn
- Gửi “TAT” để tắt đèn
- Gửi “TRANG THAI” để module phản hồi trạng thái hiện tại của tất cả thiết bị
Bảo mật hệ thống điều khiển SMS:
Đây là yếu tố cực kỳ quan trọng thường bị bỏ qua. Bạn nên áp dụng các lớp bảo mật sau:
- Whitelist số điện thoại: Chỉ chấp nhận lệnh từ danh sách số điện thoại được phép. Mọi SMS từ số lạ đều bị bỏ qua hoặc trả lời “Unauthorized”.
- Mã PIN xác thực: Thêm mã PIN vào đầu tin nhắn, ví dụ “1234 BAT” thay vì chỉ “BAT”.
- Log lệnh: Ghi lại lịch sử tất cả lệnh nhận được kèm số điện thoại và thời gian để kiểm tra sau.
Ưu và nhược điểm điều khiển qua SMS:
- Ưu điểm: Hoạt động ở bất kỳ đâu có sóng GSM, không cần Internet, chi phí thấp, độ trễ chấp nhận được (3 đến 10 giây).
- Nhược điểm: Phụ thuộc vào cước SMS, không phù hợp cho điều khiển thời gian thực dưới 1 giây, khó giám sát liên tục.
Điều khiển thiết bị từ xa qua GPRS/Internet với Module GSM SIM900?
Điều khiển thiết bị từ xa qua GPRS/Internet với Module GSM SIM900 hoạt động theo nguyên lý SIM900 kết nối Internet qua GPRS rồi định kỳ polling lệnh từ server hoặc nhận lệnh push từ MQTT broker để kích hoạt thiết bị.
Phương thức này phù hợp cho các hệ thống cần giám sát liên tục và điều khiển gần thời gian thực qua giao diện web hoặc ứng dụng di động. Sơ đồ kiến trúc tổng thể của hệ thống điều khiển qua Internet như sau:
Sơ đồ kiến trúc hệ thống:
“`
[Người dùng – Web/App]
|
| HTTPS
v
[Server / MQTT Broker]
|
| HTTP/TCP/MQTT
v
[SIM900 + Vi điều khiển] — GPRS (2G) — [Mạng di động]
|
v
[Relay / Cảm biến / Thiết bị]
“`
Phương thức 1: Polling từ Server (đơn giản, phù hợp SIM900)
SIM900 định kỳ gửi HTTP GET đến server để kiểm tra có lệnh mới không:
“`cpp
// Mỗi 10 giây, SIM900 hỏi server có lệnh mới không
void pollCommand() {
// Gửi GET đến: http://yourserver.com/getcommand?device_id=001
// Server trả về: {“command”:”ON”} hoặc {“command”:”OFF”} hoặc {“command”:”NONE”}
sim900.println(“AT+HTTPINIT”);
delay(1000);
sim900.println(“AT+HTTPPARA=\”CID\”,1″);
delay(300);
sim900.println(“AT+HTTPPARA=\”URL\”,\”http://yourserver.com/getcommand?id=001\””);
delay(300);
sim900.println(“AT+HTTPACTION=0”);
delay(5000);
sim900.println(“AT+HTTPREAD”);
delay(1000);
// Phân tích phản hồi để lấy lệnh
sim900.println(“AT+HTTPTERM”);
}
“`
Phương thức 2: MQTT (phù hợp cho hệ thống phức tạp)
MQTT là giao thức nhắn tin nhẹ, tối ưu cho IoT. Tuy nhiên, SIM900 không có thư viện MQTT gốc, nên cần kết nối TCP trực tiếp đến MQTT broker (như HiveMQ hoặc Mosquitto) và tự xây dựng packet MQTT thủ công, hoặc dùng vi điều khiển mạnh hơn (ESP32) để xử lý MQTT rồi giao tiếp với SIM900 qua UART.
So sánh Polling vs MQTT trong điều khiển thời gian thực:
| Tiêu chí | Polling (HTTP) | MQTT |
|---|---|---|
| Độ phức tạp triển khai | Thấp | Cao |
| Độ trễ lệnh | 5 đến 30 giây | Dưới 1 giây |
| Tiêu thụ dữ liệu GPRS | Cao (mỗi request tốn header HTTP) | Thấp (packet nhỏ) |
| Phù hợp SIM900 | Rất phù hợp | Cần tùy chỉnh thêm |
| Độ tin cậy | Trung bình | Cao |
Ví dụ thực tế: Hệ thống giám sát nhà thông minh
Một hệ thống nhà thông minh dùng SIM900 có thể bao gồm:
- SIM900 kết nối GPRS, gửi dữ liệu cảm biến nhiệt độ, độ ẩm và trạng thái cửa lên server mỗi 30 giây.
- Server lưu trữ dữ liệu và hiển thị trên dashboard web.
- Người dùng gửi lệnh qua web, server lưu lệnh chờ.
- Lần polling tiếp theo, SIM900 nhận lệnh và thực hiện (bật điều hòa, khóa cửa…).
- SIM900 gửi xác nhận kết quả thực thi lên server.
Module GSM SIM900 khác gì so với các Module GSM thế hệ mới?

SIM900 thua về kết nối tốc độ cao (chỉ 2G/GPRS tối đa 85.6 kbps), SIM800L tốt hơn về kích thước và giá thành trong cùng phân khúc 2G, trong khi SIM7600 vượt trội hoàn toàn về băng thông với chuẩn 4G LTE phù hợp cho dự án dài hạn tại Việt Nam.
Phần Supplementary Content dưới đây đi sâu vào so sánh chi tiết giữa các module và phân tích tình trạng mạng 2G tại Việt Nam để giúp bạn đưa ra quyết định lựa chọn phù hợp:
So sánh Module GSM SIM900 và SIM800L: Nên chọn module nào?
SIM900 phù hợp hơn cho Shield Arduino và dự án học tập có sẵn nguồn 5V, trong khi SIM800L phù hợp hơn cho dự án nhỏ gọn dùng pin LiPo 3.7V nhờ kích thước nhỏ và giá thành thấp hơn.
Bảng so sánh chi tiết SIM900 và SIM800L (hai module GSM 2G phổ biến nhất trong cộng đồng maker Việt Nam):
| Tiêu chí | SIM900 | SIM800L |
|---|---|---|
| Chip | SIMCom SIM900 | SIMCom SIM800L |
| Chuẩn mạng | GSM/GPRS (2G) | GSM/GPRS (2G) |
| Băng tần | Quad-Band 850/900/1800/1900 MHz | Quad-Band 850/900/1800/1900 MHz |
| Điện áp hoạt động | 3.4V đến 4.4V | 3.4V đến 4.4V (đỉnh 2A) |
| Nguồn thực tế thường dùng | 5V qua LDO trên Shield | 3.7V LiPo hoặc nguồn ổn áp 4V |
| Kích thước module | Lớn (dạng Shield Arduino) | Nhỏ gọn (24 x 24mm) |
| Giá thành | 150.000 đến 300.000 VND (Shield) | 50.000 đến 120.000 VND |
| Tích hợp Arduino | Rất tiện (Shield cắm thẳng) | Cần kết nối dây jumper |
| Hỗ trợ Bluetooth | Không | SIM800C có Bluetooth |
| Tài liệu và cộng đồng | Nhiều tài liệu tiếng Việt | Nhiều tài liệu, phổ biến toàn cầu |
Khuyến nghị lựa chọn theo dự án:
- Chọn SIM900 Shield: Khi bạn dùng Arduino UNO/Mega, muốn kết nối nhanh không cần hàn dây, đang học về GSM và cần ổn định, hoặc dự án thử nghiệm trong phòng lab.
- Chọn SIM800L: Khi cần module nhỏ gọn tích hợp vào PCB tự thiết kế, dự án dùng pin LiPo 3.7V, hoặc cần giảm chi phí linh kiện cho sản xuất hàng loạt.
- Chọn SIM7600/EC21 (4G): Khi dự án cần tốc độ dữ liệu cao, cần hoạt động dài hạn sau năm 2025 tại Việt Nam, hoặc ứng dụng streaming dữ liệu liên tục.
Module GSM SIM900 có còn hoạt động được tại Việt Nam không?
Module GSM SIM900 hiện vẫn còn hoạt động tại Việt Nam nhưng đang đối mặt với nguy cơ mất kết nối hoàn toàn khi Bộ TT&TT thực hiện lộ trình tắt sóng 2G GSM dự kiến hoàn thành vào cuối năm 2025.
Cụ thể hơn về tình trạng mạng 2G tại Việt Nam và ảnh hưởng đến SIM900:
Theo lộ trình của Bộ Thông tin và Truyền thông Việt Nam, các nhà mạng bắt đầu tắt sóng 2G GSM từ năm 2024, trong đó Viettel và Vinaphone đã triển khai tắt sóng 2G tại nhiều khu vực đô thị từ tháng 9/2024. Toàn bộ hạ tầng 2G GSM dự kiến ngừng hoạt động hoàn toàn vào năm 2025 tại Việt Nam.
Ảnh hưởng trực tiếp đến Module GSM SIM900:
Vì SIM900 chỉ hỗ trợ chuẩn GSM/GPRS (2G), khi mạng 2G bị tắt hoàn toàn, module sẽ không thể đăng ký mạng, không gửi được SMS, không thực hiện được cuộc gọi và không kết nối được GPRS. Điều này đồng nghĩa với việc toàn bộ hệ thống sử dụng SIM900 sẽ ngừng hoạt động.
Khuyến nghị cho dự án mới và hiện tại:
- Dự án mới (từ 2024 trở đi): Không nên dùng SIM900 hoặc SIM800L cho hệ thống cần vận hành dài hạn. Thay bằng module 4G như SIM7600E, EC21-V (Quectel), hoặc A7670C.
- Dự án hiện tại đang dùng SIM900: Lên kế hoạch nâng cấp phần cứng sang module 4G trong thời gian sớm nhất, đặc biệt nếu hệ thống triển khai tại khu vực đô thị nơi 2G đã bị tắt.
- Mục đích học tập và thử nghiệm: SIM900 vẫn có giá trị để học lệnh AT Commands và nguyên lý GSM, vì tập lệnh AT của SIM900 tương thích gần như hoàn toàn với các module SIMCom thế hệ mới.
Các nhà mạng và thời điểm tắt 2G:
| Nhà mạng | Khu vực đô thị | Khu vực nông thôn |
|---|---|---|
| Viettel | 9/2024 (đang triển khai) | Dự kiến 2025 |
| Vinaphone | 9/2024 (đang triển khai) | Dự kiến 2025 |
| Mobifone | 2024 đến 2025 | Dự kiến 2025 |
Tóm lại, Module GSM SIM900 là nền tảng tuyệt vời để học và thử nghiệm các tính năng GSM cơ bản gồm gửi SMS, gọi điện, kết nối GPRS và điều khiển từ xa. Tuy nhiên, với lộ trình tắt sóng 2G tại Việt Nam, bạn nên cân nhắc chuyển sang module 4G như SIM7600 cho các hệ thống cần vận hành ổn định và lâu dài.








Đánh giá
Chưa có đánh giá nào.