حالت فرمان AT در ماژول HC-05
با پین EN/KEY ماژول HC-05 وارد حالت فرمان (AT) میشوید و نام ماژول، نرخ باود و رمز جفتشدن را با فرمانهای AT تغییر میدهید.
آنچه در این درس میآموزید
- تفاوت حالت داده و حالت فرمان را توضیح دهید و با پین EN/KEY وارد حالت AT شوید
- با فرمانهای AT نام، نرخ باود و رمز ماژول را بخوانید و تغییر دهید
- یک پل گذرنده (Passthrough) بسازید و فرمانها را از سریال مانیتور به ماژول بفرستید
فهرست مطالب
در درس پیشین ماژول HC-05 فقط «حرفزدن» بلد بود: هر چه میرسید میفرستاد و هر چه میفرستادید به آردوینو میداد. اما اگر بخواهید نام ماژول را عوض کنید، نرخ باود را بالا ببرید یا رمز جفتشدن را تغییر دهید چه؟ ماژول باید از گفتوگو به «شنیدن دستور» سوئیچ کند. این حالت، حالت فرمان (AT Command Mode) نام دارد و با پین EN/KEY کنترل میشود. این درس ادامهٔ مستقیم درس hc-05-bluetooth است؛ سیمکشی همان است و فقط یک پین اضافه میشود.
حالت داده در برابر حالت فرمان
HC-05 دو شخصیت دارد:
- حالت داده (Data Mode): حالت پیشفرض پس از روشنشدن. هر بایت دریافتی روی RXD بیسیم میشود و هر بایت بلوتوثی از TXD خارج میشود. نرخ پیشفرض 9600 است.
- حالت فرمان (AT Mode): ماژول بهجای فرستادن داده، هر خط دریافتی را مثل یک فرمان میخواند، اجرا میکند و پاسخ میدهد (مثلاً OK). نرخ پیشفرض در اغلب بازشکنها 38400 است.
سوئیچ این دو حالت با پین EN/KEY است: اگر این پین در لحظهٔ روشنشدن ماژول HIGH باشد، ماژول در حالت فرمان بالا میآید؛ اگر آزاد یا LOW باشد، حالت داده است. نکتهٔ کلیدی «لحظهٔ روشنشدن» است — مقدار این پین در میان کار بررسی نمیشود.
سیمکشی برای حالت AT
همان سیمکشی درس قبل است؛ فقط EN/KEY اهمیت پیدا میکند:
| آردوینو Uno | ماژول HC-05 |
|---|---|
| 5V | VCC |
| GND | GND |
| D10 (SoftwareSerial RX) | TXD |
| D11 → مقسوم (۱ کیلواهم/۲ کیلواهم) → | RXD |
| D9 (برای کنترل EN/KEY) | EN / KEY |
مقسوم ولتاژ روی RXD را فراموش نکنید؛ در حالت فرمان هم ورودی ماژول 3.3 ولتی است. پین D9 را به EN/KEY وصل میکنیم تا اسکچ بتواند در لحظهٔ روشنشدن ماژول آن را HIGH کند و نیازی به دستکاری مدار در هر بار نباشد.
اسکچ پل گذرنده
این اسکچ هر چه در سریال مانیتور بنویسید را به ماژول میدهد و هر پاسخ ماژول را به مانیتور برمیگرداند؛ یعنی سریال مانیتور شما تبدیل به ترمینال AT میشود:
#include <SoftwareSerial.h>
const int btRxPin = 10; // Arduino RX <- HC-05 TXD
const int btTxPin = 11; // Arduino TX -> HC-05 RXD (through divider)
const int keyPin = 9; // To HC-05 EN/KEY
SoftwareSerial bt(btRxPin, btTxPin);
void setup() {
pinMode(keyPin, OUTPUT);
digitalWrite(keyPin, HIGH); // HIGH at module power-up enters AT mode
delay(100);
Serial.begin(9600); // Serial Monitor side
bt.begin(38400); // HC-05 AT-mode default baud rate
Serial.println("AT passthrough ready. Type a command:");
}
void loop() {
if (Serial.available() > 0) {
bt.write(Serial.read());
}
if (bt.available() > 0) {
Serial.write(bt.read());
}
}نکتههای خطبهخط:
digitalWrite(keyPin, HIGH);درsetup()— چون اسکچ در لحظهٔ روشنشدن ماژول شروع میشود، ماژول در حالت AT بالا میآید. برای برگشتن به حالت داده، همین خط را LOW کنید و برد را ریست کنید.bt.begin(38400);— نرخ حالت فرمان روی بیشترِ بازشکنها 38400 است، برخلاف 9600 حالت داده. اگر پاسخ نگرفتید، همین عدد را به 9600 تغییر دهید؛ نسخههای گوناگون پیشفرض متفاوت دارند.- حلقهٔ اصلی فقط کپیکنندهٔ بایتبهبایت است؛ هیچ تفسیری در آردوینو انجام نمیشود.
ورود به حالت AT گامبهگام
- مدار را طبق جدول ببندید و اسکچ at-passthrough را آپلود کنید.
- برد را ریست کنید تا اسکچ و ماژول با هم روشن شوند و پین D9 در لحظهٔ بالا آمدن ماژول HIGH باشد.
- سریال مانیتور را با نرخ 9600 و پایانهٔ Both NL & CR باز کنید — ماژول انتظار پایان خط CR+LF دارد و بیآن پاسخ نمیدهد.
- عبارت AT را تایپ و ارسال کنید. پاسخ موفق، یک خط است:
AT passthrough ready. Type a command: OK
اگر OK دیدید، ماژول در حالت فرمان است و آمادهٔ تنظیمات.
فرمانهای پرکاربرد AT
| فرمان | کار | پاسخ نمونه |
|---|---|---|
AT |
تست ارتباط | OK |
AT+VERSION? |
نمایش نسخهٔ firmware | +VERSION:... و OK (متن بسته به نسخه) |
AT+NAME? |
خواندن نام ماژول | +NAME:HC-05 و OK |
AT+NAME=DocNamehBT |
تغییر نام ماژول | OK |
AT+UART? |
خواندن نرخ باود جاری | +UART:9600,0,0 و OK |
AT+UART=9600,0,0 |
تنظیم نرخ باود (نرخ، بیت توقف، پاریته) | OK |
AT+PSWD? |
خواندن رمز جفتشدن | +PSWD:1234 و OK |
AT+PSWD="0000" |
تغییر رمز جفتشدن | OK |
AT+RESET |
ریست ماژول | OK |
پاسخِ دقیق فرمانهای خواندنی به نسخهٔ firmware بستگی دارد؛ مهم این است که هر فرمان درست با OK تمام میشود. پس از تغییر نرخ باود، ماژول از دفعهٔ بعد با نرخ جدید حرف میزند؛ پس bt.begin اسکچ را همزمان تغییر دهید.
اشتباهات رایج و عیبیابی
| نشانه | علت رایج | راهحل |
|---|---|---|
| به فرمان AT پاسخی نمیآید | نرخ غلط یا پایانهٔ خط غلط | bt.begin را 38400 و سپس 9600 کنید؛ مانیتور را روی Both NL & CR بگذارید |
| ماژول بالا میآید اما در حالت AT نیست | EN/KEY در لحظهٔ روشنشدن HIGH نبوده | روش دکمهٔ نگهداشتهشده هنگام تغذیه را امتحان کنید؛ LED باید آرام چشمک بزند |
| ماژول پیدا میشود ولی فرمانها اثر ندارند | برخی نسخههای سازگار (Clone) فرمانهای محدودتری دارند | پاسخ ERROR را بپذیرید و فقط فرمانهای پایه مثل AT+NAME را امتحان کنید |
| پس از تغییر نرخ باود ارتباط قطع شد | مانیتور و ماژول همنرخ نیستند | نرخهای رایج را در bt.begin یکییکی امتحان کنید |
| پاسخ حروف آشفته است | ناهمسانی نرخ سریال مانیتور با Serial.begin | مانیتور را روی 9600 نگه دارید و فقط نرخ bt را تغییر دهید |
تمرینها
تمرین
تمرین ۱ — بازخوانی تنظیمات
پس از آنکه نام ماژول را با AT+NAME=DocNamehBT تغییر دادید، تنظیمات جدید را بازخوانی کنید: فرمانهای خواندن نام و نرخ باود را بفرستید و پاسخ هر دو را در سریال مانیتور ثبت کنید. چه چیزی چاپ میشود؟
نمایش راهحل
کد لازم نیست؛ در ترمینال AT دو فرمان پشتسرهم میفرستید. خروجی سریال مانیتور به این شکل است (مقدار دقیق بسته به نسخهٔ firmware):
AT+NAME? +NAME
OK AT+UART? +UART:9600,0,0 OKنکتهٔ تمرین: فرمانهای خواندنی با علامت ? و فرمانهای تنظیم با = کار میکنند؛ اگر فرمان تنظیم را با شکل غلط بفرستید، پاسخ ERROR میگیرید و تنظیمی عوض نمیشود.
:::
:::
خلاصه
- حالت داده جریان سریال را بیسیم میکند؛ حالت فرمان به فرمانهای AT پاسخ میدهد و برای تنظیم ماژول است.
- ورود به حالت AT به HIGH بودن پین EN/KEY در لحظهٔ روشنشدن وابسته است؛ نرخ پیشفرض آن روی اغلب بردها 38400 است.
- پایانهٔ سریال مانیتور باید Both NL & CR باشد، وگرنه ماژول ساکت میماند.
- فرمانهای خواندنی
?میگیرند و فرمانهای تنظیمی=؛ هر پاسخ درست به OK ختم میشود. - پس از تغییر نرخ باود، اسکچ و ماژول باید همنرخ شوند؛ عدد جدید را همیشه یادداشت کنید.
ماژول شما حالا با نام و تنظیمات خودتان کار میکند؛ در درس بعد به سراغ حسگر فاصلهٔ التراسونیک HC-SR04 میرویم و نخستین دادهٔ محیطی واقعی را میخوانیم.