برد 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());
    }

}

 

 

Tags:
About Author: USER_4