Jak jednoduše na GSM - III.díl - Jedeme přes Arduino
AT příkazy máme z minulého dílu v malíčku, tak si pojďme poskládat nějaký HW, který je použitelný pro samostatné použití a znalosti z minulého dílu si ještě jednou prakticky ověříme přes skeč, který ná zprostředkuje transparentní terminál mezi doporučenou HW SETUP utilitou z minulého dílu a modulem SIM800L přes Arduino.
Zapojení s Arduinem
S odřenýma ušima lze SIM800L živit z 5V zdroje Arduina, jen je potřeba dodržet tyto 3 zásady:
- Do napájecí větve vložit dvě diody např. 1N5871 (křemíkové usměrňovací, nikoliv shottkyho! - využíváme úbytku 0,6V na každé) tak, aby se z 5V po celkovým úbytku 1,2V vyrobilo napájení pro SIM800L někde kolem 3,8V (je to pořád v toleranci - napájení by mělo být od 3,6 do 4,2V
- Arduino MUSÍME napájet z externího zdroje - připojené pouze k PC přes USB nedá 5V USBčko dostatečný proud v komunikačních špičkách - SIM800L to neuživí!
- Pro vykrytí komunikačních špiček - tj. odběrů i kolem 2A použijeme dostatečně kvalitní kondenzátor 1000M/6.3V. Dle mých dosavadních zkušeností tento kondenzátor pomůže "chytit" všechny špičky, které mohou nastat - kritiké okamžiky proudového odběru jsou zejména registrace modulu SIM800L ke GSM síti, odeslání SMS, příchod/odchod hovoru.
V zásadě používám zapojení dle schémat níže. Preferovanou platformou je Arduino DUE - jednak je nativně na 3,3V úrovních, takže není třeba cvičit s konverzí úrovní a jednak je vhodnější pro rozsáhlejší projekty.
Nicméně občas je potřeba vykutit i něco levnějšího, takže ani AVR platforma nemůže být opomíjená - zde je potřeba ale myslet na komunikační úrovně na sériové lince mezi SIM800L a Arduinem. Ukázalo se, že postačí jedoduchý dělič na TX Arduina - ten srazí 5V "jedničku" na přibližně 3,3V. V opačném směru není situace tak složitá, RX Arduina má ještě o chlup SIM800L TX úroveň v toleranci.
Transparentní terminál
Pro odzkoušení základní funkcionality chodivosti HW nebo pro další laborování s AT příkazy např. dle předchozího dílu nebo jinými AT příkazy se hodí mít plně transparentní terminál. který do modulku SIM800L posílá příkazy ze sériového kanálu a jejich odpovědi pak zpět na sériový kanál vrací.
Vypracoval jsem jednoduchý skeč, který velmi často a rád používám při implementaci nových vlastností zařízení, kydž si nejsem úplně jistý, jak daný příkaz funguje, jaké může mít odezvy apod.
#define SIM900 Serial1
#define GSMReset 5
char c,s;
void setup()
{
Serial.begin(115200);
SIM900.begin(115200);
digitalWrite(GSMReset,LOW);
delay(200);
digitalWrite(GSMReset,HIGH);
delay(200);
}
void loop()
{
WDT_Restart(WDT);
if(Serial.available()>0)
{
c = Serial.read();
SIM900.print(c);
}
if (SIM900.available()>0)
{
s = SIM900.read();
Serial.print(s);
}
}
Skeč je ke stažení zde. Jedná se o skeč pro Arduino DUE - je to má preferovaná platforma pro rozsáhé projekty. Nicméně po drobné úpravě lze tento skeč použít i pro "malá" Arduina, která mají jen jeden sériový kanál a ten je většinou spřažený s USB převodníkem a určen pro nahráváni skečů nebo jednoduchý debuging. V tomto případě je potřeba použít softwarový sériový kanál pomocí známé SoftwareSerial knihovny a správně nastavit porty TX a RX vůči modulku SIM800L. Modifikovaný skeč pro tyto účely se zapojením RX na pinu D2 a TX na pinu D3 je k dispozici zde. Zde si všimněte, že je třeba snížit komunikační rychlost, protože SoftwareSerial nepodporuje větší rychlosti, než 19200b/s. I přesto odezvy nejsou špatné, pro většinu "SMSkových" aplikací to plně postačuje, u složitějších aplikací, kde se zachází s větším množstvím dat pro odesílání a přijímání přes GPRS bych velmi zvažoval právě Arduino DUE platformu.
V dalším pokračování seriálu již sestavíme nějaký použitelný skeč, který třeba pošle SMSku na nějaké číslo při překlopení vstupu z "0" na "1" nebo vyhodnotí přijatou SMSku a blikne LEDkou.
Přidat komentář
Přehled komentářů
-
příklady
(Vasek, 3. 10. 2015 17:23:08)
Odpovědět
Hezký článek, kdy se můžeme těšit na nějaký příklad se SMS, případně i zavoláním při překolepní stavu?
-
Pokračování
(Admin, 3. 10. 2015 20:27:49)
Odpovědět
Dobrý den,
Díky za přízeň. Někdy v říjnu zase něco sepíšu, jsem teď trochu zasekaný prací, ale to přejde :-).
PF -
1000M/6,3v
(RDP, 14. 11. 2015 2:00:23)
Odpovědět
Ahoj, díky za článek - prosim tě, jaké přesné označení má požadovaný kondenzátor? Podle 1000M/6,3v nenajdu na internetu nic, co bych mohl objednat. Díky
Admin:
Ahoj,
Je to bězný typ 1000uF na 6,3V, elektrolytický kondenzátor v radiálním provedení:
http://www.gme.cz/ce-1000u-6-3vit-hit-exr-8x12-rm3-5-bulk-p123-666
PF -
Dotaz
(zozan, 28. 3. 2016 13:41:34)
Odpovědět
Proč není ve skeči pro UNO definován v setupu vývod 5 (GSMReset) jako výstup? Stalo se mi , že to neresetovalo modul....
Admin:
Proč? Protože to prostě není potřeba, když si s tím hrajete. Není přece problém, když to je z nějakého důvodu vyžadováno, si ten reset doplnit ... o tom je bastlení ... není to plug & play. -
Dotaz
(zozan, 28. 3. 2016 23:25:08)
Odpovědět
V tom případě proč máte v setupu napsány tyto příkazy, když to nechcete resetovat. Takto jsem to pochopil z vaší odpovědi....
void setup()
{
.......
digitalWrite(GSMReset,LOW);
delay(200);
digitalWrite(GSMReset,HIGH);
delay(200);
}
Admin:
chi, nechci, nepíšu sketche pro každý příklad ze zelené louky, asi jsem to vykopíroval z nějakého projektu ... vidno, že se nad tím zamýšlíte, takže i to je mimo jiné účelem mých článků. Plug & play potlačuje kreativitu, Ctrl+C a Ctrl+V z nikoho ještě programátora nebo vývojáře neudělalo. To pak oceníte při troubleshootingu, když budete rozumět, jak je co napsáno a jak co má fungovat.
PF -
dotaz
(zozan, 31. 3. 2016 13:07:06)
Odpovědět
Tak to je jina ... Mam jeste dotaz. Vlastnim tento GSM modul zAli http://www.aliexpress.com/item/Smallest-SIM800L-GPRS-GSM-Module-MicroSIM-Card-Core-BOard-Quad-band-TTL-Serial-Port/32286088224.html?spm=2114.01010208.3.1.BRq5MZ&ws_ab_test=searchweb201556_2,searchweb201602_5_10036_10035_301_10034_507_10032_10020_10017_10005_10006_10021_10022_401_10018_10019,searchweb201603_9&btsid=58e5e6c9-cf09-44ea-a25a-cfc2352a43aa
a nejde mi seriova komunice s arduinem. Neresil jste to nekde?
Admin:
Je to jen jinak zapojená verze toho, co prodáváme na e-shopu. V zásadě by s tím neměl být problém a mělo by se to chovat podobně jako je popsáno v článku. Nezapomeňte za příkazy dát CR+LF, jinak nebudete mít odezvy. Dbejte taky na napěťové úrovně, vhodné napájení ...
PF -
dotaz
(zozan, 31. 3. 2016 15:16:07)
Odpovědět
Zkoušel jsem to s tímto vaším terminálem (SIM800terminalAVR.ino), podle výše uvedeného zapojení pro UNO a něco to odpovídá, ale jsou to hausnumera, jako kdybych neměl přepnutou správně rychlost v baudech na terminálu od arduina. Příkazům to taky nerozumí...
-
odpoved
(zozan, 19. 4. 2016 12:29:53)
Odpovědět
Odpovim si sam. Problem byl v tom, ze tento modul je od vyrobce nastaven pouze na rychlost 115 200b a knihovna SoftwareSerial.h (pro Uno) chodi pouze do rychlosti 19200b !!!....takze nejste schopni se s timto module spojit...rychlost modulu se musi dle manualu prepnout na 9600b...
Nemáte pravdu s tou rychlostí na sofrwareserial, čtěte dokumenaci k posledním IDE a ne 3 roky staré komenáře ve fórech.
S pozdravem, PF -
opověď
(zozan, 22. 4. 2016 22:10:48)
Odpovědět
Možná nemám pravdu s tou rychlostí 19200b, ale 115200b to určitě nechodí...musel jsem udělat terminal s arduinem mega 2560. S Unem a knihovnou SoftwareSerial.h to nechodí ani náhodou....
-
odpověď
(zozan, 22. 4. 2016 22:16:15)
Odpovědět
Teď jsem si všiml, že tu rychlost 19200b máte nahoře dokonce v článku napsaný, tak si to opravte...
-
chyba?
(Andrej, 25. 4. 2016 14:07:52)
Odpovědět
| Zobrazit odpovědi
Ako sa shield sprava ked na UNO pouzijete reset?
Prezije 5V uroven,alebo je to chyba shieldu?
Pri DUE s 3V nevidim problem ale na UNO 5V pre ktore je shield urceny mam strach to pouzit. -
Re: chyba?
(zozan, 19. 12. 2016 16:33:51)
Odpovědět
Ten reset není potřeba používat, ale pokud ho tam chcete, udělejte to u UNA přes tranzistor...
-
Více SIM800L na Arduino UNO
(scherry, 1. 9. 2016 20:09:48)
Odpovědět
Zdravím,
šlo by na jednom Arduino UNO současně připojit např. 5 ks SIM800L? Rychlostně stačí 1 SMS / sek.
A ovládat pět SIM800L současně jak pro posílání, tak příjem SMS?
Děkuji. -
Oprava k Více SIM800L na Arduino UNO - DUE
(scherry, 1. 9. 2016 20:12:34)
Odpovědět
Omlouvám se, výše jsem myslel pomocí Arduino DUE (to pro složitější projekty)ovládat současně pět SIM800L.
-
send sms by sim800l
(janamhosein, 25. 10. 2016 9:58:25)
Odpovědět
hi
Thank you for your helpful training
Please Put your Codes send SMS for Arduino DUE . -
diody
(zozan, 19. 12. 2016 16:30:27)
Odpovědět
Pozor na ty použité diody 1N5871 ve schématu, jsou to zenerky na 28V/0,4W. Je možný, že v propustném směru budou chodit, ale mají dost malý proud...
-
konvertor úrovní
(Vláďa, 22. 3. 2017 10:24:52)
Odpovědět
V případě použití una doporučují použít konvertor úrovní viz https://www.arduinotech.cz/inpage/arduino-v-prikladech-v-dil-menu-na-lcd/ vyhnete se mnoha problémům. Komunikace opravdu fungovala jako ožralej králík, tak jak zmiňuje autor ve výše uvedeném článku.
-
uspání modulu SIM800L
(Standa, 7. 2. 2018 14:12:44)
Odpovědět
Dobrý den,
stavím jednoduché zařízení na zapínán/vypínání topení na chatě. Bude použita zálohová baterie jejíž stav po výpadku sítě bude hlídat mikroprocesor. Ten sám o sobě bude mít malou spotřebu, ale když napětí baterie klesne pod kritickou mez, bylo by třeba aby se SIM modul nějak uspal a nepřipojoval se k mobilní síti (nevybíjel dál baterii) a po naběhnutí síťového zdroje opět (příkazem z uP) ožil. Existují pro tento modul nějaké AT příkazy které by situaci řešily? Hledám, nikde nenacházím.
Díky a zdravím! -
SAMD21 a MC20 AT+CFUN=1 sketch problém
(DiDi, 11. 9. 2019 18:18:22)
Odpovědět
| Zobrazit odpovědi
Zdravím. mám SAMD21 a MC20 bohužel nejsem schopen programově provést AT+CFUN=1.
Buď to neudělá nic nebo po dvou minutách +CFUN0 nebo ihned se stejným neg. výsledkem.
Pokud příkaz zadám do konzole debug scriptu tak vše proběhne a modul je funkční...
Testuji ručně a vše je OK. Díky za radu. -
Re: SAMD21 a MC20 AT+CFUN=1 sketch problém
(DiDi, 26. 9. 2019 13:55:55)
Odpovědět
Figl byl v tom počkat na odpověď od GSM čipu.
Odesílání příkazů teď funguje
Teď je problém že načtení výstupu z čipu nefunguje korektně špatné znaky, části textu, atp. Nastavení Bufferu na nativním USB nějak nefunguje...