برد TTGO T Call بی شک یکی از خاص ترین برد های توسعه اینترنت اشیا می باشد . در این برد از یک ماژول ESP32 در کنار مودم SIM800L استفاده شده است که قابلیت های یک مودم GSM را در کنار SoC قوی ESP32 فراهم می سازد . این برد همچنین شامل یک چیپ IP5306_I2C می باشد که قابلیت مدیریت باتری را فراهم می سازد . در پشت این برد سوکت اتصال باتری قرار دارد که می توانید از آن برای اتصال باتری های لیپو به برد استفاده کنید . IP5306 از طریق رابط I2C توسط ESP32 کنترل می گردد که قابلیت هایی همچون فعال سازی شارژ ، کنترل شارژ ، مدت زمان شارژ و… را دارد . در واقع TTGO T Call یک پلتفرم پرتابل به حساب می آید . البته در ورژن های جدید تر این برد از چیپ AXP192 استفاده می شد که قابلیت های بسیار بیشتری نسبت به . در این آموزش به راه اندازی و دیباگ SIM800L برد و همچنین به راه اندازی IP5306 برد می پردازیم . در تصویر پایین پین های برد نشان داده شده اند :
برد TTGO T Call کلکسیونی از ارتباط های وایرلس مورد نیاز در اینترنت اشیا است که از بلوتوث ، WiFi ، GSM و GPRS پشتیبانی می کند . در پشت این برد یک سوکت سیمکارت قرار دارد که می توان سیمکارت را در آن قرار داد . همچنین از یک پورت micro USP Type C جهت ارتباط برد استفاده شده است که دلیل این امر جریان بالای SIM800 در لحظه کانکت شدن با شبکه می باشد . برای اتصال این برد به کامپیوتر باید برد را به پورت USB 3 متصل نماید (پورت آبی رنگ USB ) . در تصویر پایین شماتیک قسمت های مختلف برد نشان داده شده است :
قسمت مدیریت باتری با چیپ IP5302 :
مودم SIM800L :
ابتدا به قسمت شارژ باتری IP5306 می پردازیم . همان طور که در شکل نشان داده شده پین های I2C ماژول ESP32 به IP5306 متصل اند . پین 21 مربوط به SDA و پین 22 مربوط SCL می باشد . برای ارتباط با IP5306 از کتابخانه Wire استفاده می کنیم . برای این کار ابتدا آدرس IP5306 را باید ارسال و سپس بایت های کنترلی را فرستاد . آدرس پیش فرض IP5306 در اینجا 0xEA می باشد( در برخی از IP5306 ها آدرس I2C متفاوت ا . پس ابتدا این آدرس را باید از طریق I2C به IP5306 فرستاد . متاسفانه دیتاشیت IP5306 چینی هست و در این جا تنها به رجیستر های مهم IC می پردازیم که از طریق تست و ترجمه دیتاشیت به دست آمده .
اولین رجیستری IP5306 رجیستری 0x00 می باشد که بیت های آن به شرح زیر است :
بیت 7 تا 6 بیت های رزرو شده
بیت 5 جهت فعال سازی حالت قطع خروجی در بار کم است . در صورتی که این بیت فعال باشد اگر در خروجی IP5306 باری قرار نداشته باشد IP5306 به حالت خواب می رود .
بیت 4 جهت فعال سازی شارژ باتری می باشد .
بیت 3 رزرو است .
سایر بیت ها عملکرد های خاص خود را دارند .
در کد زیر نحوه فعال سازی حالت شارژ ماژول در آردوینو IDE نشان داده شده است می توانید از این تابع در برنامخ هود استفاده نمایید :
bool setPowerBoostKeepOn(int en){ Wire.beginTransmission(IP5306_ADDR); Wire.write(IP5306_REG_SYS_CTL0); if (en) { Wire.write(0x37); // Set bit1: 1 enable 0 disable boost keep on } else { Wire.write(0x35); // 0x37 is default reg value } return Wire.endTransmission() == 0; }
مدار SIM800 و راه اندازی آن :
همان طور که در تصویر بالا نشان داده شده . ماژول SIM800 از طریق پین های چهار پین با ماژول ESP32 در ارتباط است . این پین ها به شرح زیر می باشد :
پین PWRKEY ماژول SIM800 به GPIO4 متصل است .
پین REST ماژول SIM800 به GPIO5 متصل است .
پین های RX و TX ماژول SIM800 به ترتیب به پین های 27 و 26 ماژول ESP32 متصل هستند .
برای ارتباط سریال ESP32 با ماژول SIM800 از واحد UART2 ماژول ESP32 استفاده شده است . همپنین برای فعال کردن SIM800 باید پین PWRKEY به مدت یک ثانیه صفر کرده و سپس آن را یک کرد تا SIM800 فعال شود .
برنامه زیر را بر روی برد خود آپلود کنید . در این برنامه از طریق Serial monitor می توانید فرمان های AT را به SIM800
#include <Arduino.h> #include "utilities.h" // Set serial for debug console (to the Serial Monitor, default speed 115200) #define SerialMon Serial // Set serial for AT commands (to the module) #define SerialAT Serial1 void setupModem() { #ifdef MODEM_RST // Keep reset high pinMode(MODEM_RST, OUTPUT); digitalWrite(MODEM_RST, HIGH); #endif pinMode(MODEM_PWRKEY, OUTPUT); pinMode(MODEM_POWER_ON, OUTPUT); // Turn on the Modem power first digitalWrite(MODEM_POWER_ON, HIGH); // Pull down PWRKEY for more than 1 second according to manual requirements digitalWrite(MODEM_PWRKEY, HIGH); delay(100); digitalWrite(MODEM_PWRKEY, LOW); delay(1000); digitalWrite(MODEM_PWRKEY, HIGH); // Initialize the indicator as an output pinMode(LED_GPIO, OUTPUT); digitalWrite(LED_GPIO, LED_OFF); } void setup() { // Set console baud rate SerialMon.begin(115200); // Set GSM module baud rate and UART pins SerialAT.begin(115200, SERIAL_8N1, MODEM_RX, MODEM_TX); setupModem(); } void loop() { while (SerialAT.available()) { SerialMon.write(SerialAT.read()); } while (SerialMon.available()) { SerialAT.write(SerialMon.read()); } }