Intel Edison, Arduino и Twilio: SMS-сообщения из умного дома

в 15:49, , рубрики: arduino, Edison, intel, sms, Twilio, Блог компании Intel, Программирование, программирование микроконтроллеров, умный дом

Intel Edison, Arduino и Twilio: SMS-сообщения из умного дома - 1 Intel Edison – это самая маленькая в мире вычислительная платформа с самым низким энергопотреблением, которая была разработана для создания носимых устройств, таких, как те, из которых строится интернет вещей. Это – плата для разработки и прототипирования, сертифицированная Arduino. Программы на С++, которые можно писать для Intel Edison – это то же самое, что скетчи (sketch) в мире Arduino. Благодаря соответствующему окружению, Intel Edison способен взаимодействовать с различными датчиками. С их помощью можно в реальном времени измерять различные характеристики окружающей среды с высоким уровнем точности и стабильности. Intel Edison можно использовать для чтения и обработки данных самых разных датчиков, что позволяет строить на основе этой платы устройства, рассчитанные на работу в помещениях и на улице.

Сервис Twilio позволяет разработчикам программным путём получать SMS и MMS-сообщения на свои телефонные номера Twilio, и, соответственно, отправлять сообщения в ответ. Отправлять SMS и MMS-сообщения можно, используя REST API Twilio, можно организовывать SMS-переписку и отправлять SMS-сообщения в ходе телефонных звонков. Здесь мы рассмотрим отправку SMS-сообщений на обычный телефон с номеров Twilio.

Из этого материала вы узнаете о том, как считывать показания температурного датчика и отправлять SMS-сообщения на мобильный телефон, используя учётную запись Twilio.

Аппаратные компоненты

В этом проекте, посвященном работе с SMS-сообщениями, использованы следующие аппаратные компоненты:

  • Вычислительный модуль Intel Edison
  • Плата расширения Arduino
  • Набор Grove – Starter Kit Plus
  • Два Micro USB-кабеля для подключения платы к ПК
  • Источник постоянного тока

Подробная инструкция, посвящённая сборке и обеспечению питанием платы Intel Edison, находится здесь.

Intel Edison, Arduino и Twilio: SMS-сообщения из умного дома - 2
Аппаратные компоненты в сборе

Загрузка программного обеспечения

Воспользуйтесь ресурсом Intel Edison Board Software Downloads для того, чтобы загрузить свежие драйверы, вспомогательные приложения, образы прошивок и IDE Arduino.

Загрузка и установка библиотеки Twilio

Загрузите библиотеку Twilio C++ и распакуйте в папку с библиотеками Arduino IDE, которая обычно расположена по адресу C:Arduinoarduino-1.5.3-Intel.1.0.4libraries. Arduino не позволяет, чтобы в именах библиотек содержался символ «–», поэтому переименуйте twilio-cplusplus в Twilio.

Intel Edison, Arduino и Twilio: SMS-сообщения из умного дома - 3
Библиотека Twilio

Перейдите в папку Twilio и переименуйте файл Example.cpp в Example.cpp.org, в результате Example.cpp не будет вызываться каждый раз, когда мы пользуемся библиотекой Twilio. Внесите в файл Utils.h следующие изменения:

Файл Utils.h

#include <string.h>
#include <vector>

using namespace std;

Доступ к разделу устройства USB Mass Storage с Intel Edison

Multifunction Composite Gadget (g_multi) – это составной гаджет, который интенсивно использует composite framework и реализует широкую функциональность. В частности, он предоставляет USB-конфигурацию с поддержкой USB Mass Storage, а так же – интерфейсов Ethernet (RNDIS и (или) CDC Ethernet) и последовательного порта (ACM).

Для того чтобы вручную загружать или выгружать модули ядра, мы используем команду modprobe. Мы удаляем модуль g_multi для того, чтобы отключить устройство USB Mass Storage на Intel Edison.

Intel Edison, Arduino и Twilio: SMS-сообщения из умного дома - 4
Использование команды modprobe, Edison

Создадим директорию для монтирования.

Intel Edison, Arduino и Twilio: SMS-сообщения из умного дома - 5
Создание директории для монтирования, Edison

Воспользуемся командой losetup для того, чтобы назначить соответствие метки раздела «update» устройству loopback (/dev/loop0) со смещением 8192. В примере, показанном ниже, устройство loopback монтируется как /mnt/transfer.

Intel Edison, Arduino и Twilio: SMS-сообщения из умного дома - 6
Монтирование устройства на Edison

Доступ к устройству USB Mass Storage с главного компьютера

Нажмите кнопку перезагрузки, устройство USB Mass Storage появится в Проводнике Windows.

Intel Edison, Arduino и Twilio: SMS-сообщения из умного дома - 7
Устройство USB Mass Storage

Размонтируем раздел и вернём модуль g_multi.

Intel Edison, Arduino и Twilio: SMS-сообщения из умного дома - 8
Размонтирование устройства

Установка Curl и криптографических библиотек

Обратитесь к разделу «Доступ к разделу устройства USB Mass Storage с Intel Edison» для того, чтобы скопировать libcurl с зависимостями из папки /usr/lib на Edison в корневую директорию установки Arduino IDE, в папку hardwaretoolsedisonsysrootscore2-32-poky-linuxusrlib:

  • libcurl.so
  • libtasn1.so.6
  • libgcrypt.so.11
  • libgnutls.so.26
  • libgpg-error.so.0

Intel Edison, Arduino и Twilio: SMS-сообщения из умного дома - 9
Копирование Curl и других библиотек с Edison

Intel Edison, Arduino и Twilio: SMS-сообщения из умного дома - 10
Curl и другие библиотеки в Windows

Аналогично, воспользуйтесь рекомендациями раздела «Доступ к разделу устройства USB Mass Storage с Intel Edison» для того, чтобы скопировать нижеперечисленные библиотеки из папки /lib в Edison в корневую директорию установки Arduino IDE, в папку hardwaretoolsedisonsysrootscore2-32-poky-linuxlib:

  • libz.so.1
  • libcap.so.2
  • libcrypto.so

Intel Edison, Arduino и Twilio: SMS-сообщения из умного дома - 11
Копирование криптографических и других библиотек с Edison

Intel Edison, Arduino и Twilio: SMS-сообщения из умного дома - 12
Криптографические и другие библиотеки в Windows

Установка заголовочных файлов Curl

Заголовочные файлы Curl нужно поместить в корневую директорию установки Arduino IDE по адресу hardwaretoolsedisonsysrootscore2-32-poky-linuxusrinclude:

Intel Edison, Arduino и Twilio: SMS-сообщения из умного дома - 13
Заголовочные файлы Curl

Заголовочные файлы OpenSSL нужно поместить в корневую директорию установки Arduino IDE по адресу hardwaretoolsedisonsysrootscore2-32-poky-linuxusrinclude:

Intel Edison, Arduino и Twilio: SMS-сообщения из умного дома - 14
Заголовочные файлы OpenSSL

Модификация шаблонов компиляции

В папке установки Arduino IDE, по адресу hardwarearduinoedison, имеются файлы platform.*.txt. Отредактируйте тот файл, имя которого соответствует платформе, на которой выполняется сборка. Если вы работаете с Arduino IDE в Microsoft Windows, отредактируйте файл platform.win.txt.

Intel Edison, Arduino и Twilio: SMS-сообщения из умного дома - 15
Файл platform.win.txt для Windows

Для того чтобы сообщить компоновщику о том, что ему нужно добавить libcurl и libcrypto к списку библиотек при компоновке исполняемых файлов, добавьте –lcurl и –lcrypto в конец строки «recipe.c.combine.pattern». Эту строку не должны разрывать символы перевода строки.

Динамическая компоновка – файл platform.win.txt.

recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} -march={build.mcu} -o "{build.path}/{build.project_name}.elf" {object_files} "{build.path}/{archive_file}" "-L{build.path}" -lm -lpthread -lcurl –lcrypto

Создание аккаунта Twilio

Для того чтобы принимать SMS и MMS-сообщения вам нужен телефонный номер Twilio, который поддерживает работу с SMS. Для того чтобы получить собственный выделенный номер, зарегистрируйте пробную учётную запись Twilio. Как только вы получите такой номер, перейдите в раздел Hide API Credentials на сайте Twilio и найдите там Account SID и Auth Token:

Телефонный номер из сервиса Twilio и данные для программного доступа к сервису

// Версия Twilio REST API 
const char API_VERSION[] = "2010-04-01";

// Телефонный номер Twilio с поддержкой SMS
const char CALLER_ID[] = "1480405xxxx";

// Account SID и Auth token для программного доступа к Twilio
const char ACCOUNT_SID[] = "AC9c55339a5a070ae81e782117xxxxxxxx";
const char ACCOUNT_TOKEN[] = "59e8819f3f5b530b97b84baexxxxxxxx";

POST-вызовы Twilio

Для того чтобы отправить SMS-сообщение, мы совершаем POST-запрос к Twilio, используя URL «/SMS/Messages». При этом нужно передать поля «To», «From» и «Body». «To» — это ваш телефонный номер, тот, на который должно прийти SMS. «From» — это телефонный номер Twilio, а «Body» — это текст SMS-сообщения.

Пример отправки SMS с помощью сервиса Twilio

// URL path = /API_VERSION/Accounts/ACCOUNT_SID/SMS/Messages
char postReqStr[150];
strcpy(postReqStr, twilioAcc);
strcat(postReqStr, "/SMS/Messages");
Serial.println(postReqStr);

// Отправка SMS
vars.clear();
vars.push_back(Var("To", "480-xxx-xxxx"));
vars.push_back(Var("From", "480-405-xxxx"));
vars.push_back(Var("Body", smsStr));
string response = twilioRest.request(postReqStr, "POST", vars);

Датчик температуры

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

Работа с датчиком температуры

// Датчик температуры подключён к аналоговому входу 1
const int tempSensorPin = 1;

// Температура по Фаренгейту
float degF = 0;

// Эта функция считывает данные с аналогового входа, конвертирует их
// в градусы Фаренгейта и возвращает полученную текущую температуру.
float getTemperature()
{
    int analogValue = analogRead(tempSensorPin);
  
    // Получим сопротивление сенсора;
    float resistance = (float)(1023 - analogValue) * 10000/analogValue;
 
    // Сконвертируем температурные данные в соответствии с документацией; 
    float degKelvin = 1/(log(resistance/10000)/B_THERMISTOR + 1/298.15);
  
    // Конверсия из градусов Кельвина в градусы Цельсия
    float degC = degKelvin - 273.15;
  
    // Конверсия градусов Цельсия в градусы по Фаренгейту
    degF = (degC * 9.0) / 5.0 + 32.0;
        
    return degF;
}

Пример готовой программы

Вот пример готовой программы для отправки SMS-сообщения на обычный мобильный телефон в тех случаях, когда температура достигает заданного предела в 100 градусов по Фаренгейту. Отладочный вывод выполняется в эмулятор консоли Galileo в Arduino IDE.

Отправка SMS с помощью учётной записи Twilio при достижении температурой заданного порогового значения

#include "WString.h"
#include <Utils.h>
#include <Rest.h>
#include <TwiML.h>
#include <vector>
#include <math.h>

using namespace twilio;

vector<Var> vars;

// Версия Twilio REST API 
const char API_VERSION[] = "2010-04-01";

// Телефонный номер Twilio с поддержкой SMS
const char CALLER_ID[] = "1480405xxxx";

// Account SID и Auth token для программного доступа к Twilio
const char ACCOUNT_SID[] = " AC9c55339a5a070ae81e782117xxxxxxxx ";
const char ACCOUNT_TOKEN[] = "59e8819f3f5b530b97b84baexxxxxxxx ";

// Ответ от Twilio
const char* responseStr;

// Порог температуры, в Фаренгейтах
const int THRESHOLD_TEMP = 100;
const int WAIT = 1000000;

// B-значение термистора
const int B_THERMISTOR = 3975;                  

int analogValue = 0;
float degKelvin = 0;
float degC = 0;
float degF = 0;
float resistance = 0;

// Датчик температуры подключён к аналоговому входу 1
const int tempSensorPin = 1;

// Эта функция инициализирует последовательный отладочный интерфейс
void setup() {
    Serial.begin(9600);  
}

// Эта функция делает следующее: 
//     - Создаёт SMS-сообщение для отправки
//     - Использует URL-путь
//     - Отправляет SMS-сообщение на мобильный телефон с Twilio-номера
// Вход: float tempF – текущая температура в градусах Фаренгейта
void sendSMS( float tempF ) { 
 
    // Конверсия tempF в строку
    char degFstr[20];
    sprintf(degFstr, "%2f", degF);
    
    // Конверсия THRESHOLD_TEMP в строку
    char thresholdStr[20];
    sprintf(thresholdStr, "%d", THRESHOLD_TEMP);
    
    // Создание SMS-сообщения
    char smsStr[100] = "Current temperature is ";
    strcat(smsStr, degFstr);
    strcat(smsStr, " F greater than threshold temp ");
    strcat(smsStr, thresholdStr);
    strcat(smsStr, " F.");
        
    // Twilio Account = /API_VERSION/Accounts/ACCOUNT_SID
    char twilioAcc[70] = "/";
    strcat(twilioAcc, API_VERSION);
    strcat(twilioAcc, "/Accounts/");
    strcat(twilioAcc, ACCOUNT_SID);
    
    // URL path = /API_VERSION/Accounts/ACCOUNT_SID//SMS/Messages
    char postReqStr[150];
    strcpy(postReqStr, twilioAcc);
    strcat(postReqStr, "/SMS/Messages");
    Serial.println(postReqStr); 
   
    // Twilio REST
    Rest rest(ACCOUNT_SID, ACCOUNT_TOKEN);
    
    // Отправка SMS
    vars.clear();
    vars.push_back(Var("To", "480-xxx-xxxx"));
    vars.push_back(Var("From", "480-405-xxxx"));
    vars.push_back(Var("Body", smsStr));
    string response = twilioRest.request(postReqStr, "POST", vars);
}

// Эта функция считывает данные с аналогового входа, конвертирует их
// в градусы Фаренгейта и возвращает полученную текущую температуру.
float getTemperature()
{
    analogValue = analogRead(tempSensorPin);
  
    // Получим сопротивление сенсора;
    resistance = (float)(1023 - analogValue) * 10000/analogValue;
 
    // Сконвертируем температурные данные в соответствии с документацией
    degKelvin = 1/(log(resistance/10000)/B_THERMISTOR + 1/298.15);
  
    // Конверсия из градусов Кельвина в градусы Цельсия
    degC = degKelvin - 273.15;
  
    // Конверсия градусов Цельсия в градусы по Фаренгейту
    degF = (degC * 9.0) / 5.0 + 32.0;
        
    return degF;
}

// Главный цикл, в котором производится считывание текущей температуры с 
// датчика. Если температура больше, чем заданное пороговое значение, 
// выполняется отправка SMS-сообщения.
void loop() { 
    degF = getTemperature();
    if(degF > THRESHOLD_TEMP)
    {
        sendSMS(degF);
        delay(WAIT);
    }
}

Итоги

В этом материале мы поэкспериментировали с датчиком температуры и отправкой SMS-сообщений с помощью сервиса Twilio. Схожим образом можно работать и с другими датчиками из комплекта Grove Starter Kit Plus – испытайте их, а если вам хочется большего – взгляните на эти датчики. Надеемся, наш рассказ вдохновит вас на интересные опыты с Intel Edison.

Полезные ссылки

software.intel.com/en-us/iot/hardware/edison/downloads
www-ssl.intel.com/content/www/us/en/do-it-yourself/edison.html
software.intel.com/en-us/iot/hardware/edison
software.intel.com/en-us/iot/library/edison-getting-started
software.intel.com/en-us/iot/hardware/devkit
www.seeedstudio.com/wiki/images/a/a1/NCP18WF104F03RC.pdf

Автор: Intel

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js