Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Ответ SMS о температуре

Компоненты и расходные материалы

Arduino Mega 2560
× 1
Датчик температуры DHT22
× 1
SIM800L
× 1
Резистор 10 кОм
× 1
Макет (общий)
× 1
Перемычки (общие)
× 1

Об этом проекте

Привет. Этот проект является частью гораздо более крупного проекта. Поскольку у меня было много проблем с этой частью и в конце концов я нашел решение, я решил поделиться им с сообществом и надеяться, что это поможет им в их проектах.

Описание проекта

Отправьте SMS на Arduino и узнайте температуру дома.

Программное обеспечение

Для модуля SIM800L я использовал библиотеку «Seeeduino_GPRS-master». Мне пришлось изменить следующие строки в библиотеке «sim800.h», чтобы она работала на MEGA:

  #define SIM800_TX_PIN 8 # define SIM800_RX_PIN 7  

... на TX_PIN 10 и RX_PIN 11. Изменить библиотеку с «SoftwareSerial» на один из портов Mega Serial, то есть Serial3, было слишком сложно, поэтому я выбрал простой выход.

Проблема

По сути, мой код - это вырезанные и вставленные примеры из двух библиотек:«DHT.h» и «Seeeduino_GPRS-master». Проблема, с которой я столкнулся, заключалась в том, что пример «gprs.h» только показал, как отправить заранее определенное сообщение в кавычках. Я не мог понять, как отправить значение переменной плавучести с моего датчика температуры. То же самое и с другими библиотеками, которые я пробовал:«GPRS_SIM900-master» и «SIM800L-master».

Я потратил недели на поиск в Интернете примеров решения моей проблемы, но не нашел. Я нашел на форуме сообщения на ту же тему, и я надеюсь, что вы найдете это сообщение для тех бедных заблудших душ, которые не получили ответов.

Ответ

Преобразуйте значение с плавающей запятой в String, а затем String в массив Char - просто!

Фрагмент кода

  MyString =String (temp, 0); // Преобразование числа с плавающей точкой в ​​StringMyString =(MyString + "Degrees C"); // преобразование строки в char, начинающейся здесь // Длина (с одним дополнительным символом для нулевого терминатора) int str_len =MyString.length () + 1; // Подготавливаем символьный массив (буфер) char char_array [str_len]; // Копируем его поверх MyString.toCharArray (char_array, str_len); // конвертируем строку в символьный конец здесь gprs.sendSMS ("04 +++++++ + ", char_array); // определяем номер телефона и текст.  

Электропроводка

Я использовал батарею ULTRAFIRE 18650 для питания модуля sim. Позже добавлю в схему регулятор напряжения. См. Это руководство.

Справочные материалы

  • http://www.ayomaonline.com/programming/quickstart-sim800-sim800l-with-arduino/
  • https://www.sparkfun.com/datasheets/Sensors/Temperature/DHT22.pdf

Библиотеки

  • https://github.com/Seeed-Studio/Seeeduino_GPRS
  • https://github.com/adafruit/DHT-sensor-library

Код

  • DHT_SIMPosting.ino
DHT_SIMPosting.ino Arduino
Отправить SMS «InTemp» запрашивает температуру и ответ Arduino в градусах C.
 // Пример тестового скетча для различных датчиков влажности / температуры DHT // Написано ladyada, общественное достояние # include «DHT.h» #define DHTPIN 2 // к какому цифровому выводу мы подключены # определить DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 // # определить DHTTYPE DHT21 // DHT 21 (AM2301) // Подключить контакт 1 (слева) датчика к + 5 В // Подключите контакт 2 датчика к любому вашему DHTPIN // Подключите контакт 4 (справа) датчика к ЗАЗЕМЛЕНИЮ // Подключите резистор 10 кОм от контакта 2 (данные) к контакту 1 (питание) sensor // Инициализирует датчик DHT.DHT dht (DHTPIN, DHTTYPE); # include  #include  #define TIMEOUT 5000GPRS gprs; bool ITemp =false; float temp; String MyString; #define LED_PIN 13bool ledStatus; // Переменная для хранения последней строки последовательного вывода от SIM800char currentLine [500] =""; int currentLineIndex =0; // Логическое значение должно быть установлено в true, если уведомление о сообщении было найдено, а следующая // строка последовательного вывода - это фактическое содержание SMS-сообщенияbool nextLineIsMessage =false; void Reply () // Здесь начинается функция {Serial.println ("GPRS - Отправить тестовое SMS ..."); gprs.preInit (); задержка (1000); в то время как (0! =gprs.init ()) {задержка (1000); Serial.print ("ошибка инициализации \ r \ n"); } Serial.println («Инициировать успешно, начать отправку SMS-сообщения ...»); если (ITemp ==true) {float t =dht.readTemperature (); temp =t; ITemp =false; } MyString =String (temp, 0); // Преобразование числа с плавающей точкой в ​​String MyString =(MyString + "Degrees C"); // преобразование строки в символ начинается здесь // Длина (с одним дополнительным символом для нулевого терминатора) int str_len =MyString.length () + 1; // Подготавливаем символьный массив (буфер) char char_array [str_len]; // Копируем его поверх MyString.toCharArray (char_array, str_len); // преобразование строки в символ заканчивается здесь gprs.sendSMS ("04 ++++++++", char_array); // определение номера телефона и текста // Здесь функция заканчивается} void setup () {Serial.begin (9600); Serial.println («Тест DHTxx!»); dht.begin (); gprs.preInit (); задержка (1000); в то время как (0! =gprs.init ()) {задержка (1000); Serial.print ("ошибка инициализации \ r \ n"); // позже отобразить ОШИБКУ SIM-карты на домашней странице HMI Nextion} // Установите режим SMS в ASCII if (0! =gprs.sendCmdAndWaitForResp ("AT + CMGF =1 \ r \ n", "OK", TIMEOUT)) {ERROR ( «ОШИБКА:CNMI»); возвращение; } // Начать прослушивание новых сообщений SMS if (0! =Gprs.sendCmdAndWaitForResp ("AT + CNMI =1,2,0,0,0 \ r \ n", "OK", TIMEOUT)) {ERROR (" ОШИБКА:CNMI "); возвращение; } Serial.println ("Успешная инициализация");} void loop () {// Подождите несколько секунд между измерениями. задержка (2000); // Считывание температуры или влажности занимает около 250 миллисекунд! // Показания датчика также могут быть "старыми" до 2 секунд (это очень медленный датчик) float h =dht.readHumidity (); // Считываем температуру в градусах Цельсия (по умолчанию) float t =dht.readTemperature (); Serial.print ("Влажность:"); Серийный отпечаток (ч); Serial.println ("% \ t"); Serial.print ("Температура:"); Серийный принт (т); Serial.println ("* C"); SIM ();} void SIM () {// Записываем текущий статус на вывод светодиода digitalWrite (LED_PIN, ledStatus); Serial.println («Ищу SMS»); // Если есть последовательный вывод с SIM800 if (gprs.serialSIM800.available ()) {char lastCharRead =gprs.serialSIM800.read (); // Считываем каждый символ из последовательного вывода до тех пор, пока не будет достигнут \ r или \ n (что означает конец строки) if (lastCharRead =='\ r' || lastCharRead =='\ n') {String lastLine =String (currentLine); // Если последняя строка была прочитана + CMT, было получено новое сообщение SMS. // Следовательно, следующая строка - это содержание сообщения. если (lastLine.startsWith ("+ CMT:")) {Serial.println (lastLine); nextLineIsMessage =true; } иначе, если (lastLine.length ()> 0) {если (nextLineIsMessage) {Serial.println (lastLine); // Считываем содержимое сообщения и устанавливаем статус в соответствии с содержимым SMS if (lastLine.indexOf ("InTemp")> =0) {Serial.println ("InTemp"); ITemp =true; Отвечать (); // ledStatus =1; // Serial.println ("Включи свет"); //} else if (lastLine.indexOf ("LED OFF")> =0) {// ledStatus =0; // Serial.println («Выключить свет»); } nextLineIsMessage =false; }} // Очистить массив символов для следующей строки чтения for (int i =0; i  

Схема


Производственный процесс

  1. Вентилятор с регулируемой температурой
  2. Регистратор температуры Raspberry Pi
  3. Считать температуру с помощью DS18B20 | Raspberry Pi 2
  4. Мониторинг температуры на Raspberry Pi
  5. Измерение температуры с помощью RASPBERRY PI
  6. Мониторинг температуры с помощью Raspberry Pi
  7. Проект IoT 101:потоковая температура с вашего Raspberry Pi
  8. Лаборатория «Метеостанция»
  9. Датчик температуры Raspberry Pi
  10. Rover