در قسمتهای قبلی آموزش اتصال ربات تلگرام به آردوینو، در خصوص نحوهی ساخت ربات به کمک Botfather و هم چنین برقراری ارتباط با سرورهای تلگرام برای جان بخشیدن به ربات توضیح دادیم و سورس آن را نیز منتشر کردیم. در این آموزش، نگاهی کاربردی تر به مقوله ربات تلگرام خواهیم داشت.
شاید برای شما مفید باشد: آموزش آردوینو
سرایدار تلگرامی!
همانطور که قبلا اشاره کردیم ، طیف کارهایی که میتوان با استفاده از یک ربات تلگرامی انجام داد محدودیت ندارد و محدودیت موجود به قوه تخیل ما بر می گردد. در این بخش از آموزش ما رباتی را خواهیم ساخت که با استفاده از آن بتوانیم از راه دور وسایل منزل را کنترل کنیم ، چنین رباتی میتواند کاربرد های فراوانی داشته باشد ، مثلا بعد از یک مسافرت درون شهری یا برون شهری در راه برگشت به خانه با استفاده از ربات تلگرام کولر خانه را روشن کنید یا وقتی که سفر شما طولانی شد بتوانید از راه دور لامپ های خانه را روشن یا خاموش کنید حتی می توان ربات را به دوربین متصل کرد و از فضای درون خانه عکس گرفت.
شاید برای شما مفید باشد: پروژه های آردوینو
همه چیز امکان پذیر است و محدودیتی وجود ندارد. در این آموزش به کنترل وسایل منزل اکتفا می کنیم و شاید اگر دوستان مشتاق بودند قسمت دوربین را هم اضافه کنیم.
ربات چگونه کار می کند؟
بله حق با شماست سایت ها و سورس های زیادی وجود دارند که چنین رباتی را ایجاد کرده اند ، ولی نگاه ما متفاوت است ، معمولا ربات های ساخته شده همه از یک الگوی متنی برای کنترل وسایل استفاده کرده اند و این که از کتابخوانه های آماده برای کد بهره برده اند که البته بد نیست ولی فاقد توضیحات لازم در خصوص نحوه عملکرد ربات و جزئیات آن است ، ما در سیسوگ همه چیز را از ابتدا و از صفر بنا کرده ایم ، به این معنی که ابتدا در خصوص نحوه عملکرد یک ربات توضیح دادیم ، پروتکل های آن را موشکافی کردیم ، و اولین ارتباط را با یک کد بسیار ساده پیاده سازی کردم ، در ادامه با توجه به آموزش های ارائه شده کتابخانه ای متناسب با آن را پیاده سازی کردیم.
رباتی هم که قصد پیاده سازی آن را داریم در همین الگو قرار می گیرد، همانطور که قبلا اشاره کردیم الگوی رفتاری ربات ما کاملا متفاوت از آن چیزی است که تاکنون در اینترنت وجود داشته است.
رباتی که قصد پیاده سازی آن را داریم از دستورات متنی برای کنترل لوازم و وسایل استفاده نمی کند بلکه با استفاده از inline keyboard برای کنترل و دریافت دستورات کاربر استفاده می کند. در روش دریافت دستورات به صورت متنی احتمال این که کاربر دستور مورد نظر را درست وارد نکند بالاست و یا این که ممکن است کارکرد دستورات را و یا شکل نوشتاری آن را فراموش کند ولی در روش مورد استفاده ما دستورات به صورتی لیستی در اختیار کاربر قرار می گیرد که عملکرد هر دستور به صورت متن فارسی روی آن درج شده است همین مساله باعث می شود که استفاده از ربات بسیار دلپذیرتر و ساده تر باشد.
قضیه inline keyboard چیست ؟
تا قبل از وجود inline keyboard ربات های تلگرامی در بهترین حالت کی بوردهایی داشتند که کاربر می توانست با استفاده از آنها دستورات مورد نظر خود را به ربات بدهد ، مشکلات موجود در خصوص آپدیت نشدن کی بورد ، لود نشدن آن باعث ایجاد حس ناخوشایندی در کاربران و تنفر آنها از ربات های تلگرام شده بود ، با ایجاد قابلیت inline keyboard متوان گفت علاوه بر ظاهر زیبا عملکرد مطلوبی هم در برقراری ارتباط با کاربر ایجاد شده است.
inline keyboard ها قابلیت اضافه و ویرایش شدن در هر پست ارسالی را دارا می باشند ، یعنی میتوان در انتهای هر پست لیستی از کلید ها را ایجاد کرد ، هر کلید دارای دو محتواست ، محتوای اول که به کاربر نمایش داده می شود و محتوای دوم با فشردن کلید توسط کاربر به سرور ارسال می شود و سرور تلگرام آن را از طریق CallBack آن را برای پردازش در اختیار ما قرار می دهد.
چطور inline keyboard بسازیم ؟
اصولا تلگرام تمام تبادلات را در قالب JSON انجام می دهد ، JSON یک استاندارد باز است که با ساختار خوانا برای انسان و ماشین ، می تواند اطلاعات و داده های مختلف را با استفاده از آن بین عوامل مختلف رد و بدل کرد. برای ایجاد inline keyboard باید داده های مربوط به کی برد را در قالب JSON به پیام خود اضافه کنیم. برای نمونه ، کد JSON زیر دو کلید به متن ما اضافه می کنید.
1 2 3 4 5 6 7 8 9 | { "inline_keyboard": [ [ {"text": "Sisoog", "url": "https://www.sisoog.com/"}, {"text": "Google", "url": "http://www.google.com/"} ] ] }; |
با اضافه کردن ساختار فوق به فیلد reply_markup در تابع ارسال پیام ، هنگام نمایش پیام مورد نظر به کاربر ، دو کلید یکی با نام Sisoog و دیگری با نام Google به انتهای پیام اضافه میشود. نوع کلید ها را ما با پارامتر url تنظیم کرده ایم که به تلگرام می گوید با کلیک بر روی این کلید به آدرس مقابل مراجعه کند و سایت مورد نظر را باز کند ، این نوع کیلد با فشرده شدن مقاداری به سرور بر نمی گرداند چرا که عملکرد آن که باز کردن صفحه وب است سمت کاربر انجام می شود. اما اگر نوع کلید را با مقدار callback_data مشخص کنیم ، به محض کلیک کاربر بر روی دکمه مقدار تعیین شده به سرور برای پردازش ارسال می شود.
چگونه پیام های ربات را مدیریت کنیم ؟
بر خلاف چیزی که بیشتر دوستان فکر میکنند (بازخورد از صحبت های دوستان) کتابخانه نوشته شده برای ربات تلگرام (Zeus_TgBot) به صورت 100 درصد توسط تیم سیسوگ برنامه نویسی شده و مقصود از این کار پیش رفتن با آموزش ها و درک بهتر کدهای نوشته شده است ، اگر نه کتابخانه های فراوانی برای برقراری ارتباط با تلگرام وجود دارد، ما سعی کرده ایم کتابخانه را را در ساده ترین حالت ممکن کد نویسی کنیم تا درک کد های نوشته شده ساده تر باشد.
برای اضافه کردن قابلیت inline keyboard به ربات تلگرام ، مجبور شدیم که مقداریی تغییرات در برخی توابع ایجاد کنیم ، از آنجایی که ارسال کد های JSON از طریق GET امکان پذیر نبود و با روش های معمول سرور تلگرام خطا اعلام می کرد ، مجبور به پیاده سازی متد POST برای ارسال داده های به سرور شدیم ، قبلا متد GET را توضیح دادیم که داده ها از طریق URL به سرور انتقال می یابد ، در متد POST داده ها باید از طریق Socket به سرور ارسال شوند.
1 2 3 4 5 6 7 8 | client.println("POST /Method HTTP/1.1"); client.println("Host: api.telegram.org"); client.println("Cache-Control: no-cache"); client.println("Content-Type: application/json"); client.print("Content-Length: "); client.println(PostData.length()); client.println(); client.println(PostData); |
در واقع برای ارسال داده ها به عنوان POST می توان از کد های زیر استفاده کنید.
تغییر بعدی که اجتناب ناپذیر بود ، تغییر در تابع Message_Event بود ، در ورژن های قبلی چون قابلیت inline keyboard وجود نداشت ، تابع مذکور فقط شامل آیدی فرستنده ، آیدی پیام و متن پیام بود ، با توجه به اضافه شده قابلیت inline keyboard به کتابخانه “تلگرام آردوینو” باید بتوان CallBack های مربوط به فشرده شدن کلیدها را نیز مدیریت کرد پس تابع فوق به شکل زیر اصلاح شد.
1 | typedef void (*Message_Event) (String Message_id,String Message_From,String Message_Text,bool is_callback,String Call_ID); |
همانطور که قبلا توضیح دادیم ، شما می توانید با استفاده از تابع Set_Message_Event ؛ تابعی را به کتابخانه Zeus_TgBot معرفی کنید تا در هنگام دریافت پیام جدید به صورت خودکار تابع مورد نظر فراخوانی شود. تابع مذکور باید 5 پارامتر ورودی باشد.
پارامتر اول شناسه پیام است ، هنگامی که کاربر بر روی یکی از کلید ها ، کلیک کند ، شناسه پیامی که دکمه ها به آن اتچ شده اند را بر می گرداند ، پارامتر دوم در واقع شناسه فردی است که پیام را برای ما ارسال کرده است ، برای ارسال پاسخ می توانیم پیام را به این شناسه ارسال کنیم.
پارامتر سوم متن پیام است و پارامتر چهارم مشخص میکند که این فراخونی به دلیل دریافت پیام جدید بوده است یا فشرده شدن کلید ها ، آخرین پارامتر هم حاوی داده ذخیره شده درون کلید است این پارامتر وقتی حاوی مقدار است که کاربر بر روی کلید کلیک کرده باشد. در غیر این صورت مقداری نخواهد داشت.
عملکرد ربات
راه اندازی برنامه !
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | #include "Arduino.h" #include <ESP8266WiFi.h> #include <ESP8266WiFiMulti.h> #include "ZeusTgBot.h" #include <EEPROM.h> ESP8266WiFiMulti WiFiMulti; #define Ssid "Your_WIFI_SSID" #define Password "Your_WIFI_PASS" #define Bot_Key "Your_BOT_Key" Zeus_TgBot Bot(Bot_Key); // Witty Cloud Board specifc pins const int LDR = A0; const int BUTTON = 4; const int RED = 15; const int GREEN = 12; const int BLUE = 13; void Tg_Message_Prossess(String mgs_id,String sender_id,String msg,bool is_callback,String Call_ID); uint32_t Command_Run = 0; void setup() { // Add your initialization code here Serial.begin(115200); Serial.print("\n"); //Serial.setDebugOutput(true); // We start by connecting to a WiFi network WiFiMulti.addAP(Ssid, Password); Serial.println(); Serial.println(); Serial.print("Wait for WiFi... "); /*Wait For Connect to Server*/ while(WiFiMulti.run() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(); Serial.println("Connect to NetWork .... OK"); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); // Initialize LDR, Button and RGB LED pinMode(LDR, INPUT); pinMode(BUTTON, INPUT); pinMode(RED, OUTPUT); pinMode(GREEN, OUTPUT); pinMode(BLUE, OUTPUT); Bot.Set_Message_Event(&Tg_Message_Prossess); Zeus_TgBot::User_t User; if(Bot.GetMe(&User)) { Serial.println(); Serial.println("Bot Information"); Serial.println("first name: " + User.first_name); Serial.println("last_name: " + User.last_name); Serial.println("username: " + User.username); Serial.println(); } else { Serial.println("Can Not Get Bot Info"); } } void Tg_Message_Prossess(String mgs_id,String sender_id,String msg,bool is_callback,String Call_ID) { String Intor = "ربات تلگرام سیسوگ \n\ این ربات توسط تیم سیسوگ برنامه ریزی و با استفاده از آردوینو راه اندازی شده است \n\ با استفاده از این ربات قادر خواهید بود لوازم منزل را از راه دور و با استفاده از تلگرام کنترل کنید.\n\ از منوی زیر یکی از کلید ها را انتخاب کنید."; String keyboardJson = "[[\{ \"text\" : \"مشاهده سایت سیسوگ\", \"url\" : \"https://sisoog.com\" \} ]," "[\{ \"text\" : \"عضویت در تلگرام سیسوگ\", \"url\" : \"https://t.me/joinchat/AAAAAEBAGr-XNdPMm3bTIg\" \} ]," "[\{ \"text\" : \"تغییر وضعیت لامپ سبز\", \"callback_data\" : \"Gtg\" \} ]," "[\{ \"text\" : \"تغییر وضعیت لامپ قرمز\", \"callback_data\" : \"Rtg\" \} ]," "[\{ \"text\" : \"تغییر وضعیت لامپ آبی\", \"callback_data\" : \"Btg\" \} ]]"; if(is_callback==true) { /*it's Call Back Data*/ Serial.println("Get CallBack - " + msg); if(msg=="Gtg") /*Command For Green LED*/ { if(digitalRead(GREEN)) { digitalWrite(GREEN, false); Bot.answerCallbackQuery(Call_ID,"لامپ سبز خاموش شد"); } else { digitalWrite(GREEN, true); Bot.answerCallbackQuery(Call_ID,"لامپ سبز روشن شد"); } } if(msg=="Rtg") /*Command For Green LED*/ { if(digitalRead(RED)) { digitalWrite(RED, false); Bot.answerCallbackQuery(Call_ID,"لامپ قرمز خاموش شد"); } else { digitalWrite(RED, true); Bot.answerCallbackQuery(Call_ID,"لامپ قرمز روشن شد"); } } if(msg=="Btg") /*Command For Green LED*/ { if(digitalRead(BLUE)) { digitalWrite(BLUE, false); Bot.answerCallbackQuery(Call_ID,"لامپ آبی خاموش شد"); } else { digitalWrite(BLUE, true); Bot.answerCallbackQuery(Call_ID,"لامپ آبی روشن شد"); } } Intor += "\n\n وضعیت لامپ ها\n"; Intor += "\n سبز: "; Intor += (digitalRead(GREEN)) ? "روشن":"خاموش"; Intor += "\n قرمز: "; Intor += (digitalRead(RED)) ? "روشن":"خاموش"; Intor += "\n آبی: "; Intor += (digitalRead(BLUE)) ? "روشن":"خاموش"; Intor += "\n\nتعداد درخواست های پردازش شده: " + String(Command_Run); Intor += "\n\nسیسوگ"; Command_Run++; Bot.EditMessage(mgs_id, sender_id, Intor, keyboardJson); } else { Serial.println("Get Message - " + msg); Bot.sendMessage(sender_id, Intor, keyboardJson); } } // The loop function is called in an endless loop void loop() { //Add your repeated code here Bot.GetUpdates(); delay(100); } |
دانلود سورس کد
برای دانلود سورس کد میتوانید به اکانت گیت هاب سیسوگ مراجعه کنید.
با توجه به فیلتر شدن پیام رسان تلگرام در ایران، میتوانید از مقاله اینترنت اشیاء و اتصال به ربات تلگرام بدون محدودیت و فیلتر برای راه اندازی ربات تلگرام بدون فیلتر استفاده کنید.
سلام
من کد رو کامپایل و آپلود کردم ولی بخاطر فیلترینگ تلگرام نمی تونم به بات متصل بشم
کامنت ها رو هم مطالعه کردم که گفته بودید از پروکسی استفاده کنید
اگه میشه بگید چطور می تونم از پروکسی یا هر چیز دیگه ای برای حل این مشکل استفاده کنم
ممنون
فکر کنم یه آموزش در این خصوص داریم
سلام اسم ربات چیه؟
سلام دوست عزیز
این مطلب صزفا اموزش کار با کتابخانه ای است که برای ارتباط با تلگرام نوشتم
سلام و تشکر و از آموزش های خوبتون،
1- ببخشید باید از کجا ربات تلگرامی را بسازیم و به چه صورت؟
2- کتابخانه های مورد استفاده مثلا وای فای و اینا را چطوری باید بگیریم؟
3- اگر بخوایم برنامه روی خود بورد اردوینو اپلود کنیم، باید ماژول وای فای پایه های TX,RX رو بصورت ضربدری به بورد متصل کنیم؟
ممنون میشم اگر سوال ها رو به ترتیب و ذکر شماره هر سوال و هر چه کاملتر پاسخ بدید.
تشکر.
1. برای ساخت ربات تلگرامی لازمه که مقاله آموزش اتصال ربات تلگرام به آردوینو – قسمت اول را مطالعه کنید.
2. کتابخانه های مورد استفاده را از ریپوزیتوری آردوینو میتونید دانلود کنید ؛ البته به صورت پیش فرض با خود آردوینو نصب میشود و نیازی به دانلود مجدد آنها ندارد.
3. برای این مورد مقاله آموزش اتصال ربات تلگرام به آردوینو – قسمت دوم را مطالعه کنید.
خواهش میکنم دوست عزیز.
۱- متوجه نشدم چطوری باید کتابخانه های مورد نیاز این پروژه رو باید از کجا بدست بیارم.
۲- من برنامه رو اول وریفای میگرم ولی نمیدونم چرا ارور میگیره به بورد ام. ولی وقتی توی قسمت بورد منیجر، بورد رو بحای اردوینو اونو؛ ماژول ESP8266 (از قبل اینو به بورد ها توی ide اردوینو اضافه کردم) قرار میدم مشکلی نداره و اروره رفع میشه در این حالت. چکار باید کنم که مشکلی که گفتم حل بشه؟
1. خوب ظاهرا از آردوینو دارید استفاده میکنید – خوب شما نیازی به اضافه کردن کتابخونه خاصی ندارید
2. خوب دوست عزیز با توجه به این که این برنامه برای بورد esp نوشته شده شما باید برای این بورد کامپایلش کنید و امکان کامپایلش روی بورد های uno و nano نیست
چون رم زیادی رو مورد استفاده قرار داده.
خب پس چکار کنم که روی خود بورد اردوینو کامپایل بشه؟
میخوام I/O های بیشتری داشته باشم، چرا که خود ماژول چندتا خروجی بیشتر نداره و ماژول من کلا 2 تا پایه خروجی داره
چکار کنم برای مرتفع کردن این مشکل و اجرای این کار؟
آها ؛ به نکته خوبی اشاره کردید دوست عزیز
ببینید به دلیل محدودیت حافظه میکروی AVR امکان گذاشتن کتاخونه LWIP که استک شبکه است روی اون وجود نداره ؛ پس ایم راه حل نا شدنی است
اما راه حل شدنی چیه ؟ ؛ اول این که از ماژول های ESP12E استفاده کنید که فکر میکنم حدود 8 تایی IO داشته باشند ؛ اگر باز اون تعداد IO کم هست ؛ به سادگی میتونید با استفاده از آیسی 74H595 هر تعداد خروجی که دوست دارید بسازید 🙂
با سلام .
میخواستم بدونم الان که تلگرام فیلتر شده باز هم میشه از این روش برای اتصال به سرور تلگرام استفاده کرد یا نه ؟ ممنونم
امم با توجه به فیلترینگ تلگرام ؛ استفاده مستقیم ممکن نیست ولی اگر بتونید از پارکسی اسنفاده کنید احتمالا مشکلی پیش نمیآد
سلام و وقت بخیر
بنده این پروژه رو کامل انجام دادم و برنامه رو در محیط آردینو کپی کردم ولی موقع کامپایل کردن با این ارور مواجه شدم:
exit status 1
Error compiling for board Adafruit HUZZAH ESP8266.
برنامه ی دیگه ای رو از سایت دیگه در محیط آردینو کپی کردم که تونستم جلو تر برم و برنامه کامپایل شد و آی پی رو از برنامه دریافت کردم
ولی در مرحله بعد هیچ چیز از ربات تلگرام دریافت نمیکنم و نمیتونم جلوتر برم
لطفا راهنمایی کنید
ممنونم
خوب الان من درست متوجه نشدم که مشکل کجاست ، شما موفق شدید که از ویرایشگر سیسوگ استفاده کنید یا نه ؟
چه مشکلی موقع کامپایل براتون ایجاد شد ، خطایی که نوشتید میگه که فراییند کامپایل با خطا مواجه شده ، ولی این خطا چیه ؟
سلام
نوروز مبارک
سوالی داشتم
با توجه به فیلترینگ تلگرام راه حلی برای اتصال برد با تلگرام میشناسید؟
سلام
نوروز شما هم مبارک
در واقع به شکل مستقیم امکانش فراهم نیست ؛ ساده ترین و قابل پیاده سازی ترین راهش اینه که از http پراکسی استفاده کنید!
سلام، میشه در موردش بیشتر توضیح بدید ؟ یا اگر آموزشی دارید به اون لینک کنید
با تشکر
سلام
انشالله توی هفته آینده مقاله اش رو منتشر می کنیم 🙂
ممنون برای پیگیری شما
سلام.ممنوناز سایت خوبتون
امکانش هست با برد اردوینو و شیلد شبکه این کار رو انجام داد؟
اگه میشه یه اموزش براش بزارید چون من تخصص کافی توی اردوینو ندارم. ممنون
سلام و درود
در واقع امکانش هست ولی با تغییرات زیاد
از اونجایی که ESP مقدار رم زیادی داره ما از متد Post و با کمک کتابخانه Json این کار رو انجام دادیم که رم زیادی نیاز داره ولی متاسفانه برد آردوینو رم کمی داره و برای این کار مجبورید که از متد GET استفاده کنید و در ضمن پیاده سازی لایه های شبکه هم هست که خودش نیاز به رم داره – پس کار راحتی نیست
متاسفانه در حال حاضر زمان کافی در اختیار نداریم که بتونیم این پروژه رو تغییرش بدیم شاید در آینده
ولی اگر در مسیر پیاده سازی سوالی داشتید خوشحال می شیم بتونیم کمکی کنیم.
سلام
من نتونستم از این کتابخانه در sisoog IDE استفاده کنم
ارور مربوط به Json میداد
آیا اضافه کردن کتابخانه به این ویرایشگر روش خاصی دارد؟
روش خاصی که نداره ،، البته دقت داشته باشید که کل سورس رو دانلود کنید چون کتابخونه های مزوبطه به JSON رو کنار پروژه قرار دادم و با باز کردن صحیح سورس اونام به صورت خودکار به پروژه اضافه می شوند.
نگاه کنید برای من کلیدها را که زیاد کردم را نمایش میدهد ولی ماژول یکسره ریست میشود و این متن را برای من مینویسد
Wait for WiFi… …..
Connect to NetWork …. OK
WiFi connected
IP address:
192.168.1.51
Bot Information
first name: STM32_bot
last_name:
username: microstm32_bot
Get CallBack – Gtg
Soft WDT reset
ctx: cont
sp: 3fff1250 end: 3fff1800 offset: 01b0
>>>stack>>>
3fff1400: 00000000 3ffeab47 00000001 4010068c
3fff1410: 5c5c5c5c 5c5c5c5c 5c5c5c5c 00000000
3fff1420: 000028a3 3fff2ae4 00000000 401004d8
3fff1430: 00000000 3fff2ae4 3fff4dec 40107374
3fff1440: 8f11318f 36363636 36363636 40230c74
3fff1450: 3fff2ae4 00000000 3fffb8ac 00000000
3fff1460: bedecef4 0a0a0a0b 00000000 00000000
3fff1470: 00000000 3fff2ae4 00000000 40231000
3fff1480: 00000000 000006c5 00000001 3fff2d8c
3fff1490: 0000059c 00000000 00000000 3fffb8ac
3fff14a0: 0000059c 00000018 00000000 0000000a
3fff14b0: 3fff3451 3fff3451 3fff49a4 000006c5
3fff14c0: 000006c5 00000000 3fff2b9c 40205c1c
3fff14d0: 000006c5 2e51668d 3fff159c 00000000
3fff14e0: 00000000 3fff2cd4 000006c5 40221c28
3fff14f0: 06020317 00000091 3fff1590 402065b4
3fff1500: 00000691 00000017 00000010 40202726
3fff1510: 3fff2cd4 3ffea270 3fff1590 00000000
3fff1520: 3fff2cd4 3fffb204 00000691 40221caf
3fff1530: 00000691 3fff9fe0 3fff1590 3ffea4f4
3fff1540: 3fff2838 00000000 3fff1590 3ffea4f4
3fff1550: 3fff2838 3fff159c 3fff061c 40205804
3fff1560: 3fff2838 3fff159c 3fff061c 40206bc9
3fff1570: 3fff2838 3fff9fd8 3fff1590 40206095
3fff1580: 00000200 3fff159c 3fff061c 40203d4a
3fff1590: 3fff15b4 00000691 00000000 3fffb204
3fff15a0: 0000069f 00000691 3fff7c14 0000000f
3fff15b0: 00000000 3fff159c 3fff1610 402063d1
3fff15c0: 3fff1610 3fff161c 00000691 00000000
3fff15d0: 3fff15f0 3fff8ec0 3fff2838 3fff060c
3fff15e0: 3fff9fd0 00000000 3fff2838 402044a3
3fff15f0: 3ffe9a08 00000000 3fffa9f4 00001000
3fff1600: 3ffe9a08 3fff16ac 3fff9fc4 00000800
3fff1610: 3fff7b64 0000004f 00000040 40206350
3fff1620: 3fff902c 00000495 3fff7bbc 0000004f
3fff1630: 00000040 00000591 3fff1670 402063d1
3fff1640: 3fff1688 00000100 3fff1694 3fff1670
3fff1650: 3ffe95ec 3fff0608 3fff060c 3fff1708
3fff1660: 3ffe8e7c 3fff0608 3fff060c 402020bf
3fff1670: 3fff9904 0000049f 00000495 3fff96ec
3fff1680: 0000020f 00000207 3fff4dd4 0000000f
3fff1690: 00000009 3fff4dbc 0000000f 00000003
3fff16a0: 3fff902c 0000049f 00000495 3fff94d4
3fff16b0: 0000020f 00000207 3fff16f0 402063d1
3fff16c0: 3fff1714 00000001 3fff16f0 40206444
3fff16d0: 00000007 3fff48a0 40201e84 3ffe9764
3fff16e0: 3fff060c 3fff48a0 40201e84 40203a74
3fff16f0: 3fff4d94 0000001f 00000012 3fff2acc
3fff1700: 0000000f 00000003 3fff2ab4 0000000f
3fff1710: 00000009 3fff2a9c 0000000f 00000003
3fff1720: 3fff21ac 0000000f 00000003 3fff2194
3fff1730: 0000000f 00000009 3fff2c0c 0000000f
3fff1740: 00000003 3fff4974 0000001f 00000012
3fff1750: 00000000 3fff4870 3fff060c 3fff48a0
3fff1760: 00000000 3fff4870 3fff060c 402041bc
3fff1770: 3ffe9a08 00000000 3fff8aa4 00000800
3fff1780: 3ffe9a08 3ffea4f4 3fff5274 00000200
3fff1790: 3fff828c 000005ff 000005f2 3fff2a54
3fff17a0: 0000003f 0000003b 00000000 00000000
3fff17b0: 00000001 04f8f181 00000000 00000000
3fff17c0: 00000000 00000000 00000000 3fff07d4
3fff17d0: 3fffdad0 00000000 3fff07cc 4020231c
3fff17e0: 3fffdad0 00000000 3fff07cc 402067b0
3fff17f0: feefeffe feefeffe 3fff07e0 40100718
<<<stack<<<
ets Jan 8 2013,rst cause:2, boot mode:(3,7)
load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v09f0c112
~ldÿ
این خطا مربوط به استک هست ، ببینید می تونید استک برنامه رو زیاد کنید
سلام دوست عزیزم من اینی برنامه را روی برد nodemcu بستم قشنگ جواب داد ولیکن من میخوام برنامه را بصورت سفارشی برای خودم تغییر بدم هر کار کردم نشد تعداد دمه ها را از 5 عدد بیشتر بگذارم چطور میتونم به هر تعدادی که لازم دارم دکمه قرار بدم؟
سلام و درود دوست عزیز
متشکر از حسن توجه شما ، خوب ما سعی کردیم که کتابخونه نوشته شده محدود به عدد خاصی نباشه و تنها محدودتی که وجود داره محدودیت رم و استک هست ؛ من فکر میکنم احتمالا استک برنامه پر شده باشه که اتفاق افتاده باشه