Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Chodzi o to, żeby dostać sms temperatury z domu mojego ojca.
Nic nadzwyczajnego, tylko szybkie składanie części.
Części to:
- Karta kontrolera Geekcreit® ATmega328P Nano V3 kompatybilna z Arduino
- DIY NANO IO Shield V1. O karta rozszerzeń do Arduino
- Moduł zegara czasu rzeczywistego oparty na DS1307 RTC IIC / I2C i DS18b20
- SIM800L Czterozakresowy GSM / GPRS
- LM2596 Mini konwerter DC-DC Regulowany moduł zasilacza obniżającego napięcie
- Temperatura termistora NTC MF52AT
Przede wszystkim dużo czytania i wyszukiwania.
Zanim w końcu użyję Geekcreit® Nano, testuję wszystkie części za pomocą Arduino Uno.
Krok 1: Spraw, aby SIM800l działał
Jednym z głównych punktów jest moc Sim800L.
Używam konwertera LM2596 Mini DC-DC, dostosowanego do 3,7 V i osobnego zasilacza.
Aby przetestować połączenie z poleceniami AT+, ta strona jest bardzo przydatna:
Szybki start SIM800 (SIM800L) z Arduino
Z Wyłącz kod PIN za pomocą modemu gsm przy poleceniach dostałem kod PIN karty SIM.
Kolejne rozważenie, która biblioteka. Internet oferuje inne rozwiązanie.
Moje rozwiązanie to biblioteka od Mattiasa Aabmetsa: AspenSIM800
Jego przykład: Send_SMS.ino użył I jako podstawowego programu i po kolei łączył wszystkie pozostałe części.
Pin Tx i pin Rx są kodowane do:
RX_PIN 10 Arduino. Musi być podłączony do pinu TX modułu SIM800. TX_PIN 11 Arduino. Musi być podłączony do pinu RX modułu SIM800
Zawsze dobrze jest czytać pliki *.ccp i *.h w bibliotekach.
Zawierają wiele ciekawych wskazówek i wiedzy.
Krok 2: Uruchom RTC DS1307 z czujnikiem DS18B20
Użyłem tej strony: simtronyx - blog dotyczący DS1307 i DS18B20.
Zegar ma połączenie magistrali I2C i to jest dla Arduino Uno: A4 (SDA) - A5 (SCL)
DS18B20 podłączyłem do D3.
Przeczytałem, że w SMS-ie nie można wysyłać Floats only String, więc musiałem przetłumaczyć floaty na string.
To, co robię z tym fragmentem kodu, który znalazłem:
n
MójCiąg1 = Ciąg(bieżącaTemp, 2); //Konwertuj float na ciąg
MójCiąg1 = (MójCiąg1 + " C - Temperatura Pomieszczenia:) ");
// konwersja łańcucha na znak zaczyna się tutaj
// Długość (z jednym dodatkowym znakiem dla terminatora null)
int str_len1 = MójCiąg1.length() + 1; // Przygotuj tablicę znaków (bufor)
char char_array1[str_len1]; // Skopiuj to
MójCiąg1.toCharArray(znak_tablica1, str_len1); // przekonwertuj łańcuch na znak kończy ją
Będę szczery, nie wiem jak to działa, ale działa.
Krok 3: Uruchom termistor NTC MF52AT
Pracowałem wcześniej z termistorem, więc to była łatwa część.
Ale i tutaj można znaleźć inne rozwiązanie.
W ostatecznym kodzie możesz znaleźć mój.
Można w niej również znaleźć tłumaczenie Floats to String.
Przylutowałem trochę drutu i rezystor 10 kΩ do termistora.
Krok 4: Zbierz wszystko do wspólnej pracy
Więc napisałem wszystkie części programu razem.
Teraz musiałem wymyślić, jak wysyłać jednego SMS-a codziennie o tej samej porze.
Czytałem o różnych pomysłach, niektóre z TimerAlarm i innym podejściem.
Ale znalazłem proste rozwiązanie gdzieś na forum arduino:
if (teraz.godzina() == 8 && now.minuta() == 00 && now.sekunda () == 59)
{
SIM.smsSend(addr, tablica_znaków); // termistor
opóźnienie (500); SIM.smsSend(addr, tablica_znaków1); // DS18B20 }
Ale dlaczego now.second = 59, ponieważ wysyła całą minutę SMS-a. Dla mnie to robi, ale wypróbuj sam.
Po pewnym teście wgrałem program do Geekcreit® Nano.
To może nie jest najlepsze pisanie programów:), ale robi to, co chcesz.
Ponieważ Geekcreit® ATmega328P Nano ma pewne problemy z Arduino IDE, przesyłam przez terminal (Linux Mint) rzucam USBtinyisp w następujący sposób: avrdude -c usbtiny -p atmega328p -U flash:w:SomeHexFile.hex
Krok 5: To zadziałało
Tak, wyszło i jest umieszczone w domu.
Codziennie o 6:00 dostaję SMS-a z temperaturą.