Передача информации в облачный сервис Google Docs через модуль Arduino [1] предполагает наличие «домашнего» Интернета, т.е. кабеля, проложенного от провайдера в помещение. А как быть, если устройство находится вдалеке от цивилизации или постоянно перемещается на местности? В таком случае пригодится беспроводная связь с Интернетом по каналу GPRS par GSM-модуль, например, SIM900 фирмы Sim900 [2].
Постановка задачи
Имеется: плата Arduino-UNO, стартовый набор SIM900 EVB-Kit, датчик температуры и датчик влажности.
Требуется: организовать отправку данных о температуре и влажности в облачный сервис Google Docs без применения компьютера и роутера.
Методика решения
Как известно, для передачи данных в облачную таблицу Google Docs необходимо сформировать интернет-адрес, начинающийся с символов «https://». Библиотека GPRS-функций для связки «Arduino + SIM900″, используемая в [2], успешно отправляется с отправкой информации в Интернет, но для работы с шифрованным протоколом HTTPS в GSM-модуле должна быть специальная прошивка. Имеется она или нет, можно проверить At-командой «AT+HTTPSSl». Если будет ответ ERROR (а это у большинства ранее выпущенных SIM900), то использовать прямой доступ к таблицам Google Docs по методике [1] не получится.
На помощь придет «военная хитрость», заключающаяся в переадресации ссылок через дополнительный облачный сервис PushingBox. То есть, от SIM900 в Интернет по каналу GPRS будет посылаться обычный http-запрос, который активизирует сценарий PushingBox, заключающийся в отправке уведомления в виде http-адреса на сайт Goggle Docs. Звучит, на первый взгляд, сложно, но организуется несколькими простыми шагами.
Структурная схема канала связи
De Figure 1 приведена схема взаимодействия составных частей системы.
Плату Arduino можно задействовать любую, имеющую МК с объемом памяти не менее 16 Кбайт, например, ATmega328. Допускаются самодельные аналоги Arduino или отдельный МК с соответствующей «обвязкой».
Стартовый набор SIM900 EVB-Kit в данном случае используется в качестве GSM/GPRS-шилда, что подробно рассмотрено в [2]. Если сотовый шилд с модулем SIM900 уже имеется в наличие, то он просто вставляется сверху в контакты Arduino, при этом стартовый набор EVB-Kit не нужен.
Два датчика (температуры и влажности) являются минимально достаточным набором для организации простейшей погодной станции. В домашних условиях эти параметры тесно взаимосвязаны и реально влияют на самочувствие и здоровье человека [3]. В частности, при относительной влажности 30-60% наблюдается оптимальная способность дыхательных путей к сопротивлению микробам и вирусам. «Всепогодная» зона комфорта достаточно узкая, но она имеет полосы расширения зимой и летом (Figure 2).В системе задействуются два облачных сервиса. Первый из них, PushingBox http://pushingbox.com/, служит промежуточным, а второй, Google Docs https://docs.google.com/, основным, на котором храниться таблица с результатами замеров температуры и влажности. Именно ее можно удаленно просмотреть с любого компьютера, подключенного к Интернету.
Qu'est-ce que PushingBox, HTTP et HTTPS?
PushingBox – это облачный сервис для отправки уведомлений. Он объединяет весь спектр цифровых услуг, таких как, электронная почта, Twitter, Toasty и многое другое. Пользователь получает уведомление о выполнении заранее назначенных действий. Эти действия прописываются в специальных текстовых сценариях, которые составляются по простым подсказкам.
Чтобы оценить потенциальные возможности PushingBox, достаточно ознакомиться с проектом интеллектуального дверного звонка [4]. Гость нажимает кнопку звонка, после чего в Интернет отсылается уведомление и PushingBox организует отправку снимка с веб-камеры на мобильный телефон хозяина. Это удобно, если хочется знать, кто приходил во время твоего отсутствия, или когда громкая музыка в доме может помешать услышать звонок.
Важный момент – сервис PushingBox бесплатный. Единственное, что он жестко «привязан» к аккаунту Google, но это можно рассматривать и как «минус», и как «плюс».
HTTP является основным протоколом Интернета. HTTPS – это расширение протокола HTTP с поддержкой шифрования продаваемых данных. Буква «S» в названии как раз и относится к «шифру» (англ. SSl – Secure Socket Layer)
HTTPS используется в тех случаях, когда требуется повышенная безопасность, например, вход в приватную систему, просмотр страниц банковской деятельности, корпоративных журналов, личных данных и т.д. Следует правильно понимать, что HTTPS не является панацее от всех бед. Его надежность определяется длиной кодового ключа, которая не так велика, как хотелось бы. Но на практике это все-таки лучше, чем незащищенный HTTP.
Создание сценария PushingBox
Прежде чем написать сценарий PushingBox, надо создать новую таблицу Google Docs под названием «SIM900» по методике [1], сделав одну колонку для цифр температуры, а другую – для цифр влажности (Figure 3). Для этого используется любой компьютер, подключенный к Интернету. Плата Arduino и модуль SIM900 пока не нужны.
По ходу создания интернет-таблицы необходимо запомнить:
- Адрес сайта для просмотра таблицы https://dock.google.com/spreadsheet/ccc?key=0Aott7VlagNLHdExLRUJveDJIM3pMOEFQb1NwdXFZNmc&usp=sharing;
- Адрес для сайта для записи данных в таблицу https://docs.google.com/forms/d/1IFVTCux2dBnuFKo21QhLR4aEOt3ofV87wGMLTZMzoEk/viewform;
- Код датчика температуры <entry.205712461>;
- Код датчика влажности <entry.1384695635>.
Полужирным шрифтом выделены те зоны, которые будут отличаться в каждом новом проекте пользователя. Но для первого знакомства свою таблицу составлять не обязательно, можно потренироваться на том, что уже создано, набрав в любом браузере вышеприведенные адреса.Procédure
- На сайте http://pushingbox.com/ в правом вернем углу нажать «Login with Google» и ввести пароль своего аккаунта Goggle, который надо получить заранее [1]. В появившемся окне разрешений нажать кнопку «принять».
- Выбрать в PushingBox пункт меню « My Services», нажать «Add a service», затем в самом низу возле иконки «Custom URL» нажать «Select this service» (Figure 4).
- Заполнить экран согласно Figure 5, нажать кнопку «Submit», при этом в строку RootURL надо вставить первую часть адреса таблицы Google Docs и символы «formResponse?» , т.е. https://docs.google.com/forms/d/1sFVTCux2dBnuFKo21QhLR4aEOt3ofV87wGMLTZMzoEk/formResponse?.
- Выбрать в PushingBox пункт меню «My Scenarios», ввести произвольное имя сценария, например, «SIM900_Arduino», нажать «Add» (Figure 6). В появившемся окне нажать «Add an Action», затем «Add an Action with this service». Ввести в поле DATA вторую часть адреса: <entry.205712461=$dsb$&entry.1384695635=$hih$&submit=Submit> и нажать кнопку «Submit» (riz.7). Выделенные шрифтом 9- и 10-значные коды датчиков в разных проектах будут другие. Названия имен для датчика -1 «dsb» (сокращение от DS18B20) и для датчика -2 «hih» (сокращение от HIH-5030) выбираются произвольно, но их надо будет потом точно в таком же виде указать в скетче Arduino.
- На головной странице сценария «SIM900_Arduino» нажать кнопку «Test», при этом в таблицу Google Docs будут записаны текстовые сообщения $dsb$ и $hih$, а на экране появится сообщение.
«The scenario SIM900_Arduino with the DeviceID :v0E0F0A3B4E69F81 was successfully run!» Идентификационный номер сценария v0E0F0A3B4E69F81 надо запомнить, он пригодится далее в скетче Arduino.Структура интернет-адреса для PushingBox:
http://apl.pushingbox.com/pushingbox?devid=<идентификационный номер сценария>&<название параметра датчика-1>=<число или текст параметра датчика-1>&<название параметра дытчика-2>=<число или текст параметра датчика-2>.
Если датчиков больше, чем два, то они добавляются аналогично через знак «&». В применении к рассматриваемому сценарию «SIM900_Arduino» полный адрес, по которому в таблицу Goggle Docs вносятся цифры температуры 21,5 гр. С и важности 45%, выглядит так: http://api.pushinbox.com/ pushinbox ?devid=v0E0F0A3B4E69F81&dsb=21.5&hih=45.
Сообщение об успешном выполнении действий ждать не следует, страница в браузере останется пустой. Но, при наличии ошибок ввода адреса, сразу же появляются характерные надписи наподобие «Bad DevID» и т.д. Правильность выполнения команды легко проконтролировать визуально, открыв адрес просмотра таблицы Goggle Docs.
Небольшой нюанс. При создании тестовой таблицы ее просмотр специально был разрешен всем желающим, даже тем, кто не имеет аккаунта Google. Однако хозяин таблицы может в любой момент времени ограничить в настройках доступ, сделав его или по списку для узкого круга друзей, или вообще никому, кроме себя, единственного.
Подключение датчиков к Arduino
De Figure 8 представлена электрическая схема для экспериментов. В модуле Arduino используется цифровой канал D8 для датчика температуры DD1 и аналоговый канал А5 для датчика влажности DA1. Резистор R1 сопротивлением 3…4,7 кОм является нагрузкой шины 1-Wide микросхемы DD1.
Опорное напряжение AREF при измерениях влажности по каналу АЦП берется от внутреннего стабилизатора +3,3 в Arduino. Резистор R2 – защитный, его можно заменить перемычкой, но только после откладки программы. Он уменьшает вероятность повреждения AVR- контроллера в случае его вхождения в режим работы от внутреннего (а не внешнего) ИОН. Так рекомендуют делать разработчики Arduino.
Диод Шоттки VD1 нужен, если подключается компьютер для программирования и откладки. При его отсутствии напряжение +5 В из разъема USB компьютера попадает напрямую в цепь питания SIM900 EVB-Kit,что вызывает сообщение о срабатывании защиты по уровню +4,1 В.Точность измерения абсолютной температуры DS18D20 гарантируется по даташиту не более ± 0,5ºС.Таким образом, при показаниях +23,435 ºС реальная температура может лежать в пределах +22,935… +23,935 ºС. На практике индицировать имеет смысл первые 2 или 3 значащие цифры, все остальные входят в зону недостоверности. Другой вариант- произвести точную калибровку по образцовому термометру и программно добавлять поправочные коэффициенты.
Если термодатчик должен измерять не абсолютное значение температуры, а ее относительное изменение(дрейф) во времени , то дифференциальная точность составляет 4…6 значащих цифр.
Относительная влажность воздуха согласно даташиту HIH-5030/NIN- 5031 измеряется с точностью ±3% в диапазоне 11…89%. Этого вполне достаточно для бытовых целей, ведь здесь, главное, знать примерный порядок величины. Например, при влажности 10-25%, скорее всего, придется ставить дополнительный увлажнитель, а при 75085% -принимать меры по вентиляции воздуха.
Датчик HIH- 5030 можно «один к одному» заменить датчиком HIH- 5031, но он более дорогой из-за защитного гидрофобного фильтра на корпусе, закрывающего чувствительный элемент.
Программная часть для Arduino
La листинге представлен скетч доступа к облачному сервису PushingBox через GSM –модуль SIM900. После подачи питания и нажатия кнопок на EVB-Kit система может работать круглосуточно без вмешательства человека.
Строка 4. Программный USART используется для связи с модулем SIM900, а аппаратный USART – для виртуального СОМ- порта компьютера.
Строка 5,8 – 10. Набор функций для шины 1-Wire, через которую подключается DS18B20. Интернет –адрес http://www.pjrc.com/teensy/td_libs_OneWire.html ,текущая версия 2.2 авторы Jim Studt и Paul Stoffregen. Содержащуюся в архиве
http://www.pjrc.com/teensy/arduino_librarles/OneWire.zip папку «OneWire» следует скопировать в библиотеку Arduino по пути: …\ Arduino\librarles\.
Строки 6,7,11,12. Набор интернет-функций GSMSHIELD v305 скачивается по адресу http://www.open-electronics.org/ arduino-gms-shield/ ,автор Marco Martines. Папку «GSMSHIELD» также следует скопировать в библиотеку Аrduino .
Строки 14-16. Эта часть будет отличаться в каждом новом проекте. Цифры и буквы берутся из Figure 7.
Строки 19. Внешний источник опорного напряжения в цепи AREF нужен обязательно, иначе измерение влажности окажется недостоверным. Дело в том, что питание Аrduino производится от SIM900 EVB-Kit, который в свою очередь может подключаться в нестабилизированному аккумулятору, в связи с чем напряжение будет «гулять» во времени.
Строки 20-24, 29, 45 – 49, 57, 61. На компьютер выводится отладочная информация о результатах работы (Figure 9). Убедиться в достоверности показаний можно, если подержаться рукой за корпус датчика температуры и подышать на поверхность датчика влажности. Цифры на экране компьютера должны пропорционально изменяться.
Строки 27, 63. Служебный светодиод на плате Аrduino светится во время сеанса связи и не светится во время паузы. Это дает возможность корректно закончить работу устройства общим выключением питания при погашенном светодиоде.
Строки 35-56. В этом месте в листинге, приведенном в [2], имеется «пустая» технологическая пауза на 5с. Предлагается использовать ее более рационально, в частности, для проведения 5 замеров температуры и влажности с последующим усреднением результатов в строках 46,47,49,53,55.
Строки 51-55. Формирование второй части http-адреса с «внедренными» значениями температуры (с точностью до десятых долей градуса Цельсия) и относительной влажности воздуха (округление до целого числа).
Строки 35-37,49,55. Выходное напряжение с датчика DA1 измеряется через канал АЦП (А5), затем переводится в милливольты и ограничивается снизу и сверху на случай непредвиденных ошибок. Проценты относительной влажности вычисляются по аппроксимирующей формуле из «даташистовского» графика, показанного на Figure 10.
Строки 56,60. Символьная строка «push» сначала переписывается в цифровой массив «command», а затем отправляется в Интернет.
Строка 62. Завершения работы с каналом GPRS производятся в конце каждого цикла. Это выглядит логично при больших паузах времени между отправками информации. Но, если провайдер не отключает GPRS при длительном простое, то данную строку можно закомментировать и перенести строки 28,29 в функцию «setup».
Строка 64. Регулировка частоты опроса датчиков. При расчетах следует учитывать, что процедура вхождения в связь и отправки результатов в Интернет в сроках 27-63 занимает примерно 18-20с, следовательно, один полный цикл составляет не 60с, а 78-80 с.
Финансовый вопрос
Работа в канале GPRS, к сожалению для публики, требует финансовых вложений, то есть, на SIM- карте должна иметься постоянно пополняемая сумма денег. Более того, она должна быть выше определенного минимума, поскольку некоторые операторы мобильной связи после первой отправки данных на сервер в Интернет снимают со счета сразу весь дневной тариф.
Перед принятием окончательного решения об организации передачи данных через GSM-модуль, надо тщательно просчитать баланс, чтобы «экономика была экономикой». В последнее время операторы тарифицируют не байты информации, как было раньше, а посуточное время доступа в Интернет. Стоимость одного сеанса зависит от периодичности замеров и выбранного тарифного плана [5].
Пример. Если замеры производятся 1 раз в 5 минут, то при тарифном плане 1,25 грн за сутки стоимость сеанса связи составит 0,4 коп. Для справки, в таблицу Google Docs посещается до 20000 строк, поэтому ее хватит на 2 месяца непрерывной работы, после чего информацию надо «почистить». Поскольку платить все равно приходится за целый день, то для экономии ресурсов можно выбрать тариф «Одни сутки», который активизируется только на 24 часа. За это время, если изготовить «погодную станцию» в виде переносного прибора, можно провести замеры температуры и влажности по всех помещениях многоэтажного корпуса «утром – днем – вечером – ночью», или выехать на местность для составления подробной карты климатического контроля. Единственное, что надо помнить – температурный датчик DS18B20 обладает определенной тепловой инерционностью, поэтому в каждом новом месте следует выдержать время не менее 5 минут.
Littérature
- Рюмик.С. Облачный сервис и Arduino/ Сергей Рюмик //Радиоаматор. – 2014. -№2. –С. 39-43.
- Рюмик.С. SIM900-EVB Kit или GSМ-модули 4 года спустя / Сергей Рюмик // Радиоаматор. – 2013. – №3…10. – 2014. – №1.
- Рюмик. С. Вопрос-Ответ (микроклимат в помещении) / Сергей Рюмик // Радиоаматор. -2011. – №3. – С. 44-46.
- С. Notifying Doorbell with PushingBox / Clement Storck, 2012 http://makezine.com/projects/notifying-doorbell-with-pushingbox/.
- Болдырев. Д. Сравнение тарифов на мобильный интернет для смартфонов в Украине/ Денис Болдырев, 2013 http://ain.ua/2013/08/21/134510/
Архив к проекту (Télécharger)
Auteur : Sergey Рюмик, Tchernigov
Source : Радиоаматор №3, 2014
Спасибо!
Но вроде есть ошибка:
“Если датчиков больше, чем два, то они добавляются аналогично через знак «&». В применении к рассматриваемому сценарию «SIM900_Arduino» полный адрес, по которому в таблицу Goggle Docs вносятся цифры температуры 21,5 гр. С и важности 45%, выглядит так: http://api.pushinbox.com/ pushinbox ?devid=v0E0F0A3B4E69F81&dsb=21.5&hih=45. ”
в ссылке пропущены буквы “g” в словах “pushinbox”