ESP32 ve Quectel MC60 modülünü bir araya getirerek bir WebSocket bağlantısı kurmak, IoT projelerinde düşük gecikmeli ve çift yönlü veri iletimi sağlamak için oldukça güçlü bir yöntemdir.
Özellikle Wi-Fi'ın olmadığı sahalarda GSM/GPRS üzerinden anlık veri takibi yapmak istiyorsanız bu ikili harika bir çözümdür.
Neden WebSocket ve MC60?
Standart HTTP istekleri "istek-yanıt" modeline dayanır ve her seferinde bağlantıyı yeniden açmak ciddi bir veri yükü (overhead) oluşturur. WebSocket ise bağlantıyı bir kez açar ve açık tutar.
- Düşük Gecikme: Veri paketleri çok daha küçüktür.
- Çift Yönlü: Sunucu, cihazdan istek gelmeden cihaza veri gönderebilir.
Donanım Kurulumu ve Bağlantı
ESP32, MC60 modülü ile genellikle UART (Seri Haberleşme) üzerinden haberleşir. MC60'ın hem GSM hem de GNSS (GPS) yetenekleri olduğu için, ESP32 üzerinden göndereceğiniz AT komutları ile modülü yönetirsiniz.
ESP32 PinMC60 PinAçıklama
GPIO 17 (TX2) RXD Veri Gönderimi
GPIO 16 (RX2) TXD Veri Alımı
GND GND Ortak Toprak
5V/3.3V VCC Güç Kaynağı (MC60 yüksek akım çeker, harici besleme önerilir)
IoT Yazılım Geliştirme
MC60, yerleşik bir WebSocket yığınına (stack) sahip olmayabilir (donanım yazılım sürümüne bağlıdır). Bu durumda iki yolunuz vardır:
- Transparent Mode (TCP): MC60 üzerinden bir TCP bağlantısı açılır ve WebSocket "handshake" işlemi ESP32 tarafında kodla manuel olarak yapılır.
- Kütüphane Kullanımı: TinyGSM gibi kütüphanelerle TCP bağlantısı kurulup, üzerine ArduinoWebsockets gibi bir kütüphane bindirilir.
Örnek Senaryo:
AT Komutları ile Hazırlık
Haberleşmeye başlamadan önce MC60'ın internete bağlı olduğundan emin olmalısınız:
AT+CPIN? # SIM kart durumunu kontrol et
AT+CREG? # Şebeke kaydını kontrol et
AT+CGATT=1 # GPRS servisine bağlan
AT+QICSGP=1,"APN" # Operatörünüzün APN ayarını yapın
Kod Örneği(Arduino IDE)
Aşağıdaki mantık, MC60'ı bir modem gibi kullanarak TCP üzerinden bir WebSocket sunucusuna bağlanmanızı sağlar.
#include <TinyGsmClient.h>
#include <ArduinoWebsockets.h>
// Seri haberleşme pinleri
#define MODEM_TX 17
#define MODEM_RX 16
HardwareSerial SerialAT(2);
TinyGsm modem(SerialAT);
TinyGsmClient client(modem);
using namespace websockets;
WebsocketsClient wsClient;
void setup() {
Serial.begin(115200);
SerialAT.begin(115200, SERIAL_8N1, MODEM_RX, MODEM_TX);
Serial.println("Modem başlatılıyor...");
if (!modem.restart()) {
Serial.println("Modem bulunamadı!");
return;
}
// GPRS Bağlantısı
if (!modem.gprsConnect("internet", "", "")) {
Serial.println("GPRS başarısız.");
return;
}
// WebSocket Olay Dinleyicileri
wsClient.onMessage([](WebsocketsMessage msg) {
Serial.print("Sunucudan gelen mesaj: ");
Serial.println(msg.data());
});
// Sunucuya Bağlan
bool connected = wsClient.connect("ws://echo.websocket.org");
if(connected) {
wsClient.send("Merhaba, ben ESP32 + MC60!");
}
}
void loop() {
if (wsClient.available()) {
wsClient.poll();
}
}
Dikkat Edilmesi Gereken Noktalar
- Güç Sorunları: MC60, veri iletimi sırasında anlık olarak 2A seviyesinde akım çekebilir. ESP32'nin 3.3V pini bunu karşılayamaz. Mutlaka düşük dirençli bir kapasitör (örn. 1000 uF) ve güçlü bir regülatör kullanın.
- Sinyal Kalitesi: Kapalı mekanlarda GSM çekim gücü düşebilir. AT+CSQ komutu ile sinyal seviyesini periyodik olarak kontrol edin.
- Veri Paketi Boyutu: GPRS bağlantısı Wi-Fi kadar stabil değildir. WebSocket üzerinden gönderdiğiniz JSON paketlerini olabildiğince küçük tutun.
Son
ESP32 ve MC60 ı çalıştırmak ve verileri almak için yardım gerekyorsa Meşe Bilişim firmamız ile iletişime geçiniz. Meşe Bilişim Websocket server ve Thingsboard Dashboard ile verileri görselleştirmektedir.
Veya verileri almak için Node-RED sunucusu kurmayı veya AWS IoT Core gibi platformlara entegre olmayı deneyebilirsiniz.



