Komendy AT to uniwersalny język komunikacyjny, który umożliwia precyzyjne sterowanie modułami GSM, GPS, Bluetooth i WiFi podłączonymi do Arduino. Dzięki nim zrealizujesz projekty robotyczne, takie jak zdalne sterowanie przekaźnikami przez SMS, automatyczne odbieranie wiadomości czy monitorowanie sygnału sieciowego.

W artykule omówimy podstawy komend AT, ich zastosowanie w praktyce z Arduino, przykładowe kody oraz typowe pułapki. Skupiamy się na modułach GSM (np. SIM900, TC35), które są szczególnie popularne w robotyce i elektronice hobbystycznej.

Czym są komendy AT i dlaczego są kluczowe w projektach Arduino?

Komendy AT (od Attention) wywodzą się z modemów Hayesa z lat 80. i stały się standardem dla modułów komunikacyjnych. Wysyłasz je przez interfejs szeregowy UART jako ciągi znaków zakończone znakiem powrotu karetki \r. Moduł odpowiada potwierdzeniem OK, błędem ERROR lub danymi. Prosta składnia i czytelne odpowiedzi sprawiają, że integracja z Arduino jest szybka i przewidywalna.

Najważniejsze korzyści w kontekście Arduino są następujące:

  • prostota – nie wymagają bibliotek – wystarczy Serial.print();
  • uniwersalność – działają z modułami GSM (SIM900, TC35), Bluetooth (HC-05/06), ESP8266 (WiFi) i GPS;
  • elastyczność – pełna kontrola nad funkcjami, np. wysyłanie SMS, dzwonienie czy konfiguracja sieci.

Podłącz moduł do pinów TX/RX Arduino (dla UNO użyj SoftwareSerial, aby nie blokować USB). Zawsze sprawdzaj prędkość transmisji (baud rate), np. 9600 lub 115200.

Podstawowe komendy AT – niezbędny zestaw startowy

Zacznij od weryfikacji połączenia. Oto najważniejsze komendy z przykładowymi odpowiedziami:

Komenda Opis Oczekiwana odpowiedź
AT Test połączenia z modułem

OK

AT+CPIN? Sprawdza weryfikację PIN karty SIM

+CPIN: READY

OK

ATE0 Wyłącza echo (moduł nie powtarza komend)

OK

ATE1 Włącza echo

OK

AT+CMGF=1 Ustawia tryb tekstowy SMS (zamiast PDU)

OK

AT+CSQ Sprawdza siłę sygnału

+CSQ: X,Y

OK

AT+CNMI=1,2,0,0,0 Włącza powiadomienia o nowych SMS na porcie szeregowym

OK

Uwaga: każdą komendę kończ znakiem \r (w Arduino: Serial.print("AT\r");), a po wysłaniu czekaj na pełną odpowiedź, odczytując port szeregowy.

Sterowanie modułem GSM za pomocą SMS – praktyczny przewodnik

Moduły GSM, takie jak SIM900 czy TC35, pozwalają na zdalne sterowanie robotami przez SMS, np. włączanie przekaźnika poleceniem „ON”.

Konfiguracja początkowa

W setup() Arduino wyślij sekwencję inicjalizującą:

#include <SoftwareSerial.h>
SoftwareSerial GSM(2, 3); // RX=2, TX=3

void setup() {
Serial.begin(9600);
GSM.begin(9600);
delay(1000);

// Wyślij komendy konfiguracyjne
sendAT("ATE0"); // Wyłącz echo
sendAT("AT"); // Test
sendAT("AT+CMGF=1"); // Tryb tekstowy
sendAT("AT+CNMI=1,2,0,0,0"); // Powiadomienia SMS
}

void sendAT(String cmd) {
GSM.println(cmd);
delay(500);
while (GSM.available()) {
Serial.write(GSM.read());
}
Serial.println("---");
}

Funkcja sendAT() wysyła komendę i odczytuje odpowiedź na Monitorze Szeregowym. Dzięki temu łatwo diagnozujesz, na której komendzie moduł się zatrzymuje.

Wysyłanie SMS

Sekwencja do nadania wiadomości na numer „+48123456789” o treści „Witaj!” wygląda tak:

  1. AT+CMGF=1 – ustaw tryb tekstowy,
  2. AT+CMGS="+48123456789" – rozpocznij SMS (moduł odpowie znakiem >),
  3. wpisz treść i zakończ Ctrl+Z (w kodzie: char(26)),
  4. poczekaj na +CMGS: X oraz OK.

Oto przykładowa funkcja wysyłania wiadomości:

void sendSMS(String number, String message) {
GSM.println("AT+CMGF=1");
delay(500);
GSM.print("AT+CMGS=\"");
GSM.print(number);
GSM.println("\"");
delay(500);
GSM.print(message);
delay(500);
GSM.write(26); // Ctrl+Z
}

Odbieranie i przetwarzanie SMS

Ustaw AT+CNMI=1,2,0,0,0, aby moduł automatycznie przysyłał nowe SMS na Serial. Parsuj wskazania, np. +CMTI: "SM",1 (nowa wiadomość w slocie 1), a następnie użyj AT+CMGL="ALL" do odczytu zawartości.

Przykład sterowania diodą/przekaźnikiem – zaimplementuj proste polecenia:

  • odbierz SMS „ON” → włącz pin 13,
  • „OFF” → wyłącz pin 13,
  • „?” → odeślij status urządzenia.

void loop() {
if (GSM.available()) {
String response = GSM.readString();
if (response.indexOf("+CMTI") > 0) {
// Odczytaj SMS
GSM.println("AT+CMGF=1");
GSM.println("AT+CMGL=\"ALL\"");
delay(1000);

// Parsuj treść (uproszczone)
if (response.indexOf("ON") > 0) {
digitalWrite(13, HIGH);
sendSMS("+48123456789", "Dioda ON");
}

// Usuń wiadomości
GSM.println("AT+CMGD=1,4");
}
}
}

Usuwanie SMS: AT+CMGD=1 usuwa wiadomość z wybranego slotu, a AT+CMGD=1,4 czyści całą pamięć SMS.

Komendy AT w innych modułach – rozszerzając horyzonty robotyki

Bluetooth HC-05/HC-06

Do sterowania Arduino z telefonu przez Bluetooth wykorzystaj podstawowe komendy:

  • AT – test połączenia;
  • AT+NAME=Robot – zmiana nazwy modułu;
  • AT+PSWD=1234 – ustawienie PIN do parowania.

Podłącz HC-06: TX → pin 2, RX → pin 3. Brak odpowiedzi? Sprawdź prędkość (często 38400) i zastosuj konwersję poziomów logicznych.

ESP8266 (WiFi)

Dla robotów z łącznością WiFi przydadzą się następujące komendy:

  • AT – test komunikacji;
  • AT+CWMODE=1 – ustawienie trybu stacji (STA);
  • AT+CWJAP=”SSID”,”haslo” – połączenie z siecią.

GPS (np. NEO-6M)

Aby uruchomić i odczytać dane GPS, użyj: AT+CGPS=1 – włączenie GPS oraz AT+CGPSINFO – odczyt współrzędnych.

Typowe problemy i rozwiązania

W razie kłopotów zwróć uwagę na poniższe kwestie:

  • brak odpowiedzi – wyłącz echo (ATE0), sprawdź połączenia i baud rate; dla stabilności rozważ AltSoftSerial;
  • słaby sygnałAT+CSQ; wynik poniżej 10 oznacza problemy z zasięgiem;
  • konflikty z bibliotekami – używaj czystych komend AT zamiast GSM.h, zyskasz pełną kontrolę;
  • PIN karty SIM – użyj karty bez PIN lub wpisz AT+CPIN="XXXX".

Testowanie: korzystaj z Monitora Szeregowego lub narzędzi typu gtkterm (np. 115200 baud, zakończenie CR).

Zaawansowane projekty z komendami AT

Dla inspiracji, poniżej kilka praktycznych zastosowań:

  • sterowanie przekaźnikiem SMS – rozszerz przykład o moduł przekaźnikowy na pinie 8;
  • automatyczne alarmy – wysyłaj SMS przy niskim sygnale lub detekcji ruchu;
  • integracja z robotem – komenda SMS „FORWARD” uruchamia jazdę do przodu.

Komendy AT otwierają drzwi do autonomicznych robotów komunikujących się ze światem zewnętrznym. Eksperymentuj, parsuj odpowiedzi ostrożnie i pamiętaj o okresowym resecie modułu (ATZ).