Модуль GSM GPRS A6 SMS Speech на плате с антенной

Код:00912
Артикул:M-A6
В наличии:сейчас нет
Модуль GSM/GPRS A6 \ SMS \ Speech на плате с антенной

После огромного успеха IoT модулей ESP8266, компания-разработчик AI-THINKER представляет новинку 2016 года – GSM/GPRS модуль Ai-Thinker A6 на плате с антенной.  Предназначен для отправки и получения SMS-сообщений и передачи и приема данных GPRS (TCP / IP, HTTP и т.д.). Поддержка стандартных GSM 07.07,07.05 AT-команд, а так же специальных команд AI-THINKER. Модуль совместим с российскими сотовыми операторами. Продается на плате с внешним питанием от 5В. Плата имеет компактные размеры и отличается низким энергопотреблением.
 
GSM/GPRS модуль Ai-Thinker A6 на плате с антенной
 
Характеристики:
 
  • Рабочее напряжение: 4.5 – 5.5В через USB-micro или отдельными контактами;
  • Рабочее напряжение чипа: 3.3 - 4.6В;
  • Рабочая температура: -30 ... +80 градусов;
  • Потребление в активном режиме: 100 - 900 мА;
  • Потребление в экономном режиме: 3 мА;
  • Интерфейс UART, скорость по умолчанию 115200бит/с (есть автоопределение скорости при отправке команды AT) ;
  • GPRS Class 10 : Макс. 85.6 кбит;
  • Протоколы : PPP, TCP, UDP, MUX;
  • Поддержка PBCCH;
  • CSD : до 14,4 кбит;
  • SIM / USIM : 3V / 1.8V;
  • Голос: подавление эха, подавление шума.
 
 
Назначение контактов модуля:
 
GSM/GPRS модуль Ai-Thinker A6 на плате с антенной 
 Для включения модуля соединить контакт PWR_KEY с питанием (более 1.9В) не менее двух секунд.
Контакт GPIO_1 - для перехода в режим сна. Низкий уровень – в режиме сна, высокий уровень – активный режим. В режиме сна последовательный порт отключается.
Для сброса модуля необходимо подать низкий уровень (менее 0.05В) на контакт RESET (аппаратный сброс модуля).
Взаимодействие с модулем осуществляется по последовательному порту посредством AT-команд.
Для проверки работы модуля подключим его к компьютеру.
Вставляем SIM-карту в модуль. Для подключения модуля к компьютеру будем использовать  конвертер USB-TTL, например такой. Соединяем модуль с конвертером:
 
Модуль GSM/GPRS A6 Конвертер USB-TTL
VCC5.0 VCC
GND GND
UART_TXD Rx
UART_RXD Tx

На компьютере запускаем терминальную программу, можно Монитор последовательного Порта Arduino IDE, но лучше например такую (при отправке некоторых команд необходимо отправлять символ Ctrl-Z). Выбираем скорость. Модуль может автоматически подстраиваться под следующую скорость обмена: 2400, 4800, 9600, 14400, 19200, 28800, 33600, 38400, 57600, 115200, 230400, 460800, 921600. По умолчанию скорость модуля 115200. Если хотите работать на другой скорости, то после включения модуля необходимо около 3 секунд посылать команду AT и модуль сообразит, что с ним хотят общаться на этой скорости.
Для включения нажимаем кнопку POWER на модуле не меньше 2 секунд и можно работать в терминале.

Модуль GSM/GPRS  A6 \ SMS \ Speech на плате с антенной
 
GSM/GPRS модуль Ai-Thinker A6 на плате с антенной купить

Для просмотра версии модуля отправить команду
ATI
 
Для отправки SMS-сообщения:
AT + CMGF = 1
AT + CMGS = "+79035556677"  // номер телефона
После появления символа  >  ввести сообщение
> smstext
нажмите Ctrl-Z и Enter (не работает в монитор последовательного порта Arduino).
 
Позвонить на телефон:
ATD89035556677<Enter>
 
Список АТ команд для данного модуля можете скачать по ссылке.
 
Теперь подключим модуль к Arduino и напишем скетч для отправки данных об уровне заряда батареи (датчик подключен в аналоговому входу A0) в облачный сервис data.sparkfun.com.
 
 
#include
#define OK 1
#define NOTOK 2
#define TIMEOUT 3
#define RST 2
 
SoftwareSerial A6board (10, 3);  // Rx- 10, Tx-3
#define A6baud 9600
#define SERIALTIMEOUT 3000
 
char end_c[2];
unsigned long millist;
 
void setup() {
  A6board.begin(A6baud);   // скорость обмена с GPRS
  Serial.begin(9600);            // скорость Serial
  // ctrlZ
  end_c[0] = 0x1a;
  end_c[1] = '\0';
  Serial.println("Start");
 
  pinMode(RST, OUTPUT);
  digitalWrite(RST, HIGH);
  delay(5000);
  digitalWrite(RST, LOW);
  delay(500);
  if (A6begin() != OK) {
    Serial.println("Error");
    while (1 == 1);
  }
}
 
void loop()
{
  A6command("AT+CIPSTATUS", "OK", "yy", 10000, 2);
  if(millis()-millist >= 5*60000) {
     Serial.println("--Post value to Sparkfun--");
     float batt = (float)analogRead(A0) * 5.165 / 594.0;
     sendSparkfunGSM(1, batt);
     millist=millis();
  }
   if ( A6board.available())
     Serial.write( A6board.read());
 
}
 
 
 
// отправка данных в sparkfun.data,com
bool sendSparkfunGSM(byte sparkfunType, float value1) {
  String host = "data.sparkfun.com";
  String publicKey   = "QGyWvOR04Mcqw7oZ2Qrp";
  String privateKey = "Jqym6Ma281SynPV6qer5";
  A6command("AT+CIPSTATUS", "OK", "yy", 10000, 2);
  A6command("AT+CGATT?", "OK", "yy", 20000, 2);
  A6command("AT+CGATT=1", "OK", "yy", 20000, 2);
  A6command("AT+CIPSTATUS", "OK", "yy", 10000, 2);
  A6command("AT+CGDCONT=1,\"IP\",\"gprs.swisscom.ch\"", "OK", "yy", 20000, 2);
  A6command("AT+CIPSTATUS", "OK", "yy", 10000, 2);
  A6command("AT+CGACT=1,1", "OK", "yy", 10000, 2);
  A6command("AT+CIPSTATUS", "OK", "yy", 10000, 2);
  A6command("AT+CIFSR", "OK", "yy", 20000, 2); //get local IP adress
  A6command("AT+CIPSTATUS", "OK", "yy", 10000, 2);
  A6command("AT+CIPSTART=\"TCP\",\"" + host + "\",80", "CONNECT OK", "yy", 25000, 2);
  A6command("AT+CIPSTATUS", "OK", "yy", 10000, 2);
  // отправка данных на сервер метод get
  A6command("AT+CIPSEND", ">", "yy", 10000, 1);
  delay(500);
  A6board.print("GET /input/");
  A6board.print(publicKey);
  A6board.print("?private_key=");
  A6board.print(privateKey);
  A6board.print("&battery=");
  A6board.print(value1, 2);
  A6board.print(" HTTP/1.1");
  A6board.print("\r\n");
  A6board.print("HOST: ");
  A6board.print(host);
  A6board.print("\r\n");
  A6board.print("\r\n");
 
 
  // begin send data to remote server
  A6command(end_c, "HTTP/1.1", "yy", 30000, 1);
  unsigned long   entry = millis();
  A6command("AT+CIPSTATUS", "OK", "yy", 10000, 2);
  A6command("AT+CIPCLOSE", "OK", "yy", 15000, 1);
  A6command("AT+CIPSTATUS", "OK", "yy", 10000, 2);
  delay(100);
  Serial.println("End");
}
 
 
byte A6waitFor(String response1, String response2, int timeOut) {
  unsigned long entry = millis();
  int count = 0;
  String reply = A6read();
  byte retVal = 99;
  do {
    reply = A6read();
    if (reply != "") {
      Serial.print((millis() - entry));
      Serial.print(" ms ");
      Serial.println(reply);
    }
  } while ((reply.indexOf(response1) + reply.indexOf(response2) == -2) && millis() - entry < timeOut );
  if ((millis() - entry) >= timeOut) {
    retVal = TIMEOUT;
  } else {
    if (reply.indexOf(response1) + reply.indexOf(response2) > -2) retVal = OK;
    else retVal = NOTOK;
  }
  //  Serial.print("retVal = ");
  //  Serial.println(retVal);
  return retVal;
}
 
byte A6command(String command, String response1, String response2, int timeOut, int repetitions) {
  byte returnValue = NOTOK;
  byte count = 0;
  while (count < repetitions && returnValue != OK) {
    A6board.println(command);
    Serial.print("Command: ");
    Serial.println(command);
    if (A6waitFor(response1, response2, timeOut) == OK) {
      //     Serial.println("OK");
      returnValue = OK;
    } else returnValue = NOTOK;
    count++;
  }
  return returnValue;
}
 
 
 
 
void A6input() {
  String hh;
  char buffer[100];
  while (1 == 1) {
    if (Serial.available()) {
      hh = Serial.readStringUntil('\n');
      hh.toCharArray(buffer, hh.length() + 1);
      if (hh.indexOf("ende") == 0) {
        A6board.write(end_c);
        Serial.println("ende");
      } else {
        A6board.write(buffer);
        A6board.write('\n');
      }
    }
    if (A6board.available()) {
      Serial.write(A6board.read());
    }
  }
}
 
 
bool A6begin() {
  A6board.println("AT+CREG?");
  byte hi = A6waitFor("1,", "5,", 1500); 
  while ( hi != OK) {
    A6board.println("AT+CREG?");
    hi = A6waitFor("1,", "5,", 1500);
  }
 
  if (A6command("AT&F0", "OK", "yy", 5000, 2) == OK) {  
    if (A6command("ATE0", "OK", "yy", 5000, 2) == OK) { 
      if (A6command("AT+CMEE=2", "OK", "yy", 5000, 2) == OK) return OK; 
      else return NOTOK;
    }
  }
}
 
void ShowSerialData()
{
  unsigned long entry = millis();
  while ( A6board.available() != 0 && millis() - entry < SERIALTIMEOUT)
    Serial.println(A6board.readStringUntil('\n'));
}
String A6read() {
  String reply = "";
  if (A6board.available())  {
    reply = A6board.readString();
  }
  return reply;
}
 
 
И смотрим в сервисе отправленные данные


 
Вверх