Плата розширення GSM/GPRS і GPS для Raspberry Pi
Рейтинг статті: / 7
НайгіршеНайкраще 
SIM908-GSM-RPIПлата розширення для Raspberry Pi може ефективно контролювати модулі GSM GPRS SIM900 і SIM908 (з GPS) і, таким чином, значно розширити функціональність Raspberry Pi для мобільних додатків.
GSM-RPI-1
Такого типу розширення для Raspberry Pi призначені для штабелювання один на одному і тому в змозі керувати кількома завданнями одночасно: ви зможете включати різні «послуги» в одному інтегрованому рішенні. Це зручно у випадку створення системи домашньої автоматизації, оснащеної датчиками і виконавчими пристроями, які використовують РК-дисплей для активації і деактивації, коли необхідно додати віддалений інтерфейс через GSM або TCP/IP мережу.
Можна також додати послуги безпеки для літніх людей, які активуються як локально, так і віддалено, використовуючи можливості зв'язатися з заздалегідь визначеним номером за допомогою голосу або SMS. Ми навіть можемо розробити автоматизовані двері, що відкриваються, використовуючи функцію розпізнавання обличчя, або відстеження руху: всі ці програми зможуть відправити нам зображення в разі підозрілої діяльності. Єдиним обмеженням є ваша уява і здатність розробляти і програмувати додатки. Складність цих застосувань перевищує можливості мікроконтролерів, хоча останні можуть бути використані для управлінні датчиками і периферійними пристроями.
В розширенні GSM/GPRS і GPS використовуються виводи GPIO для підключення до послідовного порту і два додаткових виводи вводу/виводу для живлення (вкл/викл) та вивід для скидання модуля SIM9XX.
Схема підключення
GSM-RPI-2
Схема підключення розширення GSM забезпечує підтримку як модуля SIM900, так і SIM908, щоб забезпечити автономну подачу живлення для модуля GSM, експортувати мікрофонний вхід і аудіовихід на два виділені гнізда і правильно з'єднати контакти роз'єму GPIO до модулів GSM.
U1 - стабілізатор живлення, який-через стабілітрони D1 і D2 подає напругу живлення на відповідний вивід модуля SIM9XX.
Також можна подавати живлення з Raspberry Pi через роз’єм J5V, а до гнізда PWR можна підключити зовнішнє джерело живлення, яке забезпечує постійний струм напругою 7-12 В.
Вивід ON/OFF (вкл/викл) SIM9XX підключається до контакту 13 (GPIO27) GPIO Raspberry Pi для програмного включення і виключення модуля.
Вивід скидання RST модуля SIM підключається до контакту 15(GPIO22) Raspberry Pi, також щоб дозволити контролювати його програмно. Послідовні виходи приймання/передавання використовують виводи 8 (TXD) і 10 (RXD) Raspberry Pi. Контакт для живлення буфера годинника реального часу (VRTC) підключений до конденсатора CRTC. Нарешті, лінійний вхід мікрофона і аудіовихід підключені до відповідних роз'ємів MIC і SPK.
Умовне зображення елементів на платі:
GSM-RPI-3
Практичне використання розширення
GSM-RPI-4
Перш за все ми повинні змонтувати один з сумісних модулів GSM на розширенні, а потім зібрати плату на Raspberry Pi, переконавшись, що нижня частина плати не торкається до роз'ємів USB або Ethernet. В іншому разі, просто захистіть роз'єми ізоляційною стрічкою. Підключіть периферійні пристрої і живлення Raspberry Pi в звичайному порядку.
За допомогою GNU/Linux, ми можемо створити програми, які виконують безліч функцій, спільно використовуючи такі ресурси, як GSM-модуль. Наприклад, ми могли б написати додаток, який відстежує такі зовнішні події, як вхідний голосовий виклик або SMS повідомлення, а також в змозі реагувати на такі внутрішні події, як активації введення/виводу даних і, відповідно, виконувати голосові виклики, відправляти масові або персональні SMS, відправляти файли (наприклад, зображення), або електронні листи і т.д. ... У той же час, ви можете додати гео-довідковуінформацію завдяки доступності GPS на платі.
Для виконання всіх цих функцій вам необхідно розробити модульну архітектуру, яка зможе спільно використовувати ресурси, не створюючи конфліктів. Архітектура, що складається з сервера модулів, інтерфейсу та управління ресурсами та спеціалізованихі модулів, які забезпечують описані функціональні можливості і, які можуть викликатися і виконуватися за певних умов. Це потребує послуг зв'язку між запитувачами (програмами) і серверними модулями, які можуть задовольнити їх відповідно з логікою, що забезпечує пріоритети і уникнення конфліктів. Для цього вам потрібно вникати аж до деталей функціональних вимог додатка, і це причина, чому, перш ніж заглиблюючись в розроблення клієнт/серверних додатків, ми пропонуємо вам режим, який дозволяє отримати гнучкий досвід управління . Цей режим дозволяє використовувати програми, написані для Arduino, з невеликими змінами, так, щоб ознайомити з платою у більш безпосередній формі. Цей режим використовує бібліотеку arduPi розроблену Libelium Comunicaciones SL Distribuidas, доступною під відкритою ліцензією і розміщеною на CookingHacks.
Надсилаємо SMS в стилі Arduino
Бібліотека arduPi може бути встановлений шляхом простого скачування архіву і вилучення вмісту в /home. Після цього, просто перейменуйте папку в ArduPi і, для простоти, покладемо програми, які збираємося реалізувати, в ту ж папку.
Перж, ніж скомпілювати бібліотеку, відкрийте програму arduPi.cpp і, якщо відрізняється, замініть рядок 64 з посиланням на існуючий послідовний порт на рядок:
serialPort=”/dev/ttyAMA0″;
Тепер переходимо в папку ArduPi з командою:
cd /home/ArduPi
і компілюємо бібліотеку за допомогою команди:
g++ -c arduPi.cpp -o arduPi.o
А те, що стосується програм, то ми пропонуємо три модулі. Два з них дозволяють включати і вимикати модуль GSM і будуть дуже корисними в майбутньому. Третій дозволяє відправити текстове повідомлення на мобільний телефон. Для включення модуля ви повинні підняти рівень на виводі GPIO27 і тримати високим протягом двох секунд, а потім повернути його назад в низький рівень, ця ж процедура повинна бути використана, щоб відключити його, якщо вік включений. Для скидання просто підняти і тримати на виводі GPIO22 високий рівень півсекунди (потім повернути його назад в низький). Ці програми можна безкоштовно завантажити на сайті www.elettronicain.it.
Передусім, щоб мати можливість використовувати послідовний порт, ми повинні внести зміни в процес завантаження і відключити послідовну консоль, бо інакше вона буде тримати послідовний порт зайнятим.
Відключення послідовної консолі
Майже всі системи GNU/Linux, включають при завантаженні функцію консолі, тобто: можливість підключення терміналу з послідовною лінії - реальної чи віртуальної - для управління всією системою через цей інтерфейс зв'язку. Це нагадує про часи, коли ми звикли підключатися до комп'ютерів завдяки модемам з використанням телефонної лінії. Щоб відключити консоль ми використовуємо WinSCP, переходимо в папку boot за допомогою команди:
cd /boot
відкриваємо подвійним клацанням миші файл /boot/cmdline.txt і видаляємо, зберігаючи увагу, наступні параметри:
console=ttyAMA0,115200 kgdboc=ttyAMA0,115200
та зберігаємо файл.
Приклади програм (включення модуля і відправка SMS)
GSM-RPI-5
Наведений нижче код має логіку для активації модуля. Процес активації модуля GSM включає наступні етапи:
  • Управління: відправити на послідовний порт команди AT і переконатися, що модуль не завантажений
  • У разі негативної відповіді (на передану команду AT ви повинні отримати рядок "OK"), як додаткову перевірку, виконати процедуру скидання з другою AT командою
  • У разі подальшої негативної відповіді на «запалювання», виконується процедура запуску, яка полягає у забезпеченні на виводі GPIO27 високий рівень сигналу протягом двох секунд.
Мета попередніх перевірок зв'язана з тим, що включення і виключення працює з одним і тим же процесом, тобто, якщо запустите програму без перевірки, то при вже включеному модулі GSM, він вимкнеться.
/*
*  GSMIgnition
*/
//Під’єднуємо бібліотеку ArduPi
#include "arduPi.h"
int resetModulePin = 9;
int onModulePin = 8;        
void switchModuleOn(){
   digitalWrite(onModulePin,HIGH);
   delay(2000);
   digitalWrite(onModulePin,LOW);
}
void resetModule(){
   digitalWrite(resetModulePin,HIGH);
   delay(500);
   digitalWrite(resetModulePin,LOW);
   delay(100);
}
int main (){
   Serial.begin(115200);                
   delay(2000);
   pinMode(resetModulePin, OUTPUT);
   pinMode(onModulePin, OUTPUT);
   Serial.flush();
   printf ("zero\n");
   Serial.print("AT");    
   delay(1000);
   if (Serial.available()==0)
      {
      printf ("uno\n");
      resetModule();
      delay(2000);
      }
   Serial.print("AT");
   delay(1000);
   if (Serial.available()==0)
      {
      printf ("due\n");
      switchModuleOn();                 
      }
return (0);
}
Щоб скомпілювати програму використовуємо команду:
g++ -lrt -lpthread GSMIgnition .cpp arduPi.o -o GSMIgnition
Щоб запустити програму, переходимо в папку ArduPi (cd /home/ArduPi) і вводимо:
./GSMIgnition
Ми можемо відстежувати дії з вмикання модуля GSM, спостерігаючи за зеленим світлодіодом: при включенні він світиться приблизно дві секунди, а потім вимикається і починає мигати з інтервалом близько півсекунди, як знак того, що модуль шукає мережі GSM. Коли мережа додається, то індикатор починає блимати з набагато меншою швидкістю, близько одного спалаху в секунду.
Нижче код програми для вимикання модуля, в якому реалізована дуже схожа з попереднім логіка:
  • Управління, відправкою команди AT на послідовний інтерфейс, що модуль ще не вимкнули,
  • якщо ні, якще один тест, виконується процедура скидання шляхом відправки другої команди AT
  • У разі позитивної відповіді, виконується процедура вимикання, яка полягає у забезпеченні на виводі GPIO27 високого рівня сигналу протягом двох секунд.
/*
*  GSMOff
*/
//Під’єднуємо бібліотеку ArduPi
#include "arduPi.h"
int resetModulePin = 9;
int onModulePin = 8;        
void switchModuleOff(){
   digitalWrite(onModulePin,HIGH);
   delay(2000);
   digitalWrite(onModulePin,LOW);
}
void resetModule(){
   digitalWrite(resetModulePin,HIGH);
   delay(500);
   digitalWrite(resetModulePin,LOW);
   delay(100);
}
int main (){
   Serial.begin(115200);                
   delay(2000);
   pinMode(resetModulePin, OUTPUT);
   pinMode(onModulePin, OUTPUT);
   Serial.flush();
   printf ("zero\n");
   Serial.print("AT");    
   delay(1000);
   if (Serial.available()==0)
      {
      printf ("uno\n");
      resetModule();
      delay(2000);
      }
   Serial.print("AT");
   delay(1000);
   if (Serial.available()>0)
      {
      printf ("due\n");
      switchModuleOff();                 //
      }
return (0);
}
Для компіляції програми GSMOff використовуємо команду:
g++ -lrt -lpthread GSMOff.cpp arduPi.o -o GSMOff
Щоб запустити програму, завжди після переходу в папку ArduPi, скористаємося командою:
./ GSMOff
Нарешті, в коді нижче, ви можете побачити програму, яка дозволяє відправити SMS.
/*
*  GSMSms
*/
//Include ArduPi library
#include "arduPi.h"
int timesToSend = 1;        // the SMS number to be sent
int count = 0;
int ok = 0;
int numCar = 0;
char phone_number[]="3........9";     // SMS destination number
void setup(){
   Serial.begin(115200);                // UART baud rate
   delay(2000);
   Serial.println("AT+CMGF=1");         // sets the SMS mode to text
   delay(100);
}
void loop(){
   while (count < timesToSend){
       delay(1500);
       Serial.print("AT+CMGS=\"");     // send the SMS(s)
       Serial.print(phone_number);
       Serial.println("\"");
       while(Serial.read()!='>');      
       Serial.print("Se arriva funziona");     // the SMS body
       delay(500);
       Serial.write(0x1A);       //sends ++
       Serial.write(0x0D);
       Serial.write(0x0A);
       delay(5000);
       count++;
   }
}
int main (){
setup();
while(1){
loop();
             if (count == timesToSend)
             {
             break;
             }
}
return (0);
}
  • Змінна phone_number[] містить телефонний номер для виклику,
  • AT + CMGF = 1 задає режим Text для SMS,
  • AT + CMGS = відправляє SMS-повідомлення, встановлене в наступній інструкції,
  • І, нарешті, посилає символи "++" для завершення виклику.
Щоб скомпілювати програму, вводимо команду:
g++ -lrt -lpthread GSMSms.cpp arduPi.o -o GSMSms
і запускаємо програму, як звичайно:
./GSMSms
Перш ніж запустити програму, вам треба запустити процедуру активації модуля GSM, щоб переконатися, що модуль під’єднаний і працює.
Коли ви підете далі в розробці програми управління, то вона повинна буде забезпечити управління правильною послідовністю дзвінків, перевіряти та управляти ненормальними умовами...
(За матеріалами EN: open-electronics.org)
 
>
КнигаНовиниПрактика пошукуПартнериПро нас
Підтримка та дизайн: Могильний С.С. Шаблон: Joomla Templates by BuyHTTP Joomla Hosting