Obsah:
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
Cílem je získat SMS o teplotě z domu mých otců.
Nic efektního, jen rychlé skládání dílů dohromady.
Díly jsou:
- Arduino kompatibilní s Geekcreit® ATmega328P Nano V3 Controller Board
- Rozšiřující deska DIY NANO IO Shield V1. O pro Arduino
- Hodinový modul RTC IIC / I2C v reálném čase založený na DS1307 a DS18b20
- SIM800L Quad-band GSM / GPRS
- LM2596 Mini DC-DC Converter nastavitelný krokový napájecí modul
- Teplota termistoru NTC MF52AT
Nejprve hodně mimo čtení a hledání.
Než konečně použiji Geekcreit® Nano, testuji všechny díly pomocí Arduino Uno.
Krok 1: Získejte SIM800l do práce
Jedním z hlavních bodů je výkon Sim800L.
Používám převodník LM2596 Mini DC-DC, upravený na 3,7 voltů a samostatné napájení.
Pro testování připojení pomocí AT+ příkazů je tato strana velmi použitelná:
Quickstart SIM800 (SIM800L) s Arduino
S Disable pin code using gsm modem at commands I got ride of the sim pin code.
Další úvaha, která knihovna. Internet nabízí jiná řešení.
Moje řešení je knihovna od Mattias Aabmets: AspenSIM800
Jeho zkouška: Send_SMS.ino použil I jako základní program a jeden po druhém spojil všechny ostatní části dohromady.
Pin Tx a Rx pin kódují:
RX_PIN 10 Arduina. Musí být připojen k TX pinu modulu SIM800. TX_PIN 11 Arduina. Musí být připojen ke kolíku RX modulu SIM800
Vždy je dobré přečíst si *.ccp a *.h soubory v knihovnách.
Obsahují mnoho zajímavých rad a znalostí.
Krok 2: Získejte RTC DS1307 se snímačem DS18B20, aby fungoval
Použil jsem tuto stranu: simtronyx - blog pro DS1307 a DS18B20.
Hodiny mají připojení I2C sběrnice a to je pro Arduino Uno: A4 (SDA) - A5 (SCL)
DS18B20 jsem připojil k D3.
Dočetl jsem se, že v SMS nemůžete posílat pouze plováky String, takže jsem musel překládat plováky na řetězec.
To, co dělám s tímto fragmentem kódu, který jsem našel:
n
MyString1 = String (currentTemp, 2); // Převést float na String
MyString1 = (MyString1 + "C - teplota místnosti:)");
// zde začíná převod řetězce na char
// Délka (s jedním znakem navíc pro null terminátor)
int str_len1 = MyString1.length () + 1; // Připravte pole znaků (vyrovnávací paměť)
char char_array1 [str_len1]; // Zkopírujte to
MyString1.toCharArray (char_array1, str_len1); // konvertovat řetězec na char ji ukončí
Budu upřímný, nevím, jak to funguje, ale funguje to.
Krok 3: Začněte pracovat s termistorem NTC MF52AT
Pracoval jsem předtím s termistorem, takže to byla snadná část.
Ale také zde můžete najít jiné řešení.
Ve finálním kódu můžete najít můj.
Můžete také najít překlad Plováky na řetězec.
K termistoru připájejte nějaký drát a odpor 10 kOhm.
Krok 4: Nechte všechny spolupracovat
Napsal jsem tedy všechny části programu dohromady.
Nyní jsem musel zjistit, jak posílat jednu SMS každý den ve stejnou dobu.
Četl jsem o různých nápadech, některé s TimerAlarm a jiným přístupem.
Ale našel jsem jednoduché řešení někde na fóru arduino:
if (now.hour () == 8 && now.minute () == 00 && now.second () == 59)
{
SIM.smsSend (addr, char_array); // termistor
zpoždění (500); SIM.smsSend (addr, char_array1); // DS18B20}
Ale proč právě teď. Sekunda = 59, protože odesílá celou minutovou SMS. Mně ano, ale zkuste to sami.
Po nějakém testu jsem nahrál program do Geekcreit® Nano.
Možná to není nejlepší psaní programu:), ale dělá to požadované.
Protože Geekcreit® ATmega328P Nano má nějaké problémy s Arduino IDE, nahrál jsem pomocí terminálu (Linux Mint) USBtinyisp pomocí tohoto: avrdude -c usbtiny -p atmega328p -U flash: w: SomeHexFile.hex
Krok 5: Fungovalo to
Ano, to fungovalo a je umístěno v domě.
Každý den v 6:00 mi přijde SMS s teplotou.