Интернет вещей с remotexy: конфигурация подключения.

Интернет вещей с RemoteXY: элементы управления, часть 2

Продолжаю серию статей по сервису RemoteXY. В статье рассмотрены элементы управления джойстик, поле ввода и RGB-круг. Работа с каждым элементом рассмотрена на практическом примере простых для повторения новичками устройств.

Джойстик

Если слайдер предполагает изменение значения положения в одной оси, то джойстик дает возможность изменять сразу два значения в двух перпендикулярных осях.

Элемент «джойстик» имеет параметры цвет, имя переменной (по умолчанию joystick), авто центрирование, кнопка центрирования и кнопка G-сенсора. Поскольку джойстик изменяет положение в 2 осях, то для хранения этих значений в структуре RemoteXY создаются два поля с постфиксами _x и _y, (для значения по умолчанию создаются поля RemoteXY.joystick_1_x и RemoteXY.joystick_1_y).

struct {   // input variable
int8_t joystick_1_x; // =-100..100 координата x положения джойстика   int8_t joystick_1_y; // =-100..100 координата y положения джойстика   // other variable
uint8_t connect_flag;  // =1 if wire connected, else =0 } RemoteXY;

Закрепим полученные знания, применив их в необычном музыкальном проекте.Поля структуры принимают значения от -100 до 100, центр джойстика имеет значение 0.

Авто центрирование автоматически возвращает положение джойстика в 0, как только будет убран палец с «движка» джойстика. Если не включено авто центрирование, то вернуть значения полей структуры в 0 можно при помощи кнопки центрирования.

Переключатель G-сенсора позволяет включить управление элементом «джойстик» при помощи встроенных в смартфон сенсоров положения. По умолчанию программа предполагает нулевое положение смартфона экраном вверх.

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

За основу этого музыкального проекта был взят музыкальный инструмент терменвокс (назван в честь его изобретателя Льва Сергеевича Термена, изобретен в 1920 году), инструмент не имеет привычных элементов управления в виде клавиш, струн и даже педалей.

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

Поскольку темой этой главы является джойстик, то и управлять «терменвоксом» будем джойстиком. Одна ось джойстика будет отвечать за частоту звука, второй осью попытаемся регулировать громкость (сразу скажу, что без полноценного ЦАП это не получится, так же не получится и полноценный терменвокс).

Генерировать звук будем при помощи зуммера без встроенного генератора.

Немного о зуммерах. Я использую зуммеры 1212XP со встроенным генератором звука (примерно 2500 герц) и аналогичный зуммер без встроенного генератора (извлечен из старых часов в виде пейджера).

 Обратим взор к маркировке зуммера 1212XP: первая часть числа означает размер зуммера (12 мм), вторая – напряжение питания (01 для 1,5 вольт, 03 для 3 вольт, 05 для 5 вольт и 12 для 12 вольт), буква X означает, что зуммер снабжен встроенным генератором звуковой частоты (А – зуммер без генератора). Потребляют такие зуммеры не более 30 mA.

Что касается управлением высотой звука, то тут всё просто, используем функцию tone для генерации прямоугольных импульсов. Импульсы всегда с 50% скважностью, но их частоту можно менять. С регулировкой громкости звука сложнее, потому что аналоговый сигнал получить от arduino невозможно, только его имитацию при помощи ШИМ.

Таким образом, вместо регулировки громкости звука получится модуляция сигнала с более высокой частотой сигналом с менее низкой. Частота генерации ШИМ около 1 кГц (вот только что специально замерил), частота генерации tone лежит в диапазоне от 31 до 65535 Гц.

В итоге получится сложный сигнал, пример такого сигнала представлен на скриншоте.

Тем не менее, звучит это довольно забавно, но все же это нельзя назвать полноценным терменвоксом. На этом варианте и остановимся. Код проекта в текущей реализации приведен ниже.

// определение режима соединения и подключение библиотеки RemoteXY #define REMOTEXY_MODE__HARDSERIAL #include // настройки соединения #define REMOTEXY_SERIAL Serial1 #define REMOTEXY_SERIAL_SPEED 9600 // конфигурация интерфейса  #pragma pack(push, 1) uint8_t RemoteXY_CONF[] =  { 2,0,10,0,6,5,1,5,0,0  ,17,63,63,2 }; // структура определяет все переменные вашего интерфейса управления struct {    // input variable  int8_t joystick_1_x; // =-100..100 координата x положения джойстика  int8_t joystick_1_y; // =-100..100 координата y положения джойстика // other variable  uint8_t connect_flag; // =1 if wire connected, else =0 } RemoteXY; #pragma pack(pop) void setup() {  RemoteXY_Init ();   } void loop() {  RemoteXY_Handler (); analogWrite(13, map(RemoteXY.joystick_1_x, -100, 100, 0, 255));  tone(12, map(RemoteXY.joystick_1_y, -100, 100, 50, 5000));  }

Что еще можно сделать на основе этого проекта?

  • Изменить функцию tone на analogWrite(12, map(RemoteXY.joystick_1_y, -100, 100, 0, 255));  
  • Использовать обе оси в функции tone(13, (map(RemoteXY.joystick_1_y, -100, 100, 50, 500)*map(RemoteXY.joystick_1_x, -100, 100, 1, 10))); для более точного управления высотой звука;
  • В качестве источника звука использовать зуммер с генератором, получаются интересные звуковые эффекты.

Поле ввода

Поле ввода предназначено для передачи в контроллер строки или числа. Элемент имеет параметры цвет, имя переменной (по умолчанию edit), тип вводимых данных, выравнивание (слева, по центру или справа), отображение фона и кнопка очистки.

Пройдемся по элементам в обратном порядке. Кнопка очистки, располагается в правой части элемента, выглядит как прямоугольник с крестиком.

При нажатии на нее на экране смартфона появляется всплывающее окошко с вопросом «Очистить поле ввода?» и кнопками «Да» и «Отмена». Обратите внимание: цвет окна совпадает с цветом элемента, а текст остается белым.

Поэтому если установлен светлый цвет элемента, то белая надпись будет читаться с трудом (но мы уже знаем что там написано).

Обратите внимание, что белый текст на желтом фоне плохо виден.

Если стоит галочка «показывать фон», то фон внутри рамки элемента будет темно-серым, и на темно-сером фоне надписи темным цветом будут плохо читаться. Если галочка не стоит, то фон будет прозрачным, через него будет видно фон экрана и элементы, находящиеся позади поля ввода (например, панель).

Выравнивание, как ни странно, выравнивает надпись внутри рамки в одном из трех положений: слева, по центру или справа.

Тип вводимых данных:

  • Целое число, от −32767 до +32767, тип int16_t. Если ввести число, не попадающее в это диапазон, то в поле появится максимальное (или минимальное, если было введено отрицательное число) число 32767. Дробное число ввести не получится, десятичная точка просто не сработает. Если попытаться вставить дробное число через буфер обмена, то точка просто будет изъята из числа, и вместо, например, числа 2,31 будет вставлено число 231.
  • Вещественное число (десятичная дробь), тип float. При выборе вещественного числа появляется дополнительный выпадающий список, в котором можно выбрать количество знаков после запятой (от 0 до 6 или не ограничено). При этом программа позволяет ввести больше знаков после запятой, но затем округляет их по правилам округления. Если попытаться вставить через буфер обмена в поле текст, то ничего не получится, он просто там не появится. Если текст, вперемешку с числами, то все символы кроме чисел пропадут, а числа сольются в одно число.
  • Текстовая строка, тип char. При выборе текстовой строки появляется дополнительное поле, в котором можно указать, сколько символов должна занимать строка (на самом деле выделяется количество байт, но при передаче текста используется кодировка UTF8, в которой некоторые символы могут занимать 2 байта). Генератор исходного кода автоматически добавит 1 байт к текстовой строке для символа завершения строки.

Для закрепления полученных знаний предлагаю переделать проект «кодового» замка в по-настоящему кодовый замок. Схема устройства меняться не будет, изменению будет подвергнут только исходный код.

Создаем новый интерфейс, конфигурация и подключение модуля на скриншотах.

В этот раз я включу кодовый замок в локальную сеть. Интерфейс будет выглядеть так. Обратите внимание на параметры поля ввода, я выделил 5 символов для пароля, тип вводимых данных – текстовая строка, поэтому код можно сделать довольно сложным.

Дальнейшие пояснения в комментариях к коду.

////////////////////////////////////////////// //   RemoteXY include library   // ////////////////////////////////////////////// // определение режима соединения и подключение библиотеки RemoteXY #define REMOTEXY_MODE__ESP8266WIFI_LIB #include #include // настройки соединения #define REMOTEXY_WIFI_SSID “TP-LINK” #define REMOTEXY_WIFI_PASSWORD “” #define REMOTEXY_SERVER_PORT 6377 // конфигурация интерфейса  #pragma pack(push, 1) uint8_t RemoteXY_CONF[] =  { 7,0,45,0,6,0,1,1,1,11  ,49,43,12,2,79,112,101,110,0,7  ,38,8,25,49,12,2,6,129,0,9  ,12,44,6,14,69,110,116,101,114,32  ,112,97,115,115,119,111,114,100,0 };  // структура определяет все переменные вашего интерфейса управления struct {  // input variable  uint8_t button_1; //  0  char edit_1[6]; // измените значение в [] скобках, если хотите установить пароль другой
//длинны, но помните о дополнительном байте для завершающего символа строки    // other variable  uint8_t connect_flag; // =1 if wire connected, else =0 } RemoteXY; #pragma pack(pop) ///////////////////////////////////////////// //   END RemoteXY include   // ///////////////////////////////////////////// #define PIN_BUTTON_1 D0 //к этому выводу подключен электромагнитный замок  char pass[] = “q1W34”; //это пароль, при необходимости его можно изменить. //Следите за тем, что бы он был не длиннее, чем позволяет поле структуры RemoteXY.edit_1 void setup() { RemoteXY_Init ();   pinMode (PIN_BUTTON_1, OUTPUT); } void loop() {  RemoteXY_Handler (); //отсюда начинается магия //функция strcmp сравнивает строки, если они равны, то возвращает 0  if ((strcmp (RemoteXY.edit_1, pass)==0)&&RemoteXY.button_1==1)//если строки равны И нажата кнопка   {  digitalWrite(PIN_BUTTON_1, HIGH);//то срабатывает электромагнит в замке   else   {  digitalWrite(PIN_BUTTON_1, LOW);//принудительно закрываем замок   } }

RGB-круг

Элемент «RGB» предназначен для установки цвета в палитре RGB.

Имеет всего два параметра: цвет и имя переменной (по умолчанию rgb), но задает значения сразу для трех полей структуры, по одному полю на компонент цвета. Имена полей структуры оканчиваются на _r, _g, _b для красного, зеленого и синего цветов соответственно.

struct {   // input variable
uint8_t rgb_1_r; // =0..255 значение Красного цвета   uint8_t rgb_1_g; // =0..255 значение Зеленого цвета   uint8_t rgb_1_b; // =0..255 значение Синего цвета   // other variable
uint8_t connect_flag;  // =1 if wire connected, else =0 } RemoteXY; 

Значение полей структуры для RGB лежат в диапазоне от 0 до 255. Обратите внимание на внешний вид элемента. Внешнее кольцо устанавливает цвет, внутреннее настраивает интенсивность свечения всех трех цветов. Внутренний круг разбит на четыре сектора. Буква b означает black – интенсивность всех трех компонентов цвета устанавливается равной нулю.

Буква w означает white – устанавливает максимальное свечение всех трех компонентов цвета. Буква g это оттенки серого, при перемещении регулятора по верхней дуге внутреннего круга все три компоненты цвета будут устанавливаться одинаковыми, таким образом можно настроить интенсивность свечения белого цвета.

На самом низу устоит буква с – color. Если регулятор установлен прямо на букве, то значения цветов совпадают с установленным цветом на наружном кольце.

Перемещая движок от c к b можно приглушить яркость цветов вплоть до черного цвета (то есть отсутствия свечения), перемещая движок от c к w цвета можно осветлить вплоть до белого.

Внимание, пытаясь понять то, что здесь написано вы рискуете вообще ничего не понять и окончательно запутаться. Если же вы все-таки решили прочитать это, но в итоге не поняли, то постарайтесь забыть.
На самом деле все немного хитрее, чем я описал, регулятор работает с палитрой HSB, но потом переводит её в RGB. Внешнее кольцо выбора цвета характеризует компоненту H палитры HSB, в которой значением от 0 до 360 задается цвет. Компонента S задает сдвиг цвета H к белому цвету, а компонента B – к черному. Таким образом, в положении “c” компоненты S и B находятся в положении 100.  Сдвигая регулятор на внутреннем кольце в сторону w, мы сдвигаем компоненту S в сторону нуля, а цвет становится более блеклым, пока не станет совсем белым. Сдвигая регулятор в сторону b, мы уменьшаем компоненту B в сторону нуля, цвет теряет насыщенность вплоть до черного цвета (отсутствия свечения светодиодов). Когда регулятор находится в верхней части внутреннего круга, компонента S становится равна нулю, изменяется только компонента B, то есть цвет принимает оттенки серого.

Источник: http://cxem.net/arduino/arduino218.php

Как создать себе IoT. Учимся делать интернет вещей на Android и хардкорном железе – «Хакер»

Содержание статьи

К 2020 году на планете будет 50 миллиардов устройств из мира «интернета вещей» (IoT). Это предсказание Cisco, сделанное в 2013 году, начинает сбываться.

Кроме умных холодильников с подключением к облаку и роботов-пылесосов, сейчас появляется довольно много полезных систем — прототипы с неносимой электроникой, которая помогает по косвенным признакам определить состояние человека, прототип умной парковки и системы управления автомобильным трафиком (Intel)… Возможно, IoT перевернет экономику.

Когда-нибудь, возможно уже совсем скоро, нанороботы в человеческой крови, которые вводят точные дозы лекарства и следят за состоянием человека, будут скачивать обновление через беспроводное подключение к облаку. Какой дивный новый мир открывается перед хакерами :).

Концепция IoT

Сегодня я расскажу, как сделать свою первую сеть для IoT, мостик между миром окружающим и миром программ, и поделюсь методикой построения интернета вещей.

Несмотря на то что некоторые небезосновательно считают это просто рекламным трюком (обычный М2М в новой обертке с подешевевшими компонентами и интернетом), системы с довольно мощными вычислительными ресурсами и малым энергопотреблением все больше завоевывают сердца пользователей, маркетологов и инженеров. Интернет вещей (англ.

Internet of Things, IoT) — это концепция вычислительной сети физических объектов («вещей»), оснащенных встроенными технологиями для взаимодействия друг с другом или с внешней средой.

Реализация IoT

Реализации интернета вещей очень разнятся по протоколам, по типу сетей и по цене.

Обычно общее в них — это набор сенсоров и (или) актуаторов (исполнительных устройств) с первичной сборкой и обработкой данных и пересылкой в хаб или gateway, где происходит дальнейшая обработка данных, отправка команд на сенсоры или пересылка в облако, на серверы (возможно, для работы с алгоритмами из мира Big Data, если данных очень много) и к пользователю.

Рецепт же моей реализации довольно прост: берем набор датчиков с технологией Bluetooth Smart для сбора сведений об окружающей среде, смартфон, облако по вкусу. Смешиваем, взбалтываем — и получаем маленький IoT.

Для нашего простого IoT подойдет схема считывания показаний измеренных физических величин (например, температура и влажность), простая их обработка и отправка клиенту. Завершающий этап — отображение данных на стороне клиента. В самом кратком виде наши действия можно описать тремя пунктами:

  1. Для начала нужно выбрать сам датчик или набор датчиков, с которых мы будем получать измеренные данные, и способ обработки полученных данных.
  2. Затем нужно определиться с тем, как мы будем общаться с датчиками, определить объемы данных и понять, как мы будем строить общение.
  3. Наконец, нам нужно найти подходящий клиент для нашей сети и описать работу с ним.

Роль датчика и предварительного обработчика будет играть SensorTag 2 (или SensorTag 2015) от Texas Instruments. Как вариант — Ардуино с BLE-шилдом или BLEduino.

Техасовский инструмент мне понравился ценой (примерно 3 тысячи рублей) и возможностями.

Представь, что на этой платке размером 5 x 6,7 x 1,4 см есть целых десять разных сенсоров на любой вкус: датчик освещенности, цифровой микрофон, магнитометр, датчик влажности, барометр, акселерометр, гироскоп, геркон, температурный датчик и температурный датчик по ИК-излучению, и все это с возможностью передавать данные по BLE (Bluetooth low energy, малопотребляющий Bluetooth, Bluetooth Smart), или по 6LoWPAN, или по ZigBee, а скоро ожидается выход Wi-Fi SensorTag. Железный человек с Бэтменом обзавидовались бы. А еще SensorTag может быть брелоком, и у него красненький силиконовый чехольчик (приятно потрогать).

На этой платке размером 5×6,7×1,4 см есть целых десять разных сенсоров на любой вкус: датчик освещенности, цифровой микрофон, магнитометр, датчик влажности, барометр, акселерометр, гироскоп, геркон, температурный датчик и температурный датчик по ИК-излучению.

Внутри главной микросхемы СС2650, сердца SensorTag 2, крутится операционная система реального времени (TI-RTOS), которая вместе с фирменным BLE-стеком обеспечивает надежное управление, по сути, тремя разными микроконтроллерами:

  1. Ядро первого микроконтроллера — Cortex-M3 (на нем обычно выполняется написанное нами пользовательское приложение).
  2. Ядро второго — Cortex-M0 (отвечает за физический уровень, радиосвязь).
  3. Отдельный контроллер для датчиков (помогает быстро получать от них данные).

Основная идея заключается в том, чтобы уменьшить разряд батареи, включая и отключая разные ядра в нужное время. Например, если требуется радиосвязь, включаем «радиоядро», отключаем контроллер сенсоров, и наоборот.

В результате этих ухищрений достигается снижение энергопотребления до 75% по сравнению с другими BLE-микросхемами. По документации от TI, если устройство отправляет данные раз в секунду, то оно проработает один год от батарейки-монетки CR2032.

Если же устройство не будет слать данные, а будет лишь опрашивать датчики раз в секунду, то может продержаться десять лет!

Устройство работает один год от батарейки-монетки CR2032. А если устройство не будет слать данные, а лишь опрашивать датчики раз в секунду, то может продержаться десять лет!

Почему BLE? Да потому, что он идеален для IoT:

  • Как ленивец из мультика, он очень крепко спит (мало потребляет энергии), просыпается, быстро передает данные и снова засыпает.
  • Андроидофоны с поддержкой BLE-стека сейчас есть у каждого, а именно его мы будем использовать в качестве хаба и перевалочного пункта (gateway) на пути к облаку.
  • Профиль общих атрибутов (GATT), GATT-профиль — это общие спецификации для отправки и получения коротких фрагментов данных («атрибутов») во время BLE-связи. Все существующие BLE-устройства применяют профили на его основе.GATT разработан согласно Bluetooth SIG (ассоциация разработчиков стандартов и протоколов для Bluetooth) и определяет множество профилей для устройств с BLE.
  • Профиль — это определение того, как устройство работает в конкретном приложении. Обрати внимание, что устройство может реализовывать больше одного профиля. Например, устройство может содержать профили «монитор сердечного ритма» и «детектор уровня заряда батареи».
  • Протокол атрибутов (АТТ). GATT — это верхний слой в BLE-стеке над атрибутом протокола (АТТ). Также именуется GATT/АТТ. АТТ оптимизирован для работы на BLE-устройствах. С этой целью он посылает насколько возможно меньше байтов. У каждого атрибута есть уникальный универсальный идентификатор (UUID). Он представляет собой стандартизированный 128-битный строковый ID, который используется для однозначной идентификации информации. Атрибуты, передаваемые через АТТ, могут быть двух типов: характеристики и службы.
  • Характеристики — содержат одно значение и дескрипторы, описывающие значения характеристик. Характеристики можно рассматривать как тип.
  • Дескрипторы — определения атрибутов, которые описывают характерные значения. Например, дескриптор может указать удобочитаемое описание, диапазон для значения характеристики или единицы измерения, относящиеся к характеристике и ее значению.
  • Сервис (служба) — это набор характеристик. Например, можно создать сервис под названием «монитор сердечного ритма», который включает в себя такие характеристики, как измерение частоты сердечных сокращений. Найти список существующих GATT профилей и служб можно на bluetooth.org.

Теперь рассмотрим архитектуру GATT (General Attribute Profile):

  • GATT определяет структуры, с помощью которых идет обмен данными и в которых данные сохраняются;
  • сервисы оперируют данными, которые предоставляются с использованием характеристик;
  • клиент использует эти данные.
Архитектура GATT (General Attribute Profile) Структура стека TI Bluetooth low energy

Для начала работы с SensorTag 2 нужно установить среду разработки от TI — Code Composer Studio (CCS) или IDE IAR. Установщик CCS можно найти по следующей ссылке. Там тебе предложат зарегистрироваться, и затем можно будет скачать установщик (для Windows или Linux). IAR можно найти тут.

Нужно выбрать IAR Embedded Workbench for ARM, и после регистрации тебе будет доступна версия без ограничений по размеру компилируемого кода, но с лицензией на месяц или с ограничениями (32 Кбайт компилируемого кода), но без лимита по времени использования. Существует и набор облачных инструментов TI, в числе которых среда CCS Cloud.

Рекомендую попробовать все перечисленные IDE, тем более что их не так много. Также для работы с нашим gateway/хаб-устройством (смартфон с OS Android) нужно установить Java Development Kit (JDK) 7 и Android Studio.

Кроме того, рекомендую взять программатор-отладчик cc-devpack-debug. Эта платка не только может прошивать и отлаживать SensorTag 2, но и умеет работать с другими контроллерами от TI (например, СС3200 и СС1310).

Предположим, что у нас нет отладчика, и будем прошивать SensorTag 2 через Android- или iOS-устройство по воздуху. Как это сделать, расскажу дальше.

Еще полезно скачать и установить Bluetooth Low Energy Software Stack, или просто BLE-STACK. Нам пригодится стек версии 2.1.1.

После установки пакета в папке ti на жестком диске ты найдешь разные полезные примеры, документацию и прошивки для ST2 под разные IDE.

Также для удобной работы из-под Windows с визуализацией и парсингом служб, профилей и пакетов BLE можно установить настольное приложение TI BLE Device Monitor и SmartRF Studio или [BTool] (из состава пакета BLE-STACK).

RTFM: читаем документацию перед началом работы

Из полезной документации перед началом работы я советую почитать введение в разработку BLE-приложений CC2640 BLE Software Developers Guide.

На страничке, посвященной SensorTag 2, есть также достаточно много полезной информации про устройство. Например, там рассказано, как написать приложение к SensorTag 2 для смартфона c использованием JavaScript-фреймворка.

Горсть SensorTag Отладчик cc-devpack-debug

Для того чтобы понять, что мы делаем, советую зайти на страничку SimpleLink Academy.

На ней в форме лабораторных работ и викторин дается введение в TI-RTOS (операционная система реального времени (RTOS) от TI, которая вместе с BLE-STACK является частью прошивки SensorTag), знакомство с ее понятиями и сущностями (например, есть рассказ о таких общих понятиях для всех RTOS, как семафор или задача). Следующие за этим лабораторные работы посвящены как раз Bluetooth Smart:

  • Фундаментальные концепции устройства BLE-стека.
  • Создание своего кастомного профиля в BLE.
  • Создание простой сети.
  • Работа с другой IDE (Sensor Controller Studio) и пример для SensorTag — снятие данных по шине I2C от датчика освещенности.

Источник: https://xakep.ru/2016/04/28/iot-android-sensortag/

Инструкции по подключению | Марк, интернет-провайдер в Ижевске

Откройте «Пуск» и выберите пункт “Панель управления”. Далее, выберите «Сеть и интернет», затем «Набор номера» и «Настройка нового подключения» 

В появившемся окне выбираем «Подключение к интернету»

Далее – «Высокоскоростное (с РРРоЕ)»

Затем необходимо будет ввести логин и пароль, предоставленные провайдером, имя подключения – произвольное

В целях безопасности, в свойствах «подключение по локальной сети» рекомендуется отключить протокол TCP/IP.

  1. Зайдите в «Сетевые подключения»

  2. Выберите «Файл» и нажмите «Новое подключение»

  3. Нажмите «Далее»

  4. Выберите «Подключение к Интернету» и нажмите «Далее»

  5. Выберите «Установить подключение вручную» и нажмите «Далее»

  6. Выберите «Через высокоскоростное подключение, запрашивающее имя пользователя и пароль»

  7. Введите название подключения

  8. Введите свой логин и пароль

  9. Поставьте галочку «Добавить ярлык на рабочий стол» и нажмите «Готово»

  1. Откройте параметры системы «System Preferences» 
  2. В открывшемся окне выберите настройки сети «Network»
  3. Выберите настройку «Built-in Ethernet» и нажмите «Configure…»
  4. На вкладке «TCP/IP» выключите «IPv4»
  5. Перейдите на вкладку «PPPoE» и настройте все как на рисунке
  1. Скачайте и распакуйте на диск C: архив. RASPPPOE_099.ZIP

  2. Откройте окно «Мой компьютер», выберите «Панель управления»

  3. Выберите «Сеть»

  4. Нажмите «Добавить»

  5. Выберите элемент «Протокол», нажмите «Добавить»

  6. Нажмите «Установить с диска»

  7. Далее нажмите «Обзор» и найдите файлы, которые распаковали в пункте 1.

  1. Зайдите в «Пуск» и выберите «Панель управления»

  2. Выберите в разделе «Сеть и Интернет» подраздел «Подключение к Интернету»

  3. Выберите «Высокоскоростное (с PPPoE)»

  4. Введите свой логин и пароль и нажмите «Подключить»

  5. В случае неудачи нажмите «Все равно создать»

  6. Зайдите в «Пуск» и выберите «Подключение»

  7. Правой клавишей мышки щелкните на созданное подключение, левой клавишей выберите «Свойства»

  8. Впишите имя службы «MARK-PPPoE»

  1. Зайдите в «Пуск» и выберите «Панель управления»

  2. Зайдите в раздел «Сеть и Интернет»

  3. Зайдите в раздел «Центр управления сетями и общим доступом», в нем подраздел «Настройка нового подключения или сети»

  4. Выберите «Подключение к интернету»

  5. Выберите «Высокоскоростное (с PPPoE)»

  6. Введите свой логин и пароль и нажмите «Подключить»

  7. В случае неудачи нажмите «Все равно создать»

Щёлкнуть правой кнопкой мыши на пустое место экрана монитора, после чего в нижнем правом углу отобразится меню с пунктом «Все приложения»

Далее выбираем пункт «Панель Управления»

В настройках параметров компьютера выбираем пункт «Сеть и интернет»

электронный документооборот

Источник: https://mark.ru/instrukcii-dlya-samostoyatelnoy-nastroyki/instrukcii-po-podklyucheniyu

Облачный сервис для “интернета вещей”. Урок 4

В предыдущем уроке мы разработали интерфейс веб-приложения для интернета вещей (IoT).  Теперь Вы можете взаимодействовать с приложением, удалённо управлять устройствами, передающими данные на сервер, получать показания датчиков этих устройств. Но есть одно НО: к серверу ещё не подключено ни одно устройство. Именно взаимодействию передающего устройства с сервером и посвящён этот урок.

Напомним, что о том, как работает передающее устройство и как его собрать, мы рассказали в серии уроков «Мониторинг температуры через интернет с помощью GSM-модуля SIM900». Мы также подготовили набор-конструктор, содержащий компоненты и модули, необходимые для сборки устройства.

Если передающего устройства у Вас пока нет — это не значит, что Вы не сможете дальше работать над созданием веб-приложения. Имитировать работу устройства можно с помощью любого браузера. О том, как это сделать, читайте тут.

Взаимодействие устройства с сервером

Взаимодействие устройства с сервером построено на следующих принципах:

  • обмен данными всегда инициирует устройство, а не сервер. Такова клиент-серверная архитектура: сеанс обмена данными открывает клиент. Нам удобен этот вариант тем, что устройствам не нужны выделенные ip-адреса.
  • обмен данными происходит периодически. Устройство передаёт данные на сервер не только тогда, когда какие-то параметры изменились, а постоянно, с заданной периодичностью. Если показания датчиков не поменялось, устройство передаёт пустой запрос, служащий для контроля состояния связи. Наши устройства посылают запросы на сервер с такой частотой, с которой это возможно. Сразу за ответом сервера следует новый запрос. Конечно, это увеличивает размер трафика, зато если вдруг устройство перестанет выходить на связь(выйдет из строя, что-то случится с питанием и т.д.) мы сразу же узнаем об этом. Это важно на ответственных объектах, где потеря контроля над системой может привести к необратимым последствиям и реакция системы на команды пользователя должна быть достаточно быстрой (насколько позволяет мобильный интернет). Если для Вашей задачи быстродействие не критично, Вы можете уменьшить частоту запросов и сэкономить трафик.

Устройство посылает на сервер HTTP-запрос, в котором содержатся параметры системы. Например такой:

Это GET-запрос, точнее его URL. Подробно об  этом, мы писали в этом уроке. Тут вкратце:

  • z925997t.beget.tech — сервер (точнее его доменное имя), которому адресован запрос
  • device_status.php — скрипт, который выполнится на сервере по этому запросу

После знака «?» идут передаваемые параметры:

  • ID=1 — это id устройства. В предыдущем уроке мы договорились, что у нас пока одно устройство. Но теоретически их может быть много и сервер будет отличать их по id.
  • Term=176 — температура 17,6 °С — показания датчика температуры умноженные на 10. Поскольку параметра в GET-запросе не могут быть дробными, а мы хотим передавать значение температуры с точностью до десятых, поэтому умножаем его на 10. Потом учтём это в приложении при выводе пользователю.
  • Rele=0 — состояние реле (о -выключено, 1 — включено)

В ответ на этот запрос сервер передаст нам строку:

«COMMAND 1 EOC»  или «COMMAND 0 EOC»

0 или 1 в этой строке — команда для реле (выключить или включить). Именно эта команда записывается в БД, когда пользователь нажимает в интерфейсе приложения кнопку «Включить реле» или «Выключить реле».

Если температура и состояние реле не поменялось, устройство не будет передавать эти параметры, чтобы не плодить в БД сервера одинаковые значения и не увеличивать объём хранимых данных. В этом случае устройство отправит запрос только с одним параметром (id устройства):

Это будет означать: «Привет, сервер! У меня ничего не поменялось, но я всё ещё на связи, не волнуйся.»

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

Могли бы… но не можем, потому что у нас на сервере пока отсутствует скрипт «device_status.php», который должен обрабатывать запросы от устройства.

Давайте его создадим…

device_status.php

Заходим в каталог нашего веб-приложения и создаём новый файл «device_status.php».

Открываем этот файл и пишем в него код:

if(isset($_GET[«ID»])){ //Если запрос от устройства содержит идентификатор $query = «SELECT * FROM DEVICE_TABLE WHERE DEVICE_ID='».$_GET[‘ID’].»‘»; $result = mysql_query($query);

if(mysql_num_rows($result) == 1){ //Если найдено устройство с таким ID в БД

if(isset($_GET[‘Rele’])) { //Если устройство передало новое состояние реле //проверяем есть ли в БД предыдущее значение этого параметра $query = «SELECT OUT_STATE FROM OUT_STATE_TABLE WHERE DEVICE_ID = ‘».$_GET[‘ID’].

»‘»; $result = mysql_query($query); $date_today = date(«Y-m-d H:i:s»); //текущее время if(mysql_num_rows($result) == 1){ //Если в таблице есть данные для этого устройства — обновляем $query = «UPDATE OUT_STATE_TABLE SET OUT_STATE='».$_GET[‘Rele’].

»‘, DATE_TIME=’$date_today’ WHERE DEVICE_ID = ‘».$_GET[‘ID’].»‘»; $result = mysql_query($query); } else { //Если данных для такого устройства нет — добавляем $query = «INSERT OUT_STATE_TABLE SET DEVICE_ID='».$_GET[‘ID’].»‘, OUT_STATE='».$_GET[‘Rele’].

»‘, DATE_TIME=’$date_today'»; //Записать данные $result = mysql_query($query); }

}

if(isset($_GET[‘Term’])) { //Если устройство передало новое значение температуры //проверяем есть ли в БД предыдущее значение этого параметра $query = «SELECT TEMPERATURE FROM TEMPERATURE_TABLE WHERE DEVICE_ID='».$_GET[‘ID’].

»‘»; $result = mysql_query($query); $date_today = date(«Y-m-d H:i:s»); //текущее время if(mysql_num_rows($result) == 1){ //Если в таблице есть данные для этого устройства — обновляем $query = «UPDATE TEMPERATURE_TABLE SET TEMPERATURE='».$_GET[‘Term’].

»‘, DATE_TIME=’$date_today’ WHERE DEVICE_ID = ‘».$_GET[‘ID’].»‘»; $result = mysql_query($query); } else { //Если данных для этого устройства нет — добавляем $query = «INSERT TEMPERATURE_TABLE SET DEVICE_ID='».$_GET[‘ID’].»‘, TEMPERATURE='».$_GET[‘Term’].

»‘, DATE_TIME=’$date_today'»; //Записать данные $result = mysql_query($query); }

}

//Достаём из БД текущую команду управления реле $query = «SELECT COMMAND FROM COMMAND_TABLE WHERE DEVICE_ID = ‘».$_GET[‘ID’].»‘»; $result = mysql_query($query); if(mysql_num_rows($result) == 1){ //Если в таблице есть данные для этого устройства $Arr = mysql_fetch_array($result); $Command = $Arr[‘COMMAND’];

}

//Отвечаем на запрос текущей командой if($Command != -1) //Есть данные для этого устройства { echo «COMMAND $Command EOC»; } else { echo «COMMAND ? EOC»; } }

}

?>

Скачать код скрипта

Сохраняем изменения.

Разбираемся с кодом скрипта

Наше устройство передаёт параметры, используя HTTP-запрос с методом GET. Поэтому все переданные значения оказываются в глобальном массиве $_GET[].

В начале скрипта производится подключение к БД.

Затем проверяем какие параметры были переданы устройством.

Если получено новое значение температуры — обновляем его в БД или заносим туда, если там до этого не было данных о температуре от этого устройства.

То же самое проделываем, если получено новое состояние реле.

После этого скрипт ищет в БД текущее значение команды управления реле  и отправляет устройству в строке. Например:

Если команды в БД нет (пользователь ни разу не нажимал кнопки «Включить реле» или «Выключить реле», тогда скрипт ответит:

Тестируем скрипт

Теперь можем протестировать взаимодействие устройства с сервером.

Открываем любой браузер и пишем запрос (не забудьте изменить доменное имя на своё) :

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

Теперь открываем страницу веб-приложения в браузере (или обновляем, если уже открыта)  и видим данные:

Можете понажимать на кнопки «включить» и «выключить» и убедиться что команда для реле меняется в ответ на новый запрос. Для этого снова введите в адресную строку «запрос от устройства».

Ну вот и всё! Теперь осталось научить Ваше устройство передавать такие запросы (наверное Вы уже сделали это).

Заключение

В этом уроке мы разобрались, как с сервером взаимодействует передающее устройство. В следующем мы научим наше приложение следить за состоянием связи с устройством и оповещать пользователя в случае её обрыва. Следите за выходом новых уроков на LAZY SMART.

Источник: http://lazysmart.ru/distantsionnoe-upravlenie/sozdanie-veb-prilozheniya-dlya-iot-urok-4/

Почему подключённый к облаку контроллер — это не интернет вещей

Константин Жиданов с кафедры технологий защиты информации ГУАП, с которыми Tproger будет совместно участвовать в VK Fest, подготовил интересную статью про интернет вещей. Посмотреть на то, как всё это работает вживую можно будет на нашей площадке. Приезжайте 15–16 июля в Питер, будет интересно!

Во второй статье рассказываем, как сделать интернет вещей безопасным и объясняем простыми словами сложные криптографические схемы.

Передаём слово Константину.<\p>

Классический IoT

Словосочетание «интернет вещей» появилось в начале 2000-х годов. Миниатюризация электроники, снижение энергопотребления и появление RFID чипов, способных работать вовсе без батарейки, привели инженеров к мысли о том, что в ближайшем будущем можно будет оснастить предметы из реального мира микрокомпьютерами.

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

За полтора десятилетия изначальная концепция сильно изменилась. Теперь все устройства подключены к обычному, «человеческому» интернету, но так и не научились общаться между собой.

Вместо самодостаточной mesh-сети в нашей квартире мы получили «звезду», где каждый узел отправляет свои данные в облачное хранилище по обычному HTTP, как обычные смартфоны/ноутбуки/десктопы. Устройства разных производителей по прежнему не могут ни общаться между собой, ни даже управляться общим приложением на телефоне.

И эта схема продвигается всеми производителями как «интернет вещей». Но мы же не называем наш ноутбук агентом «интернета вещей», правда?

Connectivity

Чтобы получить «настоящий» интернет вещей, у устройств должна быть возможность связываться друг с другом напрямую. Типичный сценарий: у вашего ребёнка есть браслет-трекер, благодаря которому вы всегда знаете, где он находится.

Когда браслет находится в зоне покрытия 3G, он может отправлять данные напрямую в облако, откуда вы и будете их получать.

Однако работа системы не должна нарушаться и в том случае, когда вы всей семьёй отправляетесь на загородную прогулку – с помощью WiFi все устройства должны прозрачно для пользователя организовывать сеть.

Способы построения peer-to-peer сетей известны уже давно, но для получения «настоящего» интернета вещей недостаточно обеспечить маршрутизацию и доставку данных, необходимо также обеспечить шифрование данных. В самом деле, вы же не хотите, чтобы местоположение вашего ребёнка мог отслеживать кто-то кроме вас?

Безопасность

Схема распределения ключей шифрования — главная особенность, отличающая IoT от обычной mesh-сети, причём требования к ней могут показаться взаимоисключающими. Так, например, включение нового устройства в сеть должно происходить децентрализовано (мы же помним, что связи с облаком у нас может и не быть).

Кроме того, специфика IoT такова, что все устройства являются крайне недоверенными – любое устройство может быть украдено и скомпрометировано, поэтому ни одно устройство, включая ваш смартфон, не может хранить мастер-ключ всей системы.

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

Настоящий интернет вещей

Теперь мы можем ответить на вопрос в заголовке статьи. Когда мы хотим сделать «умную розетку» с управлением через смартфон и мы подключаем к Arduino реле и WiFi модуль, то нам приходится «захардкодить» множество вещей – SSID и пароль точки доступа, URL облака, логин и пароль на этом облаке и т.д.

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

Интернет вещей – это интернет для вещей, а не вещи, подключённые к интернету. Создание подобной инфраструктуры требует разработки новых протоколов шифрования данных, криптографических средств и протоколов маршрутизации.

Наши достижения в этом направлении мы и продемонстрируем на площадке «интернет вещей» на VK Fest.

Константин Жиданов, кафедра технологий защиты информации ГУАП

Источник: https://tproger.ru/articles/cloud-enabled-device-is-not-iot-yet/

Какой тип соединения указать при настройке роутера? Узнаем нужную информацию, которая пригодится в процессе настройки

Перед тем, как приступить к настройке маршрутизатора, желательно узнать необходимую информацию.

Нам нужно узнать, какую технологию соединения с интернетом использует наш интернет-провайдер, нужно иметь необходимые параметры, которые нужно будет задать в настройках роутера (в зависимости от технологии соединения).

Если, например провайдер использует соединение по технологии Динамический IP, то вам не нужно никаких дополнительных параметров. Достаточно, в настройках роутера выбрать Динамический IP, и интернет заработает.

Так же, нужно узнать, делает ли провайдер привязку по MAC адресу. Если делает, то после подключения кабеля к роутеру, интернет не будет работать даже после правильной настройки, ведь у провайдера не прописан MAC адрес роутера.

Сейчас мы по порядку во всем разберемся.

Самое главное, это понять, что задача роутера, это подключится к интернету и раздавать его на ваши устройства. Он устанавливает соединение с вашим провайдером точно так же, как и компьютер. Для того, что бы настройка маршрутизатора прошла гладко и без проблем, нужно правильно указать тип соединения (WAN Connection Type), и задать нужные параметры.

Что будет, если неправильно выбрать тип соединения?

Это самая популярная проблема при настройке роутеров. Интернет работать не будет. Беспроводная сеть появится, но, после подключения к ней, на ваших устройствах интернета не будет. На компьютерах, например, будет статус соединения “Без доступа к интернету”. По кабелю, от маршрутизатора, интернет так же не будет работать.

Тут все понятно, роутер не установил соединения с вашим провайдером, так как неправильно заданы параметры.

Как узнать технологию соединения, которую использует мой провайдер?

В России, Украине, и наверное в других странах СНГ, чаще всего провайдеры используют такие технологии: Динамический IP, Статический IP, PPPoE, PPTP, L2TP.

  • Динамический IP – самая нормальная технология:) . Очень много интернет провайдеров используют именно ее. Просто подключаем кабель к роутеру и интернет уже работает, ничего настраивать не нужно. Только нужно указать технологию Dynamic IP. Но, как правило, в настройках роутера она установлена по умолчанию.
  • Статический IP – не очень популярная технология. Что бы настроить такое подключение на роутере, вы должны знать IP адрес, который вам должен выдать интернет провайдер.
  • PPPoE – популярная технология (в России), которая требует создания специального высокоскоростного соединения. Если ваш провайдер работает по технологии PPPoE, то на компьютере у вас скорее всего было создано такое соединение. В настройках маршрутизатора нужно будет выбрать PPPoE, указать логин и пароль, которые вам выдает провайдер. Так же, возможно, нужно будет задать статический IP адрес.
  • PPTP и L2TP – похожие протоколы, при настройке которых нужно так же указывать имя и логин. А так же, адрес сервера и по необходимости – статический IP. Если интернет был раньше подключен к компьютеру, то на компьютере так де было специальное подключение, которое вы запускали.

Написал уже много, а на главный вопрос, так и не ответил.

Перед тем, как приступить к настройке роутера, обязательно узнайте, какую технологию использует ваш интернет-провайдер.

Как узнать? Позвоните в поддержку провайдера и спросите. Зайдите на сайт провайдера и найдите там инструкции по настройке оборудования. Или посмотрите в документах, которые вы получили при подключении.

Если будете звонить в поддержку, то спросите еще, делает ли провайдер привязку по MAC адресу, и какое значение MTU, лучше указать в настройках маршрутизатора.

Если вы уже знаете технологию соединения, то вы так же должны знать необходимые параметры. Если у вас Динамический IP, то как я уже писал выше, никаких параметров не нужно, но если у вас например Статический IP, PPPoE, PPTP, или L2TP, то вы должны знать логин, пароль, статический IP (если нужно), адрес сервера. Или только определенные параметры (все зависит от соединения).

Как правило, эта информация указана в договоре по подключению к интернету.

Есть ли привязка по MAC адресу?

Очень многие провайдеры, привязывают интернет к MAC адресу определенного сетевого устройства. Каждая сетевая карта компьютера, или роутер, имеют свой MAC адрес, и этот адрес прописывается у провайдера.

Если ваш интернет провайдер делает такую привязку, то даже после правильной настройки роутера, интернет работать не будет. Так как скорее всего, у провайдера прописан MAC адрес вашего компьютера, не маршрутизатора.

Что делать в такой ситуации?

Узнать, делается ли привязка по MAC-адресу. Если нет, то никаких дополнительных настроек делать не нужно. Если есть привязка, то в настройках роутера, нужно клонировать MAC адрес. Нужно, что бы на роутере был такой же MAC, как и на компьютере, к которому привязан интернет. В статьях по настройке определенных роутеров, я стараюсь писать, как это сделать.

Есть еще один вариант: посмотреть MAC-адрес роутера (как правило, он находится на наклейке на самом роутере), позвонить в поддержку интернет-провайдера, и сказать им новый MAC, к которому нужно привязать интернет.

Залог успешной настройки Wi-Fi роутера:

  • Правильно указать тип соединения, и правильно задать необходимые параметры (это настройки на вкладке “WAN”, “Интернет”, “Internet” – на разных роутерах по-разному), которые выдаете интернет провайдер.
  • Клонировать MAC-адрес, или прописать MAC-адрес роутера, если провайдер делает привязку.

Это два основные правила. Уделите особое внимание этим двум пунктам, и у вас все получится. Главное, что роутер уже будет раздавать интернет, а там настроить Wi-Fi сеть, установить пароль, и другие функции, вы уже сможете по инструкции для определенного производителя, или модели.

Эти инструкции вы можете найти у нас на сайте, или в интернете.

Windows 10 – все инструкции по настройке интернета и решению проблемНастройка роутера – инструкции для разных моделей и производителейПолезные программы – для настройки HotSpot, Wi-Fi, 3G/4G модемов.192.168.0.1 / 192.168.1.1 – вход в настройки роутера или модема.

Источник: http://help-wifi.com/sovety-po-nastrojke/kakoj-tip-soedineniya-ukazat-pri-nastrojke-routera-uznaem-nuzhnuyu-informaciyu-kotoraya-prigoditsya-v-processe-nastrojki/

Передача температуры на смартфон

ПодробностиКатегория: ArduinoОпубликовано 23.11.2015 19:46Автор: AdminПросмотров: 8510

В данном проекте мы будет передавать измеренное значение температуры на смартфон при помощи Bluetooth модуля.

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

Температура выводится на экран смартфона под Android. 

arduino/peredacha-temperatury-na-smartfon.jpg” alt=”Передача температуры на смартфон” width=”492″ height=”371″ />

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

Устройства взаимодействуют между собой с помощью микроконтроллера Ардуино(Arduino). Настройка дистанционного управления и получение на экран данных, можно с помощью RemoteXY. Она позволяет управлять любыми микроконтроллерами в зоне действия Bluetooth.

Из деталей нам понадобится резистор на 1 кОм, термистор на 1 кОм, но подойдут и другие главное чтобы сопротивление было в пределах от 1 до 100 кОм. Тольк при использовании термисторов с другим сопротивленим неоходимо чтобы резистор с каким он подключается имел аналогичное значение.

Получили делителя напряжения, состоящий их термистора и резистора. Колебания температуры в районе термистора изменит его сопротивление, что повлияет на общее сопротивление делителя. Вывод которого подключен к плате Arduino.

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

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

Для настройки определяем значение поступающее от АЦП Arduino, при эталонных значениях температуры датчика. Применяем интерфейс Serial и монитор порта, для передачи данных от АЦП к компьютеру.

В Arduino загружаем простой скетч, который будет измерять напряжение на аналоговом выводе и в цифровом виде передавать в Serial. Поступающие данные просматриваем через дисплей порта.

Переписываем показания АЦП при эталонных температурах получаемых от термистора. Показания будут следующими: Т=25,0 АЦП=580, Т=36,6 АЦП=514.

Первым делом нам необходимо составить код который будет переводить полученное значение с термистора в виде аналогового значения Arduino в понятное нам т.е. в градусы. Для этого нам сначала нужно определить что приходит с Arduino. Это можно посмотреть через Serial монитор. Для этого сначала зальем простой код void setup() { Serial.

begin(9600); } void loop() { int sensorValue = analogRead(A5); Serial.

println(sensorValue); delay(1); }<\p>

Кож самой программы///////////////////////////////////////////// // RemoteXY include library // ///////////////////////////////////////////// /* определение режима соединения и подключение библиотеки RemoteXY */ #define REMOTEXY_MODE__SOFTWARESERIAL #include #include /* настройки соединения */ #define REMOTEXY_SERIAL_RX 2 #define REMOTEXY_SERIAL_TX 3 #define REMOTEXY_SERIAL_SPEED 9600 /* конфигурация интерфейса */ unsigned char RemoteXY_CONF[] = { 0,11,27,0,1,5,67,0,24,23 ,54,16,2,11,129,0,23,12,39,9 ,0,84,101,109,112,44,32,194,176,67 ,0 }; /* структура определяет все переменные вашего интерфейса управления */ struct { /* output variable */ char text_1[11]; /* =строка оканчивающаяся нулем UNICODE */ /* other variable */ unsigned char connect_flag; /* =1 if wire connected, else =0 */ } RemoteXY; ///////////////////////////////////////////// // END RemoteXY include // ///////////////////////////////////////////// /* первое замеренное значение – первая точка */ #define SENS_1_VAL 514 #define SENS_1_TMP 36.6 /* второе замеренное значение – вторая точка */ #define SENS_2_VAL 580 #define SENS_2_TMP 25.0 void setup() { RemoteXY_Init (); Serial.begin(9600); } void loop() { RemoteXY_Handler (); /* получаем значение АЦП */ int sensorValue = analogRead(A5); /* вычисляем текущую температуру используя линейную интерполяцию по двум известным точкам */ double temp = SENS_1_TMP + (SENS_2_TMP – SENS_1_TMP) / (SENS_2_VAL – SENS_1_VAL) * (sensorValue – SENS_1_VAL); /* преобразуем значение температуры в строку и помещаем ее сразу в поле text_1 структуры RemoteXY */ dtostrf(temp, 0, 1, RemoteXY.text_1); /* отправляем значение АЦП в Serial для того что бы мы могли проверить значения */ Serial.println(sensorValue); delay(1); }  

Интерфейс создается в редакторе RemoteXY, который представляет собой текстовое поле. Именно оно отвечает за передачу полученной температуры. Полученные данные будут ''-40.0'' или ''100.0 '', определяющее количество знаков в строке равным 5. Стандартно длина составляет 10 символов, выбор делается на ваше усмотрение.

Исходный код формируется с помощью платформы Arduino(SoftwareSerial), library version. Обязательно загрузите RemoteXY и подключите к Arduino. После этого подставляем данные полученных температур и АЦП в текстовое поле RemoteXY. Скетч загружается в Arduino, а RemoteXY в мобильное устройство или планшет. Теперь можно следить за измеряемой температурой с помощью Bluetooth. 

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

Источник: http://www.radio-magic.ru/arduino-projects/318-peredacha-temperatury-na-smartfon

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}