Электронный компонент:Seeeduino GPRS

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Seeeduino GPRS[1]

Seeeduino GPRS – это плата, предназначенная для проектов в сфере интернета вещей. Ее можно подключить к интернету при помощи беспроводной сети GPRS. Также поддерживаются прием/отправка телефонных звонков и SMS-сообщений. Главные компоненты платы – процессор ATmega32U4 и модуль SIM800H. ATmega32U4 – это микроконтроллер, совместимый с Arduino. Модуль SIM800H поддерживает 4-диапазонную связь 850/900/1800/1900 МГц, а также способен передавать голосовые звонки, SMS и другие данные. Кроме того, SIM800H оснащен дополнительными функциями вроде Bluetooth и FM-радио. Также стоит упомянуть о низком энергопотреблении – в спящем режиме SIM800H потребляет всего 0,1 мА.

Области применения

Вот несколько проектов, созданных на базе Seeeduino GPRS:

Функции

  • Совместимость со стандартной Arduino Leonardo
  • Четыре диапазона частот – 850/900/1800/1900 МГц
  • Разъем для наушников
  • Внешний держатель для SIM-карты
  • Управление через AT-команды
  • Поддержка Bluetooth
  • Поддержка FM-радио
  • Сила тока менее 2 ампер
  • Загрузчик от Arduino Leonardo

Характеристики

Модуль SIM800H

Параметр Значение
Четыре диапазона частот 850/900/1800/1900 МГц
Первая часть класса GPRS B
Вторая часть класса GPRS (мультислот-классы) 12/10
Стандартная GSM-фаза 2/2+
FM-радио 76-109 МГц
Bluetooth Совместимость с 3.0 + EDR
Диапазон питающего напряжения 3,4 – 4,4 вольта

Микроконтроллер Arduino (ATmega32U4)

Параметр Значение
Flash-память 32 Кб
SRAM 2,5 Кб
EEPROM 1 Кб
Тактовая частота 16 МГц
Рабочее напряжение 5 вольт
Цифровые I/O контакты 20 шт.
Каналы ШИМ 7 шт.
Входные аналоговые каналы 12 шт.

Описание компонентов

На картинке ниже показаны компоненты Seeeduino GPRS – чтобы вы лучше понимали, как устроена плата.

  • Переключатель питания. Используется для переключения вольтовой логики и выходного напряжения платы между 5 и 3,3 вольтами. В настоящее время выпускается много датчиков, работающих на 3,3 вольтах. При использовании других плат Arduino для работы с этими датчиками нужно дополнительно подключать преобразователь вольтовой логики, но на Seeeduino GPRS этого делать не нужно – как раз благодаря наличию переключателя питания.
  • Входной DC-разъем (входной DC-разъем). Позволяет питать Seeeduino GPRS от настенного адаптера – на тот случай, если вашему проекту потребуется больше питания (например, при использовании моторов постоянного тока или других устройств, имеющих повышенные требования к энергопотреблению). Напряжение на этом порте может быть в диапазоне от 9 до 12 вольт, а максимальная сила тока – 2 ампера. Но на Seeeduino GPRS есть аппаратный баг, который нужно иметь в виду. При питании от внешнего источника на контакте 5V напряжение на короткий промежуток (длящийся около 2 мс) поднимается до 6 вольт. Таким образом, есть риск, что устройство, подключенное к контакту 5V, будет повреждено. Поэтому мы не рекомендуем использовать входной DC-разъем для питания системы. Разработчики пишут, то уже работают над исправлением этого бага, но в ближайшее время его исправления ждать не стоит.
  • Контакты для SIM800H. Через эти контакты можно осуществлять отладку SIM800H.
  • ICSP. Это ICSP-гребешок для коммуникации с ATMEGA32U4-MUR. Расположен там же, где находится стандартный ICSP/SPI на устройствах (например, * «шилдах»), совместимых с Arduino Uno, Due, Mega и Leonardo. Контакты SPI на этом порте – MISO, SCK и MOSI. Обратите внимание, что эти контакты НЕ ПОДКЛЮЧЕНЫ к цифровым контактам D11-D13.
  • LED PWR1. Светодиод, сообщающий о питании Seeeduino GPRS.
  • LED PWR2. Светодиод, сообщающий о питании SIM800H.
  • LED STA. Светодиод, сообщающий о том, находится ли плата в рабочем состоянии.
  • LED PIN13. Светодиод, подключенный к 13-ому контакту Seeeduino GPRS.
  • LED NET. Светодиод, сообщающий о поведении SIM800H. Возможные паттерны мигания:


Статус Поведение SIM800H
Выключен SIM800H не работает
64 мс – включен / 800 мс – выключен SIM800H не зарегистрировал сеть
64 мс – включен / 3000 мс – выключен SIM800H зарегистрировал сеть
64 мс – включен / 300 мс – выключен SIM800H установил соединение

Установка драйвера

Во-первых, сделайте следующее:

  • Возьмите кабель MicroUSB. Для этих целей подойдет, к примеру, кабель от телефона Android. Если у вас такого нет, то его можно купить, к примеру, тут.
  • Подключите плату. Подключите плату к компьютеру при помощи USB-кабеля. В результате на плате должен загореться зеленый светодиод с надписью PWR1.

Для Windows

Примечание: Этот драйвер совместим с Windows XP, Windows Vista, Windows 7, Windows 8/8.1 и Windows 10.

Загрузить драйвер можно по этой ссылке.

  • Подключите плату и подождите, пока Windows начнет процесс установки драйвера. Спустя некоторое время ОС сообщит, что процесс установки, несмотря на все усилия, не удался.
  • Откройте «Панель управления».
  • Находясь в «Панели управления», откройте меню «Система и безопасность», а затем «Система». После этого откройте «Диспетчер устройств».
  • Найдите пункт «Порты (COM и LPT. В нем должен быть открытый порт под названием «Seeeduino GPRS». Если пункта «Порты (COM и LPT нет, ищите пункт «Другие устройства», а в нем запись «Неизвестное устройство».
  • Кликните правой кнопкой мыши на порт «Seeeduino GPRS» и выберите опцию «Обновить драйвер».
  • Далее выберите опцию «Выполнить поиск драйверов на этом компьютере».
  • Наконец, найдите скачанный драйвер – он должен называться «seeed_usb_serial.inf»
  • На этом установка драйвера должна завершиться.

Для Mac OSX

На этой ОС драйверы устанавливать не нужно.

С чего начать

Примечание: Этот раздел написан на примере IDE Arduino версии 1.6.9, установленной на Windows 10.

В самом начале нужно установить среду IDE Arduino. Загрузить ее можно с этой страницы.

Запускаем IDE Arduino

Установите IDE Arduino, а потом запустите ее.

Примечание: Если IDE Arduino запустилась на чужом языке, его можно поменять в меню «Настройки» («Preferences»). Более подробно читайте на этой странице, в разделе «Языковая поддержка».

Откройте пример «Blink»

Для этого кликните в IDE Arduino на Файл > Примеры > 01.Basics > Blink (File > Examples > 01.Basics > Blink).

Выбираем плату

Для этого кликаем в IDE Arduino на Инструменты > Плата (Tools > Board) и выбираем плату, соответствующую вашей Arduino. В нашем случае нужно выбрать «Arduino Leonardo».

Выбираем последовательный порт

Для этого кликните в IDE Arduino на Инструменты > Порт (Tools > Port) и выберите нужный порт. Это будет, скорее всего, COM3 или выше (COM1 и COM2 обычно зарезервированы для аппаратных последовательных портов). Чтобы найти нужный порт, отключите плату от компьютера и снова откройте это меню. Порт, который исчез, и является портом, к которому подключена Seeeduino GPRS. Переподключите плату и выберите найденный порт.

Примечание: На Mac этот порт должен выглядеть примерно так: «/dev/tty.USBmodem».

Загружаем программу

Теперь просто кликаем на кнопку «Загрузка» («Upload») в IDE Arduino. Ждем несколько секунд и, если загрузка пройдет успешно, в статусной панели появится сообщение «Загрузка завершена».

Кроме того, спустя несколько секунд после завершения загрузки на плате должен замигать зеленый светодиод, подключенный к 13-ому контакту. Если замигал, поздравляем! Это значит, что Seeeduino GPRS работает.

Если используете Linux, то об установке IDE Arduino на эту ОС читайте тут.

Скетчи-примеры для Seeeduino GPRS

Seeeduino GPRS оснащена функциями мобильного телефона – она может делать/принимать телефонные звонки и SMS-сообщения, осуществлять TCP-коммуникацию и т.д. Но для всего этого понадобится библиотека, которая называется «Seeeduino GPRS», и скачать ее можно с этого GitHub-репозитория. Загрузите ее и установите в IDE Arduino (о том, как устанавливать в IDE Arduino дополнительные библиотеки, читайте тут).

Для того, чтоб начать работать с Seeeduino GPRS, понадобятся наушники и SIM-карта.

Телефонный звонок

Откройте скетч-пример «GPRS_CallUp». Для этого кликните в IDE Arduino на Файл > Открыть... (File > Open…), найдите папку «libraries/Seeeduino_GPRS/example/GPRS_CallUp», выделите скетч «GPRS_CallUp.ino» и нажмите «Открыть». Когда скетч откроется, найдите функцию callUp() и замените ее аргумент – это телефонный номер, на который будет делаться звонок. Затем скомпилируйте скетч и загрузите его на плату. После этого Seeeduino GPRS позвонит на номер, указанный в скетче.

#include <gprs.h>
#include <SoftwareSerial.h>

GPRS gprs;

void setup() {
    Serial.begin(9600);
    Serial.println("GPRS - Call up Test...");
               //  "GPRS – тест звонка..."
    gprs.preInit();  //  включаем питание SIM800
    delay(1000);
    while(0 != gprs.init()) {  //  инициализируем GPRS
        delay(1000);
        Serial.print("init error\r\n"); // "Ошибка инициализации\r\n"
    }
    Serial.println("Init success, start to call...");
               //  "Инициализация удалась, делаем звонок..."
    gprs.callUp("150****9566");
}

void loop() {
     //  в блоке loop() ничего не делаем
}

Отправка SMS

Кроме того, Seeeduino GPRS может и отправлять SMS-сообщения. Сначала откройте скетч-пример «GPRS_SendSMS». Для этого кликните в IDE Arduino на Файл > Открыть... (File > Open…), найдите папку «libraries/Seeeduino_GPRS/example/GPRS_SendSMS», выделите скетч «GPRS_SendSMS.ino» и нажмите «Открыть». Далее найдите функцию sendSMS() и замените ее аргументы – это телефонный номер, на который будет отправлено SMS, и само SMS. Затем скомпилируйте скетч и загрузите его на плату. После этого Seeeduino GPRS отправит сообщение на номер, указанный в скетче.

#include <gprs.h>
#include <SoftwareSerial.h>

GPRS gprs;

void setup() {
    Serial.begin(9600);
    Serial.println("GPRS - Send SMS Test ...");
               //  "GPRS – тест SMS-сообщения..."
    gprs.preInit();
    delay(1000);
    while(0 != gprs.init()) {
        delay(1000);
        Serial.print("init error\r\n"); // "Ошибка инициализации\r\n"
    }
    Serial.println("Init success, start to send SMS message...");
               //  "Инициализация удалась, отправляем SMS..."
    //  указываем в аргументах телефонный номер и SMS-сообщение:
    gprs.sendSMS("130****3364","hello,world");
}

void loop() {
    //  в блоке loop() ничего не делаем
}

Прием телефонного звонка и SMS-сообщения

Seeeduino GPRS также умеет отвечать на звонки и считывать присылаемые SMS-сообщения. Откройте скетч «GPRS_LoopHandle». Для этого кликните в IDE Arduino на Файл > Открыть... (File > Open…), найдите папку «libraries/Seeeduino_GPRS/example/GPRS_LoopHandle», выделите скетч «GPRS_LoopHandle.ino» и нажмите «Открыть». Затем скомпилируйте скетч и загрузите его на плату. После этого Seeeduino GPRS начнет мониторить входящие звонки и SMS. В случае входящего звонка Seeeduino GPRS ответит на него автоматически. В случае входящего SMS-сообщения Seeeduino GPRS покажет его в мониторе порта.

#include <gprs.h>
#include <SoftwareSerial.h>
#include <stdio.h>

char gprsBuffer[64];
int i = 0;
char *s = NULL;
int inComing = 0;

GPRS gprs;

void setup() {
    Serial.begin(9600);
    Serial.println("GPRS - LoopHandle Test...");
               //  "GPRS – тест приема звонков и SMS..."
    gprs.preInit();
    while(0 != gprs.init()) {
        delay(1000);
        Serial.print("init error\r\n"); // "Ошибка инициализации\r\n"
    }
    Serial.println("Init success, start to monitor your call or message...");
               //  "Инициализация удалась, 
               //   начинаем отслеживать звонки и SMS..."
}

void loop() {
    if(gprs.serialSIM800.available()) {
        inComing = 1;
    }else{
        delay(100);
    }

    if(inComing){
        gprs.readBuffer(gprsBuffer,32,DEFAULT_TIMEOUT);
        Serial.print(gprsBuffer);

        if(NULL != strstr(gprsBuffer,"RING")) {
            gprs.answer();
        }else if(NULL != (s = strstr(gprsBuffer,"+CMTI: \"SM\""))) { //SMS: $$+CMTI: "SM",24$$
            char message[MESSAGE_LENGTH];
            int messageIndex = atoi(s+12);
            gprs.readSMS(messageIndex, message,MESSAGE_LENGTH);
            Serial.print(message);
        }
        gprs.cleanBuffer(gprsBuffer,32);
        inComing = 0;
    }
}

FM-радио

Еще одна функция Seeeduino GPRSFM-радио. Откройте скетч «FM_Test». Для этого кликните в IDE Arduino на Файл > Открыть... (File > Open…), найдите папку «libraries/Seeeduino_GPRS/example/FM_Test», выделите скетч «FM_Test.ino» и нажмите «Открыть». Затем скомпилируйте скетч и загрузите его на плату. Seeeduino GPRS начнет вести себя как FM-радио. Вы даже сможете менять FM-канал при помощи кнопки.


#include <fm.h>
#include <SoftwareSerial.h>

int channelButton = 5;  //  кнопка для переключения FM-канала
FM fm;

void setup() {
    pinMode(channelButton,INPUT);
    Serial.begin(9600);
    Serial.println("FM Test...");  //  "Тест FM-радио..."

    fm.preInit();
    while(0 != fm.powerOn()){
        Serial.println("FM power on failed, try again...");
                   //  "Включить FM-радио не удалось, 
                   //   пробуем снова.."
        delay(2000);
    }
    fm.setVolume(6); //0,1,2,3,4,5,6
    fm.scanChannel();
    Serial.println("FM init success");
               //  "Инициализация FM-радио прошла успешно"
}

void loop() {
    while(HIGH == digitalRead(channelButton)){
        delay(50);
    }
    Serial.print("change Channel\r\n");
             //  "Меняем канал\r\n"

    fm.channelNext();
    while(LOW == digitalRead(channelButton)){
        delay(50);
    }
}

Функция Bluetooth

Seeeduino GPRS можно также использовать как Bluetooth-устройство, но эта функция пока работает не очень стабильно. В библиотеке «Seeeduino GPRS» есть два скетча-примера, связанные с функцией Bluetooth. Первый – это «Bluetooth_Call_PhoneNumber.ino», который ждет от вас AT-команды для того, чтобы сделать телефонный звонок. Второй – это «Bluetooth_AT_Command_And_Music_Play.ino», который тоже ждет от вас команды, но для того, чтобы установить Bluetooth-сопряжение с другим устройством.

Ниже показан скетч-пример «Bluetooth_AT_Command_And_Music_Play.ino»:

#include <bluetooth.h>
#include <SoftwareSerial.h>

#define DEFAULT_TIMEOUT 5
#define BT_BUF_LEN      64 
//32
BlueTooth bluetooth;

char bluetoothBuffer[BT_BUF_LEN];
int start = 0;
int ready = 0;

void setup() {
  Serial.begin(9600);
  while(!Serial);
  Serial.println("Bluetooth AT Command Test...");
             //  "Тест Bluetooth-сопряжения с другим устройством"
  bluetooth.preInit();
  delay(3*1000);
  while(0 != bluetooth.powerOn()){ //bluetooth PowerOn
    Serial.println("bluetooth power on failed, try again...");
               //  "Включить Bluetooth не удалось, пробуем снова..."
    delay(2000); 
  }
  Serial.println("Bluetooth is on."); 
             //  "Bluetooth включен."

  
  // проверяем, подключен ли Bluetooth:    
  if(0 == bluetooth.sendCmdAndWaitForResp("AT+BTSTATUS?\r\n", "AVRCP", 2) ){
    Serial.println("Bluetooth has connectted..."); 
               //  "Bluetooth подключен..."
    ready = 1;
  }else{
    ready = 0;
    Serial.println("No bluetooth connectted, please open you phone's bluetooth and try to connect \"SIM800\"...");     
               //  "Bluetooth не подключен, запустите Bluetooth
               //   на телефоне и попробуйте подключиться к SIM800..." 
  }  
}

void loop() 
{   
  while(!bluetooth.serialSIM800.available());
  bluetooth.readBuffer(bluetoothBuffer,BT_BUF_LEN,2); //DEFAULT_TIMEOUT
  //Serial.println(bluetoothBuffer);  
      
  //  разрешаем сопряжение:
  if(NULL != strstr(bluetoothBuffer,"+BTPAIRING:")){  
    bluetooth.acceptPairing();      
    Serial.println("Bluetooth paired...");
               //  "Bluetooth-сопряжение установлено..."
  }    
  //  разрешаем подключение:
  else if(NULL != strstr(bluetoothBuffer,"+BTCONNECTING:")){ 
    bluetooth.acceptConnect();      
    Serial.println("Bluetooth successfully connected...");   
               //  "Bluetooth успешно подключен..."                             
  }
  bluetooth.cleanBuffer(bluetoothBuffer,64);
}

Полезные ссылки

Схемы

Прошивка

AT-команды для SIM800

Библиотека Seeeduino GPRS

См.также

Внешние ссылки