working with sim800a module
Като цяло работата с GSM модул и ардуино е сравнително лесна, освен тогава когато не е...
На пазара има няколко разновидности модеми (TODO>списък), но по-интересен е броя на различните дизайни (PCB Designs) които се предлагат от различните производители (които също са безброи). Това което имам впредвид е, че два продукта базирани на един и същ модем (например SIM800), и именувани по сходен начин, са до-голяма степен различни в съшността си. (съответно и начина по който можем да ги използваме. )
Тези различия често са достатъчно осезаеми и напълно достатъчни, че да провалят проекта ни, в случай, че не знаем за тях и не ги предвидим в първоначалното планиране на цялостната работа.
Следващите редове се базират изцяло на наблюденията ми през последните три години на работа с различни "IoT" устройства (2018-2021).
Въпросните различния се дължат на това, че: първо - различните производители имплементират (задължителната) периферията на модема по (достатъчно) различен начин, че това да промени крайното(по-нататъшЧното!?!?!?) действеи и/или начин на работа на/със въпросния продукт (за нас-девелопърите), второ - често биват добавяни различни функционалности към крайния (за developer-а е междинен...) продукт, които не са предвидени по начало в основния такъв (в случея това е GSM модема). Най-вероятно си мислите "какво от това? нали това е смисъла на развоините платки, пък и преди да излязат на пазара минават регулационен процес от съответните органи"...; трето-прекалено често крайният продукт съдържа критични грешки в дизайна на схемата (напр. LED в esp8266 платки), съответно и в начина на работа след това и четвърто, но не на последно място - много често липсва каквато и да е документация на продукта (било то схема на I/O или описание на наличните функционалности за следващия разработчик)
Модемът с който ще работим е един от най-известните (най-често срещаните) - SIM800 и по-точно SIM800A, а модула (до колкото е възможно да бъде идентифициран) е по дизайн на UNV, конкретно този с който разполагаме е версия V3.9.3 от 26-08-2016г. (предполагам, че годината се отнася към версията, а не дата на производство)
значението на буквата в края (как се нарича?индекс може би?), и какви други възможности има, ще разгледаме по-късно.
Предстой да разгледаме основни
- USB Type Mini B
- SIM Card with atleast GPRS data
- Few jumper wires
- Putty
- КОНВЕРТОР USB КЪМ UART
SIM800A USB TO UART CONVERTER ────────────────────────── ────────────────────────── ┌──────────────┬───────┐ │ ├──────┼│ USB │ │sim ││ ┌────┐ │ │card ││ ┌───┼┼┼┼┼┼──┐ │ │ ││ │ └────┘ │ │ │ ││ │ ├┐ │ ┌──┐ └──────┴┤ │ GND├┘ ──────┐ │ │┼┼│ │ │ │ │ │ SR│┼┼│ST ──────────┼────────┐ │ │ │ │ │ │┼┼│ │ │ │ │ │ │ │ │┼┼│ │ │ │ │ │ │ └─┴──┴─────────────┼───┐ │ │ │ │ │ │ │ │ ┌┤ │ │ │ ┌──┐ │ │ └──►└┤RX │ │ └─┼┼┼┼─────────────────┘ │ │ │ │ └──┘ │ ┌┤ │ │ PWR └───────►└┤TX │ │ ▲ ▲ │ │ │ │ │ │ 5V├┐ │ │ │ │ ├┴───┐ │ │ │ └───────────┘ │ │ │ │ │ │ │ └────────────────────────────────────────────────┘ │ │ │ └──────────────────────────────────────────────────────┘
След като модулът е свързан чрез конвертора към компютъра, сме готови да тестваме изправността и функционалността му. За целта отваряме Device Manager и проверяваме номера на COM порта. За връзка ще използваме програмата Putty
Натискаме Open. Трябва да изчакаме няколко секунди докато се осъществи връзка към модула. Разбираме, че връзката е осъществена когато въведем някакъв символ и той се визуализира в командния ред.
В таблицата са събрани основните команди чрез които ще съберем основна информация за версията на фирмуера на устройството и други.
Команда | Използва се за |
---|---|
AT | handshake test |
AT+CSQ | Signal Quality |
AT+CCID | Read SIM Information to confirm its plugged in |
AT+CREG? | Check if SIM is registered in the network |
AT - Това е най-основната AT команда. Тя също така инициализира Auto-baudrate. Ако тя работи, трябва да видите ехото на AT символите и след това OK, което ви казва, че всичко е наред и тя ви разбира правилно! След това можете да изпратите някои команди за запитване към модула и да получите информация за него, като например:
AT+CSQ - Проверете "силата на сигнала" - първото # е силата на сигнала в dB, тя трябва да е по-висока от около 5. По-високата стойност е по-добра. Разбира се, това зависи от вашата антена и местоположение.
AT+CCID - получаване на номера на SIM картата - с тази функция се проверява дали SIM картата е поставена правилно и можете да проверите дали номерът е записан на картата.
AT+CREG? Проверява дали сте регистрирани в мрежата. Вторият # трябва да бъде 1 или 5. 1 означава, че сте регистрирани в домашната мрежа, а 5 - че сте регистрирани в роуминг мрежа. Другите две числа освен тези показват, че не сте регистрирани в никаква мрежа.
Тоест ще използваме GSM модула за да контролираме I/O на Arduino UNO например.
- Всичко от предишната точка.
- Arduino UNO, може и клонинг. ( не забравяйте да дарите някой лев в този случай :) )
- Още няколко джъмпера.
- Нисковолтово реле.
За начало ще изпълним тестовите АТ команди, които коментирахме по-горе, но ще ги изпратим от Ардуино към модула. Освен, че ще изпратим командите искаме и да прочетем отговора на модула, които да се изпише в серийния монитор на Arduino IDE.
Качваме следния код на Arduino UNO.
#include <SoftwareSerial.h>
//Create software serial object to communicate with SIM800A
SoftwareSerial mySerial(3, 2); //SIM800A Tx & Rx is connected to Arduino #3 & #2
void setup()
{
//Begin serial communication with Arduino and Arduino IDE (Serial Monitor)
Serial.begin(9600);
//Begin serial communication with Arduino and SIM800А
mySerial.begin(9600);
Serial.println("Initializing...");
delay(1000);
mySerial.println("AT"); //Once the handshake test is successful, it will back to OK
updateSerial();
mySerial.println("AT+CSQ"); //Signal quality test, value range is 0-31 , 31 is the best
updateSerial();
mySerial.println("AT+CCID"); //Read SIM information to confirm whether the SIM is plugged
updateSerial();
mySerial.println("AT+CREG?"); //Check whether it has registered in the network
updateSerial();
}
void loop()
{
updateSerial();
}
void updateSerial()
{
delay(500);
while (Serial.available())
{
mySerial.write(Serial.read());//Forward what Serial received to Software Serial Port
}
while (mySerial.available())
{
Serial.write(mySerial.read());//Forward what Software Serial received to Serial Port
}
}
!!! Серийният монитор трябва да бъде настроен по следния начин: край на реда Both NL & CR, 9600 Baudrate
Към момента можете да пуснете сериен монитор, но това което ще видите е просто ред който гласи Initializing . . .
и нищо повече. Трябва да свържем контролера към модула и релето.
Дали можем да захранваме модула от ардуиното е спорен въпрос, който се обсъжда из форумите в интернет от години и няма ясен отговор. Според документацията на компонентите - НЕ! Според практиката - да .. Това което ще направим ние е да свържем модула директно към контролера, при мен няма никакви проблеми ползвайки го по този начин, постъпете по ваше усмотрение. Другият вариянт (който е и по-добрия, в случай, че имате възможност - направете го) е да осигурим отделно захранване за GSM модула и контролера. Следва ASCII диаграма на свързването между отделните компоненти. GSM модул към Arduino UNO.
!!! Преди да започнете да свързвате каквото и да е, моля изключете всичко от захранването. Пазете си компонентите! Въпреки, че цената им е сравнително ниска, няма нужда да разхищаваме ресурси. След като свържем GSM модула към Aduino UNO и захраним установката, наблюдаваме следния резултат в серийния монитор (това е успешен резултат):
Добавяме Реле модула към установката