Espruino:Примеры/Дистанционный мониторинг с помощью Pixl.js и SMS
Поддержать проект | Содержание | Резерв | Справочник по API | Модули | Примеры | Резерв | Резерв | Резерв | Резерв | Резерв |
Содержание
Дистанционный мониторинг с помощью Pixl.js и SMS[1]
Если вам нужно настроить мониторинг там, где нет интернет-соединения – например, на садовом участке или в сарае – то для отправки данных можно воспользоваться мобильной связью. Очевидным решением было бы воспользоваться мобильным интернетом (и для этого понадобятся те же компоненты, что используются в этом руководстве), но подойдут и простые текстовые SMS-сообщения. То есть вам будет достаточно обычной SIM-карты, позволяющей отправлять текстовые и голосовые сообщения, и на счету которой будет какое-то количество денег – стоит это очень дёшево и обычно не требует месячной подписки.
Кроме того, у вас, возможно, есть датчики, которые вы не хотите подключать к главной мобильной связи. И в этой статье мы как раз сделаем из Puck.js хаб для этих датчиков.
Этот проект очень похож на тот, что создается в руководстве «Управление устройствами с помощью Puck.js и SMS», но с тем отличием, что здесь будет меньше возни с подключением устройств друг к другу, и мы также сможем показывать информацию на экране Pixl.js.
Нам понадобятся
- Espruino Pixl.js
- Arduino-шилд SIM900 (или же вы можете вручную подсоединить GSM/LTE-модуль)
- Литий-полимерная батарея
- Другие BLE-устройства (вроде Puck.js), которые будут играть роль датчиков
Подсоединение
Здесь всё просто – просто подключите Arduino-шилд SIM900 к задней стороне Pixl.js. Единственная проблема в питании. SIM900 очень требователен к энергопотреблению, поэтому маловероятно, что USB-коннектора Pixl.js будет достаточно.
Поэтому вы можете:
- Воспользоваться коннектором SIM900 для внешнего питания – рядом с ним есть переключатель, с помощью которого можно выбрать нужный источник питания.
- Припаять JST-коннектор батареи к Pixl.js, а также спаять на Pixl.js перемычку, соединяющую Vin и 5V, чтобы направить питание на SIM900.
Далее убедитесь, что перемычки на SIM900 стоят в позиции Xduino, подключите батарею, зажмите кнопку питания на SIM900, чтобы включить его, и готово!
Примечание: Используемый нами модуль SIM900 подключен только к контактам D0 и D1. Но если вам нужно, например, измерить что-либо или управлять чем-то напрямую с Pixl.js, то вы можете смело использовать другие входные и выходные контакты.
Код
На Esruino-устройства, которыми будет управлять Pixl.js, нужно будет загрузить следующее:
function updateAdvertising() {
/* Здесь будут заданы рассылаемые BLE-данные,
и мы можем задать тут двоичные данные,
но давайте всё же зададим JSON,
так как это будет всего несколько символов */
var data = JSON.stringify({
t:Math.round(E.getTemperature()),
l:Mathg});
NRF.setAdvertising({},{
manufacturer:0x590, // ID производителя,
// который числится за Espruino
manufacturerData:data,
showName: false, // не показываем название
connectable: false, // не разрешаем никому подключаться
interval:1000 // делаем так, чтобы данные рассылались редко,
// чтобы сэкономить питание
});
}
setInterval(updateAdvertising, 30000);
function onInit() {
// Отправляем данные, задав максимальную мощность сигнала:
NRF.setTxPower(4);
}
Если вам нужно отправлять обратно какие-то другие данные, вы тоже можете воспользоваться кодом выше, но его нужно будет немного подредактировать. Рассылать слишком много символов не получится, но эту проблему можно решить, преобразовав данные в двоичный формат.
Далее копируем и вставляем код ниже в правую часть IDE:
/* Список устройств – их адреса и названия.
Чтобы получить этот список,
напечатайте функцию NRF.findDevices(print,10000) */
var devices = {
"c7:59:51:ec:90:54 random" : "Garden",
"da:34:7c:4c:5a:47 random" : "Shed",
};
var sms;
function onInit() {
Terminal.setConsole();
g.clear();
Terminal.println("Инициализация...");
// Подключаемся к последовательному устройству:
Serial1.setup(115200, { rx: D0, tx : D1 });
Serial1.removeAllListeners(); // на случай, если ранее
// какие-то обработчики событий
// уже были заданы
var ATSMS = require("ATSMS");
sms = new ATSMS(Serial1);
// Здесь можно воспользоваться sms.at.debug();
// если вам нужна печать отладочных сообщений
sms.init(function(err) {
if (err) throw err;
Terminal.println("Инициализировано!");
sms.list("ALL", function(err,list) {
if (err) throw err;
if (list.length) {
Terminal.println(list.length+" Messages");
} else
Terminal.println("Нет сообщений");
});
});
}
// Обрабатываем все входящие сообщения:
sms.on('message', function(msgIndex) {
Terminal.println("Новое сообщение #"+msgIndex);
sms.get(msgIndex, function(err, msg) {
if (err) throw err;
// Удаляем все сообщения, чтобы не допустить переполнения:
sms.delete("ALL");
// if (msg.oaddr!="+441234567890") throw "Неизвестный номер!";
var txt = msg.text.trim().toLowerCase();
Terminal.println("<< ", txt);
// Сканируем и возвращаем результат:
if (txt=="scan") doScan(msg.oaddr);
// Меняем значение на контакте D3 у Pixl.js:
if (txt=="on") D3.set();
if (txt=="off") D3.reset();
});
});
// Сканируем рассылаемые объявления:
function doScan(sendMessageToNumber) {
Terminal.print("Сканирование...");
NRF.findDevices(function(devs) {
// Оставляем только те устройства,
// которые соответствуют заданному ID производителя:
devs = devs.filter(x => x.manufacturer==0x590);
// Скроллим, чтобы избавиться от всего, что есть на экране:
Terminal.print("\n\n\n\n\n\n\n\n\n");
// Что отправим?
var textMessage = "";
// Теперь выполняем итерацию и показываем на экране:
devs.forEach(function(dev, idx) {
var name = devices[dev.id];
if (!name) {
// Игнорируем все устройства, которых нет в списке:
Terminal.println("Неизвестное устройство "+dev.id);
return;
}
try {
var j = JSON.parse(E.toString(dev.manufacturerData));
Terminal.println(name+" "+JSON.stringify(j));
textMessage += name+" "+JSON.stringify(j)+", ";
} catch (e) {
Terminal.println(name+": плохие данные");
}
});
if (!devs.length) {
textMessage = "Устройств не найдено!";
Terminal.println("Устройств не найдено!");
}
if (sendMessageToNumber) {
Terminal.println("Отправляем сообщение");
sms.send(sendMessageToNumber, textMessage, function() {
Terminal.println("Сообщение отправлено!");
});
}
}, 10000 /* Сканируем 10 секунд */);
}
onInit();
Скорее всего, вам нужно будет поменять список знакомых устройств в devices в самом начале кода. После этого загрузите код на Pixl.js.
Использование
После включения Pixl.js вы сможете отправлять ему вот такие команды:
- scan – это запустит сканирование устройств поблизости и отправит обратно текст со всей полученной информацией.
- on / off – это включит и выключит контакт D3.
Что дальше?
В коде можно задать и многие другие команды. Например, с помощью библиотеки «ble_uart» команды можно отправлять напрямую на другие Puck.js (но в этом случае вам также нужно будет удалить connectable:false и увеличить интервал рассылки объявлений на всех подключенных устройствах).
Кроме того, Pixl.js можно настроить так, чтобы он отправлял текстовые сообщения автоматически. Например, раз в день или при возникновении некоторого события (вроде движения, обнаруженного датчиком).
Также можно сделать так, чтобы Pixl.js, используя переключатель питания, автоматически при включении подавал питание на SIM900, чтобы в случае сбоя питания Pixl.js мог коммуницировать при помощи GSM. Кроме того, благодаря этому SIM900 можно держать выключенным большую часть времени, тем самым снижая нагрузку на энергопотребление.
См.также
Ссылки на полезные ресурсы
- AliExpress — глобальная виртуальная (в Интернете) торговая площадка, предоставляющая возможность покупать товары производителей из КНР;
- computeruniverse.net - Интернет-магазин компьютеров(Промо код 5 Евро на первую покупку:FWWC3ZKQ);
- DigitalOcean - американский провайдер облачных инфраструктур, с главным офисом в Нью-Йорке и с центрами обработки данных по всему миру;
- Викиум - Онлайн-тренажер для мозга
- Like Центр - Центр поддержки и развития предпринимательства.
- Gamersbay - лучший магазин по бустингу для World of Warcraft.
- Ноотропы OmniMind N°1 - Усиливает мозговую активность. Повышает мотивацию. Улучшает память.
- Санкт-Петербургская школа телевидения - это федеральная сеть образовательных центров, которая имеет филиалы в 37 городах России.
- Lingualeo.com — интерактивный онлайн-сервис для изучения и практики английского языка в увлекательной игровой форме.
- Junyschool (Джунискул) – международная школа программирования и дизайна для детей и подростков от 5 до 17 лет, где ученики осваивают компьютерную грамотность, развивают алгоритмическое и креативное мышление, изучают основы программирования и компьютерной графики, создают собственные проекты: игры, сайты, программы, приложения, анимации, 3D-модели, монтируют видео.
- Умназия - Интерактивные онлайн-курсы и тренажеры для развития мышления детей 6-13 лет
- SkillBox - это один из лидеров российского рынка онлайн-образования. Среди партнеров Skillbox ведущий разработчик сервисного дизайна AIC, медиа-компания Yoola, первое и самое крупное русскоязычное аналитическое агентство Tagline, онлайн-школа дизайна и иллюстрации Bang! Bang! Education, оператор PR-рынка PACO, студия рисования Draw&Go, агентство performance-маркетинга Ingate, scrum-студия Sibirix, имидж-лаборатория Персона.
- «Нетология» — это университет по подготовке и дополнительному обучению специалистов в области интернет-маркетинга, управления проектами и продуктами, дизайна, Data Science и разработки. В рамках Нетологии студенты получают ценные теоретические знания от лучших экспертов Рунета, выполняют практические задания на отработку полученных навыков, общаются с экспертами и единомышленниками. Познакомиться со всеми продуктами подробнее можно на сайте https://netology.ru, линейка курсов и профессий постоянно обновляется.
- StudyBay Brazil – это онлайн биржа для португалоговорящих студентов и авторов! Студент получает уникальную работу любого уровня сложности и больше свободного времени, в то время как у автора появляется дополнительный заработок и бесценный опыт.
- Автор24 — самая большая в России площадка по написанию учебных работ: контрольные и курсовые работы, дипломы, рефераты, решение задач, отчеты по практике, а так же любой другой вид работы. Сервис сотрудничает с более 70 000 авторов. Более 1 000 000 работ уже выполнено.
- StudyBay – это онлайн биржа для англоязычных студентов и авторов! Студент получает уникальную работу любого уровня сложности и больше свободного времени, в то время как у автора появляется дополнительный заработок и бесценный опыт.
Внешние ссылки