Jak nainstalovat integraci Drátek eInk do Home Assistantu
Průvodce instalací integrace Drátek eInk do Home Assistantu pomocí obchodu HACS.
Arduino GSM Shield obsahuje GSM modul SIM900. Tento populární obvod od firmy Simcom nám umožňuje vytvořit z Arduina vlastní mobilní telefon. Můžeme tedy pomocí Arduina volat na různá telefonní čísla, zároveň i hovory přijímat a to samé se SMS zprávami. Dále je možné se pomocí GPRS připojit na Internet, avšak tato funkce není součástí tohoto návodu. Díky podpoře Quad-Band (850/900/1800/1900 MHz) je možné používat modul téměř po celém světě. Komunikace s Arduinem probíhá přes sériovou linku pomocí AT příkazů.
Pro úspěšné propojení GSM Shieldu s Arduinem tedy stačí vespod GSM shieldu vložit SIM kartu (je nutné odstranit zadávání PINu) a do desky Arduino Uno (či jiné kompatibilní) zapojit Shield. Na některých Shieldech lze pomocí propojek nastavit ručně piny TX a RX pro komunikaci se senzorem, u novějších jsou to pak většinou piny 7 a 8. A jako třetí je použit pin 9 pro zapínání napájení pro GSM modul.
Pokud byste chtěli využít GSM shield na jiných deskách, tak na deskách Mega a Mega 2560 je možné pro pin RX využít pouze tyto piny: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69). A na deskách Leonardo a Micro lze pro pin RX využít tyto piny: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
Pro správnou funkci uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu GPRS_SIM900, návod jak na to je uveden zde. Ukázkový kód obsahuje na svém začátku připojení potřebných knihoven a poté nastavení propojovacích pinů a rychlosti komunikace se SIM modulem. Jako další jsou vytvořeny proměnné jako detekované číslo, se kterým budeme ovládat modul, a proměnné pro práci se SMS zprávami. Následně provedeme inicializaci modulu SIM900 z knihovny. V podprogramu setup zahájíme komunikaci po sériové lince pro výpis ladících informací a následně provedeme kontrolu napájení pro SIM modul. Pokud je modul vypnutý, provedeme jeho zapnutí a poté vyčkáme ve smyčce while na kompletní inicializaci modulu. Pokud by se nedařilo navázat spojení se SIM modulem, budeme dostávat každou vteřinu informaci o chybě inicializace. Po úspěšné inicializaci se posuneme do hlavní smyčky loop, kde jako první načteme aktuální čas od spuštění napájení a převedeme si ho na textový tvar, který je poté použit při odesílání SMS odezvy. Následují ukázky různých funkcí modulu SIM900. Jako první je uvedena ukázka načtení počtu nepřečtených zpráv a v případě existence alespoň jedné nepřečtené zprávy si nejprve do proměnných načteme všechny informace, následně zprávu smažeme a vytiskneme po sériové lince všechny dostupné informace. Poté proběhne kontrola, jestli zpráva přišla od našeho nastaveného čísla a v případě že ano, tak jestli obsahuje očekávaný text „Ahoj“ nebo „Zavolej“. Pokud jsou obě podmínky splněny, vypíšeme hlášku o přijaté zprávě, u zprávy „Zavolej“ také zavoláme na nastavené číslo. V opačném případě si vypíšeme chybovou hlášku. Druhá ukázka funkce modulu SIM900 souvisí s detekcí telefonátu. Pokud je tedy splněna if podmínka o příchozím hovoru, vytiskneme si po sériové lince číslo volajícího a následně po jedné sekundě zavěsíme. Poté zkontrolujeme, jestli se číslo volaného shoduje s naším nastaveným a pokud tato podmínka platí, načteme si v našem příkladu hodnotu z analogového portu A0 a vytvoříme odpověď obsahující čas od spuštění a naměřenou hodnotu z portu A0. Následně ji převedeme na formát vhodný pro SIM modul a odešleme na uložené telefonní číslo. Pokud by byl detekován hovor od cizího čísla, dostaneme o tomto pouze informaci po sériové lince. Na konci programu se nachází už jen krátká pauza před novým během smyčky loop.
// SIM 900 GSM Shield
// připojení potřebných knihoven
#include <GPRS_Shield_Arduino.h>
#include <SoftwareSerial.h>
// nastavení propojovacích pinů a rychlosti
// komunikace se SIM modulem,
// novější Shieldy používají pro
// komunikaci TX a RX piny 7 a 8
#define pinTX 2
#define pinRX 3
#define pinPower 9
#define rychlostSim 9600
// vytvoření proměnné s detekovaným číslem
char mojeCislo[16] = "+420721******";
// vytvoření proměnných pro práci s SMS
#define delkaZpravy 160
char smsZprava[delkaZpravy];
int smsIndex = 0;
char telCislo[16];
char casDatum[24];
// inicializace SIM900 modulu z knihovny
GPRS sim900(pinTX, pinRX, rychlostSim);
void setup() {
// zahájení komunikace po sériové lince
Serial.begin(9600);
// kontrola napájení modulu SIM900,
// v případě vypnutého modulu ho zapneme
if(!sim900.checkPowerUp()) {
sim900.powerUpDown(pinPower);
}
// vyčkávací smyčka, dokud není správně nainicializován
// SIM modul
while(!sim900.init()) {
Serial.println("Chyba inicializace!");
delay(1000);
}
delay(2000);
Serial.println("Inicializace uspesna!");
}
void loop() {
// načtení a přepočet času od spuštění Arduina
// do tvaru 1h2m3s
long cas = millis()/1000;
long casSekundy = cas % 60;
long casMinuty = (cas / 60) % 60;
long casHodiny = cas / 3600;
String casKomplet = String(casHodiny);
casKomplet += "h";
casKomplet += String(casMinuty);
casKomplet += "m";
casKomplet += String(casSekundy);
casKomplet += "s";
// kontrola SMS zpráv - načtení počtu nepřečtených zpráv
smsIndex = sim900.isSMSunread();
// pokud existuje alespoň jedna nepřečtená zpráva,
// provedeme její přečtení a detekci textu
if (smsIndex > 0) {
// načtení SMS zprávy do proměnných ve funkci
sim900.readSMS(smsIndex, smsZprava, delkaZpravy, telCislo, casDatum);
// vymazání aktuálně přečtené zprávy
sim900.deleteSMS(smsIndex);
// vytištění informací o přijaté SMS zprávě
Serial.print("Od cisla: ");
Serial.println(telCislo);
Serial.print("Datum a cas: ");
Serial.println(casDatum);
Serial.print("Zprava: ");
Serial.println(smsZprava);
// kontrola přijetí SMS zprávy od našeho nastaveného čísla
// strcmp porovná 2 stringy a nula znamená počet odlišných znaků
if (strcmp(telCislo, mojeCislo)==0) {
// proměnná s detekovaným textem v SMS zprávě
char mojeZprava1[delkaZpravy] = "Ahoj";
char mojeZprava2[delkaZpravy] = "Zavolej";
// kontrola přijetí detekovaného textu
if (strcmp(smsZprava, mojeZprava1)==0) {
Serial.println("Prijata zprava Ahoj!");
}
else if (strcmp(smsZprava, mojeZprava2)==0) {
Serial.println("Prijata zprava Zavolej, tak volam!");
sim900.callUp(mojeCislo);
}
else {
Serial.println("Prijata neznama zprava.");
}
}
else {
Serial.println("Prijata neznama zprava od neznameho cisla.");
}
}
// kontrola příchozího hovoru s uložením čísla do proměnné
if(sim900.isCallActive(telCislo)) {
// vytištění informací o příchozím hovoru
Serial.print("Vola cislo: ");
Serial.println(telCislo);
// pauza po dobu 1 sekundy a následné zavěšení hovoru
delay(1000);
sim900.hangup();
// kontrola hovoru od našeho nastaveného čísla
if (strcmp(telCislo, mojeCislo)==0) {
// vytištění informace o poslání zprávy
Serial.println("Zname cislo, odeslana SMS.");
// načtení hodnoty analogového pinu
// do proměnné typu String
String analog = String(analogRead(A0));
// složení celé zprávy do proměnné odpoved
String odpoved = "Cas od spusteni: ";
odpoved += casKomplet;
odpoved += " vterin. A0: ";
odpoved += analog;
// převedení textu na proměnnou kompatibilní se SIM modulem
odpoved.toCharArray(smsZprava, 160);
// poslání SMS zprávy na nastavené číslo
sim900.sendSMS(telCislo, smsZprava);
}
else {
// vytištění informací o volání neznámého čísla
Serial.println("Nezname cislo - bez odezvy.");
Serial.print("Ulozene : ");
Serial.println(mojeCislo);
Serial.print("Volajici: ");
Serial.println(telCislo);
}
}
// krátká pauza před novou komunikací se SIM modulem
delay(10);
}
Po nahrání ukázkového kódu do Arduino desky s připojeným GSM Shieldem dostaneme například tento výsledek:
Arduino GSM Shield s modulem SIM900 je velice šikovný komunikační doplněk, který nám umožňuje doplnit Arduino o funkce mobilního telefonu. Můžeme ho pak využívat pro dálkovou kontrolu a ovládání různých zařízení, kdy může reagovat jak na příchozí nastavovací zprávy, tak jen na jednoduché prozvonění. A to vše samozřejmě jen u povolených telefonních čísel.
Seznam použitých komponent:
http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
http://dratek.cz/arduino/1215-arduino-gprs-gsm-shield-sim900-850-900-1800-1-1458073747.html
Průvodce instalací integrace Drátek eInk do Home Assistantu pomocí obchodu HACS.
Návod, jak jednoduše přidat a nastavit Drátek e-ink displej do Home Assistant