Электронный компонент: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 мА.
Области применения
- Интернет вещей
- Умный дом
- Носимая электроника
- DIY-телефоны
- Промышленность
Вот несколько проектов, созданных на базе 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 GPRS – FM-радио. Откройте скетч «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);
}