České vysoké učení technické v Praze Fakulta elektrotechnická Katedra počítačů
Bakalářská práce
Pokojový termostat řízený pomocí SMS zpráv v síti GSM Tomáš Vondra
Vedoucí práce: Ing. Martin Novotný
Studijní program: Elektrotechnika a informatika, bakalářský Obor: Výpočetní technika 9. června 2009
Prohlášení Prohlašuji, že jsem práci vypracoval samostatně a použil jsem pouze podklady uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu §60 Zákona č.121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon).
V Praze dne 9.6.2009:
________________
Abstrakt Tato práce se zabývá problematikou dálkového ovládání elektronických zařízení pomocí zpráv SMS. Jako výsledek studia této problematiky je implementován dálkově ovládaný pokojový termostat. Je navržena jednoduchá vestavná hardwarová platforma s procesorem Atmel založená na AVR Butterfly a pro ní vytvořen program v jazyce C. Části programu zabývající se komunikací pomocí SMS zpráv jsou přenositelné na jinou platformu a použitelné i na ovládání jiných zařízení, než jsou termostaty.
Abstract This thesis deals with the problem of controlling electronic devices using SMS messages. As the result of the study of this problem, a remote controlled room thermostat is implemented. A simple embedded platform with an Atmel prcessor based on the AVR Butterfly is designed and subsequently programmed in the C language. Parts of the program dealing with communication using SMS messages are portable to other platforms and reusable for controlling devices other than thermostats.
Obsah 1 2
3
4 5 6 7
Úvod....................................................................................................... - 1 Analýza a návrh implementace.............................................................. - 3 2.1 Průzkum existujících implementací............................................... - 3 2.1.1 Elektrobock PT30GSM.......................................................... - 3 2.1.2 SEA GSM RELÉ var. 2 ......................................................... - 4 2.1.3 Jablotron GD-04 DAViD....................................................... - 4 2.2 Požadavky na hardwarovou platformu .......................................... - 7 2.2.1 Návrh vlastního zařízení ........................................................ - 9 2.2.2 AVR Butterfly...................................................................... - 11 2.3 Komunikace s mobilním telefonem - AT příkazy ....................... - 13 2.3.1 Příkazy pro SMS funkce ...................................................... - 13 2.3.2 Formát SMS PDU................................................................ - 19 Implementace....................................................................................... - 23 3.1 Softwarová část............................................................................ - 23 3.1.1 AVR-gcc .............................................................................. - 24 3.1.2 Enkodér/Dekodér PDU ........................................................ - 25 3.1.3 Parser AT příkazů ................................................................ - 26 3.1.4 Parser uživatelských příkazů ............................................... - 26 3.1.5 Program pro AVR ................................................................ - 27 3.2 Hardwarová část .......................................................................... - 31 3.2.1 Úprava AVR Butterfly......................................................... - 31 3.2.2 Oprava Butterfly bez zavaděče ............................................ - 31 3.2.3 Výroba plošného spoje pro relé ........................................... - 32 3.2.4 Úprava kabelu Siemens ....................................................... - 34 Závěr .................................................................................................... - 35 4.1 Bezpečnost ................................................................................... - 35 Návod k obsluze GSM Termostatu...................................................... - 37 Seznam literatury ................................................................................. - 41 Obrazová příloha.................................................................................. - 43 -
Seznam obrázků Obrázek 1 – PT30GSM.................................................................................. - 3 Obrázek 2 – GSM RELÉ var. 2 ..................................................................... - 4 Obrázek 3 – GD-04........................................................................................ - 5 Obrázek 4 - AVR Butterfly.......................................................................... - 12 Obrázek 5 – Přibližný vývojový diagram .................................................... - 24 Obrázek 6 – Konečný vývojový diagram .................................................... - 29 Obrázek 7 - Schéma plošného spoje ............................................................ - 33 Obrázek 8 – Úprava AVR Butterfly ............................................................ - 43 Obrázek 9 - Nouzový ISP programátor ....................................................... - 43 Obrázek 10 - Deska plošného spoje zepředu ............................................... - 44 Obrázek 11 - Deska plošného spoje zezadu................................................. - 44 Obrázek 12 - Upravený kabel Siemens........................................................ - 45 Obrázek 13 - Hotový výrobek ..................................................................... - 45 -
Seznam tabulek Tabulka 1 - SMS PDU ................................................................................. - 19 -
1 Úvod Zařízení typu pokojový termostat určitě všichni známe. Jedná se o řídící jednotku pro systémy bytového či domovního ústředního topení, které spíná výkonnou jednotku (plynový kotel či elektrické topné těleso) na základě teploty vzduchu v místnosti, kde je umístěn, a teploty nastavené uživatelem. V poslední době se přechází od termostatů mechanických k termostatům elektronickým, které bývají vybavené mikroprocesorem, což umožňuje implementací funkcí, jako je programování teploty na týden, cyklicky či jednorázově, samočinné přepínání programu na pracovní den a víkend a podobně. Účelem této práce ale není návrh programovatelného termostatu, ty jsou již natolik rozšířené, že by to nemělo smysl. Cílem je navrhnout a implementovat pokojový termostat řízený pomocí SMS zpráv v síti GSM. Termostat bude umožňovat zvolit požadovanou teplotu pomocí tlačítek nebo SMS zprávy a odečítat aktuální a zvolenou teplotu na displeji či přes mobilní telefon. Základem použitého řešení bude jednočipový mikrokontrolér firmy Atmel. Pokojový termostat ovládaný pomocí mobilního telefonu je velice užitečné zařízení, zvláště v případech, je-li ústřední topení instalováno na místě, které není trvale obýváno (např. chata či chalupa) nebo pokud jeho majitel často cestuje. V takových případech se totiž projevuje zásadní nedostatek programovatelných termostatů – uživatel musí předem vědět, kdy se do objektu vrátí. Nejhorší situace, kterou ovšem programovatelný termostat ze své podstaty způsobuje velice často je, že se majitel musí do objektu vrátit proti své vůli, protože se zapnulo topení a musí ho ručně vypnout. Bohužel nejsou tato dálkově ovládaná zařízení zdaleka rozšířena tak, jak by mohla být. Brání tomu nejen malé povědomí lidí o možnosti ovládat topení a další spotřebiče mobilním telefonem, ale také přemrštěná cena zařízení toto umožňujících. Mým záměrem je, mimo vytvoření vzorku GSM termostatu pro vlastní potřebu, rozšířit výsledný návrh ve formě open-source hardware, což umožní každému si zařízení doma postavit, a v lepším případě donutí průmyslové výrobce snížit ceny na takovou úrověň, aby se domácí konstrukce nevyplatila.
-1-
-2-
2 Analýza a návrh implementace 2.1 Průzkum existujících implementací 2.1.1 Elektrobock PT30GSM Toto je model v čechách velice rozšířeného programovatelného termostatu PT30 firmy Elektrobock vylepšený o možnost připojení mobilního telefonu. Umožňuje naprogramování šesti změn teploty za den ve dvou uživatelských týdenních programech plus 7 týdenních programů přednastavených od výrobce. Teplota se měří i nastavuje s přesností 0,5°C a to od 0 do 40°C, je možné nastavit hysterezi od 0,2 do 2 stupňů. Spínacím prvkem je relé s parametry 250V, 5A. Napájení termostatu je ze dvou alkalických článků, ale mobilní telefon musí být zapojen do zásuvky. SMS zprávami je možné nastavit teplotu, vypnout a zapnout topení a zjistit stav topné soustavy. Nejvíce zarážející na tomto výrobku je cena: 6188Kč (dle stránek výrobce, v době psaní této práce). Základní model, prakticky identický, jen bez možnosti připojení telefonu stojí jen 1625Kč. Pochybuji, že cena mobilního telefonu, pořízeného pravděpodobně ve výprodeji a s množstevní slevou, a kabelů k jeho připojení odpovídá tomuto cenovému rozdílu. Navíc se mi zdá zbytečné mít termostat, který je zároveň programovatelný a ovladatelný na dálku. Myslím, že ve většině případů se obě funkce nevyužijí, a je proto možné ušetřit i na vlastním termostatu. Dá se říci, že toto zařízení beru za svůj vzor a hodlám ho ve své práci napodobit, ovšem s tím, že má implementace by měla být alespoň 5x levnější.
Obrázek 1 – PT30GSM Zdroj: www.elbock.cz
-3-
2.1.2 SEA GSM RELÉ var. 2 Toto zařízení dokáže ovládat libovolný elektrický spotřebič 230V, 10A. Napájené je přímo ze spínané elektrické zásuvky, reaguje na SMS zprávy nebo prozvonění. Dále má ještě 3 logické vstupy a 2 výstupy na připojení čidel a ovádaných zařízení, takže se dá použít například na ovládání automatických vrat nebo osvětlení. Součástí je teplotní čidlo pro měření teplot od -20 do +80°C. Lze nastavit, který výstup bude termostat spínat. Při aktivaci vybraného vstupu je možné přehrát zvukový soubor nebo upozornit majitele mobilním telefonem, zařízení lze tedy použít jako alarm. Ke GSM modulu je možné připojit externí anténu. Cena při objednání jednoho kusu tohoto zařízení od výrobce je 7173Kč bez DPH. Toto zařízení je určitě velice univerzální, je ale vidět, že nebylo primárně koncipováno jako termostat. Už tvar zařízení napovídá, že jde spíše o dálkově ovládanou zásuvku s dalšími funkcemi. Jako největší nevýhodu vidím fakt, že GSM relé nemá displej ukazující aktuální teplotu ani tlačítka na její ruční nastavení. Čtení a nastavování teploty pomocí mobilního telefonu i pokud je uživatel doma je velmi nepohodlné a neekonomické, proto toto zařízení pro mé účely nevyhovuje.
Obrázek 2 – GSM RELÉ var. 2 Zdroj: www.seapraha.cz
2.1.3 Jablotron GD-04 DAViD Zařízení od Jablotronu ve skutečnosti není termostat, ale univerzální GSM ovladač a hlásič. Má 4 logické vstupy a 2 silové výstupy 250V, 5A. Napájený je z elektrické sítě, ale lze dokoupit zálohovací baterii. Umí ovládat své výstupy na základě vstupů, prozvonění nebo SMS zprávy a hlásit sepnutí vstupů textovou zprávou a prozvoněním. Dokoupit lze buď DTMF modul, který umožňuje spínání výstupů na základě zadání kódu nebo rádiový modul, který umožní propojení s bezdrátovým systémem Jablotron OASiS, v rámci něhož existují různá vstupní zařízení, jako bezdrátová tlačítka, termostaty,
-4-
detektory kouře a vody, otevření a rozbití oken a pohybu. Také výstupní relé mohou být v bezdrátové podobě. Systém je ale vždy omezen počtem 4 vstupů a 2 výstupů. Koncová cena bez příslušenství je 4205Kč bez DPH. DAViD má zřejmě velmi rozsáhlé možnosti konfigurace, není ovšem primárně koncipován jako pokojový termostat, přesto by se dal použít k zapínání/vypínání kotle nebo k povolení/zákazu výstupu z termostatu, nastavení teploty na dálku ale možné není, tažke se DAViD jako plnohodnotný dálkově nastavitelný termostat použít nedá.
Obrázek 3 – GD-04 Zdroj: www.jablotron.cz
-5-
-6-
2.2 Požadavky na hardwarovou platformu K funkci digitálního termostatu jsou nezbytné následující součásti: Mikrokontrolér: měl by mít nízkou spotřebu, aby bylo možné napájet termostat z baterie, na výkonu příliš nezáleží. Pro funkci hodin, nezbytnou pro programovatelný termostat, je potřeba přesný oscilátor. Musí mít dostatek portů pro připojení všech dalších součástí. Hodlám volit nějaký model firmy Atmel, protože s jeho architekturou jsem se již seznámil v předmětu Strojový kód a data a tuším, že vývojové prostředí AVR Studio umožňuje programování jak v assembleru, tak v jazyce C, což by mělo zajistit snadný vývoj aplikace. Teploměr: měří aktuální teplotu v místnosti. Je možné použít NTC termistor zapojený v děliči napětí a připojený k analogovému vstupu mikrokontroléru, pak je nutné programově vypočítat teplotu dle vzorce od výrobce termistoru. Přesnost měření v tomto případě ovlivňuje řada faktorů, jako přesnost výroby termistoru, referenčního odporu, ADC převodníku v mikrokontroléru, takže by bylo nutné vzorec dolaďovat podle nějakého referenčního teploměru. Jako lepší varianta se mi jeví nějaký inteligentní teploměr pro sběrnici I2C, který procesoru dodává přímo údaj o teplotě a navíc je možné ho umístit dále od procesoru bez obav o vliv odporu přívodních vodičů. Tlačítka: alespoň dvě tlačítka pro zvýšení/snížení nastavené teploty. Více, pokud bude potřeba nastavovat další parametry. Displej: bude zobrazovat aktuální teplotu odečtenou z teploměru a po stisku nějakého tlačítka nastavenou teplotu, aby umožnil uživateli orientovat se v zadávání. V případě, že se bude nastavovat více hodnot, musí být tak velký, aby se dalo pracovat s nějakým druhem menu. Měly by stačit 2 cifry pro nejjednodušší verzi, 4 pro zobrazení hodin a jednoduché nabídky. Spínací prvek: zřejmě bude nejlepší použít klasické relé připojené k mikrokontroléru přes zesilovací tranzistor. Z rozhovoru s opravářem plynového topení vyplynulo, že ač většina moderních kotlů požaduje od termostatu spínání max. 24V a malého proudu, pro starší nebo levnější kotle je potřeba spínací prvek na 230V a několik A, protože spínají přímo vodní čerpadlo, zapalování plynu a podobné výkonové součásti. Časopis Amatérské rádio [1] v článku o digitálním termostatu doporučuje relé s označením G5L spínající 250V,10A při spotřebě 0,4W. Spínače bez pohyblivých součástí na bázi optočlenu se pro takové výkony zřejmě nevyrábějí (dle katalogu GM Electronics). GSM rozhraní: je možné použít jakýkoliv mobilní telefon s rozhraním RS232 a podporou čtení a odesílání SMS zpráv pomocí AT příkazů, tzn. hlavně starší mobily, které jsou levně k mání v bazarech. U moderních přístrojů dodávají výrobci za účelem připojení k počítači nejčastěji USB kabel. Pokud zjistíme, že se ve skutečnosti jedná o USB -> RS-232 převodník, je možné použít i takový přístroj. Předpokládám, i když jsem to neověřoval, že průmyslové GSM moduly budou rozhraním RS-232 disponovat všechny.
-7-
Napájení: i kdyby se podařilo postavit termostat se spotřebou tak nízkou, aby mohl být napájen z baterie, což bude ztěžovat hlavně spínací relé, mobilní telefony, jak známo, málokdy vydrží bez nabíjení déle než týden. Proto počítám s primárním napájením z elektrické sítě adaptérem od mobilního telefonu. Ideální by bylo, kdyby se dalo napájení jak mobilního telefonu tak termostatu zálohovat z jedné baterie – té v mobilním telefonu. Alternativou je ukládání nastavené teploty do EEPROM mikrokontroléru a ponechání tohoto bez zálohy. Na dalších stránkách rozeberu, jaké součástky by se daly použít v případě zakázkového návrhu vlastní desky plošného spoje a porovnám svou představu s dostupnými hotovými hardwarovými platformami.
-8-
2.2.1 Návrh vlastního zařízení Nejpřesněji bude mým požadavkům samozřejmě odpovídat zařízení vlastní konstrukce. Jeho výroba by znamenala navržení a výrobu vlastního plošného spoje dle rozměrů součástek vybraných z katalogu a následné osazení tohoto plošného spoje. Když nahlédnu do katalogu firmy GM Elecronic, s.r.o., o které si myslím, že má největší sortiment, mohl bych vybrat například následující součástky: Mikrokontrolér: ATmega8-16PU – nejlevnější dostupný mikroprocesor řady ATmega. Obsahuje mj. 8kB flash ROM, 1kB RAM, 0,5kB EEPROM, UART, I2C, interní oscilátor a dodává se v pouzdře DIL28 SMD. Jeho cena je kolem 34Kč s DPH. Mikroprocesory z řady ATmini se použít nedají, protože nemají integrovaný UART a mají příliš málo pinů, než aby se dal připojit externě. Přípojím-li k tomuto procesoru telefon přes sériový port a nějaké zařízení I2C, zbyde 18 univerzálních vstupně-výstupních pinů. Teploměr: bohužel se zdá, že teplotní čidlo pro I2C sběrnici je obtížné sehnat, alespoň v jednotkových množstvích určitě. Našel jsem ale inteligentní teplotní čidlo Dallas DS18B20, zmiňované mj. i v [1], které s procesorem komunikuje po jednom vodiči a po zadání příkazu k měření vrátí teplotu ve stupních Celsia s rozlišením nastavitelným na 9-12 bitů. Jeho cena je 50Kč s DPH. Spínací prvek: volil bych relé zatížitelné 5A, 250V a spínané 5V, dostupné pod kódem RELEH820F05C, stojící 25Kč, připojené přes zesilovací bipolární tranzistor BC546B s mezními parametry 65V, 0,1A a 0,5W za 1Kč. Displej: nejlevnější variantou by bylo použít klasické sedmisegmentové LED displeje. Jeden takový stojí asi 10Kč a při odběru jednotek mA by ho bylo zřejmě možné připojit přímo k procesoru. Počet pinů procesoru ale limituje počet míst displeje na 2. Alternativou umožňující zobrazit daleko více informací než jen dvě číslice je například displej MC1601A-SYL/H, což je alfanumerický displej 1x16 znaků s integrovaným řadičem s pamětí znaků S6A0069, podle všeho funkčně identický s tím, co je použit na desce Spartan 3-E Starter Kit, a se kterým jsem se již seznámil v předmětu Praktika v návrhu logických obvodů. Tento stojí 115Kč a zabere 11 pinů procesoru. Bohužel jsem v katalogu nenašel nic mezi těmito dvěmi variantami. Například osmimístný inteligentní LCD displej se sehnat nedá. GSM rozhraní: sériový port standardu UART je již k dispozici v pouzdře procesoru. Pokud ale chceme mít port RS-232, potřebujeme úrovňový převodník TTL <> +-12V, např. známý inegrovaný obvod MAX232CPE s cenou 19Kč. Může se zdát, že jde o zbytečnou položku, protože na mobilních telefonech nejčastěji najdeme sériový port s TTL úrovněmi, ale raději se budu držet standardu, protože se určitě můžeme setkat s GSM modemem, který bude mít sériový port dle RS-232 a ostatně i originální kabely od výrobců mobilních telefonů úrovňový převodník obsahují.
-9-
Telefon: K sériovému portu hodlám připojit telefon Siemens CF62, ke kterému mám kabel s nabíječkou a mám ověřeno, že podporuje AT příkazy pro SMS zprávy. Napájení: Z této nabíječky (5V, 0,5A spínaný zdroj) bude možné napájet nejen mobilní telefon, ale i všechny ostatní součásti. Dokonce bude splněn i požadavek na zálohování termostatu z baterie telefonu. Telefon totiž má na konektoru vyvedeno napájení pro periferie jako byla např. externí kamera. Toto napájení využívá i úrovňový převodník RS-232 v kabelu. Tlačítka: k ovládání termostatu bych použil klasické mikrospínače, cena 2Kč za jeden. Ideální bude použít 4 tlačítka, což je množství, se kterým se dá pohodlně pohybovat v jednoduchém menu a nastavovat číselné hodnoty. Jak je vidět, na použití I2C sběrnice nakonec nedojde, protože periferie pro tutu sběrnici jsou nedostupné. Když přepočítám piny procesoru, vychází mi, že I/O piny nejen budou stačit, dokonce mi jich 3-5 zbyde (v případě použití LCD displeje a zapojím-li tlačítka na piny pro externí přerušení). Toho lze využít např. k přidání druhého teploměru a relé. Cenově toto řešní vychází, přičtu-li ještě desku plošného spoje s naneseným fotocitlivým lakem za 15Kč, na něco přes 252Kč (s tím, že jsem zanedbal podpůrné součástky jako kondenzátory a rezistory). Výroba plošného spoje ale dá dost práce, navíc s navrhováním plošných spojů nemám mnoho zkušeností; žádný předmět zabývající se tímto tématem jsem neabsolvoval. Na osazování SMD součástek (v tomto případě pouze mikroprocesor) také nejsem vybaven. Musel bych tedy vyhledat pomoc kolegy studenta nebo elektronické dílny. Cena takové pomoci by zřejmě výrobek značně prodražila.
- 10 -
2.2.2 AVR Butterfly Výše uvedené představě překvapivě dobře odpovídá AVR Butterfly, což je demonstrační deska k procesoru ATMega169 firmy Atmel. Obsahuje vše výše uvedené (mimo spínacího relé) a ještě něco navíc. Mimo této destičky zvané Evaluation Kit prodává Atmel ještě tzv. Starter Kity označené ATSTK500, 502 a 600. Toto jsou ale velké desky s mnoha periferiemi a cenou ve stovkách dolarů, takže k mým účelům nejsou zdaleka tak vhodné. Jmenovitě obsahuje Butterfly: mikrokontrolér Atmel Atmega196P (16kB ROM, 1kB RAM, 0,5kB EEPROM, USART, A/D převodník, LCD driver), 6ti znakový alfanumerický displej, 5ti směrné tlačítko, NTC termistor, přesný oscilátor pro hodiny, RS-232 úrovňový převodník a záložní lithiovou baterii. Jako zbytečné se mi jeví 0,5MB flash paměti a reproduktorek, leda bych chtěl do termostatu naprogramovat také funkci alarmu, jako firma SEA Praha. Výhodou tohoto řešení je, že nebudu muset navrhovat vlastní desku plošných spojů, ale pouze upravit již hotovou. Nutné úpravy budou: připojení 9pinového D-sub konektoru pro RS-232, přidání spínacího prvku, tzn. tranzistor a relé. K tomu bude možná nutné obětovat reproduktorek nebo některý segment displeje, protože nahlédnutím do dokumentace od výrobce [2] jsem zjistil, že na této demonstrační desce jsou téměř všechny vývody mikrokontroléru něčím obsazeny, i vyvedené porty B a D jsou sdílené s jinými součástmi, zvláště displej zabírá mnoho pinů procesoru; jisté ale je, že nejméně jeden pin pro relé se někde najít podaří, i kdyby měl být sdílený s jinou součástí. Dále rozvedeno v kapitole implementace. Ani cena není špatná. Když jsem srovnal cenu tohoto zařízení (663Kč, v době psaní práce, včetně poštovného a DPH u firmy MSC/GE, která je dovozcem výrobků Atmel do Evropy) s cenami jednotlivých komponent, a pokud bych přidal ještě cenu za výrobu plošného spoje, vyjde řešení s AVR Butterfly pravděpodobně levnější a hlavně méně pracné. Navíc se zařízení dodává s nahraným demonstračním programem, ke kterému je k dispozici zdrojový kód a který obsahuje veškeré rutiny pro obsluhu hardwaru napsané v jazyce C, což by mi umožnilo soustředit se skutečně jen na problém ovládání mobilního telefonu. Problém s tímto řešením ale existuje. V současné době několik měsíců čekám na dodání této destičky z Ameriky, což se navíc zkomplikovalo tím, že první kus, co jsem obdržel, byl vadný. Pokud firma MSC/GE brzy reklamaci nevyřeší, budu nucen vrátit se k původnímu plánu a postavit si vlastní hardware.
- 11 -
Obrázek 4 - AVR Butterfly Zdroj: www.atmel.com
- 12 -
2.3 Komunikace s mobilním telefonem - AT příkazy AT příkazy, také známé jako Hayes-kompatibilní příkazová sada, byly vynalezeny inženýry firmy Hayes v roce 1977 pro jejich výrobek Smartmodem, 300 baudový modem s integrovaným dialerem. Do té doby totiž modemy byly pouze hloupé převodníky mezi digitálním a analogovým signálem a vytáčet telefonní čísla musel člověk ručně na telefonním přístroji. V té době se ale mezi lidmi začaly rozšiřovat mikropočítače a začalo být vhodné umět vytočit číslo automaticky. Proto vznikaly různé externí dialery, které ale zabraly na mikropočítači další port. Hayes toto vyřešil elegantně, jeho modem měl dva režimy – datový a příkazový. Z příkazového režimu do datového se přechází příkazem O (online), případně automaticky po navázání spojení, zpět escape sekvencí +++ a sekundovou pauzou. Dostupné jsou příkazy pro manipulaci s telefonní linkou, jako vytáčení a zavěšení, a pro nastavení chování modemu pomocí tzv. Sregistrů, modem vrací zpět stavové kódy jako OK, ERROR nebo CONNECT. Příkazová řádka začíná s jednou výjimkou vždy znaky AT jako Attention, proto se vžilo označení AT příkazy. Tuto příkazovou sadu začaly od Hayesu kopírovat ostatní výrobci modemů a zrodil se průmyslový standard, který byl později oficielně standardizován jako TIA/EIA-602. Příkazová sada modemů se ale vyvíjela dál, přišly modemy s vyššími linkovými rychlostmi a funkcemi jako komprese a korekce dat. Na to zareagovala v roce 1998 organizace ITU-T standardem V.250, který definuje mj. několik skupin rozšiřujících příkazu začínajících znakem +, např. příkazy pro korekci dat by měly začínat +D, pro funkce mobilních sítí +C. AT příkazy pro funkce mobilních telefonů GSM definuje standard ETSI GSM 07.07 (3GPP TS 27.007). Tento článek je výtahem z Wikipedie [3].
2.3.1 Příkazy pro SMS funkce Příkazy pro práci s GSM začínají na +C. Ve skutečnosti se v terminálu píše AT+C, ale AT není součástí jména příkazu. Příkazy je totiž možné řetězit (základní příkazy přímo za sebe, rozšířené začínající + se oddělují středníkem) a na řádce pak je více příkazů než řetězů AT, který je jen jednou na začátku řádky. Mívají 3 formy: Dotaz na stav, zapsaný jako jméno příkazu následované znakem „?“, např. AT+CSMS? Takový příkaz vypíše současné nastavení telefonu. Dotaz na schopnosti, zapsaný jako jméno příkazu následované „=?“, např. AT+CSMS=? Takový příkaz vypíše, jaké parametry jsou na daném telefonu podporovány.
- 13 -
Zápis, zapsaný jako jméno příkazu následované znakem „=“ a parametry, např. AT+CSMS=1 Takový příkaz změní nastavení telefonu nebo provede nejakou činnost (např. odeslání nebo výpis zprávy). Odpověď telefonu může být OK, ERROR nebo
: [<parametry>] OK nebo <+CMS|+CME|…> ERROR[: <číslo chyby>]. Pro potřeby automatizace je zásadní umět zjistit, zda příkaz proběhl v pořádku, a k tomu stačí hledat řetězce OK a ERROR. Dále tefefon může vracet nevyžádané návratové kódy, jako např RING ze základní Hayes sady nebo upozornění na příchozí SMS, které proberu níže. V této kapitole jsem čerpal z literatury [4]-[7].
+CSMS Select Message Service Tento příkaz, ve formě dotazu na nastavení, indikuje, zda je přípojené zařízení schopné odesílat a přijímat textové zprávy. Např. telefon Nokia Classic 3110 na dotaz AT+CSMS? odpověděl +CSMS: 0,1,1,1 OK Což znamená, že telefon pracuje s příkazy verze 0 (GSM Phase 2) (1 na 1. pozici znamená GSM Phase 2+) a podoporuje po řadě čtení zpráv, psaní zpráv a cell broadcast zprávy. Změnit pomocí tohoto příkazu lze pouze verzi syntaxe příkazů, což nemá pro mé účely valného smyslu, protože levné nebo staré telefony verzi 2+ nepodporují a ani dostupná dokumentace s ní většinou nepočítá.
+CMGF Select SMS Message Format Tento příkaz slouží k volbě mezi dvěma režimy SMS funkcí – SMS PDU mode a SMS Text mode, které odpovídají parametrům 0 a 1 tohoto příkazu. V textovém režimu je možné posílat a číst SMS v pro člověka čitelném formátu, např. příkaz pro vytvoření zprávy: AT+CMGW="+85291234567" >Text zprávy GSM zařízení se pak samo postará o zakódování zprávy do potřebného formátu. Bohužel, tento režim je podporován hlavně u GSM bran a modemů, méně často v běžných mobilních telefonech. Toto je patrné např. při srovnání manuálu k mobilnímu telefonu a GSM modemu firmy Siemens [4], [5]. Telefon Nokia zmiňovaný v minulém odstavci sice indikuje podporu obou režimů, ale další příkazy v obou režimech selhávají, takže je pro použití jako SMS brána zcela nepoužitelý.
- 14 -
Vzhledem k větší podpoře se tedy zaměřím na SMS PDU mode, ačkoli je výrazně složitější na pochopení a implementaci. V tomto režimu nechává telefon na uživateli kódování zprávy do přenosového formátu pro GSM síť. Pro srovnání, příkaz pro vytvoření zprávy v tomto režimu (s jiným textem) vypadá následovně: AT+CMGW=42 >07915892000000F001000B915892214365F7000021493A283D07 95C3F33C88FE06CDCB6E32885EC6D341EDF27C1E3E97E72E I význam parametrů dalších příkazů závisí na nastavení tohoto parametru. Dále se tedy budu zabývat parametry v PDU módu. PDU mód bývá defaultním nastavením, takže přepínáním tohoto parametru se nejspíše nemusím zabývat. Popis formátu SMS PDU bude rozveden níže.
+CPMS Preferred Message Storage SMS zprávy se mohou ukládat na SIM kartu nebo do paměti telefonu. Tento příkaz řídí, s jakou pamětí pracují AT příkazy. Příkaz má 3 textové parametry, např: AT+CPMS="ME","SM","MT" První parametr určuje, z jaké paměti se budou zprávy číst a mazat, druhý nastavuje paměť pro neodeslané zprávy – příkazy pro uložení napsané zprávy a odeslání uložené zprávy, konečně třetí parametr označuje paměť, do které se budou zprávy přijímat ze sítě. Význam textových kódů je následující: SM – SIM karta, ME – paměť telefonu, MT – kombinace obou předchozích. Ostatní hodnoty nejsou důležité. Myslím, že by mělo být nejbezpečnější při inicializaci nastavit všechny 3 parametry na SM. Ukládání na SIM kartu by měl podporovat každý telefon, jestli každý telefon bude podporovat volbu MT si nejsem jist. V konkrétním případě to lze zjistit zavoláním tohoto příkazu s dotazem na dovolené parametry. Není ale možné si tohoto nastavení nevšímat. Ve výchozím nastavení totiž zrovna telefon Siemens nemá 1. a 3. Parametr stejný, což je pro příjem a čtení SMS nutné. Telefon Nokia zmíněný výše již v této fázi odpovídá jen ERROR.
+CMGS Send Message Jak již název napovídá, tento příkaz umožňuje odeslat SMS zprávu, a to bez jejího předchozího uložení do paměti (k tomu slouží dvojice příkazů +GMGW a +CMSS, které zde nebudu zmiňovat). Formát příkazu je následující: AT+CMGS= <číslo SMSC a TPDU v hex formátu> První parametr je délka TPDU bez čísla SMS centra počítaná v bytech, nikoli v hex znacích. Tzn. parametr délka je poloviční, než počet znaků skutečně poslaných po sériové lince minus hodnota prvniho byte zvetsena o 1. Následuje znak , tedy číslo 13 decimálně v ASCII tabulce, dále vlastní
- 15 -
PDU obsahující číslo SMSC, příjemce, typ a text zprávy. K formátu se ještě vrátím. Zpráva se ukončuje kombinací na terminálu. Dle Wikipedie [7] by tato klávesová kombinace stlačená na terminálu měla po sériové lince poslat ASCII kód 26 decimálně, tj. netisknutelný znak Substitute. Po odeslání znaku by měl telefon odpovědět výzvou “>”. Po potvrzení zprávy znakem SUB telefon odpoví OK, případně ještě předtím pošle vygenerované ID zprávy a potvrzení SMS centra, pokud o ní bylo příslušným bitem v PDU požádáno.
+CNMI New SMS Message Indications Tento příkaz zapíná upozornění na došlé SMS zprávy pomocí nevyžádaných návratových kódů. Je možné i posílat nové zprávy přímo na terminál bez ukládání do paměti GSM zařízení. Příkaz má jeden až pět číselných parametrů. První parametr, „mode“, určuje, zda a jak se budou posílat nevyžádané kódy. Hodnota 0 vysílání pozastavuje, upozornění se pamatují v paměti zařízení; 1 vysílání povoluje, pokud není po sériové lince navázána datová komunikace; 2 vysílání povoluje a v případě datové komunikace si upozornění pamatuje; 3 umožňuje vysílat upozornění i když probíhá datová komunikace. Druhý parametr, „mt“, přepíná mezi žádným upozorněním, upozorněním na zprávu a přímým zobrazením zprávy. Hodnoty paramteru jsou po řadě 0,1 a 2. Nevyžádané návratové kódy pro hodnoty 1 a 2 mají následující formát: +CMTI: , +CMT: Pokud jsou SMS zprávy přímo posílány an terminál, podle všeho se již neukládají do paměti GSM zařízení. Další 3 paramtery nejsou příliš důležité. Nastavují způsob nakládání s Cell Broadcast zprávami, status reporty SMS centra a zapamatovanými upozorněními. Jako nejlepší volba se mi jeví nastavení +CMTI=1,1 , tzn. oznámení o příchozích zprávách, pokud neběží datová komunikace (kterou mé vestavné zařízení využívat nebude). Dá se totiž dobře kombinovat s aktivním dotazováním na příchozí zprávy a nemůže se stát, že by se nějaká zpráva ztratila. Pokud se rozhodnu oznamování použít, mohu výrazně zkrátit dobu reakce na příchozí zprávu. Přímé zobrazování zpráv vyžaduje nastavení GSM Phase 2 (AT+CSMS=1) a potvrzování příjetí zprávy (AT+CNMA), tzn. práci navíc, a když myslím na možnost, že zákeřný uživatel může kdykoli vytáhnout sériový kabel, tak se pollingu neubráním, protože bez něj vzniká možnost nedoručení zpráv a jejich hromadění v paměti, což by v případě její naplnění mohlo způsobit selhání zařízení.
- 16 -
+CMGL List Messages Toto je příkaz, který vypíše všechny zprávy daného stavu v aktuálně vybrané paměti (+CPMS). Jediný parametr je stav zpráv, např.: AT+CMGL=1 Pokud není zadán, je automaticky doplněna hodnota 0. Parametr může nabývat hodnot od 0 do do 4, kde hodnoty mají následující význam: 0 – nepřečtené, 1 – přečtené, 2 – neodeslané, 3 – odeslané, 4 – všechny zprávy. Odpověď na tento příkaz má následující formát: +CMGL: ,, [<jméno kontaktu>], [+CMGL: ...] OK Index zprávy je číslo, pod nímž je zpráva uložena v paměti. Kód stavu zprávy má stejný význam jako parametr příkazu +CMGL. Jméno kontaktu je jméno, pod nímž je odesílatel uložen v adresáři telefonu, ne každý telefon ho vypisuje. Všechny nepřečtené zprávy vypsané tímto příkazem mění stav na přečtené.
+CMGR Read Messages Příkaz +CMGR slouží k přečtení jedné SMS zprávy, jejíž index se předá jako parametr, např. AT+CMGR=1 Odpověď má následující formát: +CMGR: ,[<jméno kontaktu>], OK Význam všech polí je stejný, jako u +CMGL. Nepřečtená zpráva, na kterou je zavolán tento příkaz, mění stav na přečtenou. Před použitím tohoto příkazu je evidentně nutné vědět, na které pozici je požadovaná SMS zpráva uložena. Také musí být nastavena správná paměť pro čtení zpráv (+CPMS). Pozici zprávy se můžeme dozvědět z oznámení o příchodu zprávy (+CMTI) nebo vypsáním všech zpráv (+CMGL). U mého telefonu Siemens je se indexuje vždy od 1, ale nikde není napsáno, že se tak chovají všechny telefony, takže není radno na to spoléhat.
+CMGD Delete Messages Tento příkaz slouží ke smazání zprávy na dané pozici. Syntaxe je +CMGD= Existuje i druhý parametr umožňující smazat všechny zprávy daného stavu, ale jeho podpora není povinná a v automatické aplikaci je tedy lepší s její existencí nepočítat.
- 17 -
- 18 -
2.3.2 Formát SMS PDU SMS PDU (Protocol Data Unit nebo Protocol Description Unit, výklady zkratky se liší) je formát SMS zprávy vhodný pro předání nižším vrstvám protokolového zásobníku GSM k odeslání na SMS centrum (SMSC), které se postará o doručení zprávy konečnému příjemci. Na sériovém terminálu se zapisuje v ASCII znacích reprezentujících hexadecimální číselnou soustavu. Má následující formát: Znaků Příklad Význam 2 07 Délka dalších 2 položek v bytech. U odeslílané SMS může být 0, použije se pak číslo SMSC uložené v telefonu (+CSCA) [2] 91 Typ čísla SMSC. 91 znamená mezinárodní formát (vč. všech předvoleb), 81 obecný formát (předvolba země může chybět) [?] 7283010010F5 Číslo SMSC ve formátu desítkových semi-oktetů – viz. níže 2 01 Typ PDU. Poslední 2 bity znamenají typ zprávy – 00 příchozí, 01 odchozí. Dále se dá určit doba platnosti, žádat o potvrzení apod. 2 OUT 00 POUZE u odchozích zpráv! Referenční číslo pro potvrzení. 00 – náhodné 2 0B Délka čísla druhé strany v číslicích 2 91 Typ čísla druhé strany (příjemce u odchozí, odesílatele u příchozí zprávy) ? 6407281553F8 Číslo druhé strany ve formátu desítkových semioktetů – viz. níže 2 00 Identifikace protokolu. V textových zprávách vždy 0 2 00 Kódovací schéma. 00 znamená GSM 7-bit, což je nejrozšířenější kód. 10 navíc vytvoří „FLASH“ zprávu přímo na displej telefonu. Dále se dá nastavit např. 8bitový text, Unicode, 8bitová data. [2/14] AA Doba platnosti SMS. Jen u odchozích zpráv a POUZE OUT pokud je povolena v Typu PDU! Relativní nebo timestamp formát. 14 IN 99309251619580 Časové razítko. POUZE u příchozích zpráv. Formát viz.níže 2 0A Délka uživatelských dat v 7-bit znacích u GSM kódování, jinak v bytech. [?] E8329BFD4697D Uživatelská data. Formát viz. níže 9EC37 Tabulka 1 - SMS PDU
- 19 -
Formát telefonních čísel Formát v jakém jsou zadávána telefonní čísla je v dokumentaci označovaný jako decimal semi-octet nebo nibble-swapped BCD. Vytvoří se tak, že se telefonní číslo zapíše po dvojicích číslic, pokud je délka lichá, doplní se na konec znak F a následně se po dvojicích čísla prohodí. Například: 123456789 12 34 56 78 9F 21 43 65 87 F9 Takto získaný řetězec ASCII znaků se posílá po sériové lince. Je nutné dávat pozor na způsob výpočtu délky čísla – u čísla SMSC se počítají dvojice znaků v uvedeném formátu čísla (3. řádek příkladu) plus 1 na položku Typ čísla; u čísla příjemce/odesílatele se počítají číslice původního čísla (1. řádek příkladu), nepočítá se vložené F a typ čísla. Ve své práci se formátu čísel nehodlám více věnovat. Plánuji totiž pouze ukládat číslo, ze kterého naposledy přišla zpráva. Automat tak bude odpovídat vždy tomu, kdo mu poslal příkaz. K tomu není třeba číslo nijak dekódovat.
Formát časového razítka Timestamp je v podobném nibble-swapped formátu jako telefonní čísla s tím, že má 7 položek po 2 znacích, po řadě označujících rok, měsíc, den, hodinu, minutu, sekundu, a časovou zónu. Časová zóna se počítá po 15 min a nevyšší bit je znaménkový (přímý kód). Ve zprávách z Čech tedy bude zapsáno 40.
Formát uživatelských dat GSM používá v SMS zprávách kódovou stránku GSM 7-bit. Aby se daly do 7 bitů vměstnat znaky západoevropských jazyků, využili návrháři dolních 32 pozic, na kterých se v kódu ASCII nacházejí netisknutelné znaky. I několik dalších znaků je na jiných pozicích, než jsme z ASCII zvyklí. Znaky jako malá a velká písmena, číslice a nejdůležitější interpunkce jsou ale na svých místech, takže si myslím, že pro účely automatické aplikace, která přijímá příkazy a odesílá potvrzení nebude nutné implementovat žádný převod kódových stránek. Horší než mírně odlišné kódování znaků je způsob, jakým jsou v PDU uloženy. Použití 7-bitového kódování totiž není samoúčelné – umožňuje na prostor 140bytů dostupný v SMS zprávě pro užitečná data vtlačit 160 znaků textu. Bohužel, sériová linka a zřejmě i další součásti GSM protocol stacku pracují s 8-bitovými slovy, takže přichází ke slovu pakování na bitové úrovni. Pakování funguje tak, že znaky v GSM abecedě zapíšeme jako sedmice bitů a postupujeme od začátku do konce: První znak má pouze 7 bitů. Doplníme ho do 8 bitů tak, že na jeho nejvyšší pozici dáme bit z nejnižší pozice dalšího znaku. Druhý znak má už jen 6 bitů, doplníme ho na 8 přesunutím 2 nejnižších bitů z dalšího znaku na nejvyšší pozice. Tak dojdeme
- 20 -
až k 7.znaku, ze kterého zbyde jen 1 bit a zbytek je zleva vypněn znakem osmým, který zanikne a proces pokračuje od začátku. Poslední znak zprávy se zleva doplní nulami. Takto je dosaženo komprese 8 znaků do 7 bytů. Při dekompresi jsou znaky obdobným způsobem skládány zpět. V této části jsem použil literaturu [8]-[10].
- 21 -
- 22 -
3 Implementace Implementace termostatu řízeného mobilním telefonem se dá rozdělit na část hardwarovou a část softwarovou. Vzhledem k problémům s dodávkou AVR Butterfly firmou MSC-GE jsem byl nucen nechat úpravy této platformy na později a začít částí softwarovou.
3.1 Softwarová část Software termostatu bude vypadat přibližně dle diagramu [Obrázek 5]. Pro vysvětlení: Hlavní program poběží v nekonečné smyčce a bude obsluhovat periferie procesoru, jako teploměr, displej, tlačítka, sériový port a spínací relé a dle hysterezního algoritmu bude provádět rozhodnutí, zda má být topení zapnuto či nikoli. Bude úzce závislý na platformě a také musí být tak krátký, aby zařízení dostatečně rychle reagovalo na vstupy a neztrácelo znaky přicházející po sériovém portu. V hlavní smyčce se také bude v určených intervalech provádět polling mobilního telefonu na nové zprávy. V případě, že sériový port přijme znak, bude tento předán parseru AT příkazů, který bude zajišťovat funkce komunikace s mobilním telefonem. Rozpozná-li parser začátek SMS zprávy, uloží ji do paměti a zavolá dekodér PDU, který ji přečte, uloží číslo odesílatele pro účely adresování odpovědi a předá její text parseru uživatelských příkazů, který provede žádanou změnu nastavené teploty a vygeneruje odpovědní zprávu. Tu zakóduje enkodér PDU a parser AT příkazů se postará o její odeslání mobilním telefonem.
- 23 -
Hlavní program:
Časovač
Polling telefonu
Měření teploty
Parser AT příkazů
Obsluha tlačítek
Dekodér SMS PDU
Obsluha sériového portu
Parser uživatelských příkazů
Ovládání spínacího prvku
Změna nastavené teploty
Zobrazení na displeji
Enkodér odpovědi do PDU
Obrázek 5 – Přibližný vývojový diagram
3.1.1 AVR-gcc Rozhodl jsem se programovat mikrokontrolér Atmel nikoli přímo v assembleru, ale v jazyce C. Tak docílím přehlednějšího kódu, který bude znovu použitelný a přenositelný, čehož hodlám využít, a vývoj algoritmů, které nejsou závislé na platformě, provádět nejdříve na PC. K demonstrační aplikaci AVR Butterfly jsou také dostupné zdrojové kódy v C, ze kterých hodlám vytěžit rutiny pro obsluhu periferií a použít je ve svém programu. Nevýhodou jazyka C je, že se programátor vzdává kontroly nad tím, kolik procesorových cyklů která operace zabere, stejně jako nad přidělením registrů a paměťového místa. Například definuje-li člověk v C proměnnou, bude pravděpodobně existovat jak v paměti, tak v registru. Pozor se musí dát i na pravidla automatické konverze typů a používat explicitní přetypování, aby se operace prováděly na 8-bitovém procesoru skutečně 8-bitově. O těchto problémech jsem našel zajímavou stránku [11]. Výhodou jazyka C jsou hotové knihovny funkcí pro práci s řetězci, matematické operace a podobně, programátor musí ale vždy zvážit, zda se mu použití knihovní funkce vyplatí, či si má napsat náhradu, u každé z nich je totiž
- 24 -
v manuálu napsáno kolik bytů programové paměti a cyklů procesoru zabere, a tato čísla není možné v omezeném embedded prostředí zanedbávat. Pro platformu AVR jsem našel 2 kompilátory jazyka C, komerční IAR Emdedded Workbench, který používá i sama firma Atmel a open-source AVRgcc resp. jeho port pro Windows WinAVR, který se také snaží být plnohodnotným vývojovým prostředím. Vzhledem k tomu, že oba kompilátory mají, zdá se, obdobné možnosti, rozhodl jsem se pro open-source variantu, a to již proto, že cenu té komerční výrobce na svých stránkách (www.iar.com) vůbec neuvádí. Dalším důvodem je, že s gcc mám zkušenosti a budu ho používat i na platformě PC. Programy zkompilované pro PC by s AVR-gcc měly jít bez problémů zkompilovat i pro cílovou platformu. Pro Atmel AVR existuje i port unixové C knihovny jménem AVR-libc, obsahující standardní knihovnu libc a matematickou libm. Dokumentace k funkcím a tipy pro programátory jsou k dispozici na [12]. Překlad demonstrační aplikace Butterfly pro AVR-gcc (kompilátor gcc se v některých konstrukcích specifických pro AVR, jako např. práce s programovou pamětí, liší od IAR) a další užitečné odkazy týkající se této platformy jsem našel na [13].
3.1.2 Enkodér/Dekodér PDU Začal jsem programovat od části, která se mi zdála nejsložitější a zároveň nejméně závislá na platformě, a to od PDU kodéru. Jde o sadu funkcí, která umí přečíst řetězec hexadecimálních znaků, do kterého mobilní telefony kódují PDU pro přenos sériovým portem, rozložit PDU na jednotlivá pole, uložit pole s telefonním číslem a dekódovat text zprávy a naopak zakódovat zadaný text jako SMS zprávu odesílanou na dříve uložené číslo. Všechny proměnné v implementaci jsou osmibitového typu unsigned char s tím, že ukazatele jsou 16 bitové. Nepoužívá žádné knihovní funkce ani dynamickou správu paměti a je, dle mého názoru, napsaný co možná nejefektivnějí. Jediné, co by se dalo vytknout je, že nebere vstup po jednotlivých znacích, ale staticky alokuje v paměti prostor pro PDU a text zprávy, odhadem 0,4kB. Na druhou stranu, na procesoru ATmega169 mám k dispozici 1kB paměti a žádná další velká pole znaků se v programu nevyskytnou, takže není nutné zde šetřit. Kdyby paměť nevystačila, nebyl by problém tuto část programu upravit. Při psaní funkcí pracujících s datovou částí PDU jsem se volně inspiroval zdrojovým kódem open-source projektů gsmd2 (funkce gsmd_sms_encode_7bits v src/sms_impl.c) a scmxx (funkce sms_data_gsm_encode v src/smspdu/smsud_enc.c). Jelikož ale tyto funkce závisí na jiných částech aplikace, nebylo je možno použít přímo a jejich kód je dosti nepřehledný, napsal jsem, také v zájmu lepšího pochopení použitého algoritmu, funkce vlastní.
- 25 -
3.1.3 Parser AT příkazů Další částí, kterou jsem implementoval nejdříve na platformě PC, přesněji operačním systému GNU/Linux kvůli jeho schopnosti používat na ovládání zařízení, např. sériového portu, pouze funkce pro standardní vstup a výstup do souboru, je parser AT příkazů. Úkolem tohoto programu je komunikace s mobilním telefonem pomocí příkazů dle standardu ETSI GSM 07.07 (3GPP TS 27.007). Nesnaží se být kompletní knihovnou podporující všechny funkce, naopak je spíše minimální a snaží se dosáhnout funkčnosti s vynaložením minimálních prostředků. Její použitelnost je omezena na vestavná zařízení podobná tomu, které se zde snažím vytvořit. Implementované funkce zahrnují inicializaci modemu a nastavení parametrů pro SMS funkce, odeslání zprávy, zjišťování nových zpráv (včetně přijímače nevyžádaného návratového kódu +CMTI, což zajišťuje okamžitou reakci na novou zprávu), přečtení zprávy a smazání zprávy. Označení parser je zde spíše nadnesené, vhodnější označení by bylo stavový automat. Návrhový vzor parser shora dolů, jak jsme se ho učili v předmětu Programovací jazyky, je pro použití ve vestavných zařízeních nevhodný, protože vyžaduje buď blokující čtení, které se v prostředí bez operačního systému zajišťuje obtížné, nebo načtení celé řádky najednou, což zbytečně plýtvá operační pamětí. Výše zmíněné funkce jsou tudíž pouze kousky kódu, které vyšlou příkaz a nastaví stavový stroj do správného počátečního stavu a všechno ostatní obstarává automat, který se překlápí a spouští akce na základě toho, jaké znaky mu jsou předávány. Spouští se jednou pro každý přijatý znak. Funkce automatu jsou provázané tak, že po zjištění nové zprávy se tato automaticky přečte, dekóduje se příkaz v ní obsažený, vytvoří se odpověď, zpráva se smaže a odpověď se odešle. Automat je napsaný metodou switch – case a je prakticky celý v jedné funkci parser(), pouze rozeznání odpovědí OK a ERROR je v samostatné funkci, neboť se používá v každém příkazu a jeho duplikováním by se kód neúměrně prodloužil. I tak se jedná o nejdelší část tohoto projektu. Při psaní této části jsem již čerpal jen z výše uvedeného teoretického rozboru problematiky.
3.1.4 Parser uživatelských příkazů Součástí programového modulu atparser.c je i parser příkazů obsažených v textu SMS zprávy. Jeho účelem je přečíst příchozí SMS zprávu a obsahuje-li platný příkaz, tento provést a odeslat uživateli odpověď. V případě, že není příkaz rozpoznán, může se poslat zpět chybová zpráva. Na místě je diskuse, zda je informace o chybě vhodná, či nikoli. Pro hovoří to, že uživatel by měl být informován o tom, že udělal chybu, aby mohl rychleji poslat správný příkaz a nečekat, zda mu přijde či nepřijde potvrzení.
- 26 -
Proti zase otázka bezpečnosti – případný útočník získá informaci o tom, že na daném telefonním čísle poslouchá automat a může začít hádat k čemu slouží a jaké přijímá příkazy. Dále je zde nebezpečí, že napíše-li automatu jiný automat, mohou si vyměňovat chybové zprávy donekonečna (nebo spíše do vyčerpání kreditu na SIM kartě). V prototypu budou chybové zprávy z diagnostických důvodů samozřejmě zapnuty. Mimo zprávy špatný příkaz jsou implementovány (dokonce již v hlavní funkci parser()) odezvy na zprávy se špatně nastaveným protokolem a kódováním. Automat tedy odpoví např. i na zprávy v kódování UCS-16, které nedokáže přečíst. Termostat bude reagovat na příkazy TOP , NETOP a STAV. Reakcí bude v každém případě zpráva o naměřené a nastavené teplotě a zda je topení zapnuto, a to v případě TOP a NETOP bráno po provedení příkazu. Velká a malá písmena lze libovolně kombinovat. Funkce je napsána taktéž metodou switch-case, podobně jako hlavní stavový automat, ale na rozdíl od něj operuje po znacích nad celým řetězcem textu SMS zprávy.
3.1.5 Program pro AVR Při programování části programu závislé na hardware jsem vyšel z portu demonstrační aplikace AVR Butterfly na avr-gcc od Martina Thomase [13]. Program jsem důkladně prostudoval a následně zakomentoval veškeré součásti, které pro mé účely nebyly nutné. Co zbylo byly pouze kusy kódu, které by se daly nazvat ovladači hardware. Některé součásti jsem vynechal zcela, např. přehravání zvuků a související ovládání Timer0, ovladač externí flash paměti, knihovnu pro práci s EEPROM, program autotestu a samozřejmě všechny součásti hierarchického menu původního Butterfly demo programu. Beze změny jsem nechal ovladač řadiče LCD používající přerušení a ovladač tlačítek využívající pin change přerušení. Ačkoli nepoužívám hodiny, nechal jsem v programu ovladač časovače řízeného hodinovým krystalem a přepsal ho, aby místo hodin realizoval několik timerů s přesností na sekundy, které pak používám v hlavní smyčce programu na řízení doby zobrazování chyb, polling příchozích SMS a reinicializaci telefonu a spouštění měření teploty. Dále jsem upravil knihovnu pro práci s analogově-číslicovým převodníkem sloužícím na odečítaní hodnoty NTC termistoru tak, aby v ní nebyly žádné blokující čekací smyčky. Také jsem z ní odstranil některé nepotřebné funkce a tabulky konstant. Výsledkem jsou 3 funkce – ADC_init() zahajující měření, ADC_complete(), která se ptá, zda bylo měření dokončeno a spouští další, dokud není provedeno 8 odměrů a ADC_periphery(), která z nich udělá průměrnou hodnotu a tu dle převodní tabulky převede na teplotu. Nakonec jsem musel odstranit i knihovnu pro práci se sériovým portem, protože byla příliš jednoduše navržena – v demonstračním programu Butterfly
- 27 -
se během práce se sériovým portem nedalo dělat nic jiného. Pokusil jsem se ji nejdříve přepsat tak, aby neobsahovala blokující čekání, ale ukázalo se, že hlavní smyčka programu je příliš dlouhá a při rychlosti 9600bps dochází v hardwarové 2 bytové vyrovnávací paměti k přeběhům. Problém jsem vyřešil tím, že jsem místo ní použil AVR UART Library pana Petera Fleuryho, která obsluhuje jak příjem tak vysílání pomocí přerušení a softwarové vyrovnávací paměti o nastavitelné velikosti (já používám 16B pro každý směr). Umožňuje zároveň vysílat a přijímat, což s ovladačem bez přerušení nešlo. Jako další jsem přepsal již hotové moduly PDU enkodéru/dekodéru a parseru AT příkazů pro platformu AVR. Modul pdu.c prakticky žádné zásahy nepotřeboval, v atparser.c jsem nahradil funkce pro testovací výstup skutečnými funkcemi pro výstup na sériový port a na LCD displej. Do funkcí spouštějících příkazy poslání a čtení SMS apod. jsem přidal příkaz na resetování timeru hlídajícího, aby stavový automat nezamrzl v nějakém nežádoucím stavu. To se stane například pokud je odpojen mobilní telefon nebo je-li připojený telefon nějakým způsobem nekompatibilní se standardem. Kolem všech textových řetězců jsem doplnil makro PSTR(), aby se načítaly z programové paměti a nekopírovaly se při inicializaci do RAM. Náležitě k tomu jsem musel změnit způsob čtení těchto řetězců. Nakonec jsem všechny části propojil v hlavní programové smyčce a odladil všechny chyby v programu. Finální strukturu programu a závislosti modulů shrnuje vývojový diagram [Obrázek 6]. Pro vysvětlení – uzavřené šipky značí předávání řízení programu, otevřené předávání dat a plné uzavřené řízení běhu programu podmínkovou proměnnou. Je vidět, že jsem se z větší části držel původní představy struktury programu, v diagramu se ale promítly praktické zkušenosti s ovládáním periferií mikrokontroléru a přibyly funkce pro hlídání stavového automatu a hlášení chyb, které jsem v programu implementoval. O programování mikropočítačů AVR v C pojednávají [12] a [14], označení registrů a popis funkce jednotlivých periferií jsou popsány v [15]. Hotový zkompilovaný program zabírá necelých 9kB programové paměti a 0,5kB paměti datové, nepočítaje lokální proměnné na zásobníku, takže při určitých škrtech by se dal nahrát i na mikrokontrolér s 8kB programové paměti, na ATmega169 naopak ještě zbývá prostor na přidání dalších funkcí.
- 28 -
Inicializace periferií
Čtení stavu tlačítek
Nastavená teplota, naměřená teplota a zap/vyp vytápění
Pin Change Interrupt Handler
Spouštění měření teploty a čtení výsledku
Parser uživ. příkazů
Ovladač sériového portu
Čtení znaků z UARTu
Parser AT příkazů
Timery
Hlídání stavového automatu, (re)inicializace telefonu a polling SMS zpráv
Kodér PDU
Indikace chyb Ovládání relé s hysterezí
ANO
Ovladač LCD Displeje
Chyba? NE Výpis stavu na displej
Opakování stisku tlačítek
Obrázek 6 – Konečný vývojový diagram
- 29 -
- 30 -
3.2 Hardwarová část 3.2.1 Úprava AVR Butterfly Na AVR Butterfly nebylo třeba provádět mnoho úprav. Šlo pouze o to, připájet konektory pro napájení, sériový port a vybrat nějaký pin na výstup na termostat. Po prostudování rozložení vývodů portů na desce Butterfly, k čemuž se spíše než originální manuál [2] hodily články [16] a [17], jsem usoudil, že nejjednodušší bude využít vývody po levé straně destičky, kde se nachází dvojice rozhraní USART a USI (čili I2C), které ovšem nepoužívám a je možné ho vypnout a piny využít pro obecný logický vstup/výstup. Zbylé dva piny na této straně jsou určené pro připojení napětí měřeného pomocí děliče napětí a AD převodníku. Než nutit uživatele připojovat drátek na nějaký pin portu B nebo D, které jsou oficielně určeny pro připojení externího napájení, propojil jsem pin voltmetru na externí napájení (viz zelený drátek na [Obrázku 8] v příloze). To, mimo toho, že všechny konektory jsou na jedné straně destičky, má tu výhodu, že je možné AD převodníkem měřit stav vlastního napájení přípravku a případně podnikat kroky pro šetření energií při jeho poklesu, např. nespínat relé, vypnout LCD displej a začít používat sleep mody procesoru. Tyto funkce jsem zatím neimplementoval, neboť nejsou nutné ke splnění zadání, ale počítám s nimi do budoucna. Multimetrem jsem změřil, že bude možné úspěšně rozlišit stavy, kdy přípravek běží na napájení z adaptéru, kdy je zálohován baterií mobilního telefonu a kdy už jede pouze ze záložní lithiové baterie. Obecné AT příkazy pro vypnutí a zapnutí telefonu bohužel neexistují, firma Siemens má sice implementováno vlastní rozšíření umožňující telefon vypnout, ale zapínat externím zařízením lze bohužel jen jejich GSM moduly, které mají pro tento účel zvláštní vstup (viz. [4] a [5]), zapnout telefon po obnovení napájení tedy obecně bohužel není možné. Jako konektory jsem použil lámací kolíkové lišty.
3.2.2 Oprava Butterfly bez zavaděče Poté, co jsem po téměř pěti měsících hádání se s reklamačním oddělením firmy MSC-GE a psaním dopisů do Německa a USA konečně obdržel desku AVR Butterfly na které běžel demonstrační program, myslel jsem, že mám vyhráno. Opak byl bohužel pravdou, protože teprve poté, co jsem Butterfly připojil k sériovému portu PC a pokusil se do něj nahrát svůj program jsem zjistil, že podržím-li reset, vyndám baterii či v menu zvolím „Jump to Bootloader“, spustí se okamžitě znovu demonstrační program a nový firmware nejde do zařízení nahrát.
- 31 -
Již jsem myslel, že budu muset běhat po celé republice a hledat někoho, kdo má originální JTAG nebo ISP programátor od Atmelu, ale nepropadl jsem panice a začal hledat na internetu řešení. Naštěsí jsem narazil internetovou diskuzi [18], kde jsem se dozvěděl, že Atmel převáděl výrobu některého svého zboží ze Švédska do Malajsie a že první série vyrobené v Malajsii nemají v EEPROM nastavený fuse bit BOOTRST, který způsobí, že po restartu zařízení nespustí uživatelský program, ale sériový zavaděč. (Zdá se tedy, že jsem měl úplně největší možnou smůlu a obdržel nejdříve poslední vadnou dávku ze Švédska, a následně, po 4 měsících, první vadnou dávku z Malajsie.) Ze čtení manuálu k WinAVR, specielně k programátoru AVRDUDE [19], jsem věděl, že nejen AVR Studio od Atmelu, ale i tento program umí nastavovat fuse bity, ale teprve článek [20] mě navedl na řešení, které nevyžaduje nějaký druh drahé JTAG sondy nebo flash programátoru. AVRDUDE má totiž zabudovanou emulaci rozhraní SPI, pomocí kterého lze také AVR programovat, na paralelní port PC. Dle schématu z článku [20] jsem tedy připájel k AVR Butterfly konektor Centronics D-SUB 25pin male (viz. [Obrázek 9]), zapojil ho do paralelního portu PC, na příkazové řádce AVRDUDE zvolil programátor dapa, čili "Direct AVR Parallel Access cable" a fuse bit BOOTRST nastavil. Poté již bylo možné programovat procesor AVR i sériovým portem, a tak jsem „kabel“ dapa mohl opět odpájet. Atmel, dle odborníka přispívajícího do diskuse [18], ujišťuje, že další série AVR Butterfly z Malajsie jsou již naprogramované správně.
3.2.3 Výroba plošného spoje pro relé Při výrobě obvodu zajišťujícího spínání zátěže a úpravu napájení pro přípravek jsem postupoval podle schématu na [Obrázku 7]. Schéma, vzhledem ke své jednoduchosti, odpovídá prakticky 1:1 návrhu plošného spoje. Vlevo je vidět konektor pro napájení 5V ss, před destičkou Butterfly je zařazena dioda D1, která slouží jako ochrana proti přepólování (samotná destička plošného spoje je proti němu odolná), a také snižuje napětí o asi 0,5V – v manuálu k Butterfly [2] je uvedeno, že napětí přídavného napájení by nemělo přesáhnout 4,5V. Relé K1 naopak musí dostat napětí plné, protože pod 4V již přestává spínat. Na pinu PE4 mikrokontroléru AVR je připojen přes ochranný rezistor R2 zesilovací tranzistor T1. Obě tyto součásti jsou nutné, protože mikrokontrolér sám dokáže dodat proud v desítkách mA a napětí do 3V (přesné charakteristiky jsou v [15]), což na sepnutí relé nestačí (proto tranzistor), ale jako parazitní proud protékající bez užitku přechodem BE tranzistoru je zase až příliš velký (proto předřadný odpor). Teoreticky mi při uvážení zesilovacího činitele tranzistoru 230 vyšla hodnota odporu asi 6kΩ, prakticky se ještě při 3kΩ kontakty relé ani nepohly. Soudím tedy, že tranzistor se nachází na hranici svých spínacích možností, kde již uvedený zesilovací činitel neplatí.
- 32 -
Tranzistor T1 spíná proud přes relé K1. K němu je antiparalelně připojena dioda D2, která chrání tranzistor před zničením napěťovou špičkou vzniklou při rozpínání induktivní zátěže – cívka relé se přes ní vybíjí. Svítivé diody D3 a D4 a jejich předřadný odpor R1 indikují stav sepnutí. Menší relé pouze se s jedním kontaktem nebylo s parametry, které jsem potřeboval, k dispozici, tak jsem přebytečný kontakt využil tímto způsobem. Při výrobě jsem použil předvrtaný univerzální plošný spoj, čímž jsem se vyhnul potřebě návrhu plošného spoje, jeho kreslení či osvitu, leptání a vrtání, k čemuž nejsem doma adekvátně vybaven. Pokud bych nevyráběl pouze prototyp, ale větší sérii, ušetřila by výroba plošného spoje fotocestou určitě práci. V tomto objemu je ale univerzální plošný spoj dostačující. Hotový osazený plošný spoj je na [Obrázek 10] a [Obrázek 11]. Na obrázcích ještě nejsou osazeny svorky pro připojení spínané zátěže. Vcc
V_in SW0 SW1
GND
D1
GND
RXD TXD K1
D2
GND
R1
PE4 PE5
R2 D3
D4
T1
PE6 RS-232
Obrázek 7 - Schéma plošného spoje
Použité součástky: K1: TNA-2C-0505L – relé; spínané napětí 250V, 5A, spínací napětí 5V, 100mA, obsahuje 2 spřažené přepínací kontakty T1: BC546B – malosignálový bipolární NPN tranzistor; 65V, 0,1A a 0,5W D1: 1N4001 – křemíková dioda; úbytek napětí 0,6V D2: 1N4007 – dioda s vyšším průrazným napětím; 1000V, 1A D3: červená LED – parametry libovolné D4: zelená LED – nejlépe s nízkou spotřebou - svítí stále R1: 200Ω
- 33 -
GND
R2: 2kΩ SW01: šroubovací svorky do plošného spoje RS-232: D-SUB 9pin male Ostatní svorky: lámací dutinkové lišty
3.2.4 Úprava kabelu Siemens Již před začátkem práce jsem měl k dispozici originální datový kabel ke svému telefonu Siemens CF62 a síťový zdroj 5V. Zdroj je původně od jiného mobilního telefonu, protože s originálním zdrojem a neoriginálním akumulátorem se telefon vypínal pro přepětí. Problémy ochrany při nabíjení Li-Ion akumulátorů ale nejsou tématem této práce. Bohužel nebylo normálně možné připojit k telefonu zároveň datový kabel a zdroj. Existoval dražší, tzv. servisní kabel, který toto umožňoval. Aby zůstal mobilní telefon stále zapnutý, musel jsem si servisní kabel postavit. Zapojení konektoru „Slim Lumberg“ jsem našel na stránce [21]. Dle tohoto popisu jsem kabel od zdroje připojil na piny 1 a 2 konektoru datového kabelu na straně u telefonu. K těmto uzlům jsem připojil ještě další kabel, který vede napájení k destičce s relé a přes ní k AVR Butterfly. Výsledkem je, že jak napájecí zdroj, tak můj přípravek jsou připojené na napájecí sběrnici telefonu, což má tu výhodu, že napájení přípravku je zálohované z baterie telefonu, takže se při výpadku nevybíjí záložní lithiový článek. Upravený kabel je vidět na [Obrázku 12].
- 34 -
4 Závěr Zadání se podařilo splnit beze zbytku. Termostat je ovladatelný jak ručně, tak na dálku, na SMS zprávy obratem reaguje zprávou o svém stavu, dokáže přímo spínat zátěž až 2x1150W a veškeré testy zatím ukazují na to, že funguje spolehlivě a dá se reálně použít. Kompletní sestavený výrobek je na [Obrázku 13]. Během psaní této práce jsem naučil programovat jednočipové mikropočítače v jazyce C, což je znalost, která se mi určitě ještě bude hodit, napsal jsem knihovnu na komunikaci pomocí SMS zpráv pro použití ve vestavných zařízeních, která, podle všeho, dosud nikde nebyla dostupná, nastudoval řadu odborných textů a vypořádal se se všemi problémy, které mě na cestě k hotovému výrobku potkaly. Otázkou je, zda se mi podaří splnit dlouhodobý cíl mého projetku, tedy pomoci rozšíření dálkového ovládání pomocí SMS do domácností. Po obhájení této práce mám v úmyslu umístit na internet podklady k tomu, aby si každý mohl také vyrobit svůj dálkově ovládaný termostat a doufám, že konkurence z řad elektroamatérů donutí firmy jako Elektrobock ke snížení cen. Použitá platforma má ještě stále nevyužité možnosti. Můžeme uvažovat nad tím, jaké další funkce by bylo možné implementovat. Mimo již zmíněného hlídání napájení se nabízí např. místo řízení topení řídit chlazení, či obojí zároveň. Při připojení dalších teplotních čidel by bylo možné měřit a spínat několik nezávislých topných okruhů a šetřit tak náklady na topení. Protože se jedná o zařízení, které se využije nejlépe v prostorách, které jsou často opuštěné, nabízí se možnost spínat mimo topení ještě osvětlení (“lampa proti zlodějům”), případně implementovat jednoduchý alarm, který zavolá majiteli, pokud detekuje pohyb. Možností je mnoho a jejich realizace vesměs není složitá.
4.1 Bezpečnost Další otázkou je bezpečnost. Prototyp v současné době žádné specielní zabezpečení nemá. Mám za to, že do značné míry dostačuje, že nikdo mimo majitele nezná telefonní číslo, na kterém automat poslouchá a náhodný reklamní roboti nebudou mít žádný zájem na tom zjišťovat, jaké příkazy automat přijímá. To je druhá linie zabezpečení – každý majitel automatu by si mohl určit, jak se bude který příkaz jmenovat, posílal by pak termostatu třeba zprávy typu „Opekej na 18“. Jméno příkazu pak vlastně představuje zároveň bezpečnostní heslo. V současném programu by to znamenalo připsání několika větví switchcase do parseru. Nejsložitější schéma, které by se podle mě dalo ještě použít je zabezpečení pomocí jednorázových hesel – místo příkazu, nebo za ním, by se zadávalo číslo
- 35 -
počítané z předchozího dle nějakého vzorce, který by bylo možné spočítat z hlavy či na kalkulačce, dnes často dostupné i na mobilním telefonu. Pan Ing. Novotný navrhoval zabezpečení pomocí šifry DES, to se mi ale zdá spíše nepraktické, protože to odstraňuje výhodu jednoduchosti posílání SMS zpráv přímo z mobilního telefonu. Bylo by nutné zkonstruovat ještě druhé podobné zařízení, které by rovněž bylo připojeno k mobilnímu telefonu a před odesláním příkazy kódovalo. Mimo to, šifrovaní neřeší otázku odposlechu a replay útoku, proti kterému je stejně odolné jako prosté heslo. Bylo by ho nutné skombinovat s generováním nějaké pseudonáhodné sekvence, čímž se dostáváme k minulému případu. Metodou používanou v existujících dálkově ovládaných termostatech je naprogramování čísla majitele a přijímání zpráv jen od něho. Toto by s pomocí EEPROM paměti na čipu AVR také nebylo těžké udělat.
- 36 -
5 Návod k obsluze GSM Termostatu Součásti Výrobek GSM Termostat se skládá z následujících součástí: Destička AVR Butterfly Destička spínacího obvodu Mobilní telefon Kabel k propojení mobilního telefonu s termostatem s připojenou nabíječkou a vývodem na napájení termostatu
Instalace 1. Do šroubovacích svorek na destičce spínacího obvodu zastrčte spínané vodiče od ústředního topení a utáhněte šroubovákem. Dejte pozor, aby při práci nebyly vodiče pod napětím! 2. Připojte datový kabel od mobilního telefonu do konektoru na spodní straně destičky spínacího obvodu. 3. Připojte napájecí vývod kabelu od mobilního telefonu do konektoru na levé straně destičky spínacího obvodu, dbejte na správnou polaritu (kladný pól je vyznačen červenou barvou na kabelu i konektoru). 4. Propojte destičku AVR Butterfly s destičkou spínacího obvodu pomocí kolíků na levé straně první a dutinek na pravé straně druhé destičky. 5. Připojte nabíječku od mobilního telefonu do elektrické zásuvky. 6. Připojte mobilní telefon ke zbývajícímu konektoru kabelu. 7. Zapněte termostat pohnutím joystickem AVR Butterfly směrem nahoru. Po 10s se provede první měření teploty, po 20s se inicializuje telefon.
Ovládání pomocí joysticku a displeje GSM Termostat disponuje šestimístným alfanumerickým LCD displejem. Těchto šest míst je po dvojicích odděleno dvojtečkami, dvojice znaků jsou využity následovně, počínaje zleva: 1. znak – indikace chyby. Při běžném provozu by měl být prázdný. ‘M’ na této pozici znamená, že něco není v pořádku s mobilním telefonem. Objeví se, pokud není telefon připojen nebo poté, co dojde k nějaké chybě v komunikaci s telefonem. ‘F’ a ‘O’ značí chyby rámce a přeběhu sériového portu. Normálně by se neměly nikdy objevit; k těmto chybám může dojít, je-li teplota v místnosti s termostatem mimo pracovní meze. V tom případě můžete zkusit vypnout a zapnout napájení termostatu, což způsobí překalibrování vnitřní frekvence řídící sériový port. 2. znak – indikace stavu. Značí, zda je povoleno či zakázáno spínání topení. ‘I’ znamená topení zapnuto ‘O’ znamená topení vypnuto
- 37 -
3. a 4. znak – naměřená teplota. Aktuální teplota v místnosti s termostatem. 5. a 6. znak – nastavená teplota. Žádaná teplota v místnosti. Stav zapnutí/vypnutí topení se změní, pohnete-li joystickem na destičce AVR Butterfly vlevo či vpravo. Žádaná teplota se mění směrem k vyšším hodnotám, pohnete-li joystickem nahoru a snižuje, pohnete-li jím dolů.
Ovládání pomocí SMS zpráv Termostat rozumí třem příkazům: TOP – nastaví žádanou teplotu na číslo následující za příkazem, například „TOP 22“, a zapne topení. NETOP – vypne topení. Dejte pozor, aby vytápěný objekt nezamrzl, v zimním období používejte raději „TOP 5“, či vyšší hodnotu, dle rozložení teplot v objektu. STAV – nemění nastavení topení, jen pošle zprávu o stavu. Na každý příkaz termostat obratem odpoví zprávou ve tvaru: „Teplota xx C, namerena yy C, topeni [zap|vyp]nuto“, kde xx a yy je skutečná naměřená a nastavená teplota a ze zap a vyp je zobrazena vždy jen jedna možnost. Zprávy se posílají na číslo přiřazené SIM kartě vložené v mobilním telefonu. Připojený telefon lze používat na volání jako normálně, všechny uložené SMS zprávy ale automat bude interpretovat jako příkazy, smaže je a odesílatelům pošle chybovou zprávu!
Chybová hlášení Při ovládání termostatu pomocí mobilního telefonu mohou nastat jisté chybové stavy. Ty běžné se indikují chybovou zprávou poslanou jak SMS zprávou, tak vypsanou na displej. Ty závažnější se objeví pouze na displeji zařízení. Běžné chyby Displej SMS Význam BAD CMD „Spatny prikaz.“ SMS zpráva nebyla rozpoznána jako příkaz. nic „CHYBA: Teplota je mimo rozsah!“ Termostat rozumí hodnotám 0-60˚C. BAD PROTOCOL „ERROR: Unsupported SMS protocol.“ Přijatá zpráva není běžná textová SMS. BAD ENCODING „ERROR: Unsupported SMS encoding.“ SMS zpráva není v kódování GSM; Vypněte si v telefonu češtinu (UCS-16).
- 38 -
Závažné chyby Displej Význam BAD MOBILE Je připojeno zařízení nepodporující posílání SMS zpráv. SEND ERROR Telefon hlásí chybu při odesílání zprávy. Může nastávat při špatném příjmu signálu. Automat se po nějaké době pokusí zprávu poslat znovu, celkem pětkrát. POLL ERROR Telefon hlásí chybu při dotazování na nové zprávy. READ ERROR Telefon hlásí chybu při čtení zprávy z paměti. DEL ERROR Telefon hlásí chybu při mazání zprávy. BAD SMS Čtená zpráva nemá formát příchozí SMS. Pozor, automat čte a maže všechny zprávy v telefonu, vč. uložených odeslaných! Objevuje-li se nějaká z těchto chyb pravidelně, volejte zákaznickou podporu. Dále mohou nastat stavy, kdy automat vůbec nerozpozná odpověď telefonu a zasekne se. Po nějaké době se restartuje a v tom případě se na displeji objeví: DL:XX:YY Znaky na pozicích XX a YY si zapamatujte a sdělte na zákaznické podpoře, bude-li se tento stav opakovat častěji. Tyto chyby nastávají běžně, odpojíte-li za běhu telefon od termostatu.
- 39 -
- 40 -
6 Seznam literatury [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
[17] [18] [19] [20] [21]
A Radio Praktická elektronika 1/2009, str. 22 – Digitální termostat s čidlem Dallas Atmel - doc4271: AVR Butterfly Evaluation Kit - User Guide: http://www.atmel.com/products/avr/butterfly/ http://en.wikipedia.org/wiki/Hayes_command_set Siemens: AT Command Set – Siemens Cellular Engines (TC3X-ATC-01V03.00) Siemens: AT Command Set for the Siemens Mobile Phones S35i, C35i, M35i Developers’ Home – SMS Tutorial: www.developershome.com/sms/ http://en.wikipedia.org/wiki/Control-Z Siemens: Developer’s Guide: SMS with the SMS PDU-mode Lars Pettersson - SMS and the PDU format: http://www.dreamfabric.com/sms/ http://mobiletidings.com/2009/02/11/more-on-the-sms-pdu/ Nigel Jones - Efficient C Code for Eight-Bit MCUs: http://www.embedded.com/98/9811/9811fe3.htm AVR Libc User Manual: http://www.nongnu.org/avr-libc/user-manual/index.html Martin Thomas - AVR-Projects: http://www.siwawi.arubi.uni-kl.de/avr_projects/ http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial Atmel – doc2514 – ATMega169 Datasheet Joe Pardue - Butterfly Alternate Pin Uses http://www.smileymicros.com/download/Butterfly%20Alternate%20Pin %20Uses.pdf Craig L. - AVR butterfly as robotics controller: http://www.robotgames.net/atmel/avr_butterfly.htm http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic& p=578383 AVRDUDE User Manual: http://www.nongnu.org/avrdude/user-manual/avrdude.html Tobias Jahn - Atmel AVR Butterfly Mini-FAQ for Linux: http://bluebat.dnsalias.org/howto/butterfly/ http://pinouts.ru/CellularPhones-P-W/siemens_c55_pinout.shtml
- 41 -
- 42 -
7 Obrazová příloha
Obrázek 8 – Úprava AVR Butterfly
Obrázek 9 - Nouzový ISP programátor
- 43 -
Obrázek 10 - Deska plošného spoje zepředu
Obrázek 11 - Deska plošného spoje zezadu
- 44 -
Obrázek 12 - Upravený kabel Siemens
Obrázek 13 - Hotový výrobek
- 45 -