Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
Идея состоит в том, чтобы получить смс temperatur из отцовского дома.
Ничего особенного, просто быстрое соединение частей.
Части:
- Плата контроллера Geekcreit® ATmega328P Nano V3, совместимая с Arduino
- Плата расширения DIY NANO IO Shield V1. O для Arduino
- Модуль часов реального времени на базе DS1307 RTC IIC / I2C и DS18b20
- SIM800L четырехдиапазонный GSM / GPRS
- LM2596 Миниатюрный преобразователь постоянного тока с регулируемым понижающим блоком питания
- Термистор NTC MF52AT температуры
Во-первых, много от чтения и поиска.
Прежде чем я наконец использую Geekcreit® Nano, я тестирую все части с помощью Arduino Uno.
Шаг 1. Заставьте SIM800l работать
Один из основных моментов - это мощность Sim800L.
Я использую преобразователь DC-DC LM2596 Mini, настроенный на 3,7 В и отдельный источник питания.
Эта сторона очень удобна для проверки соединения с помощью команд AT +:
Быстрый запуск SIM800 (SIM800L) с Arduino
С отключением пин-кода с помощью GSM-модема по командам я получил пин-код SIM-карты.
Следующее соображение, какая библиотека. Интернет предлагает другое решение.
Мое решение - библиотека от Маттиаса Абметса: AspenSIM800
Его пример: Send_SMS.ino использовал I как базовую программу и одну за другой соединил все остальные части вместе.
Выводы Tx и Rx являются кодами для:
RX_PIN 10 Arduino. Должен быть подключен к контакту TX модуля SIM800. TX_PIN 11 Arduino. Должен быть подключен к контакту RX модуля SIM800
Всегда полезно читать файлы *.ccp и *.h в библиотеках.
В них много интересных намеков и знаний.
Шаг 2. Заставьте RTC DS1307 с датчиком DS18B20 работать
Я использовал эту боковую сторону: simtronyx - блог для DS1307 и DS18B20.
Часы имеют соединение с шиной I2C, и это для Arduino Uno: A4 (SDA) - A5 (SCL).
DS18B20 я подключил к D3.
Я читал, что в SMS нельзя отправлять только числа с плавающей запятой, поэтому мне пришлось преобразовать числа с плавающей запятой в строку.
Что я делаю с этим фрагментом кода, который я нашел:
п
MyString1 = String (currentTemp, 2); // Преобразуем число с плавающей точкой в строку
MyString1 = (MyString1 + "C - RoomTemperatur:)");
// преобразование строки в символ начинается здесь
// Длина (с одним дополнительным символом для нулевого терминатора)
int str_len1 = MyString1.length () + 1; // Подготавливаем символьный массив (буфер)
char char_array1 [str_len1]; // Копируем
MyString1.toCharArray (char_array1, str_len1); // преобразование строки в символ заканчивается ее
Скажу честно, я не знаю, как это работает, но это работает.
Шаг 3. Приведите в действие термистор NTC MF52AT
Я работал до термистора, так что это была легкая часть.
Но и здесь вы можете найти другое решение.
В окончательном коде вы можете найти мой.
Здесь вы также можете найти перевод Floats to String.
Припаял к термистору какой-то провод и резистор 10 кОм.
Шаг 4. Заставьте всех работать вместе
Итак, я написал все программные части вместе.
Теперь мне нужно было понять, как отправлять по одному СМС каждый день в одно и то же время.
Я читал о разных идеях, некоторые с подходом TimerAlarm и другим.
Но я нашел простое решение где-то на форуме arduino:
если (now.hour () == 8 && now.minute () == 00 && now.second () == 59)
{
SIM.smsSend (адрес, char_array); // термистор
задержка (500); SIM.smsSend (адрес, char_array1); // DS18B20}
Но почему now.second = 59, потому что он отправляет целую минуту SMS. Мне подходит, но попробуйте сами.
После некоторого теста я загрузил программу в Geekcreit® Nano.
Возможно, это не лучшая программа для написания программ:), но она делает желаемое.
Поскольку у Geekcreit® ATmega328P Nano есть некоторые проблемы с IDE Arduino, я загружаю через терминал (Linux Mint) и бросаю USBtinyisp с помощью этого: avrdude -c usbtiny -p atmega328p -U flash: w: SomeHexFile.hex
Шаг 5: это сработало
Да, получилось, и его поставили в дом.
Каждый день в 6:00 я получаю смс с температурой.