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 |
|
| AT+CPIN? | Sprawdza weryfikację PIN karty SIM |
|
| ATE0 | Wyłącza echo (moduł nie powtarza komend) |
|
| ATE1 | Włącza echo |
|
| AT+CMGF=1 | Ustawia tryb tekstowy SMS (zamiast PDU) |
|
| AT+CSQ | Sprawdza siłę sygnału |
|
| AT+CNMI=1,2,0,0,0 | Włącza powiadomienia o nowych SMS na porcie szeregowym |
|
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:
AT+CMGF=1– ustaw tryb tekstowy,AT+CMGS="+48123456789"– rozpocznij SMS (moduł odpowie znakiem>),- wpisz treść i zakończ
Ctrl+Z(w kodzie:char(26)), - poczekaj na
+CMGS: XorazOK.
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).